Skip to content

Commit

Permalink
SHIBUI-1528 Updated tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed Oct 22, 2019
1 parent 8bde79b commit a0304bd
Show file tree
Hide file tree
Showing 30 changed files with 520 additions and 116 deletions.
24 changes: 0 additions & 24 deletions ui/src/app/admin/action/admin-collection.action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@ import { Update } from '@ngrx/entity';
import { Admin } from '../model/admin';

export enum AdminCollectionActionTypes {
SELECT_ADMIN_REQUEST = '[Admin Collection] Select Admin Request',
SELECT_ADMIN_SUCCESS = '[Admin Collection] Select Admin Success',
SELECT_ADMIN_FAIL = '[Admin Collection] Select Admin Fail',

UPDATE_ADMIN_REQUEST = '[Admin Collection] Update Admin Request',
UPDATE_ADMIN_SUCCESS = '[Admin Collection] Update Admin Success',
Expand All @@ -27,24 +24,6 @@ export enum AdminCollectionActionTypes {

}

export class SelectAdmin implements Action {
readonly type = AdminCollectionActionTypes.SELECT_ADMIN_REQUEST;

constructor(public payload: string) { }
}

export class SelectAdminSuccess implements Action {
readonly type = AdminCollectionActionTypes.SELECT_ADMIN_SUCCESS;

constructor(public payload: Admin) { }
}

export class SelectAdminFail implements Action {
readonly type = AdminCollectionActionTypes.SELECT_ADMIN_FAIL;

constructor(public payload: Error) { }
}

export class LoadAdminRequest implements Action {
readonly type = AdminCollectionActionTypes.LOAD_ADMIN_REQUEST;

Expand Down Expand Up @@ -132,9 +111,6 @@ export type AdminCollectionActionsUnion =
| RemoveAdminRequest
| RemoveAdminSuccess
| RemoveAdminFail
| SelectAdmin
| SelectAdminSuccess
| SelectAdminFail
| UpdateAdminRequest
| UpdateAdminSuccess
| UpdateAdminFail
Expand Down
90 changes: 90 additions & 0 deletions ui/src/app/admin/effect/admin-collection.effect.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import { TestBed } from '@angular/core/testing';
import { provideMockActions } from '@ngrx/effects/testing';
import { Subject, Observable, of, ReplaySubject } from 'rxjs';

import { AdminCollectionEffects } from './admin-collection.effect';
import { AdminService } from '../service/admin.service';
import { Admin } from '../model/admin';
import { LoadAdminRequest, LoadAdminSuccess, UpdateAdminSuccess } from '../action/admin-collection.action';
import { AddNotification } from '../../notification/action/notification.action';
import { NotificationType, Notification } from '../../notification/model/notification';

describe('Admin Collection Effects', () => {
let effects: AdminCollectionEffects;
let actions: Subject<any>;

let admin: Admin = {
username: 'foo',
firstName: 'bar',
lastName: 'baz',
role: 'ROLE_ADMIN',
emailAddress: 'foo@bar.baz'
};

let mockAdminService = {
query: (): Observable<Admin[]> => of([admin]),
queryByRole: (role: string): Observable<Admin[]> => of([admin]),
update: (user: Admin): Observable<Admin> => of(admin),
remove: (userId: string): Observable<boolean> => of(true)
};

let adminService;

beforeEach(() => {
TestBed.configureTestingModule({
imports: [],
providers: [
{ provide: AdminService, useValue: mockAdminService },
AdminCollectionEffects,
provideMockActions(() => actions),
],
});

effects = TestBed.get(AdminCollectionEffects);
adminService = TestBed.get(AdminService);
});

describe(`loadAdminRequest$ effect`, () => {
it('should load admins and fire a success action', () => {
spyOn(adminService, 'query').and.returnValue(of([admin]));
actions = new ReplaySubject(1);

actions.next(new LoadAdminRequest());

effects.loadAdminRequest$.subscribe(result => {
expect(result).toEqual(new LoadAdminSuccess([admin]));
});
});
});

describe('updateAdminRoleReload$ effect', () => {
it('should reload the admins when the admin is updated', () => {
actions = new ReplaySubject(1);

actions.next(new UpdateAdminSuccess({id: 'foo', changes: { ...admin }}));

effects.updateAdminRoleReload$.subscribe(result => {
expect(result).toEqual(new LoadAdminRequest());
});
});
});

describe('updateAdminRoleSuccess$', () => {
it('should fire a notification to the notification service', () => {
let payload = { id: 'foo', changes: { ...admin } };
actions = new ReplaySubject(1);

actions.next(new UpdateAdminSuccess(payload));

effects.updateAdminRoleSuccess$.subscribe(result => {
expect(result).toEqual(new AddNotification(
new Notification(
NotificationType.Success,
`User update successful for ${payload.changes.username}`,
5000
)
));
});
});
});
});
6 changes: 1 addition & 5 deletions ui/src/app/admin/effect/admin-collection.effect.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import { Injectable } from '@angular/core';
import { Effect, Actions, ofType } from '@ngrx/effects';
import { Store } from '@ngrx/store';
import { switchMap, map } from 'rxjs/operators';

import * as fromAdmin from '../reducer';
import {
LoadAdminRequest,
AdminCollectionActionTypes,
Expand Down Expand Up @@ -91,7 +88,6 @@ export class AdminCollectionEffects {

constructor(
private actions$: Actions,
private adminService: AdminService,
private store: Store<fromAdmin.State>
private adminService: AdminService
) { }
}
77 changes: 77 additions & 0 deletions ui/src/app/admin/effect/metadata-collection.effect.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import { TestBed } from '@angular/core/testing';
import { provideMockActions } from '@ngrx/effects/testing';
import { Subject, Observable, of, ReplaySubject } from 'rxjs';
import { StoreModule, combineReducers } from '@ngrx/store';

import { MetadataCollectionEffects } from './metadata-collection.effect';
import { LoadMetadataRequest, LoadMetadataSuccess } from '../action/metadata-collection.action';
import { ResolverService } from '../../metadata/domain/service/resolver.service';
import { Metadata } from '../../metadata/domain/domain.type';
import { MetadataResolver } from '../../metadata/domain/model';
import * as fromI18n from '../../i18n/reducer';
import { I18nService } from '../../i18n/service/i18n.service';

describe('Metadata Collection Effects', () => {
let effects: MetadataCollectionEffects;
let actions: Subject<any>;

let md: Metadata = {
serviceProviderName: 'foo',
name: 'foo',
type: 'bar',
resourceId: 'foo',
createdBy: 'admin'
};

let resolverService;

beforeEach(() => {
TestBed.configureTestingModule({
imports: [
StoreModule.forRoot({
'i18n': combineReducers(fromI18n.reducers),
})
],
providers: [
{
provide: ResolverService,
useValue: jasmine.createSpyObj(
'ResolverService',
[
'queryForAdmin',
'update',
'remove'
]
)
},
{
provide: I18nService,
useValue: jasmine.createSpyObj(
'I18nService',
[
'translate'
]
)
},
MetadataCollectionEffects,
provideMockActions(() => actions),
],
});

effects = TestBed.get(MetadataCollectionEffects);
resolverService = TestBed.get(ResolverService);
});

describe(`loadMetadatas$ effect`, () => {
it('should load admins and fire a success action', () => {
resolverService.queryForAdmin.and.returnValue(of([md]));
actions = new ReplaySubject(1);

actions.next(new LoadMetadataRequest());

effects.loadMetadatas$.subscribe(result => {
expect(result).toEqual(new LoadMetadataSuccess([md] as MetadataResolver[]));
});
});
});
});
2 changes: 0 additions & 2 deletions ui/src/app/admin/effect/metadata-collection.effect.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { Injectable } from '@angular/core';
import { Effect, Actions, ofType } from '@ngrx/effects';
import { Router } from '@angular/router';
import { Store } from '@ngrx/store';
import { of } from 'rxjs';
import { map, catchError, switchMap, tap, withLatestFrom } from 'rxjs/operators';
Expand Down Expand Up @@ -127,7 +126,6 @@ export class MetadataCollectionEffects {
constructor(
private descriptorService: ResolverService,
private actions$: Actions,
private router: Router,
private store: Store<fromRoot.State>,
private i18nService: I18nService
) { }
Expand Down
17 changes: 0 additions & 17 deletions ui/src/app/admin/model/admin-entity.ts

This file was deleted.

5 changes: 0 additions & 5 deletions ui/src/app/admin/service/admin.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { Observable, of } from 'rxjs';
import { Admin } from '../model/admin';
import { HttpClient } from '@angular/common/http';
import { map, catchError } from 'rxjs/operators';
import { AdminEntity } from '../model/admin-entity';

@Injectable()
export class AdminService {
Expand All @@ -17,16 +16,12 @@ export class AdminService {
query(): Observable<Admin[]> {
return this.http.get<Admin[]>(
`${this.base}${this.endpoint}`, {}
).pipe(
map(users => users.map(u => new AdminEntity(u)))
);
}

queryByRole(role: string): Observable<Admin[]> {
return this.http.get<Admin[]>(
`${this.base}${this.endpoint}/role/${role}`, {}
).pipe(
map(users => users.map(u => new AdminEntity(u)))
);
}

Expand Down
3 changes: 0 additions & 3 deletions ui/src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import { CustomRouterStateSerializer } from './shared/util';
import { AuthorizedInterceptor } from './core/service/authorized.interceptor';
import { NotificationModule } from './notification/notification.module';
import { ErrorInterceptor } from './core/service/error.interceptor';
import { NavigatorService } from './core/service/navigator.service';
import { ContentionModule } from './contention/contention.module';
import { SharedModule } from './shared/shared.module';
import { WizardModule } from './wizard/wizard.module';
Expand Down Expand Up @@ -64,8 +63,6 @@ import { NavigationService } from './core/service/navigation.service';
AppRoutingModule
],
providers: [
NavigatorService,
NavigationService,
{ provide: RouterStateSerializer, useClass: CustomRouterStateSerializer },
{
provide: HTTP_INTERCEPTORS,
Expand Down
23 changes: 23 additions & 0 deletions ui/src/app/core/core.module.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { TestBed } from '@angular/core/testing';
import { StoreModule } from '@ngrx/store';
import { EffectsModule } from '@ngrx/effects';
import { CoreModule } from './core.module';
import { UserService } from './service/user.service';
import { HttpClientModule } from '@angular/common/http';

describe('Core Module', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
StoreModule.forRoot({}),
EffectsModule.forRoot([]),
CoreModule.forRoot(),
HttpClientModule
]
});
});

it('should compile', () => {
expect(TestBed.get(UserService)).toBeDefined();
});
});
6 changes: 5 additions & 1 deletion ui/src/app/core/core.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import { UserEffects } from './effect/user.effect';
import { HttpClientModule } from '@angular/common/http';
import { ModalService } from './service/modal.service';
import { DifferentialService } from './service/differential.service';
import { NavigatorService } from './service/navigator.service';
import { NavigationService } from './service/navigation.service';

export const COMPONENTS = [];

Expand All @@ -36,7 +38,9 @@ export class CoreModule {
FileService,
ModalService,
DifferentialService,
CanDeactivateGuard
CanDeactivateGuard,
NavigatorService,
NavigationService
]
};
}
Expand Down
4 changes: 2 additions & 2 deletions ui/src/app/core/service/navigator.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Injectable } from '@angular/core';
export class NavigatorService {
constructor() {}

get native(): any {
get native(): Navigator {
return window.navigator;
}
} /* istanbul ignore next */
}
Loading

0 comments on commit a0304bd

Please sign in to comment.