Skip to content

Commit

Permalink
Merge pull request #357 from PermanentOrg/fix-broken-folder-picker
Browse files Browse the repository at this point in the history
Fix broken folder picker
  • Loading branch information
meisekimiu authored Feb 8, 2024
2 parents 039183e + 412500e commit e975abe
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 17 deletions.
95 changes: 90 additions & 5 deletions src/app/core/services/folder-picker/folder-picker.service.spec.ts
Original file line number Diff line number Diff line change
@@ -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<any>,
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);
});
});
33 changes: 24 additions & 9 deletions src/app/core/services/folder-picker/folder-picker.service.ts
Original file line number Diff line number Diff line change
@@ -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({ providedIn: 'root' })
@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;
Expand All @@ -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<RecordVO> {
chooseRecord(startingFolder: FolderVO): Promise<RecordVO> {
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
);
}
}
12 changes: 10 additions & 2 deletions src/app/shared/services/profile/profile.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* @format */
import { NgModule } from '@angular/core';
import { FolderPickerService } from '@core/services/folder-picker/folder-picker.service';
import { ArchiveVO, FolderVO } from '@models/index';
import { SharedModule } from '@shared/shared.module';
import { Shallow } from 'shallow-render';
import { ProfileItemVOData } from '@models/profile-item-vo';
import { RecordVO } from '../../../models/record-vo';
Expand Down Expand Up @@ -46,12 +46,20 @@ const mockFolderPickerService = {
},
};

@NgModule({
declarations: [ProfileService], // components your module owns.
imports: [], // other modules your module needs.
providers: [ProfileService], // providers available to your module.
bootstrap: [], // bootstrap this root component.
})
class DummyModule {}

describe('ProfileService', () => {
let shallow: Shallow<ProfileService>;
let messageShown = false;

beforeEach(() => {
shallow = new Shallow(ProfileService, SharedModule)
shallow = new Shallow(ProfileService, DummyModule)
.mock(MessageService, {
showError: () => {
messageShown = true;
Expand Down
2 changes: 1 addition & 1 deletion src/app/shared/services/profile/profile.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ export function orderItemsInDictionary(
}
}

@Injectable({ providedIn: 'root' })
@Injectable()
export class ProfileService {
private profileItemDictionary: ProfileItemVODictionary = {};

Expand Down

0 comments on commit e975abe

Please sign in to comment.