]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/eg2/src/app/staff/share/course.spec.ts
LP2061136 - Stamping 1405 DB upgrade script
[Evergreen.git] / Open-ILS / src / eg2 / src / app / staff / share / course.spec.ts
1 import { waitForAsync } from '@angular/core/testing';
2 import { CourseService } from './course.service';
3 import { AuthService } from '@eg/core/auth.service';
4 import { EventService } from '@eg/core/event.service';
5 import { IdlService, IdlObject } from '@eg/core/idl.service';
6 import { NetService } from '@eg/core/net.service';
7 import { OrgService } from '@eg/core/org.service';
8 import { PcrudService } from '@eg/core/pcrud.service';
9 import { of } from 'rxjs';
10
11 describe('CourseService', () => {
12     let service: CourseService;
13     let circLib = 5;
14     let originalCircLib: number;
15
16     const mockCallNumber = {
17         label_class: () => 1,
18         prefix: () => 2,
19         suffix: () => null ,
20         owning_lib: () => 5,
21         record: () => 123
22     };
23
24     const materialSpy = jasmine.createSpyObj<IdlObject>(['item', 'record', 'course', 'original_circ_lib']);
25     materialSpy.original_circ_lib.and.callFake((newValue?: number) => {
26         if (newValue) {
27             originalCircLib = newValue;
28         } else {
29             return originalCircLib;
30         }
31     })
32     const itemSpy = jasmine.createSpyObj<IdlObject>(['call_number', 'circ_lib', 'id']);
33     itemSpy.circ_lib.and.callFake((newValue?: number) => { // this will return 5 unless set otherwise
34         if (newValue) {
35             circLib = newValue;
36         } else {
37             return circLib;
38         }
39     });
40     itemSpy.call_number.and.returnValue(mockCallNumber);
41     const authServiceSpy = jasmine.createSpyObj<AuthService>(['token']);
42     authServiceSpy.token.and.returnValue('myToken');
43     const evtServiceSpy = jasmine.createSpyObj<EventService>(['parse']);
44     const idlServiceSpy = jasmine.createSpyObj<IdlService>(['create']);
45     idlServiceSpy.create.and.returnValue(materialSpy);
46     const netServiceSpy = jasmine.createSpyObj<NetService>(['request']);
47     netServiceSpy.request.and.returnValue(of());
48     const orgServiceSpy = jasmine.createSpyObj<OrgService>(['settings', 'canHaveVolumes']);
49     const pcrudServiceSpy = jasmine.createSpyObj<PcrudService>(['retrieveAll', 'search', 'update', 'create']);
50     pcrudServiceSpy.update.and.returnValue(of(1));
51     pcrudServiceSpy.create.and.returnValue(of(materialSpy));
52
53     const mockOrg = {
54         a: [],
55         classname: 'aou',
56         _isfieldmapper: true,
57         id: () => 5
58     };
59
60     const mockConsortium = {
61         id: () => 1
62     };
63
64     const mockCourse = {
65         id: () => 20
66     };
67
68     beforeEach(() => {
69         service = new CourseService(authServiceSpy, evtServiceSpy,
70                                     idlServiceSpy, netServiceSpy,
71                                     orgServiceSpy, pcrudServiceSpy);
72         orgServiceSpy.canHaveVolumes.and.returnValue(true);
73         circLib = 5; // set the item's circ lib to 5
74     });
75
76     afterEach(() => {
77         pcrudServiceSpy.update.calls.reset();
78         itemSpy.circ_lib.calls.reset();
79         materialSpy.original_circ_lib.calls.reset();
80     })
81
82     it('updateItem() passes the expected parameters to open-ils.cat', () => {
83         service.updateItem(itemSpy, mockOrg, 'ABC 123', true);
84         expect(netServiceSpy.request).toHaveBeenCalledWith(
85             'open-ils.cat', 'open-ils.cat.call_number.find_or_create',
86             'myToken', 'ABC 123', 123, 5, 2, null, 1
87         );
88     });
89
90     it('updateItem() calls pcrud only once when modifying call number', () => {
91         service.updateItem(itemSpy, mockOrg, 'ABC 123', true);
92         expect(pcrudServiceSpy.update).toHaveBeenCalledTimes(1);
93     });
94
95     it('updateItem() calls pcrud only once when not modifying call number', () => {
96         service.updateItem(itemSpy, mockOrg, 'ABC 123', false);
97         expect(pcrudServiceSpy.update).toHaveBeenCalledTimes(1);
98     });
99
100     it('#associateMaterials can temporarily change the item circ_lib', waitForAsync(() => {
101         const results = service.associateMaterials(itemSpy, {tempLibrary: 4, isModifyingLibrary: true, currentCourse: mockCourse});
102         expect(results.item.circ_lib()).toBe(4);
103         results.material.then((material) => {
104             expect(material.original_circ_lib()).toBe(5);
105         });
106     }));
107
108     it("#associateMaterials does not change the item circ_lib if the requested lib can't have items", () => {
109         orgServiceSpy.canHaveVolumes.and.returnValue(false);
110         const results = service.associateMaterials(itemSpy, {tempLibrary: 1, isModifyingLibrary: true, currentCourse: mockCourse});
111         expect(itemSpy.circ_lib).not.toHaveBeenCalled();
112         expect(results.item.circ_lib()).toBe(5);
113         expect(materialSpy.original_circ_lib).not.toHaveBeenCalled();
114     });
115
116 });