diff --git a/src/app/core/services/folder-picker/folder-picker.service.spec.ts b/src/app/core/services/folder-picker/folder-picker.service.spec.ts index 7b0540ebf..8aa3795a3 100644 --- a/src/app/core/services/folder-picker/folder-picker.service.spec.ts +++ b/src/app/core/services/folder-picker/folder-picker.service.spec.ts @@ -1,15 +1,100 @@ -import { TestBed, inject } from '@angular/core/testing'; - +/* @format */ +import { TestBed } from '@angular/core/testing'; +import { + FolderPickerComponent, + FolderPickerOperations, +} from '@core/components/folder-picker/folder-picker.component'; +import { FolderVO } from '@models/index'; import { FolderPickerService } from './folder-picker.service'; +class FakeComponent { + public async show( + startingFolder: FolderVO, + operation: FolderPickerOperations, + savePromise?: Promise, + filterFolderLinkIds: number[] = null, + allowRecords = false + ) { + return { + startingFolder, + operation, + savePromise, + filterFolderLinkIds, + allowRecords, + }; + } +} + describe('FolderPickerService', () => { + let service: FolderPickerService; + let component: FakeComponent; beforeEach(() => { TestBed.configureTestingModule({ - providers: [FolderPickerService] + providers: [FolderPickerService], }); + service = TestBed.inject(FolderPickerService); + component = new FakeComponent(); + service.registerComponent(component as FolderPickerComponent); }); - it('should be created', inject([FolderPickerService], (service: FolderPickerService) => { + it('should be created', () => { expect(service).toBeTruthy(); - })); + }); + + it('should throw an error when choosing a folder if the component is not registered', () => { + service.unregisterComponent(); + + expect(() => + service.chooseFolder(new FolderVO({}), FolderPickerOperations.Move) + ).toThrow(); + }); + + it('should throw an error when choosing a record if the component is not registered', () => { + service.unregisterComponent(); + + expect(() => service.chooseRecord(new FolderVO({}))).toThrow(); + }); + + it('cannot register a FolderPickerComponent twice', () => { + expect(() => + service.registerComponent(component as FolderPickerComponent) + ).toThrow(); + }); + + it('can unregister a FolderPickerComponent', () => { + service.unregisterComponent(); + + expect(() => + service.registerComponent(component as FolderPickerComponent) + ).not.toThrow(); + }); + + it('should call the correct component method when choosing a folder', async () => { + const params = { + startingFolder: new FolderVO({ folderId: 1 }), + operation: FolderPickerOperations.Copy, + savePromise: undefined, + filterFolderLinkIds: null, + allowRecords: false, + }; + const result = await service.chooseFolder( + params.startingFolder, + params.operation + ); + + expect(result).toEqual(params); + }); + + it('should call the correct component method when choosing a record', async () => { + const params = { + startingFolder: new FolderVO({ folderId: 1 }), + operation: FolderPickerOperations.ChooseRecord, + savePromise: null, + filterFolderLinkIds: null, + allowRecords: true, + }; + const result = (await service.chooseRecord(params.startingFolder)) as any; + + expect(result).toEqual(params); + }); }); diff --git a/src/app/core/services/folder-picker/folder-picker.service.ts b/src/app/core/services/folder-picker/folder-picker.service.ts index 37b0cd505..9cc48f2f7 100644 --- a/src/app/core/services/folder-picker/folder-picker.service.ts +++ b/src/app/core/services/folder-picker/folder-picker.service.ts @@ -1,16 +1,22 @@ +/* @format */ import { Injectable } from '@angular/core'; -import { FolderPickerComponent, FolderPickerOperations } from '@core/components/folder-picker/folder-picker.component'; +import { + FolderPickerComponent, + FolderPickerOperations, +} from '@core/components/folder-picker/folder-picker.component'; import { FolderVO, RecordVO } from '@root/app/models'; @Injectable() export class FolderPickerService { private component: FolderPickerComponent; - constructor() { } + constructor() {} registerComponent(toRegister: FolderPickerComponent) { if (this.component) { - throw new Error('FolderPickerService - Folder picker component already registered'); + throw new Error( + 'FolderPickerService - Folder picker component already registered' + ); } this.component = toRegister; @@ -30,16 +36,25 @@ export class FolderPickerService { throw new Error('FolderPickerService - Folder picker component missing'); } - return this.component.show(startingFolder, operation, savePromise, filterFolderLinkIds); + return this.component.show( + startingFolder, + operation, + savePromise, + filterFolderLinkIds + ); } - chooseRecord( - startingFolder: FolderVO, - ): Promise { + chooseRecord(startingFolder: FolderVO): Promise { if (!this.component) { throw new Error('FolderPickerService - Folder picker component missing'); } - return this.component.show(startingFolder, FolderPickerOperations.ChooseRecord, null, null, true); + return this.component.show( + startingFolder, + FolderPickerOperations.ChooseRecord, + null, + null, + true + ); } }