Commit f711ee9ce0e341dcf29ec2d72371ab5b042d25f3
1 parent
41cad538
Exists in
master
and in
26 other branches
Refactory into ComponentTestHelper and sidebar unit tests enhancements
Showing
4 changed files
with
108 additions
and
16 deletions
Show diff stats
src/app/layout/blocks/people-block/people-block.component.spec.ts
@@ -39,8 +39,8 @@ describe("Components", () => { | @@ -39,8 +39,8 @@ describe("Components", () => { | ||
39 | }); | 39 | }); |
40 | 40 | ||
41 | /** | 41 | /** |
42 | - * By default the helper will have the component, with all properties | ||
43 | - * ready to be used. Here the mock provider 'EnvironmentService' will | 42 | + * By default the helper will have the component, with all properties |
43 | + * ready to be used. Here the mock provider 'EnvironmentService' will | ||
44 | * return the given array with one person. | 44 | * return the given array with one person. |
45 | */ | 45 | */ |
46 | it("get block with one people", () => { | 46 | it("get block with one people", () => { |
@@ -0,0 +1,75 @@ | @@ -0,0 +1,75 @@ | ||
1 | +import {provide} from 'ng-forward'; | ||
2 | +import {ComponentTestHelper, createClass} from '../../../spec/component-test-helper'; | ||
3 | +import {providers} from 'ng-forward/cjs/testing/providers'; | ||
4 | +import {SidebarComponent} from './sidebar.component'; | ||
5 | + | ||
6 | +const htmlTemplate: string = '<sidebar [visible]="false"></sidebar>'; | ||
7 | + | ||
8 | +describe('Sidebar Component', () => { | ||
9 | + | ||
10 | + let helper: ComponentTestHelper<SidebarComponent>; | ||
11 | + let notifyService: any = { | ||
12 | + event: Function, | ||
13 | + subscribe: (fn: (visible: boolean) => void) => { | ||
14 | + notifyService.event = fn; | ||
15 | + }, | ||
16 | + next: (value: any) => { | ||
17 | + notifyService.event(value); | ||
18 | + }, | ||
19 | + setVisibility: (visible: boolean) => { | ||
20 | + notifyService.event(visible); | ||
21 | + } | ||
22 | + }; | ||
23 | + | ||
24 | + let sessionService: any = { | ||
25 | + currentUser: (): any => { | ||
26 | + return { | ||
27 | + person: { name: 'test' } | ||
28 | + }; | ||
29 | + } | ||
30 | + }; | ||
31 | + | ||
32 | + | ||
33 | + beforeEach(angular.mock.module("templates")); | ||
34 | + | ||
35 | + beforeEach((done: Function) => { | ||
36 | + providers((provide: any) => { | ||
37 | + return <any>[ | ||
38 | + provide('SidebarNotificationService', { | ||
39 | + useValue: notifyService | ||
40 | + }), | ||
41 | + provide('SessionService', { | ||
42 | + useValue: sessionService | ||
43 | + }) | ||
44 | + ]; | ||
45 | + }); | ||
46 | + | ||
47 | + let cls = createClass({ | ||
48 | + template: htmlTemplate, | ||
49 | + directives: [SidebarComponent], | ||
50 | + properties: { | ||
51 | + visible: false | ||
52 | + } | ||
53 | + }); | ||
54 | + | ||
55 | + helper = new ComponentTestHelper<SidebarComponent>(cls, done); | ||
56 | + }); | ||
57 | + | ||
58 | + it('render the sidebar html content', () => { | ||
59 | + expect(helper.all('div#nav-col').length).toEqual(1); | ||
60 | + }); | ||
61 | + | ||
62 | + it('show sidebar only if a service emit a visibility event', () => { | ||
63 | + | ||
64 | + notifyService.setVisibility(true); | ||
65 | + expect(helper.component.isVisible()).toBeTruthy(); | ||
66 | + }); | ||
67 | + | ||
68 | + it('show user name into sidebar', () => { | ||
69 | + | ||
70 | + notifyService.setVisibility(true); | ||
71 | + expect(helper.component.user.name).toEqual(sessionService.currentUser().person.name); | ||
72 | + expect(helper.debugElement.query('div.user-box .name a').text()).toMatch(sessionService.currentUser().person.name); | ||
73 | + }); | ||
74 | + | ||
75 | +}); |
src/app/layout/sidebar/sidebar.component.ts
1 | import {Component, Inject, Input} from "ng-forward"; | 1 | import {Component, Inject, Input} from "ng-forward"; |
2 | import {SidebarNotificationService} from "./sidebar.notification.service"; | 2 | import {SidebarNotificationService} from "./sidebar.notification.service"; |
3 | +import {SessionService} from '../../login/session.service'; | ||
3 | 4 | ||
4 | @Component({ | 5 | @Component({ |
5 | selector: 'sidebar', | 6 | selector: 'sidebar', |
6 | templateUrl: 'app/layout/sidebar/sidebar.html' | 7 | templateUrl: 'app/layout/sidebar/sidebar.html' |
7 | }) | 8 | }) |
8 | -@Inject(SidebarNotificationService) | 9 | +@Inject(SidebarNotificationService, SessionService) |
9 | export class SidebarComponent { | 10 | export class SidebarComponent { |
10 | 11 | ||
11 | - @Input('visible') | ||
12 | - private isVisible: boolean = false; | 12 | + @Input() |
13 | + private visible: boolean = false; | ||
13 | 14 | ||
14 | - constructor(private notificationService: SidebarNotificationService) { } | 15 | + @Input() |
16 | + public user: { name: string } = { | ||
17 | + name: '' | ||
18 | + }; | ||
19 | + | ||
20 | + constructor(private notificationService: SidebarNotificationService, private session: SessionService) { } | ||
15 | 21 | ||
16 | ngOnInit() { | 22 | ngOnInit() { |
17 | 23 | ||
18 | - this.notificationService.setVisibility(this.isVisible); | ||
19 | - this.notificationService.subscribe((visible) => { | ||
20 | - this.isVisible = visible; | 24 | + let userData: any = this.session.currentUser(); |
25 | + if (userData) { | ||
26 | + this.user = userData.person; | ||
27 | + } | ||
28 | + | ||
29 | + this.notificationService.setVisibility(this.visible); | ||
30 | + this.notificationService.subscribe((visible: boolean) => { | ||
31 | + this.visible = visible; | ||
21 | }); | 32 | }); |
22 | } | 33 | } |
34 | + | ||
35 | + isVisible(): boolean { | ||
36 | + return <boolean>this.visible; | ||
37 | + } | ||
23 | } | 38 | } |
src/spec/helpers.ts
1 | 1 | ||
2 | import {ngClass, TestComponentBuilder, ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder'; | 2 | import {ngClass, TestComponentBuilder, ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder'; |
3 | import {providers} from 'ng-forward/cjs/testing/providers'; | 3 | import {providers} from 'ng-forward/cjs/testing/providers'; |
4 | -import {Injectable, Inject, Provider, Input, provide, Component} from 'ng-forward'; | 4 | +import {Injectable, Inject, Provider, Input, Output, EventEmitter, provide, Component} from 'ng-forward'; |
5 | 5 | ||
6 | 6 | ||
7 | export var ngforward = { | 7 | export var ngforward = { |
@@ -62,7 +62,6 @@ export function provideFilters(...filters: string[]) { | @@ -62,7 +62,6 @@ export function provideFilters(...filters: string[]) { | ||
62 | return providers; | 62 | return providers; |
63 | } | 63 | } |
64 | 64 | ||
65 | - | ||
66 | @Component({ | 65 | @Component({ |
67 | selector: 'helper_get_angular_service', | 66 | selector: 'helper_get_angular_service', |
68 | template: 'not-used', | 67 | template: 'not-used', |
@@ -78,12 +77,15 @@ class AngularServiceHookComponent { | @@ -78,12 +77,15 @@ class AngularServiceHookComponent { | ||
78 | * This helper class allows get angular services to be used in integration tests | 77 | * This helper class allows get angular services to be used in integration tests |
79 | * i.e: '$http', '$q', '$location', etc... | 78 | * i.e: '$http', '$q', '$location', etc... |
80 | */ | 79 | */ |
81 | -class AngularServiceFactory { | 80 | +export class AngularServiceFactory { |
81 | + | ||
82 | + private fixtureComponentHookPoint: ComponentFixture; | ||
82 | 83 | ||
83 | - constructor(private fixtureComponentHookPoint: ComponentFixture) { | ||
84 | - this.fixtureComponentHookPoint = (<any>tcb)["create"](AngularServiceHookComponent); | 84 | + constructor() { |
85 | + this.fixtureComponentHookPoint = (<any>tcb)["create"](ComponentWithOutputCall); | ||
85 | } | 86 | } |
86 | 87 | ||
88 | + | ||
87 | getAngularService<T>(angularService: string) { | 89 | getAngularService<T>(angularService: string) { |
88 | return this.fixtureComponentHookPoint.debugElement.getLocal(angularService); | 90 | return this.fixtureComponentHookPoint.debugElement.getLocal(angularService); |
89 | } | 91 | } |
@@ -97,8 +99,8 @@ class AngularServiceFactory { | @@ -97,8 +99,8 @@ class AngularServiceFactory { | ||
97 | } | 99 | } |
98 | } | 100 | } |
99 | 101 | ||
100 | -export function getAngularServiceFactory(fixture: ComponentFixture) { | ||
101 | - return new AngularServiceFactory(fixture); | 102 | +export function getAngularServiceFactory() { |
103 | + return new AngularServiceFactory(); | ||
102 | } | 104 | } |
103 | 105 | ||
104 | export {mocks} from "./mocks"; | 106 | export {mocks} from "./mocks"; |