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';
11 describe('CourseService', () => {
12 let service: CourseService;
14 let originalCircLib: number;
16 const mockCallNumber = {
24 const materialSpy = jasmine.createSpyObj<IdlObject>(['item', 'record', 'course', 'original_circ_lib']);
25 materialSpy.original_circ_lib.and.callFake((newValue?: number) => {
27 originalCircLib = newValue;
29 return originalCircLib;
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
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));
60 const mockConsortium = {
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
77 pcrudServiceSpy.update.calls.reset();
78 itemSpy.circ_lib.calls.reset();
79 materialSpy.original_circ_lib.calls.reset();
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
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);
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);
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);
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();