1 import { HttpClientTestingModule } from '@angular/common/http/testing';
2 import { ComponentFixture, TestBed } from '@angular/core/testing';
3 import { By } from '@angular/platform-browser';
4 import { RouterTestingModule } from '@angular/router/testing';
6 import { TabsModule } from 'ngx-bootstrap/tabs';
7 import { ToastrModule } from 'ngx-toastr';
13 } from '../../../../testing/unit-test-helper';
14 import { ActionLabels } from '../../../shared/constants/app.constants';
15 import { TableActionsComponent } from '../../../shared/datatable/table-actions/table-actions.component';
16 import { SharedModule } from '../../../shared/shared.module';
17 import { RoleDetailsComponent } from '../role-details/role-details.component';
18 import { UserTabsComponent } from '../user-tabs/user-tabs.component';
19 import { RoleListComponent } from './role-list.component';
21 describe('RoleListComponent', () => {
22 let component: RoleListComponent;
23 let fixture: ComponentFixture<RoleListComponent>;
26 declarations: [RoleListComponent, RoleDetailsComponent, UserTabsComponent],
29 ToastrModule.forRoot(),
32 HttpClientTestingModule
34 providers: i18nProviders
38 fixture = TestBed.createComponent(RoleListComponent);
39 component = fixture.componentInstance;
42 it('should create', () => {
43 fixture.detectChanges();
44 expect(component).toBeTruthy();
47 describe('show action buttons and drop down actions depending on permissions', () => {
48 let tableActions: TableActionsComponent;
49 let scenario: { fn; empty; single };
50 let permissionHelper: PermissionHelper;
52 const getTableActionComponent = (): TableActionsComponent => {
53 fixture.detectChanges();
54 return fixture.debugElement.query(By.directive(TableActionsComponent)).componentInstance;
58 permissionHelper = new PermissionHelper(component.permission, () =>
59 getTableActionComponent()
62 fn: () => tableActions.getCurrentButton().name,
63 single: ActionLabels.EDIT,
64 empty: ActionLabels.CREATE
68 describe('with all', () => {
70 tableActions = permissionHelper.setPermissionsAndGetActions(1, 1, 1);
73 it(`shows 'Edit' for single selection else 'Add' as main action`, () =>
74 permissionHelper.testScenarios(scenario));
76 it('shows all actions', () => {
77 expect(tableActions.tableActions.length).toBe(3);
78 expect(tableActions.tableActions).toEqual(component.tableActions);
82 describe('with read, create and update', () => {
84 tableActions = permissionHelper.setPermissionsAndGetActions(1, 1, 0);
87 it(`shows 'Edit' for single selection else 'Add' as main action`, () =>
88 permissionHelper.testScenarios(scenario));
90 it(`shows 'Add' and 'Edit' action`, () => {
91 expect(tableActions.tableActions.length).toBe(2);
92 component.tableActions.pop();
93 expect(tableActions.tableActions).toEqual(component.tableActions);
97 describe('with read, create and delete', () => {
99 tableActions = permissionHelper.setPermissionsAndGetActions(1, 0, 1);
102 it(`shows 'Delete' for single selection else 'Add' as main action`, () => {
103 scenario.single = 'Delete';
104 permissionHelper.testScenarios(scenario);
107 it(`shows 'Add' and 'Delete' action`, () => {
108 expect(tableActions.tableActions.length).toBe(2);
109 expect(tableActions.tableActions).toEqual([
110 component.tableActions[0],
111 component.tableActions[2]
116 describe('with read, edit and delete', () => {
118 tableActions = permissionHelper.setPermissionsAndGetActions(0, 1, 1);
121 it(`shows always 'Edit' as main action`, () => {
122 scenario.empty = ActionLabels.EDIT;
123 permissionHelper.testScenarios(scenario);
126 it(`shows 'Edit' and 'Delete' action`, () => {
127 expect(tableActions.tableActions.length).toBe(2);
128 expect(tableActions.tableActions).toEqual([
129 component.tableActions[1],
130 component.tableActions[2]
135 describe('with read and create', () => {
137 tableActions = permissionHelper.setPermissionsAndGetActions(1, 0, 0);
140 it(`shows always 'Add' as main action`, () => {
141 scenario.single = ActionLabels.CREATE;
142 permissionHelper.testScenarios(scenario);
145 it(`shows only 'Add' action`, () => {
146 expect(tableActions.tableActions.length).toBe(1);
147 expect(tableActions.tableActions).toEqual([component.tableActions[0]]);
151 describe('with read and update', () => {
153 tableActions = permissionHelper.setPermissionsAndGetActions(0, 1, 0);
156 it(`shows always 'Edit' as main action`, () => {
157 scenario.empty = ActionLabels.EDIT;
158 permissionHelper.testScenarios(scenario);
161 it(`shows only 'Edit' action`, () => {
162 expect(tableActions.tableActions.length).toBe(1);
163 expect(tableActions.tableActions).toEqual([component.tableActions[1]]);
167 describe('with read and delete', () => {
169 tableActions = permissionHelper.setPermissionsAndGetActions(0, 0, 1);
172 it(`shows always 'Delete' as main action`, () => {
173 scenario.single = 'Delete';
174 scenario.empty = 'Delete';
175 permissionHelper.testScenarios(scenario);
178 it(`shows only 'Delete' action`, () => {
179 expect(tableActions.tableActions.length).toBe(1);
180 expect(tableActions.tableActions).toEqual([component.tableActions[2]]);
184 describe('with only read', () => {
186 tableActions = permissionHelper.setPermissionsAndGetActions(0, 0, 0);
189 it('shows no main action', () => {
190 permissionHelper.testScenarios({
191 fn: () => tableActions.getCurrentButton(),
197 it('shows no actions', () => {
198 expect(tableActions.tableActions.length).toBe(0);
199 expect(tableActions.tableActions).toEqual([]);