This repository has been archived on 2021-08-17. You can view files and clone it, but cannot push or open issues or pull requests.
TaskBoard/test/app/settings/board-admin/board-admin.component.spec.ts
Matthew Ross 0c9b66a18f Cleanup
2020-05-14 16:09:01 -04:00

288 lines
7.7 KiB
TypeScript

import { TestBed, ComponentFixture } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { FormsModule } from '@angular/forms';
import { DragDropModule } from '@angular/cdk/drag-drop';
import { SharedModule } from 'src/app/shared/shared.module';
import { SettingsService } from 'src/app/settings/settings.service';
import { Board } from 'src/app/shared/models';
import {
AuthService,
ModalService,
NotificationsService,
StringsService,
} from 'src/app/shared/services';
import {
BoardAdminService
} from 'src/app/settings/board-admin/board-admin.service';
import {
BoardAdminComponent
} from 'src/app/settings/board-admin/board-admin.component';
import { SettingsServiceMock, AuthServiceMock } from '../../mocks';
describe('BoardAdmin', () => {
let component: BoardAdminComponent;
let fixture: ComponentFixture<BoardAdminComponent>;
const getPrivateFunction = (name: any) => component[name].bind(component);
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule,
HttpClientTestingModule,
FormsModule,
SharedModule,
DragDropModule,
],
declarations: [
BoardAdminComponent
],
providers: [
AuthService,
ModalService,
NotificationsService,
StringsService,
BoardAdminService,
{ provide: SettingsService, useClass: SettingsServiceMock },
{ provide: AuthService, useClass: AuthServiceMock }
]
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(BoardAdminComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('can be constructed', () => {
expect(component).toBeTruthy();
});
it('validates a board before saving', () => {
component.modalProps = { columns: [] } as any;
component.addEditBoard();
expect(component.saving).toEqual(false);
});
it('calls a service to add a board', () => {
component.modalProps = {
title: 'Add',
name: 'Test',
columns: [{}]
} as any;
component.users = [{ selected: true }] as any;
let called = false;
(component.modal as any).isOpen = () => true;
(component.boardService as any).addBoard = () => {
return { subscribe: (fn: any) => {
const board = new Board();
fn({ status: 'success', alerts: [{}], data: [{}, [board]] });
called = true;
} };
};
component.addEditBoard();
expect(called).toEqual(true);
});
it('calls a service to edit a board', () => {
component.modalProps = {
title: '',
name: '',
columns: [{}]
} as any;
component.users = [{}] as any;
let called = false;
(component.modal as any).isOpen = () => true;
(component.boardService as any).editBoard = () => {
return { subscribe: (fn: any) => {
const board = new Board();
fn({ status: 'success', alerts: [{}], data: [{}, [board]] });
called = true;
} };
};
component.addEditBoard();
component.modalProps.name = 'Test';
expect(called).toEqual(false);
component.addEditBoard();
expect(called).toEqual(true);
});
it('calls a service to remove a board', () => {
let called = false;
(component.boardService as any).removeBoard = () => {
return { subscribe: (fn: any) => fn({ alerts: [], data: [{}, []] }) };
};
(component.settings as any).getActions = () => {
return { subscribe: (fn: any) => {
fn({ alerts: [], data: [{}, []] });
called = true;
} };
};
component.boardToRemove = { id: 1 } as any;
component.removeBoard();
expect(called).toEqual(true);
});
it('calls a service to toggle a board\'s status', () => {
let called = false;
(component.boardService as any).editBoard = () => {
return { subscribe: (fn: any) => {
const board = new Board();
fn({ status: 'success', alerts: [{}], data: [{}, [board]] });
called = true;
} };
};
component.toggleBoardStatus({
id: 1, name: 'Name', is_active: true, columns: [],
categories: [], issue_trackers: [], users: []
} as any);
expect(called).toEqual(true);
});
it('can filter the list of boards by user', () => {
component.boards = [
{ users: [{ id: 1 }] }
] as any;
component.filterBoards();
expect(component.displayBoards.length).toEqual(1);
component.userFilter = '1';
component.filterBoards();
expect(component.displayBoards.length).toEqual(1);
component.userFilter = '2';
component.filterBoards();
expect(component.displayBoards.length).toEqual(0);
});
it('can filter the list of boards by status', () => {
component.boards = [
{ is_active: true, users: [] }
] as any;
component.filterBoards();
expect(component.displayBoards.length).toEqual(1);
component.statusFilter = '1';
component.filterBoards();
expect(component.displayBoards.length).toEqual(1);
component.statusFilter = '0';
component.filterBoards();
expect(component.displayBoards.length).toEqual(0);
});
it('sorts the list of boards after filtering', () => {
component.boards = [
{ id: 1, name: 'last' },
{ id: 2, name: 'first' }
] as any;
component.sortFilter = 'name-asc';
component.filterBoards();
expect(component.displayBoards[0].name).toEqual('first');
component.sortFilter = 'name-desc';
component.filterBoards();
expect(component.displayBoards[0].name).toEqual('last');
component.sortFilter = 'id-asc';
component.filterBoards();
expect(component.displayBoards[0].id).toEqual(1);
component.sortFilter = 'id-desc';
component.filterBoards();
expect(component.displayBoards[0].id).toEqual(2);
});
it('can stop enter key events from bubbling', () => {
let called = false;
component.cancelEnterKey({ stopPropagation: () => called = true });
expect(called).toEqual(true);
});
it('can get a property value for the modal', () => {
const getPropertyValue = getPrivateFunction('getPropertyValue');
component.modalProps = { columns: [{ name: 'test' }] } as any;
const actual = getPropertyValue('columns', 'name', 0);
expect(actual).toEqual('test');
});
it('handles a property change', () => {
const onPropertyEdit = getPrivateFunction('onPropertyEdit');
component.modalProps = { columns: [{ name: 'test' }] } as any;
onPropertyEdit('columns', 'name', 0, 'changed');
expect(component.modalProps.columns[0].name).toEqual('changed');
});
it('gets a category color', () => {
const getColor = getPrivateFunction('getColor');
let actual = getColor({ default_task_color: 'red' });
expect(actual).toEqual('red');
actual = getColor({ defaultColor: 'orange' });
expect(actual).toEqual('orange');
});
it('can set a category color', () => {
const setCategoryColor = getPrivateFunction('setCategoryColor');
component.modalProps = { categories: [{}] } as any;
setCategoryColor('purple', 0);
const actual = component.modalProps.categories[0].default_task_color;
expect(actual).toEqual('purple');
});
it('can show a modal', () => {
const showModal = getPrivateFunction('showModal');
component.users = [{ selected: true }] as any;
showModal('Add');
expect((component.users[0] as any).selected).toEqual(false);
showModal('Edit', new Board());
});
it('can show a confirmation modal', () => {
const showConfirmModal = getPrivateFunction('showConfirmModal');
showConfirmModal({ works: true } as any);
expect((component.boardToRemove as any).works).toEqual(true);
});
});