Commit 41cad53868bba4e95c0f03dcc37a93b8b8a5c006

Authored by Michel Felipe
1 parent 4c39bd75

Refactory into unit tests to use EventEmitter mocks

src/app/index.ts
@@ -5,7 +5,7 @@ import {noosferoAngularRunBlock} from "./index.run"; @@ -5,7 +5,7 @@ import {noosferoAngularRunBlock} from "./index.run";
5 import {MainComponent} from "./main/main.component"; 5 import {MainComponent} from "./main/main.component";
6 import {bootstrap, bundle} from "ng-forward"; 6 import {bootstrap, bundle} from "ng-forward";
7 7
8 -import {AUTH_EVENTS} from "./login/auth-events"; 8 +import {AuthEvents} from "./login/auth-events";
9 import {AuthController} from "./login/auth.controller"; 9 import {AuthController} from "./login/auth.controller";
10 10
11 import {Navbar} from "./layout/navbar/navbar"; 11 import {Navbar} from "./layout/navbar/navbar";
@@ -23,7 +23,7 @@ NoosferoApp.angularModule = noosferoApp; @@ -23,7 +23,7 @@ NoosferoApp.angularModule = noosferoApp;
23 23
24 24
25 NoosferoApp.addConstants("moment", moment); 25 NoosferoApp.addConstants("moment", moment);
26 -NoosferoApp.addConstants("AUTH_EVENTS", AUTH_EVENTS); 26 +NoosferoApp.addConstants("AuthEvents", AuthEvents);
27 27
28 NoosferoApp.addConfig(noosferoModuleConfig); 28 NoosferoApp.addConfig(noosferoModuleConfig);
29 NoosferoApp.run(noosferoAngularRunBlock); 29 NoosferoApp.run(noosferoAngularRunBlock);
src/app/layout/boxes/boxes.component.spec.ts
@@ -7,7 +7,6 @@ import { @@ -7,7 +7,6 @@ import {
7 quickCreateComponent, 7 quickCreateComponent,
8 provideEmptyObjects, 8 provideEmptyObjects,
9 createProviderToValue, 9 createProviderToValue,
10 - getAngularServiceFactory,  
11 provideFilters 10 provideFilters
12 } from "../../../spec/helpers"; 11 } from "../../../spec/helpers";
13 12
src/app/layout/navbar/navbar.spec.ts
1 import * as helpers from "./../../../spec/helpers"; 1 import * as helpers from "./../../../spec/helpers";
2 import {Navbar} from "./navbar"; 2 import {Navbar} from "./navbar";
3 3
4 -import {Injectable, Provider, provide} from "ng-forward"; 4 +import {Injectable, Provider, provide, EventEmitter} from "ng-forward";
5 5
6 import {ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder'; 6 import {ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder';
7 7
8 -import {SessionService, AuthService, AuthController, IAuthEvents, AUTH_EVENTS} from "./../../login"; 8 +import {SessionService, AuthService, AuthController, AuthEvents} from "./../../login";
9 9
  10 +import events from 'ng-forward/cjs/events/events';
10 11
11 describe("Components", () => { 12 describe("Components", () => {
12 13
@@ -53,22 +54,19 @@ describe("Components", () => { @@ -53,22 +54,19 @@ describe("Components", () => {
53 provide('$uibModal', { 54 provide('$uibModal', {
54 useValue: $modal 55 useValue: $modal
55 }), 56 }),
56 - provide('AuthService', { 57 + provide(AuthService, {
57 useValue: authService 58 useValue: authService
58 }), 59 }),
59 helpers.provideEmptyObjects('moment'), 60 helpers.provideEmptyObjects('moment'),
60 provide('$state', { 61 provide('$state', {
61 useValue: stateService 62 useValue: stateService
62 }), 63 }),
63 - provide("$scope", {  
64 - useValue: scope  
65 - }),  
66 provide('SessionService', { 64 provide('SessionService', {
67 useValue: sessionService 65 useValue: sessionService
68 }), 66 }),
69 - provide('AUTH_EVENTS', { 67 + provide('AuthEvents', {
70 useValue: { 68 useValue: {
71 - AUTH_EVENTS 69 + AuthEvents
72 } 70 }
73 }), 71 }),
74 provide('TranslatorService', { 72 provide('TranslatorService', {
@@ -146,7 +144,7 @@ describe("Components", () => { @@ -146,7 +144,7 @@ describe("Components", () => {
146 144
147 145
148 it('closes the modal after login', (done: Function) => { 146 it('closes the modal after login', (done: Function) => {
149 - modalInstance = jasmine.createSpyObj("modalInstance", ["close"]); 147 + modalInstance = {};
150 modalInstance.close = jasmine.createSpy("close"); 148 modalInstance.close = jasmine.createSpy("close");
151 149
152 $modal.open = () => { 150 $modal.open = () => {
@@ -155,19 +153,21 @@ describe("Components", () => { @@ -155,19 +153,21 @@ describe("Components", () => {
155 153
156 buildComponent().then((fixture: ComponentFixture) => { 154 buildComponent().then((fixture: ComponentFixture) => {
157 let navbarComp: Navbar = <Navbar>fixture.debugElement.componentViewChildren[0].componentInstance; 155 let navbarComp: Navbar = <Navbar>fixture.debugElement.componentViewChildren[0].componentInstance;
158 - let localScope: ng.IScope = navbarComp["$scope"];  
159 156
160 navbarComp.openLogin(); 157 navbarComp.openLogin();
161 - localScope.$emit(AUTH_EVENTS.loginSuccess); 158 + let successEvent: string = AuthEvents[AuthEvents.loginSuccess];
  159 +
  160 + (<any>navbarComp.authService)[successEvent].next(user);
  161 +
162 expect(modalInstance.close).toHaveBeenCalled(); 162 expect(modalInstance.close).toHaveBeenCalled();
163 done(); 163 done();
164 }); 164 });
  165 +
165 }); 166 });
166 167
167 it('updates current user on logout', (done: Function) => { 168 it('updates current user on logout', (done: Function) => {
168 buildComponent().then((fixture: ComponentFixture) => { 169 buildComponent().then((fixture: ComponentFixture) => {
169 let navbarComp: Navbar = <Navbar>fixture.debugElement.componentViewChildren[0].componentInstance; 170 let navbarComp: Navbar = <Navbar>fixture.debugElement.componentViewChildren[0].componentInstance;
170 - let localScope: ng.IScope = navbarComp["$scope"];  
171 171
172 // init navbar currentUser with some user 172 // init navbar currentUser with some user
173 navbarComp["currentUser"] = user; 173 navbarComp["currentUser"] = user;
@@ -176,12 +176,14 @@ describe(&quot;Components&quot;, () =&gt; { @@ -176,12 +176,14 @@ describe(&quot;Components&quot;, () =&gt; {
176 // and emmit the 'logoutSuccess' event 176 // and emmit the 'logoutSuccess' event
177 // just what happens when user logsout 177 // just what happens when user logsout
178 sessionService.currentUser = () => { return null; }; 178 sessionService.currentUser = () => { return null; };
179 - localScope.$emit(AUTH_EVENTS.logoutSuccess);  
180 - expect(navbarComp["currentUser"]).toBeNull(); 179 + let successEvent: string = AuthEvents[AuthEvents.logoutSuccess];
  180 +
  181 + (<any>navbarComp.authService)[successEvent].next(user);
  182 +
181 done(); 183 done();
  184 + expect(navbarComp["currentUser"]).toBeNull();
  185 +
182 }); 186 });
183 }); 187 });
184 -  
185 -  
186 }); 188 });
187 }); 189 });
src/app/layout/navbar/navbar.ts
@@ -22,7 +22,7 @@ export class Navbar { @@ -22,7 +22,7 @@ export class Navbar {
22 */ 22 */
23 constructor( 23 constructor(
24 private $uibModal: any, 24 private $uibModal: any,
25 - private authService: AuthService, 25 + public authService: AuthService,
26 private session: SessionService, 26 private session: SessionService,
27 private $state: ng.ui.IStateService, 27 private $state: ng.ui.IStateService,
28 private sidebarNotificationService: SidebarNotificationService 28 private sidebarNotificationService: SidebarNotificationService
@@ -31,7 +31,7 @@ export class Navbar { @@ -31,7 +31,7 @@ export class Navbar {
31 31
32 this.showHamburguer = this.authService.isAuthenticated(); 32 this.showHamburguer = this.authService.isAuthenticated();
33 33
34 - this.authService.loginSuccess.subscribe(() => { 34 + this.authService.subscribe(AuthEvents[AuthEvents.loginSuccess], () => {
35 if (this.modalInstance) { 35 if (this.modalInstance) {
36 this.modalInstance.close(); 36 this.modalInstance.close();
37 this.modalInstance = null; 37 this.modalInstance = null;
src/app/layout/services/body-state-classes.service.spec.ts
1 import * as helpers from '../../../spec/helpers'; 1 import * as helpers from '../../../spec/helpers';
2 import {BodyStateClassesService} from "./body-state-classes.service"; 2 import {BodyStateClassesService} from "./body-state-classes.service";
3 import {AuthService} from "./../../login/auth.service"; 3 import {AuthService} from "./../../login/auth.service";
4 -import {AUTH_EVENTS} from "./../../login/auth-events"; 4 +import {AuthEvents} from "./../../login/auth-events";
  5 +
  6 +import {EventEmitter} from 'ng-forward';
  7 +
5 8
6 describe("BodyStateClasses Service", () => { 9 describe("BodyStateClasses Service", () => {
  10 +
7 let currentStateName = "main"; 11 let currentStateName = "main";
8 let bodyStateClasseService: BodyStateClassesService; 12 let bodyStateClasseService: BodyStateClassesService;
9 let $rootScope: ng.IRootScopeService = <any>{}, 13 let $rootScope: ng.IRootScopeService = <any>{},
@@ -13,17 +17,15 @@ describe(&quot;BodyStateClasses Service&quot;, () =&gt; { @@ -13,17 +17,15 @@ describe(&quot;BodyStateClasses Service&quot;, () =&gt; {
13 name: currentStateName 17 name: currentStateName
14 } 18 }
15 }, 19 },
16 - authService: AuthService, 20 + authService: any = helpers.mocks.authService,
17 bodyEl: { className: string }, 21 bodyEl: { className: string },
18 bodyElJq: any; 22 bodyElJq: any;
19 23
20 -  
21 let getService = (): BodyStateClassesService => { 24 let getService = (): BodyStateClassesService => {
22 return new BodyStateClassesService($rootScope, $document, $state, authService); 25 return new BodyStateClassesService($rootScope, $document, $state, authService);
23 }; 26 };
24 27
25 beforeEach(() => { 28 beforeEach(() => {
26 - authService = <any>{};  
27 authService.isAuthenticated = jasmine.createSpy("isAuthenticated").and.returnValue(true); 29 authService.isAuthenticated = jasmine.createSpy("isAuthenticated").and.returnValue(true);
28 bodyEl = { className: "" }; 30 bodyEl = { className: "" };
29 bodyElJq = [bodyEl]; 31 bodyElJq = [bodyEl];
@@ -58,8 +60,9 @@ describe(&quot;BodyStateClasses Service&quot;, () =&gt; { @@ -58,8 +60,9 @@ describe(&quot;BodyStateClasses Service&quot;, () =&gt; {
58 60
59 it("should capture loginSuccess event and add noosfero-user-logged class to the body element", () => { 61 it("should capture loginSuccess event and add noosfero-user-logged class to the body element", () => {
60 let userLoggedClassName = BodyStateClassesService.USER_LOGGED_CLASSNAME; 62 let userLoggedClassName = BodyStateClassesService.USER_LOGGED_CLASSNAME;
61 - $rootScope = <any>helpers.mocks.scopeWithEvents(); 63 +
62 bodyElJq.addClass = jasmine.createSpy("addClass"); 64 bodyElJq.addClass = jasmine.createSpy("addClass");
  65 + bodyElJq.removeClass = jasmine.createSpy("removeClass");
63 authService.isAuthenticated = jasmine.createSpy("isAuthenticated").and.returnValue(false); 66 authService.isAuthenticated = jasmine.createSpy("isAuthenticated").and.returnValue(false);
64 let service = getService(); 67 let service = getService();
65 68
@@ -68,11 +71,11 @@ describe(&quot;BodyStateClasses Service&quot;, () =&gt; { @@ -68,11 +71,11 @@ describe(&quot;BodyStateClasses Service&quot;, () =&gt; {
68 // triggers the service start 71 // triggers the service start
69 service.start(); 72 service.start();
70 // check if the the body element addClass was not called yet, 73 // check if the the body element addClass was not called yet,
71 - // because the user is not authenticated 74 + // because the user is not authenticated
72 expect(bodyElJq.addClass).not.toHaveBeenCalledWith(userLoggedClassName); 75 expect(bodyElJq.addClass).not.toHaveBeenCalledWith(userLoggedClassName);
73 76
74 // emit the event loginSuccess 77 // emit the event loginSuccess
75 - $rootScope.$emit(AUTH_EVENTS.loginSuccess); 78 + authService.loginSuccess.next(null);
76 79
77 // and check now if the addClass was called passing the userLogged class 80 // and check now if the addClass was called passing the userLogged class
78 // to the body Element 81 // to the body Element
@@ -83,7 +86,6 @@ describe(&quot;BodyStateClasses Service&quot;, () =&gt; { @@ -83,7 +86,6 @@ describe(&quot;BodyStateClasses Service&quot;, () =&gt; {
83 let userLoggedClassName = BodyStateClassesService.USER_LOGGED_CLASSNAME; 86 let userLoggedClassName = BodyStateClassesService.USER_LOGGED_CLASSNAME;
84 87
85 authService.isAuthenticated = jasmine.createSpy("isAuthenticated").and.returnValue(true); 88 authService.isAuthenticated = jasmine.createSpy("isAuthenticated").and.returnValue(true);
86 - $rootScope = <any>helpers.mocks.scopeWithEvents();  
87 89
88 bodyElJq.addClass = jasmine.createSpy("addClass"); 90 bodyElJq.addClass = jasmine.createSpy("addClass");
89 bodyElJq.removeClass = jasmine.createSpy("removeClass"); 91 bodyElJq.removeClass = jasmine.createSpy("removeClass");
@@ -95,11 +97,11 @@ describe(&quot;BodyStateClasses Service&quot;, () =&gt; { @@ -95,11 +97,11 @@ describe(&quot;BodyStateClasses Service&quot;, () =&gt; {
95 service.start(); 97 service.start();
96 98
97 // check if the the body element addClass was called 99 // check if the the body element addClass was called
98 - // because the user is already authenticated 100 + // because the user is already authenticated
99 expect(bodyElJq.addClass).toHaveBeenCalledWith(userLoggedClassName); 101 expect(bodyElJq.addClass).toHaveBeenCalledWith(userLoggedClassName);
100 102
101 // emit the event logoutSuccess 103 // emit the event logoutSuccess
102 - $rootScope.$emit(AUTH_EVENTS.logoutSuccess); 104 + authService.logoutSuccess.next(null);
103 105
104 // and check now if the removeClass was called passing the userLogged class 106 // and check now if the removeClass was called passing the userLogged class
105 // to the body Element 107 // to the body Element
@@ -126,9 +128,9 @@ describe(&quot;BodyStateClasses Service&quot;, () =&gt; { @@ -126,9 +128,9 @@ describe(&quot;BodyStateClasses Service&quot;, () =&gt; {
126 expect(bodyEl.className).toEqual(BodyStateClassesService.ROUTE_STATE_CLASSNAME_PREFIX + currentStateName); 128 expect(bodyEl.className).toEqual(BodyStateClassesService.ROUTE_STATE_CLASSNAME_PREFIX + currentStateName);
127 129
128 // emit the event $stateChangeSuccess 130 // emit the event $stateChangeSuccess
129 - $rootScope.$emit("$stateChangeSuccess", null, {name: "new-route"}); 131 + $rootScope.$emit("$stateChangeSuccess", null, { name: "new-route" });
130 132
131 // and check now if the bodyEl has a class indicating the new state route 133 // and check now if the bodyEl has a class indicating the new state route
132 expect(bodyEl.className).toEqual(BodyStateClassesService.ROUTE_STATE_CLASSNAME_PREFIX + "new-route"); 134 expect(bodyEl.className).toEqual(BodyStateClassesService.ROUTE_STATE_CLASSNAME_PREFIX + "new-route");
133 }); 135 });
134 -});  
135 \ No newline at end of file 136 \ No newline at end of file
  137 +});
src/app/layout/services/body-state-classes.service.ts
@@ -83,7 +83,7 @@ export class BodyStateClassesService { @@ -83,7 +83,7 @@ export class BodyStateClassesService {
83 83
84 this.authService.subscribe(AuthEvents[AuthEvents.logoutSuccess], () => { 84 this.authService.subscribe(AuthEvents[AuthEvents.logoutSuccess], () => {
85 bodyElement.removeClass(BodyStateClassesService.USER_LOGGED_CLASSNAME); 85 bodyElement.removeClass(BodyStateClassesService.USER_LOGGED_CLASSNAME);
86 - }) 86 + });
87 } 87 }
88 88
89 /** 89 /**
src/app/layout/sidebar/sidebar.component.ts
@@ -18,6 +18,6 @@ export class SidebarComponent { @@ -18,6 +18,6 @@ export class SidebarComponent {
18 this.notificationService.setVisibility(this.isVisible); 18 this.notificationService.setVisibility(this.isVisible);
19 this.notificationService.subscribe((visible) => { 19 this.notificationService.subscribe((visible) => {
20 this.isVisible = visible; 20 this.isVisible = visible;
21 - }) 21 + });
22 } 22 }
23 } 23 }
src/app/login/auth.service.spec.ts
1 -import {AuthService, AUTH_EVENTS} from "./"; 1 +import {AuthService, AuthEvents} from "./";
  2 +
  3 +import {Injectable, Provider, provide, EventEmitter} from "ng-forward";
  4 +import {ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder';
  5 +
  6 +import {getAngularServiceFactory, AngularServiceFactory} from "../../spec/helpers";
2 7
3 describe("Services", () => { 8 describe("Services", () => {
4 9
@@ -15,23 +20,26 @@ describe(&quot;Services&quot;, () =&gt; { @@ -15,23 +20,26 @@ describe(&quot;Services&quot;, () =&gt; {
15 $translateProvider.translations('en', {}); 20 $translateProvider.translations('en', {});
16 })); 21 }));
17 22
18 - beforeEach(inject((_$httpBackend_: ng.IHttpBackendService, _$rootScope_: ng.IRootScopeService, _AuthService_: AuthService) => {  
19 - $httpBackend = _$httpBackend_;  
20 - authService = _AuthService_;  
21 - $rootScope = _$rootScope_; 23 + beforeEach(() => {
22 24
23 user = <noosfero.User>{ 25 user = <noosfero.User>{
24 id: 1, 26 id: 1,
25 login: "user" 27 login: "user"
26 }; 28 };
27 - }));  
28 - 29 + });
29 30
30 describe("Succesffull login", () => { 31 describe("Succesffull login", () => {
31 32
  33 + let factory: AngularServiceFactory;
  34 + let authService: AuthService;
  35 + let $log: ng.ILogService;
  36 + let $http: ng.IHttpBackendService;
  37 +
32 beforeEach(() => { 38 beforeEach(() => {
33 credentials = { username: "user", password: "password" }; 39 credentials = { username: "user", password: "password" };
34 - 40 + factory = getAngularServiceFactory();
  41 + authService = factory.getAngularService("AuthService");
  42 + $httpBackend = factory.getHttpBackendService();
35 $httpBackend.expectPOST("/api/v1/login", "login=user&password=password").respond(200, { user: user }); 43 $httpBackend.expectPOST("/api/v1/login", "login=user&password=password").respond(200, { user: user });
36 }); 44 });
37 45
@@ -44,20 +52,15 @@ describe(&quot;Services&quot;, () =&gt; { @@ -44,20 +52,15 @@ describe(&quot;Services&quot;, () =&gt; {
44 expect($httpBackend.verifyNoOutstandingRequest()); 52 expect($httpBackend.verifyNoOutstandingRequest());
45 }); 53 });
46 54
47 -  
48 - it("should emit event loggin successful with user logged data", () => {  
49 -  
50 - authService.login(credentials);  
51 -  
52 - let eventEmmited: boolean = false;  
53 - $rootScope.$on(AUTH_EVENTS.loginSuccess, (event: ng.IAngularEvent, userThroughEvent: noosfero.User) => {  
54 - eventEmmited = true; 55 + it("should emit event loggin successful with user logged data", (done: Function) => {
  56 + let successEvent: any = AuthEvents[AuthEvents.loginSuccess];
  57 + (<any>authService)[successEvent].subscribe((userThroughEvent: noosfero.User): any => {
55 expect(userThroughEvent).toEqual(user); 58 expect(userThroughEvent).toEqual(user);
  59 + done();
56 }); 60 });
57 - 61 + authService.login(credentials);
58 $httpBackend.flush(); 62 $httpBackend.flush();
59 63
60 - expect(eventEmmited).toBeTruthy(AUTH_EVENTS.loginSuccess + " was not emmited!");  
61 }); 64 });
62 65
63 it("should return the current logged in user", () => { 66 it("should return the current logged in user", () => {
@@ -74,6 +77,5 @@ describe(&quot;Services&quot;, () =&gt; { @@ -74,6 +77,5 @@ describe(&quot;Services&quot;, () =&gt; {
74 }); 77 });
75 }); 78 });
76 79
77 -  
78 }); 80 });
79 }); 81 });
src/app/login/auth.service.ts
@@ -6,18 +6,16 @@ import {SessionService} from &quot;./session.service&quot;; @@ -6,18 +6,16 @@ import {SessionService} from &quot;./session.service&quot;;
6 import {AuthEvents} from "./auth-events"; 6 import {AuthEvents} from "./auth-events";
7 7
8 @Injectable() 8 @Injectable()
9 -@Inject("$q", "$http", "SessionService", "$log") 9 +@Inject("$http", "SessionService", "$log")
10 export class AuthService { 10 export class AuthService {
11 11
12 public loginSuccess: EventEmitter<noosfero.User> = new EventEmitter<noosfero.User>(); 12 public loginSuccess: EventEmitter<noosfero.User> = new EventEmitter<noosfero.User>();
13 - private loginFailed: EventEmitter<ng.IHttpPromiseCallbackArg<any>> = new EventEmitter<ng.IHttpPromiseCallbackArg<any>>();  
14 - private logoutSuccess: EventEmitter<noosfero.User> = new EventEmitter<noosfero.User>(); 13 + public loginFailed: EventEmitter<ng.IHttpPromiseCallbackArg<any>> = new EventEmitter<ng.IHttpPromiseCallbackArg<any>>();
  14 + public logoutSuccess: EventEmitter<noosfero.User> = new EventEmitter<noosfero.User>();
15 15
16 - constructor(private $q: ng.IQService,  
17 - private $http: ng.IHttpService, 16 + constructor(private $http: ng.IHttpService,
18 private sessionService: SessionService, 17 private sessionService: SessionService,
19 private $log: ng.ILogService) { 18 private $log: ng.ILogService) {
20 -  
21 } 19 }
22 20
23 loginFromCookie() { 21 loginFromCookie() {
@@ -43,7 +41,6 @@ export class AuthService { @@ -43,7 +41,6 @@ export class AuthService {
43 private loginFailedCallback(response: ng.IHttpPromiseCallbackArg<any>): any { 41 private loginFailedCallback(response: ng.IHttpPromiseCallbackArg<any>): any {
44 this.$log.debug('AuthService.login [FAIL] response', response); 42 this.$log.debug('AuthService.login [FAIL] response', response);
45 this.loginFailed.next(response); 43 this.loginFailed.next(response);
46 - // return $q.reject(response);  
47 return null; 44 return null;
48 } 45 }
49 46
@@ -72,8 +69,9 @@ export class AuthService { @@ -72,8 +69,9 @@ export class AuthService {
72 69
73 subscribe(eventName: string, fn: Function) { 70 subscribe(eventName: string, fn: Function) {
74 71
75 - if (this[eventName]) {  
76 - this[eventName].subscribe(fn); 72 + let event: EventEmitter<any> = <EventEmitter<any>>(<any>this)[eventName];
  73 + if (event) {
  74 + event.subscribe(fn);
77 } else { 75 } else {
78 throw new Error(`The event: ${eventName} not exists`); 76 throw new Error(`The event: ${eventName} not exists`);
79 } 77 }
src/spec/component-test-helper.ts
@@ -6,12 +6,12 @@ import { ComponentFixture } from &#39;ng-forward/cjs/testing/test-component-builder&#39; @@ -6,12 +6,12 @@ import { ComponentFixture } from &#39;ng-forward/cjs/testing/test-component-builder&#39;
6 /** 6 /**
7 * @ngdoc object 7 * @ngdoc object
8 * @name spec.ComponentTestHelper 8 * @name spec.ComponentTestHelper
9 - * @description  
10 - * 9 + * @description
  10 + *
11 * Helper class for creating tests. It encapsulates the TestComponentBuilder initialization, 11 * Helper class for creating tests. It encapsulates the TestComponentBuilder initialization,
12 * allowing the test to be DRY. To use, one must declare a beforeEach function in the 12 * allowing the test to be DRY. To use, one must declare a beforeEach function in the
13 * test, and inside construct this object like: 13 * test, and inside construct this object like:
14 - * 14 + *
15 * <pre> 15 * <pre>
16 * let helper = let helper : ComponentTestHelper; 16 * let helper = let helper : ComponentTestHelper;
17 * beforeEach( (done) => { 17 * beforeEach( (done) => {
@@ -35,7 +35,7 @@ export class ComponentTestHelper&lt;T extends any&gt; { @@ -35,7 +35,7 @@ export class ComponentTestHelper&lt;T extends any&gt; {
35 * @propertyOf spec.ComponentTestHelper 35 * @propertyOf spec.ComponentTestHelper
36 * @description 36 * @description
37 * The NgForward TestComponentBuilder 37 * The NgForward TestComponentBuilder
38 - */ 38 + */
39 tcb: TestComponentBuilder; 39 tcb: TestComponentBuilder;
40 /** 40 /**
41 * @ngdoc property 41 * @ngdoc property
@@ -52,7 +52,7 @@ export class ComponentTestHelper&lt;T extends any&gt; { @@ -52,7 +52,7 @@ export class ComponentTestHelper&lt;T extends any&gt; {
52 * @description 52 * @description
53 * The debugElement representing a JQuery element attached to the component 53 * The debugElement representing a JQuery element attached to the component
54 * on mock page. 54 * on mock page.
55 - */ 55 + */
56 debugElement: INgForwardJQuery; 56 debugElement: INgForwardJQuery;
57 57
58 /** 58 /**
@@ -145,3 +145,4 @@ export function createClass({ @@ -145,3 +145,4 @@ export function createClass({
145 } 145 }
146 return Test; 146 return Test;
147 } 147 }
  148 +
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, Output, EventEmitter, provide, Component} from 'ng-forward'; 4 +import {Injectable, Inject, Provider, Input, provide, Component} from 'ng-forward';
5 5
6 6
7 export var ngforward = { 7 export var ngforward = {
@@ -62,6 +62,7 @@ export function provideFilters(...filters: string[]) { @@ -62,6 +62,7 @@ export function provideFilters(...filters: string[]) {
62 return providers; 62 return providers;
63 } 63 }
64 64
  65 +
65 @Component({ 66 @Component({
66 selector: 'helper_get_angular_service', 67 selector: 'helper_get_angular_service',
67 template: 'not-used', 68 template: 'not-used',
@@ -77,11 +78,9 @@ class AngularServiceHookComponent { @@ -77,11 +78,9 @@ class AngularServiceHookComponent {
77 * This helper class allows get angular services to be used in integration tests 78 * This helper class allows get angular services to be used in integration tests
78 * i.e: '$http', '$q', '$location', etc... 79 * i.e: '$http', '$q', '$location', etc...
79 */ 80 */
80 -export class AngularServiceFactory {  
81 -  
82 - private fixtureComponentHookPoint: ComponentFixture; 81 +class AngularServiceFactory {
83 82
84 - constructor() { 83 + constructor(private fixtureComponentHookPoint: ComponentFixture) {
85 this.fixtureComponentHookPoint = (<any>tcb)["create"](AngularServiceHookComponent); 84 this.fixtureComponentHookPoint = (<any>tcb)["create"](AngularServiceHookComponent);
86 } 85 }
87 86
@@ -98,8 +97,8 @@ export class AngularServiceFactory { @@ -98,8 +97,8 @@ export class AngularServiceFactory {
98 } 97 }
99 } 98 }
100 99
101 -export function getAngularServiceFactory() {  
102 - return new AngularServiceFactory(); 100 +export function getAngularServiceFactory(fixture: ComponentFixture) {
  101 + return new AngularServiceFactory(fixture);
103 } 102 }
104 103
105 export {mocks} from "./mocks"; 104 export {mocks} from "./mocks";
src/spec/mocks.ts
@@ -30,7 +30,7 @@ class ScopeWithEvents { @@ -30,7 +30,7 @@ class ScopeWithEvents {
30 } 30 }
31 } 31 }
32 } 32 }
33 -export var mocks = { 33 +export var mocks: any = {
34 scopeWithEvents: (): ScopeWithEvents => new ScopeWithEvents(), 34 scopeWithEvents: (): ScopeWithEvents => new ScopeWithEvents(),
35 modalInstance: { 35 modalInstance: {
36 close: () => { } 36 close: () => { }
@@ -41,7 +41,38 @@ export var mocks = { @@ -41,7 +41,38 @@ export var mocks = {
41 } 41 }
42 }, 42 },
43 authService: { 43 authService: {
44 - logout: () => { } 44 + loginSuccess: {
  45 + event: Function,
  46 + subscribe: (fn: Function) => {
  47 + mocks.authService['loginSuccess'].event = fn;
  48 + },
  49 + next: (param: any) => {
  50 + mocks.authService['loginSuccess'].event(param);
  51 + }
  52 + },
  53 + loginFailed: {
  54 + event: Function,
  55 + subscribe: (fn: Function) => {
  56 + mocks.authService['loginFailed'].event = fn;
  57 + },
  58 + next: (param: any) => {
  59 + mocks.authService['loginFailed'].event(param);
  60 + }
  61 + },
  62 + logoutSuccess: {
  63 + event: Function,
  64 + subscribe: (fn: Function) => {
  65 + mocks.authService['logoutSuccess'].event = fn;
  66 + },
  67 + next: (param: any) => {
  68 + mocks.authService['logoutSuccess'].event(param);
  69 + }
  70 + },
  71 + logout: () => { },
  72 + subscribe: (eventName: string, fn: Function) => {
  73 + mocks.authService[eventName].subscribe(fn);
  74 + },
  75 + isAuthenticated: () => { }
45 }, 76 },
46 articleService: { 77 articleService: {
47 getByProfile: (profileId: number, params?: any) => { 78 getByProfile: (profileId: number, params?: any) => {