diff options
Diffstat (limited to 'Timeline/ClientApp/src/app/test-utilities')
4 files changed, 49 insertions, 3 deletions
diff --git a/Timeline/ClientApp/src/app/test-utilities/activated-route.mock.ts b/Timeline/ClientApp/src/app/test-utilities/activated-route.mock.ts index 1743e615..40484387 100644 --- a/Timeline/ClientApp/src/app/test-utilities/activated-route.mock.ts +++ b/Timeline/ClientApp/src/app/test-utilities/activated-route.mock.ts @@ -1,11 +1,13 @@ -import { ParamMap } from '@angular/router'; +import { ParamMap, ActivatedRouteSnapshot, ActivatedRoute } from '@angular/router'; import { Observable, BehaviorSubject } from 'rxjs'; import { map } from 'rxjs/operators'; +import { PartialMock } from './mock'; + export interface ParamMapCreator { [name: string]: string | string[]; } -export class MockActivatedRouteSnapshot { +export class MockActivatedRouteSnapshot implements PartialMock<ActivatedRouteSnapshot> { private paramMapInternal: ParamMap; @@ -44,7 +46,7 @@ export class MockActivatedRouteSnapshot { } } -export class MockActivatedRoute { +export class MockActivatedRoute implements PartialMock<ActivatedRoute> { snapshot$ = new BehaviorSubject<MockActivatedRouteSnapshot>(new MockActivatedRouteSnapshot()); diff --git a/Timeline/ClientApp/src/app/test-utilities/mock.ts b/Timeline/ClientApp/src/app/test-utilities/mock.ts new file mode 100644 index 00000000..c3e368f0 --- /dev/null +++ b/Timeline/ClientApp/src/app/test-utilities/mock.ts @@ -0,0 +1,7 @@ +export type Mock<T> = { + [P in keyof T]: T[P] extends Function ? T[P] : T[P] | Mock<T[P]>; +}; + +export type PartialMock<T> = { + [P in keyof T]?: T[P] extends Function ? T[P] : T[P] | PartialMock<T[P]> | Mock<T[P]>; +}; diff --git a/Timeline/ClientApp/src/app/test-utilities/router-link.mock.ts b/Timeline/ClientApp/src/app/test-utilities/router-link.mock.ts new file mode 100644 index 00000000..7f4cde4d --- /dev/null +++ b/Timeline/ClientApp/src/app/test-utilities/router-link.mock.ts @@ -0,0 +1,9 @@ +import { Directive, Input } from '@angular/core'; + +@Directive({ + /* tslint:disable-next-line:directive-selector*/ + selector: '[routerLink]' +}) +export class RouterLinkStubDirective { + @Input('routerLink') linkParams: any; +} diff --git a/Timeline/ClientApp/src/app/test-utilities/storage.mock.ts b/Timeline/ClientApp/src/app/test-utilities/storage.mock.ts new file mode 100644 index 00000000..0ba5aa35 --- /dev/null +++ b/Timeline/ClientApp/src/app/test-utilities/storage.mock.ts @@ -0,0 +1,28 @@ +import { Mock } from './mock'; +import { nullIfUndefined } from '../utilities/language-untilities'; + +export function createMockStorage(): Mock<Storage> { + const map: { [key: string]: string } = {}; + return { + get length(): number { + return Object.keys(map).length; + }, + key(index: number): string | null { + const keys = Object.keys(map); + if (index >= keys.length) { return null; } + return keys[index]; + }, + clear() { + Object.keys(map).forEach(key => delete map.key); + }, + getItem(key: string): string | null { + return nullIfUndefined(map[key]); + }, + setItem(key: string, value: string) { + map[key] = value; + }, + removeItem(key: string) { + delete map[key]; + } + }; +} |