TSK-1349: Added unit test for Workbasket-Overview, -List and -ListToolbar (#1236)

* TSK-1349: added test for workbasket overview

* TSK-1349: moved animations ts files to shared

* TSK-1349: added unit test for workbasket list toolbar

* TSK-1349: added unit tests for workbasket-list

* TSK-1349: improved tests for workbasket-overview

* TSK-1349: Updated test for workbasket list, workbasket-list-toolbar

* TSK-1349: added more test variants for workbasket overview

* TSK-1349: removed console log

* TSK-1349: removed CUSTOM_ELEMENTS_SCHEMA

* TSK-1349: improved tests

* TSK-1349: further optimized tests
This commit is contained in:
Chi Nguyen 2020-08-19 12:52:57 +02:00 committed by GitHub
parent 8a6e68d0b9
commit 008c1aec20
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 448 additions and 30 deletions

View File

@ -2,7 +2,7 @@ import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';
import { Select, Store } from '@ngxs/store';
import { combineLatest, Observable, Subject, Subscription, timer } from 'rxjs';
import { highlight } from 'theme/animations/validation.animation';
import { highlight } from 'app/shared/animations/validation.animation';
import { RequestInProgressService } from 'app/shared/services/request-in-progress/request-in-progress.service';

View File

@ -21,7 +21,7 @@ import { ACTION } from 'app/shared/models/action';
import { SavingInformation, SavingWorkbasketService } from 'app/administration/services/saving-workbaskets.service';
import { WorkbasketService } from 'app/shared/services/workbasket/workbasket.service';
import { RequestInProgressService } from 'app/shared/services/request-in-progress/request-in-progress.service';
import { highlight } from 'theme/animations/validation.animation';
import { highlight } from 'app/shared/animations/validation.animation';
import { FormsValidatorService } from 'app/shared/services/forms-validator/forms-validator.service';
import { AccessIdDefinition } from 'app/shared/models/access-id';
import { EngineConfigurationSelectors } from 'app/shared/store/engine-configuration-store/engine-configuration.selectors';

View File

@ -1,7 +1,7 @@
import { Component, OnInit, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
import { WorkbasketSummary } from 'app/shared/models/workbasket-summary';
import { Filter } from 'app/shared/models/filter';
import { expandDown } from 'theme/animations/expand.animation';
import { expandDown } from 'app/shared/animations/expand.animation';
import { Side } from '../workbasket-distribution-targets/workbasket-distribution-targets.component';
@Component({

View File

@ -0,0 +1,113 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { WorkbasketListToolbarComponent } from './workbasket-list-toolbar.component';
import { Component, DebugElement, EventEmitter, Input, Output } from '@angular/core';
import { Actions, NgxsModule, ofActionDispatched, Store } from '@ngxs/store';
import { Observable } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { WorkbasketState } from '../../../shared/store/workbasket-store/workbasket.state';
import { WorkbasketService } from '../../../shared/services/workbasket/workbasket.service';
import { DomainService } from '../../../shared/services/domain/domain.service';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { MatDialogModule } from '@angular/material/dialog';
import { CreateWorkbasket } from '../../../shared/store/workbasket-store/workbasket.actions';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { Filter } from '../../../shared/models/filter';
import { Sorting } from '../../../shared/models/sorting';
import { ACTION } from '../../../shared/models/action';
import { TaskanaType } from '../../../shared/models/taskana-type';
const getDomainFn = jest.fn().mockReturnValue(true);
const domainServiceMock = jest.fn().mockImplementation(
(): Partial<DomainService> => ({
getDomains: getDomainFn
})
);
@Component({ selector: 'taskana-administration-import-export', template: '' })
class ImportExportStub {
@Input() currentSelection: TaskanaType;
}
@Component({ selector: 'taskana-shared-sort', template: '' })
class SortStub {
@Input() sortingFields: Map<string, string>;
@Input() defaultSortBy = 'key';
@Output() performSorting = new EventEmitter<Sorting>();
}
@Component({ selector: 'taskana-shared-filter', template: '' })
class FilterStub {
@Output() performFilter = new EventEmitter<Filter>();
}
describe('WorkbasketListToolbarComponent', () => {
let fixture: ComponentFixture<WorkbasketListToolbarComponent>;
let debugElement: DebugElement;
let component: WorkbasketListToolbarComponent;
let store: Store;
let actions$: Observable<any>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule,
NgxsModule.forRoot([WorkbasketState]),
MatSnackBarModule,
MatDialogModule,
BrowserAnimationsModule
],
declarations: [WorkbasketListToolbarComponent, ImportExportStub, SortStub, FilterStub],
providers: [{ provide: DomainService, useClass: domainServiceMock }, WorkbasketService]
}).compileComponents();
fixture = TestBed.createComponent(WorkbasketListToolbarComponent);
debugElement = fixture.debugElement;
component = fixture.debugElement.componentInstance;
store = TestBed.inject(Store);
actions$ = TestBed.inject(Actions);
component.action = ACTION.COPY;
fixture.detectChanges();
}));
it('should create the component', () => {
expect(component).toBeTruthy();
});
it('should dispatch CreateWorkbasket when addWorkbasket is called', async((done) => {
component.action = ACTION.COPY;
let actionDispatched = false;
actions$.pipe(ofActionDispatched(CreateWorkbasket)).subscribe(() => (actionDispatched = true));
component.addWorkbasket();
expect(actionDispatched).toBe(true);
}));
it('should not dispatch action in addWorkbasket when action is CREATE', async((done) => {
component.action = ACTION.CREATE;
let actionDispatched = false;
actions$.pipe(ofActionDispatched(CreateWorkbasket)).subscribe(() => (actionDispatched = true));
component.addWorkbasket();
expect(actionDispatched).toBe(false);
}));
it('should emit value when sorting is called', (done) => {
const mockSort: Sorting = { sortBy: '123', sortDirection: 'asc' };
let sort: Sorting = { sortBy: '123', sortDirection: 'asc' };
component.performSorting.subscribe((sortBy: Sorting) => {
sort = sortBy;
done();
});
component.sorting(sort);
expect(sort).toMatchObject(mockSort);
});
it('should emit value when filtering is called', (done) => {
const mockFilter: Filter = { filterParams: 'abc' };
let filterBy: Filter = { filterParams: 'abc' };
component.performFilter.subscribe((filter: Filter) => {
filterBy = filter;
done();
});
component.filtering(filterBy);
expect(filterBy).toMatchObject(mockFilter);
});
});

