Adds tests for workflow spec categories

This commit is contained in:
Aaron Louie 2020-03-19 10:28:51 -04:00
parent d4ef749b1c
commit 3f23d972b6
2 changed files with 106 additions and 4 deletions

View File

@ -14,11 +14,16 @@ import {
ApiService,
MockEnvironment,
mockWorkflowSpec0,
mockWorkflowSpec1, mockWorkflowSpecCategories,
mockWorkflowSpec1, mockWorkflowSpecCategories, mockWorkflowSpecCategory0, mockWorkflowSpecCategory1,
mockWorkflowSpecs
} from 'sartography-workflow-lib';
import {DeleteWorkflowSpecDialogComponent} from '../_dialogs/delete-workflow-spec-dialog/delete-workflow-spec-dialog.component';
import {DeleteWorkflowSpecDialogData, WorkflowSpecDialogData} from '../_interfaces/dialog-data';
import {
DeleteWorkflowSpecCategoryDialogData,
DeleteWorkflowSpecDialogData,
WorkflowSpecCategoryDialogData,
WorkflowSpecDialogData
} from '../_interfaces/dialog-data';
import {GetIconCodePipe} from '../_pipes/get-icon-code.pipe';
import {FileListComponent} from '../file-list/file-list.component';
import {WorkflowSpecListComponent} from './workflow-spec-list.component';
@ -192,4 +197,100 @@ describe('WorkflowSpecListComponent', () => {
expect(loadWorkflowSpecsSpy).toHaveBeenCalled();
});
it('should show a metadata dialog when editing a workflow spec category', () => {
let mockCatData: WorkflowSpecCategoryDialogData = {
id: null,
name: '',
display_name: '',
};
const _upsertWorkflowSpecCategorySpy = spyOn((component as any), '_upsertWorkflowSpecCategory')
.and.stub();
const openDialogSpy = spyOn(component.dialog, 'open')
.and.returnValue({afterClosed: () => of(mockCatData)} as any);
component.editWorkflowSpecCategory(mockWorkflowSpecCategory0);
expect(openDialogSpy).toHaveBeenCalled();
expect(_upsertWorkflowSpecCategorySpy).not.toHaveBeenCalled();
mockCatData = mockWorkflowSpecCategory0 as WorkflowSpecCategoryDialogData;
component.editWorkflowSpecCategory(mockWorkflowSpecCategory0);
expect(openDialogSpy).toHaveBeenCalled();
expect(_upsertWorkflowSpecCategorySpy).toHaveBeenCalled();
});
it('should edit an existing workflow spec category but add a new workflow spec category', () => {
const _addWorkflowSpecCategorySpy = spyOn((component as any), '_addWorkflowSpecCategory').and.stub();
const _updateWorkflowSpecCategorySpy = spyOn((component as any), '_updateWorkflowSpecCategory').and.stub();
component.selectedSpec = undefined;
(component as any)._upsertWorkflowSpecCategory(mockWorkflowSpecCategory1 as WorkflowSpecCategoryDialogData);
expect(_addWorkflowSpecCategorySpy).toHaveBeenCalled();
expect(_updateWorkflowSpecCategorySpy).not.toHaveBeenCalled();
_addWorkflowSpecCategorySpy.calls.reset();
_updateWorkflowSpecCategorySpy.calls.reset();
component.selectedCat = mockWorkflowSpecCategory0;
const modifiedData: WorkflowSpecCategoryDialogData = createClone()(mockWorkflowSpecCategory0);
modifiedData.display_name = 'Modified';
(component as any)._upsertWorkflowSpecCategory(modifiedData);
expect(_addWorkflowSpecCategorySpy).not.toHaveBeenCalled();
expect(_updateWorkflowSpecCategorySpy).toHaveBeenCalled();
});
it('should add a workflow spec', () => {
const _loadWorkflowSpecCategoriesSpy = spyOn((component as any), '_loadWorkflowSpecCategories').and.stub();
const _displayMessageSpy = spyOn((component as any), '_displayMessage').and.stub();
(component as any)._addWorkflowSpecCategory(mockWorkflowSpecCategory0);
const catReq = httpMock.expectOne(`apiRoot/workflow-specification-category`);
expect(catReq.request.method).toEqual('POST');
catReq.flush(mockWorkflowSpecCategory0);
expect(_loadWorkflowSpecCategoriesSpy).toHaveBeenCalled();
expect(_displayMessageSpy).toHaveBeenCalled();
});
it('should edit a workflow spec category', () => {
const _loadWorkflowSpecCategoriesSpy = spyOn((component as any), '_loadWorkflowSpecCategories').and.stub();
const _displayMessageSpy = spyOn((component as any), '_displayMessage').and.stub();
(component as any)._updateWorkflowSpecCategory(mockWorkflowSpecCategory0.id, mockWorkflowSpecCategory0);
const catReq = httpMock.expectOne(`apiRoot/workflow-specification-category/${mockWorkflowSpecCategory0.id}`);
expect(catReq.request.method).toEqual('PUT');
catReq.flush(mockWorkflowSpecCategory0);
expect(_loadWorkflowSpecCategoriesSpy).toHaveBeenCalled();
expect(_displayMessageSpy).toHaveBeenCalled();
});
it('should show a confirmation dialog before deleting a workflow spec category', () => {
const mockConfirmDeleteData: DeleteWorkflowSpecCategoryDialogData = {
confirm: false,
category: mockWorkflowSpecCategory0
};
const _deleteWorkflowSpecCategorySpy = spyOn((component as any), '_deleteWorkflowSpecCategory').and.stub();
const openDialogSpy = spyOn(component.dialog, 'open')
.and.returnValue({afterClosed: () => of(mockConfirmDeleteData)} as any);
component.confirmDeleteWorkflowSpecCategory(mockWorkflowSpecCategory0);
expect(openDialogSpy).toHaveBeenCalled();
expect(_deleteWorkflowSpecCategorySpy).not.toHaveBeenCalled();
mockConfirmDeleteData.confirm = true;
component.confirmDeleteWorkflowSpecCategory(mockWorkflowSpecCategory0);
expect(openDialogSpy).toHaveBeenCalled();
expect(_deleteWorkflowSpecCategorySpy).toHaveBeenCalled();
});
it('should delete a workflow spec category', () => {
const _loadWorkflowSpecCategoriesSpy = spyOn((component as any), '_loadWorkflowSpecCategories').and.stub();
(component as any)._deleteWorkflowSpecCategory(mockWorkflowSpecCategory0);
const catReq = httpMock.expectOne(`apiRoot/workflow-specification-category/${mockWorkflowSpecCategory0.id}`);
expect(catReq.request.method).toEqual('DELETE');
catReq.flush(null);
expect(_loadWorkflowSpecCategoriesSpy).toHaveBeenCalled();
});
});

View File

@ -12,6 +12,7 @@ import {
WorkflowSpecCategoryDialogData,
WorkflowSpecDialogData
} from '../_interfaces/dialog-data';
import {isNumberDefined} from '../_util/is-number-defined';
interface WorklflowSpecCategoryGroup {
id: number;
@ -74,14 +75,14 @@ export class WorkflowSpecListComponent implements OnInit {
height: '65vh',
width: '50vw',
data: {
id: this.selectedCat ? this.selectedCat.id : '',
id: this.selectedCat ? this.selectedCat.id : null,
name: this.selectedCat ? this.selectedCat.name || this.selectedCat.id : '',
display_name: this.selectedCat ? this.selectedCat.display_name : '',
},
});
dialogRef.afterClosed().subscribe((data: WorkflowSpecCategoryDialogData) => {
if (data && data.id && data.name && data.display_name) {
if (data && isNumberDefined(data.id) && data.name && data.display_name) {
this._upsertWorkflowSpecCategory(data);
}
});