View File

@ -1,19 +1,14 @@
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { Sorting } from 'app/shared/models/sorting';
import { Filter } from 'app/shared/models/filter';
import { WorkbasketSummary } from 'app/shared/models/workbasket-summary';
import { WorkbasketService } from 'app/shared/services/workbasket/workbasket.service';
import { TaskanaType } from 'app/shared/models/taskana-type';
import { expandDown } from 'theme/animations/expand.animation';
import { expandDown } from 'app/shared/animations/expand.animation';
import { Select, Store } from '@ngxs/store';
import { Location } from '@angular/common';
import { Observable, Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { ACTION } from '../../../shared/models/action';
import { CreateWorkbasket, SetActiveAction } from '../../../shared/store/workbasket-store/workbasket.actions';
import { CreateWorkbasket } from '../../../shared/store/workbasket-store/workbasket.actions';
import { WorkbasketSelectors } from '../../../shared/store/workbasket-store/workbasket.selectors';
@Component({
@ -54,13 +49,7 @@ export class WorkbasketListToolbarComponent implements OnInit {
destroy$ = new Subject<void>();
action: ACTION;
constructor(
private workbasketService: WorkbasketService,
private route: ActivatedRoute,
private router: Router,
private store: Store,
private location: Location
) {}
constructor(private store: Store) {}
ngOnInit() {
this.workbasketActiveAction$.pipe(takeUntil(this.destroy$)).subscribe((action) => {
@ -77,12 +66,9 @@ export class WorkbasketListToolbarComponent implements OnInit {
}
addWorkbasket() {
// this.store.dispatch(new SetActiveAction(ACTION.CREATE));
if (this.action !== ACTION.CREATE) {
this.store.dispatch(new CreateWorkbasket());
}
// this.workbasketService.selectWorkBasket();
// this.router.navigate([{ outlets: { detail: ['new-workbasket'] } }], { relativeTo: this.route });
}
ngOnDestroy() {

View File

@ -0,0 +1,150 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { WorkbasketListComponent } from './workbasket-list.component';
import { Component, DebugElement, EventEmitter, Input, Output } from '@angular/core';
import { Actions, NgxsModule, ofActionDispatched, Store } from '@ngxs/store';
import { Observable, of } from 'rxjs';
import { WorkbasketState } from '../../../shared/store/workbasket-store/workbasket.state';
import { WorkbasketService } from '../../../shared/services/workbasket/workbasket.service';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { MatDialogModule } from '@angular/material/dialog';
import { OrientationService } from '../../../shared/services/orientation/orientation.service';
import { ImportExportService } from '../../services/import-export.service';
import { DeselectWorkbasket, SelectWorkbasket } from '../../../shared/store/workbasket-store/workbasket.actions';
import { TaskanaQueryParameters } from '../../../shared/util/query-parameters';
import { WorkbasketSummary } from '../../../shared/models/workbasket-summary';
import { Sorting } from '../../../shared/models/sorting';
import { Filter } from '../../../shared/models/filter';
import { ICONTYPES } from '../../../shared/models/icon-types';
import { Page } from '../../../shared/models/page';
const workbasketSavedTriggeredFn = jest.fn().mockReturnValue(of(1));
const workbasketSummaryFn = jest.fn().mockReturnValue(of({}));
const getWorkbasketFn = jest.fn().mockReturnValue(of({ workbasketId: '1' }));
const workbasketServiceMock = jest.fn().mockImplementation(
(): Partial<WorkbasketService> => ({
workbasketSavedTriggered: workbasketSavedTriggeredFn,
getWorkBasketsSummary: workbasketSummaryFn,
getWorkBasket: getWorkbasketFn
})
);
const getOrientationFn = jest.fn().mockReturnValue(of('landscape'));
const orientationServiceMock = jest.fn().mockImplementation(
(): Partial<OrientationService> => ({
getOrientation: getOrientationFn,
calculateNumberItemsList: jest.fn().mockReturnValue(1920)
})
);
const getImportingFinishedFn = jest.fn().mockReturnValue(of(true));
const importExportServiceMock = jest.fn().mockImplementation(
(): Partial<ImportExportService> => ({
getImportingFinished: getImportingFinishedFn
})
);
@Component({ selector: 'taskana-administration-workbasket-list-toolbar', template: '' })
class WorkbasketListToolbarStub {
@Input() workbaskets: Array<WorkbasketSummary>;
@Input() workbasketDefaultSortBy: string;
@Output() performSorting = new EventEmitter<Sorting>();
@Output() performFilter = new EventEmitter<Filter>();
}
@Component({ selector: 'taskana-administration-icon-type', template: '' })
class IconTypeStub {
@Input() type: ICONTYPES = ICONTYPES.ALL;
@Input() selected = false;
}
@Component({ selector: 'taskana-shared-spinner', template: '' })
class SpinnerStub {
@Input() isRunning: boolean;
}
@Component({ selector: 'taskana-shared-pagination', template: '' })
class PaginationStub {
@Input() page: Page;
@Input() type: String;
@Output() changePage = new EventEmitter<number>();
@Input() numberOfItems: number;
}
@Component({ selector: 'svg-icon', template: '' })
class SvgIconStub {}
describe('WorkbasketListComponent', () => {
let fixture: ComponentFixture<WorkbasketListComponent>;
let debugElement: DebugElement;
let component: WorkbasketListComponent;
let store: Store;
let actions$: Observable<any>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NgxsModule.forRoot([WorkbasketState]), MatSnackBarModule, MatDialogModule],
declarations: [
WorkbasketListComponent,
WorkbasketListToolbarStub,
IconTypeStub,
SpinnerStub,
PaginationStub,
SvgIconStub
],
providers: [
{ provide: WorkbasketService, useClass: workbasketServiceMock },
{ provide: OrientationService, useClass: orientationServiceMock },
{ provide: ImportExportService, useClass: importExportServiceMock }
]
}).compileComponents();
fixture = TestBed.createComponent(WorkbasketListComponent);
debugElement = fixture.debugElement;
component = fixture.componentInstance;
store = TestBed.inject(Store);
actions$ = TestBed.inject(Actions);
fixture.detectChanges();
}));
it('should create component', () => {
expect(component).toBeTruthy();
});
it('should dispatch SelectWorkbasket when selecting a workbasket', async((done) => {
component.selectedId = undefined;
fixture.detectChanges();
let actionDispatched = false;
actions$.pipe(ofActionDispatched(SelectWorkbasket)).subscribe(() => (actionDispatched = true));
component.selectWorkbasket('1');
expect(actionDispatched).toBe(true);
}));
it('should dispatch DeselectWorkbasket when selecting a workbasket again', async((done) => {
component.selectedId = '123';
fixture.detectChanges();
let actionDispatched = false;
actions$.pipe(ofActionDispatched(DeselectWorkbasket)).subscribe(() => (actionDispatched = true));
const mockId = '123';
component.selectWorkbasket(mockId);
expect(actionDispatched).toBe(true);
expect(component.selectedId).toEqual(undefined); //because Deselect action sets selectedId to undefined
}));
it('should set sort value when performSorting is called', () => {
const sort = { sortBy: '1', sortDirection: 'asc' };
component.performSorting(sort);
expect(component.sort).toMatchObject(sort);
});
it('should set filter value when performFilter is called', () => {
const filter = { filterParams: '123' };
component.performFilter(filter);
expect(component.filterBy).toMatchObject(filter);
});
it('should change page value when change page function is called ', () => {
const page = 2;
component.changePage(page);
expect(TaskanaQueryParameters.page).toBe(page);
});
});

View File

@ -1,5 +1,5 @@
import { Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';
import { Observable, pipe, Subject, Subscription } from 'rxjs';
import { Observable, Subject } from 'rxjs';
import { WorkbasketSummaryRepresentation } from 'app/shared/models/workbasket-summary-representation';
import { WorkbasketSummary } from 'app/shared/models/workbasket-summary';
@ -93,6 +93,7 @@ export class WorkbasketListComponent implements OnInit, OnDestroy {
.subscribe((orientation: Orientation) => {
this.refreshWorkbasketList();
});
this.importExportService
.getImportingFinished()
.pipe(takeUntil(this.destroy$))
@ -134,7 +135,7 @@ export class WorkbasketListComponent implements OnInit, OnDestroy {
this.performRequest();
}
private performRequest(): void {
performRequest(): void {
this.store.dispatch(
new GetWorkbasketsSummary(
true,

View File

@ -0,0 +1,170 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { WorkbasketOverviewComponent } from './workbasket-overview.component';
import { Component, DebugElement } from '@angular/core';
import { Actions, NgxsModule, ofActionDispatched, Store } from '@ngxs/store';
import { Observable, of } from 'rxjs';
import { WorkbasketState } from '../../../shared/store/workbasket-store/workbasket.state';
import { WorkbasketService } from '../../../shared/services/workbasket/workbasket.service';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { DomainService } from '../../../shared/services/domain/domain.service';
import { RouterTestingModule } from '@angular/router/testing';
import { RequestInProgressService } from '../../../shared/services/request-in-progress/request-in-progress.service';
import { SelectedRouteService } from '../../../shared/services/selected-route/selected-route';
import { NotificationService } from '../../../shared/services/notifications/notification.service';
import { ActivatedRoute } from '@angular/router';
import { CreateWorkbasket, SelectWorkbasket } from '../../../shared/store/workbasket-store/workbasket.actions';
const showDialogFn = jest.fn().mockReturnValue(true);
const NotificationServiceSpy = jest.fn().mockImplementation(
(): Partial<NotificationService> => ({
triggerError: showDialogFn,
showToast: showDialogFn
})
);
const mockActivatedRoute = {
firstChild: {
params: of({
id: 'new-workbasket'
})
}
};
const mockActivatedRouteAlternative = {
firstChild: {
params: of({
id: '101'
})
}
};
const mockActivatedRouteNoParams = {};
@Component({ selector: 'taskana-administration-workbasket-list', template: '' })
class WorkbasketListStub {}
@Component({ selector: 'taskana-administration-workbasket-details', template: '' })
class WorkbasketDetailsStub {}
@Component({ selector: 'svg-icon', template: '' })
class SvgIconStub {}
describe('WorkbasketOverviewComponent', () => {
let fixture: ComponentFixture<WorkbasketOverviewComponent>;
let debugElement: DebugElement;
let component: WorkbasketOverviewComponent;
let store: Store;
let actions$: Observable<any>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), NgxsModule.forRoot([WorkbasketState])],
declarations: [WorkbasketOverviewComponent, WorkbasketListStub, WorkbasketDetailsStub, SvgIconStub],
providers: [
WorkbasketService,
{ provide: NotificationService, useClass: NotificationServiceSpy },
{ provide: ActivatedRoute, useValue: mockActivatedRoute },
DomainService,
RequestInProgressService,
SelectedRouteService
]
}).compileComponents();
fixture = TestBed.createComponent(WorkbasketOverviewComponent);
debugElement = fixture.debugElement;
component = fixture.debugElement.componentInstance;
store = TestBed.inject(Store);
actions$ = TestBed.inject(Actions);
fixture.detectChanges();
}));
it('should create the component', () => {
expect(component).toBeTruthy();
});
it('should always displays workbasket-list', () => {
expect(debugElement.nativeElement.querySelector('taskana-administration-workbasket-list')).toBeTruthy();
});
it('should display workbasket-details correctly', () => {
component.showDetail = false;
fixture.detectChanges();
expect(debugElement.nativeElement.querySelector('taskana-administration-workbasket-details')).toBeNull();
component.showDetail = true;
fixture.detectChanges();
expect(debugElement.nativeElement.querySelector('taskana-administration-workbasket-details')).toBeTruthy();
});
it('should display details when params id exists', async((done) => {
let actionDispatched = false;
actions$.pipe(ofActionDispatched(CreateWorkbasket)).subscribe(() => (actionDispatched = true));
component.ngOnInit();
expect(actionDispatched).toBe(true);
expect(component.routerParams.id).toMatch('new-workbasket');
expect(component.showDetail).toBeTruthy();
expect(debugElement.nativeElement.querySelector('taskana-administration-workbasket-details')).toBeTruthy();
}));
});
describe('WorkbasketOverviewComponent Alternative Params ID', () => {
let fixture: ComponentFixture<WorkbasketOverviewComponent>;
let component: WorkbasketOverviewComponent;
let store: Store;
let actions$: Observable<any>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), NgxsModule.forRoot([WorkbasketState])],
declarations: [WorkbasketOverviewComponent, WorkbasketListStub, WorkbasketDetailsStub, SvgIconStub],
providers: [
WorkbasketService,
{ provide: NotificationService, useClass: NotificationServiceSpy },
{ provide: ActivatedRoute, useValue: mockActivatedRouteAlternative },
DomainService,
RequestInProgressService,
SelectedRouteService
]
}).compileComponents();
fixture = TestBed.createComponent(WorkbasketOverviewComponent);
component = fixture.debugElement.componentInstance;
store = TestBed.inject(Store);
actions$ = TestBed.inject(Actions);
fixture.detectChanges();
}));
it('should display details when params id exists', async((done) => {
expect(component.routerParams.id).toBeTruthy();
let actionDispatched = false;
actions$.pipe(ofActionDispatched(SelectWorkbasket)).subscribe(() => (actionDispatched = true));
component.ngOnInit();
expect(actionDispatched).toBe(true);
}));
});
describe('WorkbasketOverviewComponent No Params', () => {
let fixture: ComponentFixture<WorkbasketOverviewComponent>;
let component: WorkbasketOverviewComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), NgxsModule.forRoot([WorkbasketState])],
declarations: [WorkbasketOverviewComponent, WorkbasketListStub, WorkbasketDetailsStub, SvgIconStub],
providers: [
WorkbasketService,
{ provide: NotificationService, useClass: NotificationServiceSpy },
{ provide: ActivatedRoute, useValue: mockActivatedRouteNoParams },
DomainService,
RequestInProgressService,
SelectedRouteService
]
}).compileComponents();
fixture = TestBed.createComponent(WorkbasketOverviewComponent);
component = fixture.debugElement.componentInstance;
fixture.detectChanges();
}));
it('should create the component', () => {
expect(component).toBeTruthy();
});
});

View File

@ -26,7 +26,7 @@ export class WorkbasketOverviewComponent implements OnInit {
ngOnInit() {
if (this.route.firstChild) {
this.route.firstChild.params.pipe(takeUntil(this.destroy$)).subscribe((params) => {
this.route.firstChild.params.subscribe((params) => {
this.routerParams = params;
if (this.routerParams.id) {
this.showDetail = true;

View File

@ -1,5 +1,5 @@
import { Component, OnInit, Input } from '@angular/core';
import { highlight } from 'theme/animations/validation.animation';
import { highlight } from 'app/shared/animations/validation.animation';
@Component({
selector: 'taskana-shared-field-error-display',

View File

@ -7,7 +7,7 @@ import { BusinessAdminGuard } from 'app/shared/guards/business-admin.guard';
import { MonitorGuard } from 'app/shared/guards/monitor.guard';
import { WindowRefService } from 'app/shared/services/window/window.service';
import { UserGuard } from 'app/shared/guards/user.guard';
import { expandRight } from 'theme/animations/expand.animation';
import { expandRight } from 'app/shared/animations/expand.animation';
import { TaskanaEngineService } from '../../services/taskana-engine/taskana-engine.service';
@Component({
selector: 'taskana-shared-nav-bar',

View File

@ -13,7 +13,7 @@ import { TypeaheadMatch } from 'ngx-bootstrap/typeahead';
import { AccessIdsService } from 'app/shared/services/access-ids/access-ids.service';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
import { highlight } from 'theme/animations/validation.animation';
import { highlight } from 'app/shared/animations/validation.animation';
import { mergeMap } from 'rxjs/operators';
import { AccessIdDefinition } from 'app/shared/models/access-id';

View File

@ -1,7 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { TaskanaEngineService } from 'app/shared/services/taskana-engine/taskana-engine.service';
import { UserInfo } from 'app/shared/models/user-info';
import { expandDown } from '../../../../theme/animations/expand.animation';
import { expandDown } from '../../animations/expand.animation';
@Component({
selector: 'taskana-shared-user-information',

View File

@ -22,7 +22,6 @@ import {
} from './workbasket.actions';
import { WorkbasketSummaryRepresentation } from '../../models/workbasket-summary-representation';
import { ACTION } from '../../models/action';
import { DomainService } from '../../services/domain/domain.service';
import { NOTIFICATION_TYPES } from '../../models/notifications';
import { NotificationService } from '../../services/notifications/notification.service';
import { WorkbasketAccessItemsRepresentation } from '../../models/workbasket-access-items-representation';
@ -37,7 +36,6 @@ class InitializeStore {
export class WorkbasketState implements NgxsAfterBootstrap {
constructor(
private workbasketService: WorkbasketService,
private domainService: DomainService,
private location: Location,
private notificationService: NotificationService
) {}

View File

@ -6,7 +6,7 @@ import { WorkbasketService } from 'app/shared/services/workbasket/workbasket.ser
import { Sorting } from 'app/shared/models/sorting';
import { Filter } from 'app/shared/models/filter';
import { TaskanaType } from 'app/shared/models/taskana-type';
import { expandDown } from 'theme/animations/expand.animation';
import { expandDown } from 'app/shared/animations/expand.animation';
import { ActivatedRoute, NavigationExtras, Router } from '@angular/router';
import { WorkplaceService } from 'app/workplace/services/workplace.service';
import { ObjectReference } from 'app/workplace/models/object-reference';