Commit e83eb73f5b8b3b171be4633dabc319d142abb33a
1 parent
232ead7e
Exists in
master
and in
1 other branch
grouping the specs in groups [Services, Components, ...]
Showing
14 changed files
with
543 additions
and
419 deletions
Show diff stats
src/app/components/auth/auth_controller.spec.ts
1 | import {AuthController} from "./auth_controller"; | 1 | import {AuthController} from "./auth_controller"; |
2 | import {AuthService} from "./auth_service"; | 2 | import {AuthService} from "./auth_service"; |
3 | 3 | ||
4 | -describe("AuthController", () => { | 4 | +describe("Controllers", () => { |
5 | 5 | ||
6 | - it("calls authenticate on AuthService when login called", () => { | ||
7 | 6 | ||
8 | - // creating a Mock AuthService | ||
9 | - let AuthServiceMock: AuthService = jasmine.createSpyObj("AuthService", ["login"]); | 7 | + describe("AuthController", () => { |
10 | 8 | ||
11 | - // pass AuthServiceMock into the constructor | ||
12 | - let authController = new AuthController(null, null, null, AuthServiceMock); | 9 | + it("calls authenticate on AuthService when login called", () => { |
13 | 10 | ||
14 | - // setup of authController -> set the credentials instance property | ||
15 | - let credentials = { username: "username", password: "password" }; | 11 | + // creating a Mock AuthService |
12 | + let AuthServiceMock: AuthService = jasmine.createSpyObj("AuthService", ["login"]); | ||
16 | 13 | ||
17 | - authController.credentials = credentials; | 14 | + // pass AuthServiceMock into the constructor |
15 | + let authController = new AuthController(null, null, null, AuthServiceMock); | ||
18 | 16 | ||
19 | - // calls the authController login method | ||
20 | - authController.login(); | 17 | + // setup of authController -> set the credentials instance property |
18 | + let credentials = { username: "username", password: "password" }; | ||
21 | 19 | ||
22 | - // checks if the method login of the injected AuthService has been called | ||
23 | - expect(AuthServiceMock.login).toHaveBeenCalledWith(credentials); | 20 | + authController.credentials = credentials; |
24 | 21 | ||
25 | - }); | ||
26 | - | 22 | + // calls the authController login method |
23 | + authController.login(); | ||
24 | + | ||
25 | + // checks if the method login of the injected AuthService has been called | ||
26 | + expect(AuthServiceMock.login).toHaveBeenCalledWith(credentials); | ||
27 | + | ||
28 | + }); | ||
27 | 29 | ||
28 | -}); | 30 | + |
31 | + | ||
32 | + }); | ||
33 | +}); | ||
29 | \ No newline at end of file | 34 | \ No newline at end of file |
src/app/components/auth/auth_service.spec.ts
@@ -3,75 +3,78 @@ | @@ -3,75 +3,78 @@ | ||
3 | import {AuthService, AUTH_EVENTS} from "./"; | 3 | import {AuthService, AUTH_EVENTS} from "./"; |
4 | import {User, Credentials} from "./../../models/interfaces"; | 4 | import {User, Credentials} from "./../../models/interfaces"; |
5 | 5 | ||
6 | -describe("Auth Service", () => { | 6 | +describe("Services", () => { |
7 | 7 | ||
8 | - let $httpBackend: ng.IHttpBackendService; | ||
9 | - let authService: AuthService; | ||
10 | - let credentials: Credentials; | ||
11 | - let $rootScope: ng.IRootScopeService; | ||
12 | - let user: User; | ||
13 | 8 | ||
14 | - beforeEach(angular.mock.module("noosferoApp")); | 9 | + describe("Auth Service", () => { |
15 | 10 | ||
16 | - beforeEach(inject((_$httpBackend_: ng.IHttpBackendService, _$rootScope_: ng.IRootScopeService, _AuthService_: AuthService) => { | ||
17 | - $httpBackend = _$httpBackend_; | ||
18 | - authService = _AuthService_; | ||
19 | - $rootScope = _$rootScope_; | 11 | + let $httpBackend: ng.IHttpBackendService; |
12 | + let authService: AuthService; | ||
13 | + let credentials: Credentials; | ||
14 | + let $rootScope: ng.IRootScopeService; | ||
15 | + let user: User; | ||
20 | 16 | ||
21 | - user = <User>{ | ||
22 | - id: 1, | ||
23 | - login: "user" | ||
24 | - }; | ||
25 | - })); | 17 | + beforeEach(angular.mock.module("noosferoApp")); |
26 | 18 | ||
19 | + beforeEach(inject((_$httpBackend_: ng.IHttpBackendService, _$rootScope_: ng.IRootScopeService, _AuthService_: AuthService) => { | ||
20 | + $httpBackend = _$httpBackend_; | ||
21 | + authService = _AuthService_; | ||
22 | + $rootScope = _$rootScope_; | ||
27 | 23 | ||
28 | - describe("Succesffull login", () => { | 24 | + user = <User>{ |
25 | + id: 1, | ||
26 | + login: "user" | ||
27 | + }; | ||
28 | + })); | ||
29 | 29 | ||
30 | - beforeEach(() => { | ||
31 | - credentials = { username: "user", password: "password" }; | ||
32 | 30 | ||
33 | - $httpBackend.expectPOST("/api/v1/login", "login=user&password=password").respond(200, { user: user }); | ||
34 | - }); | 31 | + describe("Succesffull login", () => { |
32 | + | ||
33 | + beforeEach(() => { | ||
34 | + credentials = { username: "user", password: "password" }; | ||
35 | 35 | ||
36 | - it("should return loggedUser", (done) => { | ||
37 | - authService.login(credentials).then((loggedUser) => { | ||
38 | - expect(loggedUser).toBeDefined(); | ||
39 | - done(); | 36 | + $httpBackend.expectPOST("/api/v1/login", "login=user&password=password").respond(200, { user: user }); |
40 | }); | 37 | }); |
41 | - $httpBackend.flush(); | ||
42 | - expect($httpBackend.verifyNoOutstandingRequest()); | ||
43 | - }); | ||
44 | 38 | ||
39 | + it("should return loggedUser", (done) => { | ||
40 | + authService.login(credentials).then((loggedUser) => { | ||
41 | + expect(loggedUser).toBeDefined(); | ||
42 | + done(); | ||
43 | + }); | ||
44 | + $httpBackend.flush(); | ||
45 | + expect($httpBackend.verifyNoOutstandingRequest()); | ||
46 | + }); | ||
47 | + | ||
48 | + | ||
49 | + it("should emit event loggin successful with user logged data", () => { | ||
50 | + | ||
51 | + authService.login(credentials); | ||
45 | 52 | ||
46 | - it("should emit event loggin successful with user logged data", () => { | 53 | + let eventEmmited: boolean = false; |
54 | + $rootScope.$on(AUTH_EVENTS.loginSuccess, (event: ng.IAngularEvent, userThroughEvent: User) => { | ||
55 | + eventEmmited = true; | ||
56 | + expect(userThroughEvent).toEqual(user) | ||
57 | + }); | ||
47 | 58 | ||
48 | - authService.login(credentials); | 59 | + $httpBackend.flush(); |
49 | 60 | ||
50 | - let eventEmmited: boolean = false; | ||
51 | - $rootScope.$on(AUTH_EVENTS.loginSuccess, (event: ng.IAngularEvent, userThroughEvent: User) => { | ||
52 | - eventEmmited = true; | ||
53 | - expect(userThroughEvent).toEqual(user) | 61 | + expect(eventEmmited).toBeTruthy(AUTH_EVENTS.loginSuccess + " was not emmited!"); |
54 | }); | 62 | }); |
55 | 63 | ||
56 | - $httpBackend.flush(); | 64 | + it("should return the current logged in user", () => { |
65 | + authService.login(credentials); | ||
66 | + $httpBackend.flush(); | ||
67 | + let actual: User = authService.currentUser(); | ||
68 | + expect(actual).toEqual(user, "The returned user must be present"); | ||
69 | + }); | ||
57 | 70 | ||
58 | - expect(eventEmmited).toBeTruthy(AUTH_EVENTS.loginSuccess + " was not emmited!"); | ||
59 | - }); | ||
60 | - | ||
61 | - it("should return the current logged in user", () => { | ||
62 | - authService.login(credentials); | ||
63 | - $httpBackend.flush(); | ||
64 | - let actual: User = authService.currentUser(); | ||
65 | - expect(actual).toEqual(user, "The returned user must be present"); | 71 | + it("should not return the current user after logout", () => { |
72 | + authService.logout(); | ||
73 | + let actual: any = authService.currentUser(); | ||
74 | + expect(actual).toEqual(undefined, "The returned user must not be defined"); | ||
75 | + }); | ||
66 | }); | 76 | }); |
67 | 77 | ||
68 | - it("should not return the current user after logout", () => { | ||
69 | - authService.logout(); | ||
70 | - let actual: any = authService.currentUser(); | ||
71 | - expect(actual).toEqual(undefined, "The returned user must not be defined"); | ||
72 | - }); | ||
73 | - }); | ||
74 | - | ||
75 | 78 | ||
76 | -}); | ||
77 | - | ||
78 | \ No newline at end of file | 79 | \ No newline at end of file |
80 | + }); | ||
81 | +}); | ||
79 | \ No newline at end of file | 82 | \ No newline at end of file |
src/app/components/auth/auth_service.ts
@@ -55,7 +55,7 @@ export class AuthService { | @@ -55,7 +55,7 @@ export class AuthService { | ||
55 | public isAuthenticated() { | 55 | public isAuthenticated() { |
56 | return !!this.session.currentUser(); | 56 | return !!this.session.currentUser(); |
57 | } | 57 | } |
58 | - | 58 | + |
59 | public currentUser(): User { | 59 | public currentUser(): User { |
60 | return this.session.currentUser(); | 60 | return this.session.currentUser(); |
61 | } | 61 | } |
@@ -0,0 +1,49 @@ | @@ -0,0 +1,49 @@ | ||
1 | +import {Component} from "ng-forward"; | ||
2 | +import {Session} from "./"; | ||
3 | +import {fixtures, createComponentFromClass, createProviderToValue} from "./../../../spec/helpers"; | ||
4 | +import {UserResponse, User, INoosferoLocalStorage} from "./../../models/interfaces"; | ||
5 | + | ||
6 | + | ||
7 | +describe("Services", () => { | ||
8 | + | ||
9 | + | ||
10 | + describe("Session Service", () => { | ||
11 | + | ||
12 | + let $localStorage: INoosferoLocalStorage = null; | ||
13 | + let $log: any; | ||
14 | + | ||
15 | + beforeEach(() => { | ||
16 | + $localStorage = <INoosferoLocalStorage>{ currentUser: null }; | ||
17 | + $log = jasmine.createSpyObj('$log', ['debug']); | ||
18 | + }); | ||
19 | + | ||
20 | + it("method 'create()' saves the current user on $localstorage service", () => { | ||
21 | + let session = new Session($localStorage, $log); | ||
22 | + let userResponse = <UserResponse>{ | ||
23 | + user: fixtures.user | ||
24 | + }; | ||
25 | + session.create(userResponse); | ||
26 | + expect($localStorage.currentUser).toEqual(userResponse.user); | ||
27 | + }); | ||
28 | + | ||
29 | + it("method 'destroy()' clean the currentUser on $localstorage", () => { | ||
30 | + let session = new Session($localStorage, $log); | ||
31 | + let userResponse = <UserResponse>{ | ||
32 | + user: fixtures.user | ||
33 | + }; | ||
34 | + $localStorage.currentUser = fixtures.user; | ||
35 | + session.destroy(); | ||
36 | + expect($localStorage.currentUser).toBeUndefined(); | ||
37 | + }); | ||
38 | + | ||
39 | + it("method 'currentUser()' returns the user recorded on $localstorage service", () => { | ||
40 | + let session = new Session($localStorage, $log); | ||
41 | + let userResponse = <UserResponse>{ | ||
42 | + user: fixtures.user | ||
43 | + }; | ||
44 | + $localStorage.currentUser = fixtures.user; | ||
45 | + expect(session.currentUser()).toEqual($localStorage.currentUser); | ||
46 | + }); | ||
47 | + }); | ||
48 | + | ||
49 | +}); | ||
0 | \ No newline at end of file | 50 | \ No newline at end of file |
src/app/components/navbar/navbar.spec.ts
1 | -import {createComponentFromClass, quickCreateComponent} from "./../../../spec/helpers"; | ||
2 | -import {Navbar} from "./"; | ||
3 | -import {AUTH_EVENTS} from "./../auth"; | ||
4 | -import {User} from "./../../models/interfaces"; | ||
5 | -import {Injectable, Provider, provide} from "ng-forward"; | 1 | +import { |
2 | +createComponentFromClass, | ||
3 | +quickCreateComponent, | ||
4 | +provideEmptyObjects | ||
5 | +} from "./../../../spec/helpers"; | ||
6 | +import { | ||
7 | +Navbar | ||
8 | +} from "./"; | ||
9 | +import { | ||
10 | +AUTH_EVENTS | ||
11 | +} from "./../auth"; | ||
12 | +import { | ||
13 | +User | ||
14 | +} from "./../../models/interfaces"; | ||
15 | +import { | ||
16 | +Injectable, | ||
17 | +Provider, | ||
18 | +provide | ||
19 | +} from "ng-forward"; | ||
6 | 20 | ||
7 | 21 | ||
22 | +describe("Components", () => { | ||
8 | 23 | ||
9 | -describe("Navbar Component", () => { | ||
10 | 24 | ||
11 | - let $rootScope: ng.IRootScopeService; | ||
12 | - let user = <User>{ | ||
13 | - id: 1, | ||
14 | - login: "user" | ||
15 | - }; | 25 | + describe("Navbar Component", () => { |
16 | 26 | ||
17 | - beforeEach(angular.mock.module("templates")); | 27 | + let $rootScope: ng.IRootScopeService; |
28 | + let user = <User>{ | ||
29 | + id: 1, | ||
30 | + login: "user" | ||
31 | + }; | ||
18 | 32 | ||
19 | - // beforeEach(inject((_$rootScope_: ng.IRootScopeService) => { | ||
20 | - // $rootScope = _$rootScope_; | ||
21 | - // })); | 33 | + beforeEach(angular.mock.module("templates")); |
22 | 34 | ||
23 | - it('should get the loggedIn user', (done: Function) => { | 35 | + // beforeEach(inject((_$rootScope_: ng.IRootScopeService) => { |
36 | + // $rootScope = _$rootScope_; | ||
37 | + // })); | ||
24 | 38 | ||
25 | - let scope = jasmine.createSpyObj("scope", ["$on"]); | 39 | + it('should get the loggedIn user', (done: Function) => { |
26 | 40 | ||
27 | - let providers = [ | 41 | + let scope = jasmine.createSpyObj("scope", ["$on"]); |
28 | 42 | ||
43 | + let providers = [ | ||
44 | + provideEmptyObjects('moment', '$modal', 'AuthService', '$state'), | ||
45 | + new Provider('Session', { | ||
46 | + useValue: { | ||
47 | + currentUser: () => { | ||
48 | + return user; | ||
49 | + } | ||
50 | + } | ||
51 | + }), | ||
52 | + new Provider('$scope', { | ||
53 | + useValue: scope | ||
54 | + }), | ||
55 | + new Provider('AUTH_EVENTS', { | ||
56 | + useValue: { | ||
57 | + AUTH_EVENTS | ||
58 | + } | ||
59 | + }) | ||
60 | + ]; | ||
29 | 61 | ||
30 | - new Provider('moment', { useValue: {} }), | ||
31 | - new Provider('$modal', { useValue: {} }), | ||
32 | - new Provider('AuthService', { useValue: {} }), | ||
33 | - new Provider('Session', { useValue: { | ||
34 | - currentUser: () => { return user; } | ||
35 | - } }), | ||
36 | - new Provider('$scope', { useValue: scope }), | ||
37 | - new Provider('$state', { useValue: {} }), | ||
38 | - new Provider('AUTH_EVENTS', { useValue: {AUTH_EVENTS} }) | ||
39 | - ]; | ||
40 | 62 | ||
41 | - | ||
42 | - quickCreateComponent({ | ||
43 | - providers: providers, | ||
44 | - template: "<acme-navbar></acme-navbar>", | ||
45 | - directives: [Navbar] | ||
46 | - }).then(fixture => { | ||
47 | - let navbarInstance: Navbar = fixture.debugElement.componentViewChildren[0].componentInstance; | ||
48 | - expect(navbarInstance).toBeDefined(); | ||
49 | - expect(navbarInstance["currentUser"]).toEqual(user) | ||
50 | - done(); | 63 | + quickCreateComponent({ |
64 | + providers: providers, | ||
65 | + template: "<acme-navbar></acme-navbar>", | ||
66 | + directives: [Navbar] | ||
67 | + }).then(fixture => { | ||
68 | + let navbarInstance: Navbar = fixture.debugElement.componentViewChildren[0].componentInstance; | ||
69 | + expect(navbarInstance).toBeDefined(); | ||
70 | + expect(navbarInstance["currentUser"]).toEqual(user) | ||
71 | + done(); | ||
72 | + }); | ||
51 | }); | 73 | }); |
52 | - }); | ||
53 | 74 | ||
75 | + }); | ||
54 | }); | 76 | }); |
55 | \ No newline at end of file | 77 | \ No newline at end of file |
src/app/components/noosfero-articles/article/article_view.spec.ts
@@ -8,98 +8,101 @@ import {createComponentFromClass, quickCreateComponent} from "../../../../spec/h | @@ -8,98 +8,101 @@ import {createComponentFromClass, quickCreateComponent} from "../../../../spec/h | ||
8 | const htmlTemplate: string = '<noosfero-article [article]="ctrl.article" [profile]="ctrl.profile"></noosfero-article>'; | 8 | const htmlTemplate: string = '<noosfero-article [article]="ctrl.article" [profile]="ctrl.profile"></noosfero-article>'; |
9 | 9 | ||
10 | 10 | ||
11 | -describe("ArticleView Component", () => { | ||
12 | - | ||
13 | - // the karma preprocessor html2js transform the templates html into js files which put | ||
14 | - // the templates to the templateCache into the module templates | ||
15 | - // we need to load the module templates here as the template for the | ||
16 | - // component Noosfero ArtileView will be load on our tests | ||
17 | - beforeEach(angular.mock.module("templates")); | ||
18 | - | ||
19 | - it("renders the default component when no specific component is found", (done: Function) => { | ||
20 | - // Creating a container component (ArticleContainerComponent) to include | ||
21 | - // the component under test (ArticleView) | ||
22 | - @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [ArticleView] }) | ||
23 | - class ArticleContainerComponent { | ||
24 | - article = { type: 'anyArticleType' }; | ||
25 | - profile = { name: 'profile-name' }; | ||
26 | - constructor() { | 11 | +describe("Components", () => { |
12 | + | ||
13 | + describe("ArticleView Component", () => { | ||
14 | + | ||
15 | + // the karma preprocessor html2js transform the templates html into js files which put | ||
16 | + // the templates to the templateCache into the module templates | ||
17 | + // we need to load the module templates here as the template for the | ||
18 | + // component Noosfero ArtileView will be load on our tests | ||
19 | + beforeEach(angular.mock.module("templates")); | ||
20 | + | ||
21 | + it("renders the default component when no specific component is found", (done: Function) => { | ||
22 | + // Creating a container component (ArticleContainerComponent) to include | ||
23 | + // the component under test (ArticleView) | ||
24 | + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [ArticleView] }) | ||
25 | + class ArticleContainerComponent { | ||
26 | + article = { type: 'anyArticleType' }; | ||
27 | + profile = { name: 'profile-name' }; | ||
28 | + constructor() { | ||
29 | + } | ||
27 | } | 30 | } |
28 | - } | ||
29 | 31 | ||
30 | - createComponentFromClass(ArticleContainerComponent).then((fixture) => { | ||
31 | - // and here we can inspect and run the test assertions | 32 | + createComponentFromClass(ArticleContainerComponent).then((fixture) => { |
33 | + // and here we can inspect and run the test assertions | ||
32 | 34 | ||
33 | - // gets the children component of ArticleContainerComponent | ||
34 | - let articleView: ArticleView = fixture.debugElement.componentViewChildren[0].componentInstance; | 35 | + // gets the children component of ArticleContainerComponent |
36 | + let articleView: ArticleView = fixture.debugElement.componentViewChildren[0].componentInstance; | ||
35 | 37 | ||
36 | - // and checks if the article View rendered was the Default Article View | ||
37 | - expect(articleView.constructor.prototype).toEqual(ArticleDefaultView.prototype); | 38 | + // and checks if the article View rendered was the Default Article View |
39 | + expect(articleView.constructor.prototype).toEqual(ArticleDefaultView.prototype); | ||
38 | 40 | ||
39 | - // done needs to be called (it isn't really needed, as we can read in | ||
40 | - // here (https://github.com/ngUpgraders/ng-forward/blob/master/API.md#createasync) | ||
41 | - // because createAsync in ng-forward is not really async, but as the intention | ||
42 | - // here is write tests in angular 2 ways, this is recommended | ||
43 | - done(); | ||
44 | - }); | 41 | + // done needs to be called (it isn't really needed, as we can read in |
42 | + // here (https://github.com/ngUpgraders/ng-forward/blob/master/API.md#createasync) | ||
43 | + // because createAsync in ng-forward is not really async, but as the intention | ||
44 | + // here is write tests in angular 2 ways, this is recommended | ||
45 | + done(); | ||
46 | + }); | ||
45 | 47 | ||
46 | - }); | 48 | + }); |
47 | 49 | ||
48 | - it("receives the article and profile as inputs", (done: Function) => { | 50 | + it("receives the article and profile as inputs", (done: Function) => { |
49 | 51 | ||
50 | - // Creating a container component (ArticleContainerComponent) to include | ||
51 | - // the component under test (ArticleView) | ||
52 | - @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [ArticleView] }) | ||
53 | - class ArticleContainerComponent { | ||
54 | - article = { type: 'anyArticleType' }; | ||
55 | - profile = { name: 'profile-name' }; | ||
56 | - constructor() { | 52 | + // Creating a container component (ArticleContainerComponent) to include |
53 | + // the component under test (ArticleView) | ||
54 | + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [ArticleView] }) | ||
55 | + class ArticleContainerComponent { | ||
56 | + article = { type: 'anyArticleType' }; | ||
57 | + profile = { name: 'profile-name' }; | ||
58 | + constructor() { | ||
59 | + } | ||
57 | } | 60 | } |
58 | - } | ||
59 | - | ||
60 | - // uses the TestComponentBuilder instance to initialize the component | ||
61 | - createComponentFromClass(ArticleContainerComponent).then((fixture) => { | ||
62 | - // and here we can inspect and run the test assertions | ||
63 | - let articleView: ArticleView = fixture.debugElement.componentViewChildren[0].componentInstance; | ||
64 | - | ||
65 | - // assure the article object inside the ArticleView matches | ||
66 | - // the provided through the parent component | ||
67 | - expect(articleView.article.type).toEqual("anyArticleType"); | ||
68 | - expect(articleView.profile.name).toEqual("profile-name"); | ||
69 | - | ||
70 | - // done needs to be called (it isn't really needed, as we can read in | ||
71 | - // here (https://github.com/ngUpgraders/ng-forward/blob/master/API.md#createasync) | ||
72 | - // because createAsync in ng-forward is not really async, but as the intention | ||
73 | - // here is write tests in angular 2 ways, this is recommended | ||
74 | - done(); | 61 | + |
62 | + // uses the TestComponentBuilder instance to initialize the component | ||
63 | + createComponentFromClass(ArticleContainerComponent).then((fixture) => { | ||
64 | + // and here we can inspect and run the test assertions | ||
65 | + let articleView: ArticleView = fixture.debugElement.componentViewChildren[0].componentInstance; | ||
66 | + | ||
67 | + // assure the article object inside the ArticleView matches | ||
68 | + // the provided through the parent component | ||
69 | + expect(articleView.article.type).toEqual("anyArticleType"); | ||
70 | + expect(articleView.profile.name).toEqual("profile-name"); | ||
71 | + | ||
72 | + // done needs to be called (it isn't really needed, as we can read in | ||
73 | + // here (https://github.com/ngUpgraders/ng-forward/blob/master/API.md#createasync) | ||
74 | + // because createAsync in ng-forward is not really async, but as the intention | ||
75 | + // here is write tests in angular 2 ways, this is recommended | ||
76 | + done(); | ||
77 | + }); | ||
75 | }); | 78 | }); |
76 | - }); | ||
77 | 79 | ||
78 | 80 | ||
79 | - it("renders a article view which matches to the article type", done => { | ||
80 | - // NoosferoTinyMceArticle component created to check if it will be used | ||
81 | - // when a article with type 'TinyMceArticle' is provided to the noosfero-article (ArticleView) | ||
82 | - // *** Important *** - the selector is what ng-forward uses to define the name of the directive provider | ||
83 | - @Component({ selector: 'noosfero-tiny-mce-article', template: "<h1>TinyMceArticle</h1>" }) | ||
84 | - class TinyMceArticleView { | ||
85 | - @Input() article: any; | ||
86 | - @Input() profile: any; | ||
87 | - } | ||
88 | - | ||
89 | - // Creating a container component (ArticleContainerComponent) to include our NoosferoTinyMceArticle | ||
90 | - @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [ArticleView, TinyMceArticleView] }) | ||
91 | - class CustomArticleType { | ||
92 | - article = { type: 'TinyMceArticle' }; | ||
93 | - profile = { name: 'profile-name' }; | ||
94 | - constructor() { | 81 | + it("renders a article view which matches to the article type", done => { |
82 | + // NoosferoTinyMceArticle component created to check if it will be used | ||
83 | + // when a article with type 'TinyMceArticle' is provided to the noosfero-article (ArticleView) | ||
84 | + // *** Important *** - the selector is what ng-forward uses to define the name of the directive provider | ||
85 | + @Component({ selector: 'noosfero-tiny-mce-article', template: "<h1>TinyMceArticle</h1>" }) | ||
86 | + class TinyMceArticleView { | ||
87 | + @Input() article: any; | ||
88 | + @Input() profile: any; | ||
95 | } | 89 | } |
96 | - } | ||
97 | - createComponentFromClass(CustomArticleType).then(fixture => { | ||
98 | - let myComponent: CustomArticleType = fixture.componentInstance; | ||
99 | - expect(myComponent.article.type).toEqual("TinyMceArticle"); | ||
100 | - expect(fixture.debugElement.componentViewChildren[0].text()).toEqual("TinyMceArticle"); | ||
101 | - done(); | 90 | + |
91 | + // Creating a container component (ArticleContainerComponent) to include our NoosferoTinyMceArticle | ||
92 | + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [ArticleView, TinyMceArticleView] }) | ||
93 | + class CustomArticleType { | ||
94 | + article = { type: 'TinyMceArticle' }; | ||
95 | + profile = { name: 'profile-name' }; | ||
96 | + constructor() { | ||
97 | + } | ||
98 | + } | ||
99 | + createComponentFromClass(CustomArticleType).then(fixture => { | ||
100 | + let myComponent: CustomArticleType = fixture.componentInstance; | ||
101 | + expect(myComponent.article.type).toEqual("TinyMceArticle"); | ||
102 | + expect(fixture.debugElement.componentViewChildren[0].text()).toEqual("TinyMceArticle"); | ||
103 | + done(); | ||
104 | + }); | ||
102 | }); | 105 | }); |
103 | - }); | ||
104 | 106 | ||
107 | + }); | ||
105 | }); | 108 | }); |
106 | \ No newline at end of file | 109 | \ No newline at end of file |
src/app/components/noosfero-blocks/block.component.spec.ts
@@ -7,84 +7,85 @@ const tcb = new TestComponentBuilder(); | @@ -7,84 +7,85 @@ const tcb = new TestComponentBuilder(); | ||
7 | 7 | ||
8 | const htmlTemplate: string = '<noosfero-block [block]="ctrl.block" [owner]="ctrl.owner"></noosfero-block>'; | 8 | const htmlTemplate: string = '<noosfero-block [block]="ctrl.block" [owner]="ctrl.owner"></noosfero-block>'; |
9 | 9 | ||
10 | - | ||
11 | -describe("Block Component", () => { | ||
12 | - | ||
13 | - // the karma preprocessor html2js transform the templates html into js files which put | ||
14 | - // the templates to the templateCache into the module templates | ||
15 | - // we need to load the module templates here as the template for the | ||
16 | - // component Block will be load on our tests | ||
17 | - beforeEach(angular.mock.module("templates")); | ||
18 | - | ||
19 | - it("receives the block and the owner as inputs", done => { | ||
20 | - | ||
21 | - // Creating a container component (BlockContainerComponent) to include | ||
22 | - // the component under test (Block) | ||
23 | - @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [Block] }) | ||
24 | - class BlockContainerComponent { | ||
25 | - block = { type: 'Block' }; | ||
26 | - owner = { name: 'profile-name' }; | ||
27 | - constructor() { | 10 | +describe("Components", () => { |
11 | + describe("Block Component", () => { | ||
12 | + | ||
13 | + // the karma preprocessor html2js transform the templates html into js files which put | ||
14 | + // the templates to the templateCache into the module templates | ||
15 | + // we need to load the module templates here as the template for the | ||
16 | + // component Block will be load on our tests | ||
17 | + beforeEach(angular.mock.module("templates")); | ||
18 | + | ||
19 | + it("receives the block and the owner as inputs", done => { | ||
20 | + | ||
21 | + // Creating a container component (BlockContainerComponent) to include | ||
22 | + // the component under test (Block) | ||
23 | + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [Block] }) | ||
24 | + class BlockContainerComponent { | ||
25 | + block = { type: 'Block' }; | ||
26 | + owner = { name: 'profile-name' }; | ||
27 | + constructor() { | ||
28 | + } | ||
28 | } | 29 | } |
29 | - } | ||
30 | - | ||
31 | - // uses the TestComponentBuilder instance to initialize the component | ||
32 | - tcb | ||
33 | - .createAsync(BlockContainerComponent).then(fixture => { | ||
34 | - // and here we can inspect and run the test assertions | ||
35 | - let myComponent: Block = fixture.componentInstance; | ||
36 | - | ||
37 | - // assure the block object inside the Block matches | ||
38 | - // the provided through the parent component | ||
39 | - expect(myComponent.block.type).toEqual("Block"); | ||
40 | - expect(myComponent.owner.name).toEqual("profile-name"); | ||
41 | - done(); | ||
42 | - }); | ||
43 | - }); | ||
44 | 30 | ||
45 | - | ||
46 | - it("renders a component which matches to the block type", done => { | ||
47 | - // CustomBlock component created to check if it will be used | ||
48 | - // when a block with type 'CustomBlock' is provided to the noosfero-block (Block) | ||
49 | - // *** Important *** - the selector is what ng-forward uses to define the name of the directive provider | ||
50 | - @Component({ selector: 'noosfero-custom-block', template: "<h1>My Custom Block</h1>" }) | ||
51 | - class CustomBlock { | ||
52 | - @Input() block: any; | ||
53 | - @Input() owner: any; | ||
54 | - } | ||
55 | - | ||
56 | - @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [Block, CustomBlock] }) | ||
57 | - class CustomBlockType { | ||
58 | - block = { type: 'CustomBlock' }; | ||
59 | - owner = { name: 'profile-name' }; | ||
60 | - constructor() { | 31 | + // uses the TestComponentBuilder instance to initialize the component |
32 | + tcb | ||
33 | + .createAsync(BlockContainerComponent).then(fixture => { | ||
34 | + // and here we can inspect and run the test assertions | ||
35 | + let myComponent: Block = fixture.componentInstance; | ||
36 | + | ||
37 | + // assure the block object inside the Block matches | ||
38 | + // the provided through the parent component | ||
39 | + expect(myComponent.block.type).toEqual("Block"); | ||
40 | + expect(myComponent.owner.name).toEqual("profile-name"); | ||
41 | + done(); | ||
42 | + }); | ||
43 | + }); | ||
44 | + | ||
45 | + | ||
46 | + it("renders a component which matches to the block type", done => { | ||
47 | + // CustomBlock component created to check if it will be used | ||
48 | + // when a block with type 'CustomBlock' is provided to the noosfero-block (Block) | ||
49 | + // *** Important *** - the selector is what ng-forward uses to define the name of the directive provider | ||
50 | + @Component({ selector: 'noosfero-custom-block', template: "<h1>My Custom Block</h1>" }) | ||
51 | + class CustomBlock { | ||
52 | + @Input() block: any; | ||
53 | + @Input() owner: any; | ||
61 | } | 54 | } |
62 | - } | ||
63 | - tcb | ||
64 | - .createAsync(CustomBlockType).then(fixture => { | ||
65 | - let myComponent: CustomBlockType = fixture.componentInstance; | ||
66 | - expect(myComponent.block.type).toEqual("CustomBlock"); | ||
67 | - expect(fixture.debugElement.componentViewChildren[0].text()).toEqual("My Custom Block"); | ||
68 | - done(); | ||
69 | - }); | ||
70 | - }); | ||
71 | - | ||
72 | 55 | ||
73 | - it("renders the default block when hasn't defined a block type", done => { | ||
74 | - @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [Block] }) | ||
75 | - class CustomBlockType { | ||
76 | - block: any = { type: null }; | ||
77 | - owner: any = { name: 'profile-name' }; | ||
78 | - constructor() { | 56 | + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [Block, CustomBlock] }) |
57 | + class CustomBlockType { | ||
58 | + block = { type: 'CustomBlock' }; | ||
59 | + owner = { name: 'profile-name' }; | ||
60 | + constructor() { | ||
61 | + } | ||
79 | } | 62 | } |
80 | - } | ||
81 | - tcb | ||
82 | - .createAsync(CustomBlockType).then(fixture => { | ||
83 | - let myComponent: CustomBlockType = fixture.componentInstance; | ||
84 | - expect(myComponent.block.type).toBeNull(); | ||
85 | - expect(!!fixture.debugElement.nativeElement.querySelector("noosfero-default-block")).toBeTruthy(); | ||
86 | - done(); | ||
87 | - }); | ||
88 | - }); | 63 | + tcb |
64 | + .createAsync(CustomBlockType).then(fixture => { | ||
65 | + let myComponent: CustomBlockType = fixture.componentInstance; | ||
66 | + expect(myComponent.block.type).toEqual("CustomBlock"); | ||
67 | + expect(fixture.debugElement.componentViewChildren[0].text()).toEqual("My Custom Block"); | ||
68 | + done(); | ||
69 | + }); | ||
70 | + }); | ||
71 | + | ||
72 | + | ||
73 | + it("renders the default block when hasn't defined a block type", done => { | ||
74 | + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [Block] }) | ||
75 | + class CustomBlockType { | ||
76 | + block: any = { type: null }; | ||
77 | + owner: any = { name: 'profile-name' }; | ||
78 | + constructor() { | ||
79 | + } | ||
80 | + } | ||
81 | + tcb | ||
82 | + .createAsync(CustomBlockType).then(fixture => { | ||
83 | + let myComponent: CustomBlockType = fixture.componentInstance; | ||
84 | + expect(myComponent.block.type).toBeNull(); | ||
85 | + expect(!!fixture.debugElement.nativeElement.querySelector("noosfero-default-block")).toBeTruthy(); | ||
86 | + done(); | ||
87 | + }); | ||
88 | + }); | ||
89 | 89 | ||
90 | -}); | 90 | + }); |
91 | +}); | ||
91 | \ No newline at end of file | 92 | \ No newline at end of file |
src/app/components/noosfero-blocks/link-list/link-list.component.spec.ts
@@ -9,53 +9,57 @@ const tcb = new TestComponentBuilder(); | @@ -9,53 +9,57 @@ const tcb = new TestComponentBuilder(); | ||
9 | const htmlTemplate: string = '<noosfero-link-list-block [block]="ctrl.block" [owner]="ctrl.owner"></noosfero-link-list-block>'; | 9 | const htmlTemplate: string = '<noosfero-link-list-block [block]="ctrl.block" [owner]="ctrl.owner"></noosfero-link-list-block>'; |
10 | 10 | ||
11 | 11 | ||
12 | -describe("Link List Block Component", () => { | 12 | +describe("Components", () => { |
13 | 13 | ||
14 | - beforeEach(angular.mock.module("templates")); | 14 | + describe("Link List Block Component", () => { |
15 | 15 | ||
16 | - it("receives the block and the owner as inputs", done => { | 16 | + beforeEach(angular.mock.module("templates")); |
17 | 17 | ||
18 | - // Creating a container component (BlockContainerComponent) to include | ||
19 | - // the component under test (Block) | ||
20 | - @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [LinkListBlock] }) | ||
21 | - class BlockContainerComponent { | ||
22 | - block = { type: 'Block' }; | ||
23 | - owner = { name: 'profile-name' }; | ||
24 | - constructor() { | 18 | + it("receives the block and the owner as inputs", done => { |
19 | + | ||
20 | + // Creating a container component (BlockContainerComponent) to include | ||
21 | + // the component under test (Block) | ||
22 | + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [LinkListBlock] }) | ||
23 | + class BlockContainerComponent { | ||
24 | + block = { type: 'Block' }; | ||
25 | + owner = { name: 'profile-name' }; | ||
26 | + constructor() { | ||
27 | + } | ||
25 | } | 28 | } |
26 | - } | ||
27 | - | ||
28 | - // uses the TestComponentBuilder instance to initialize the component | ||
29 | - //.overrideView(LinkListBlock, { template: 'asdasdasd', pipes: [NoosferoTemplate] }) | ||
30 | - tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
31 | - // and here we can inspect and run the test assertions | ||
32 | - let myComponent: LinkListBlock = fixture.componentInstance; | ||
33 | - | ||
34 | - // assure the block object inside the Block matches | ||
35 | - // the provided through the parent component | ||
36 | - expect(myComponent.block.type).toEqual("Block"); | ||
37 | - expect(myComponent.owner.name).toEqual("profile-name"); | ||
38 | - done(); | 29 | + |
30 | + // uses the TestComponentBuilder instance to initialize the component | ||
31 | + //.overrideView(LinkListBlock, { template: 'asdasdasd', pipes: [NoosferoTemplate] }) | ||
32 | + tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
33 | + // and here we can inspect and run the test assertions | ||
34 | + let myComponent: LinkListBlock = fixture.componentInstance; | ||
35 | + | ||
36 | + // assure the block object inside the Block matches | ||
37 | + // the provided through the parent component | ||
38 | + expect(myComponent.block.type).toEqual("Block"); | ||
39 | + expect(myComponent.owner.name).toEqual("profile-name"); | ||
40 | + done(); | ||
41 | + }); | ||
39 | }); | 42 | }); |
40 | - }); | ||
41 | 43 | ||
42 | 44 | ||
43 | - it("display links stored in block settings", done => { | ||
44 | - | ||
45 | - @Component({ | ||
46 | - selector: 'test-container-component', | ||
47 | - template: htmlTemplate, | ||
48 | - directives: [LinkListBlock], | ||
49 | - providers: provideFilters("noosferoTemplateFilter") | ||
50 | - }) | ||
51 | - class CustomBlockType { | ||
52 | - block: any = { settings: { links: [{ name: 'link1', address: 'address1' }, { name: 'link2', address: 'address2' }] } }; | ||
53 | - owner: any = { name: 'profile-name' }; | ||
54 | - } | ||
55 | - tcb.createAsync(CustomBlockType).then(fixture => { | ||
56 | - expect(fixture.debugElement.queryAll(".link-list-block a").length).toEqual(2); | ||
57 | - done(); | 45 | + it("display links stored in block settings", done => { |
46 | + | ||
47 | + @Component({ | ||
48 | + selector: 'test-container-component', | ||
49 | + template: htmlTemplate, | ||
50 | + directives: [LinkListBlock], | ||
51 | + providers: provideFilters("noosferoTemplateFilter") | ||
52 | + }) | ||
53 | + class CustomBlockType { | ||
54 | + block: any = { settings: { links: [{ name: 'link1', address: 'address1' }, { name: 'link2', address: 'address2' }] } }; | ||
55 | + owner: any = { name: 'profile-name' }; | ||
56 | + } | ||
57 | + tcb.createAsync(CustomBlockType).then(fixture => { | ||
58 | + expect(fixture.debugElement.queryAll(".link-list-block a").length).toEqual(2); | ||
59 | + done(); | ||
60 | + }); | ||
58 | }); | 61 | }); |
62 | + | ||
59 | }); | 63 | }); |
60 | 64 | ||
61 | -}); | 65 | -}); |
66 | +}); | ||
62 | \ No newline at end of file | 67 | \ No newline at end of file |
src/app/components/noosfero-blocks/main-block/main-block.component.spec.ts
@@ -8,33 +8,34 @@ const tcb = new TestComponentBuilder(); | @@ -8,33 +8,34 @@ const tcb = new TestComponentBuilder(); | ||
8 | 8 | ||
9 | const htmlTemplate: string = '<noosfero-main-block [block]="ctrl.block" [owner]="ctrl.owner"></noosfero-main-block>'; | 9 | const htmlTemplate: string = '<noosfero-main-block [block]="ctrl.block" [owner]="ctrl.owner"></noosfero-main-block>'; |
10 | 10 | ||
11 | - | ||
12 | -describe("Main Block Component", () => { | ||
13 | - | ||
14 | - // the karma preprocessor html2js transform the templates html into js files which put | ||
15 | - // the templates to the templateCache into the module templates | ||
16 | - // we need to load the module templates here as the template for the | ||
17 | - // component Block will be load on our tests | ||
18 | - beforeEach(angular.mock.module("templates")); | ||
19 | - | ||
20 | - it("check if the main block has a tag with ui-view attribute", done => { | ||
21 | - | ||
22 | - // Creating a container component (BlockContainerComponent) to include | ||
23 | - // the component under test (Block) | ||
24 | - @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [MainBlock] }) | ||
25 | - class BlockContainerComponent { | ||
26 | - } | ||
27 | - | ||
28 | - // uses the TestComponentBuilder instance to initialize the component | ||
29 | - tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
30 | - // and here we can inspect and run the test assertions | ||
31 | - //let myComponent: MainBlock = fixture.componentInstance; | ||
32 | - | ||
33 | - // assure the block object inside the Block matches | ||
34 | - // the provided through the parent component | ||
35 | - expect(fixture.debugElement.queryAll('[ui-view="mainBlockContent"]').length).toEqual(1) | ||
36 | - done(); | 11 | +describe("Components", () => { |
12 | + describe("Main Block Component", () => { | ||
13 | + | ||
14 | + // the karma preprocessor html2js transform the templates html into js files which put | ||
15 | + // the templates to the templateCache into the module templates | ||
16 | + // we need to load the module templates here as the template for the | ||
17 | + // component Block will be load on our tests | ||
18 | + beforeEach(angular.mock.module("templates")); | ||
19 | + | ||
20 | + it("check if the main block has a tag with ui-view attribute", done => { | ||
21 | + | ||
22 | + // Creating a container component (BlockContainerComponent) to include | ||
23 | + // the component under test (Block) | ||
24 | + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [MainBlock] }) | ||
25 | + class BlockContainerComponent { | ||
26 | + } | ||
27 | + | ||
28 | + // uses the TestComponentBuilder instance to initialize the component | ||
29 | + tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
30 | + // and here we can inspect and run the test assertions | ||
31 | + //let myComponent: MainBlock = fixture.componentInstance; | ||
32 | + | ||
33 | + // assure the block object inside the Block matches | ||
34 | + // the provided through the parent component | ||
35 | + expect(fixture.debugElement.queryAll('[ui-view="mainBlockContent"]').length).toEqual(1) | ||
36 | + done(); | ||
37 | + }); | ||
37 | }); | 38 | }); |
38 | - }); | ||
39 | 39 | ||
40 | -}); | 40 | + }); |
41 | +}); | ||
41 | \ No newline at end of file | 42 | \ No newline at end of file |
src/app/components/noosfero-blocks/members-block/members-block.component.spec.ts
@@ -7,45 +7,47 @@ const htmlTemplate: string = '<noosfero-members-block [block]="ctrl.block" [owne | @@ -7,45 +7,47 @@ const htmlTemplate: string = '<noosfero-members-block [block]="ctrl.block" [owne | ||
7 | 7 | ||
8 | const tcb = new TestComponentBuilder(); | 8 | const tcb = new TestComponentBuilder(); |
9 | 9 | ||
10 | -describe("Members Block Component", () => { | ||
11 | - | ||
12 | - beforeEach(angular.mock.module("templates")); | ||
13 | - | ||
14 | - let state = jasmine.createSpyObj("state", ["go"]); | ||
15 | - let providers = [ | ||
16 | - new Provider('truncateFilter', { useValue: () => { } }), | ||
17 | - new Provider('stripTagsFilter', { useValue: () => { } }), | ||
18 | - new Provider('$state', { useValue: state }), | ||
19 | - new Provider('ProfileService', { | ||
20 | - useValue: { | ||
21 | - getProfileMembers: (profileId: number, filters: any): any => { | ||
22 | - return Promise.resolve({ data: { people: [{ identifier: "person1" }] } }); | 10 | +describe("Components", () => { |
11 | + describe("Members Block Component", () => { | ||
12 | + | ||
13 | + beforeEach(angular.mock.module("templates")); | ||
14 | + | ||
15 | + let state = jasmine.createSpyObj("state", ["go"]); | ||
16 | + let providers = [ | ||
17 | + new Provider('truncateFilter', { useValue: () => { } }), | ||
18 | + new Provider('stripTagsFilter', { useValue: () => { } }), | ||
19 | + new Provider('$state', { useValue: state }), | ||
20 | + new Provider('ProfileService', { | ||
21 | + useValue: { | ||
22 | + getProfileMembers: (profileId: number, filters: any): any => { | ||
23 | + return Promise.resolve({ data: { people: [{ identifier: "person1" }] } }); | ||
24 | + } | ||
23 | } | 25 | } |
26 | + }), | ||
27 | + ]; | ||
28 | + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [MembersBlock], providers: providers }) | ||
29 | + class BlockContainerComponent { | ||
30 | + block = { type: 'Block', settings: {} }; | ||
31 | + owner = { name: 'profile-name' }; | ||
32 | + constructor() { | ||
24 | } | 33 | } |
25 | - }), | ||
26 | - ]; | ||
27 | - @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [MembersBlock], providers: providers }) | ||
28 | - class BlockContainerComponent { | ||
29 | - block = { type: 'Block', settings: {} }; | ||
30 | - owner = { name: 'profile-name' }; | ||
31 | - constructor() { | ||
32 | } | 34 | } |
33 | - } | ||
34 | 35 | ||
35 | - it("get members of the block owner", done => { | ||
36 | - tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
37 | - let block: MembersBlock = fixture.debugElement.componentViewChildren[0].componentInstance; | ||
38 | - expect(block.members).toEqual([{ identifier: "person1" }]); | ||
39 | - done(); | 36 | + it("get members of the block owner", done => { |
37 | + tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
38 | + let block: MembersBlock = fixture.debugElement.componentViewChildren[0].componentInstance; | ||
39 | + expect(block.members).toEqual([{ identifier: "person1" }]); | ||
40 | + done(); | ||
41 | + }); | ||
40 | }); | 42 | }); |
41 | - }); | ||
42 | 43 | ||
43 | - it("render the profile image for each member", done => { | ||
44 | - tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
45 | - fixture.debugElement.getLocal("$rootScope").$apply(); | ||
46 | - expect(fixture.debugElement.queryAll("noosfero-profile-image").length).toEqual(1); | ||
47 | - done(); | 44 | + it("render the profile image for each member", done => { |
45 | + tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
46 | + fixture.debugElement.getLocal("$rootScope").$apply(); | ||
47 | + expect(fixture.debugElement.queryAll("noosfero-profile-image").length).toEqual(1); | ||
48 | + done(); | ||
49 | + }); | ||
48 | }); | 50 | }); |
49 | - }); | ||
50 | 51 | ||
51 | -}); | 52 | + }); |
53 | +}); | ||
52 | \ No newline at end of file | 54 | \ No newline at end of file |
src/app/components/noosfero-blocks/profile-image/profile-image.component.spec.ts
@@ -8,30 +8,32 @@ const tcb = new TestComponentBuilder(); | @@ -8,30 +8,32 @@ const tcb = new TestComponentBuilder(); | ||
8 | const htmlTemplate: string = '<noosfero-profile-image-block [block]="ctrl.block" [owner]="ctrl.owner"></noosfero-profile-image-block>'; | 8 | const htmlTemplate: string = '<noosfero-profile-image-block [block]="ctrl.block" [owner]="ctrl.owner"></noosfero-profile-image-block>'; |
9 | 9 | ||
10 | 10 | ||
11 | -describe("Profile Image Block Component", () => { | 11 | +describe("Components", () => { |
12 | + describe("Profile Image Block Component", () => { | ||
12 | 13 | ||
13 | - beforeEach(angular.mock.module("templates")); | 14 | + beforeEach(angular.mock.module("templates")); |
14 | 15 | ||
15 | - @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [ProfileImageBlock] }) | ||
16 | - class BlockContainerComponent { | ||
17 | - block = { type: 'Block' }; | ||
18 | - owner = { name: 'profile-name' }; | ||
19 | - constructor() { | 16 | + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [ProfileImageBlock] }) |
17 | + class BlockContainerComponent { | ||
18 | + block = { type: 'Block' }; | ||
19 | + owner = { name: 'profile-name' }; | ||
20 | + constructor() { | ||
21 | + } | ||
20 | } | 22 | } |
21 | - } | ||
22 | 23 | ||
23 | - it("render the profile image", done => { | ||
24 | - tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
25 | - expect(fixture.debugElement.queryAll("noosfero-profile-image").length).toEqual(1); | ||
26 | - done(); | 24 | + it("render the profile image", done => { |
25 | + tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
26 | + expect(fixture.debugElement.queryAll("noosfero-profile-image").length).toEqual(1); | ||
27 | + done(); | ||
28 | + }); | ||
27 | }); | 29 | }); |
28 | - }); | ||
29 | 30 | ||
30 | - it("render the settings link", done => { | ||
31 | - tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
32 | - expect(fixture.debugElement.queryAll(".settings-link").length).toEqual(1); | ||
33 | - done(); | 31 | + it("render the settings link", done => { |
32 | + tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
33 | + expect(fixture.debugElement.queryAll(".settings-link").length).toEqual(1); | ||
34 | + done(); | ||
35 | + }); | ||
34 | }); | 36 | }); |
35 | - }); | ||
36 | 37 | ||
37 | -}); | 38 | + }); |
39 | +}); | ||
38 | \ No newline at end of file | 40 | \ No newline at end of file |
src/app/components/noosfero-blocks/recent-documents/recent-documents.component.spec.ts
@@ -7,45 +7,47 @@ const htmlTemplate: string = '<noosfero-recent-documents-block [block]="ctrl.blo | @@ -7,45 +7,47 @@ const htmlTemplate: string = '<noosfero-recent-documents-block [block]="ctrl.blo | ||
7 | 7 | ||
8 | const tcb = new TestComponentBuilder(); | 8 | const tcb = new TestComponentBuilder(); |
9 | 9 | ||
10 | -describe("Recent Documents Block Component", () => { | ||
11 | - | ||
12 | - beforeEach(angular.mock.module("templates")); | ||
13 | - | ||
14 | - let state = jasmine.createSpyObj("state", ["go"]); | ||
15 | - let providers = [ | ||
16 | - new Provider('$state', { useValue: state }), | ||
17 | - new Provider('ArticleService', { | ||
18 | - useValue: { | ||
19 | - getByProfile: (profileId: number, filters: any): any => { | ||
20 | - return Promise.resolve({ data: { articles: [{ name: "article1" }] } }); | 10 | +describe("Components", () => { |
11 | + describe("Recent Documents Block Component", () => { | ||
12 | + | ||
13 | + beforeEach(angular.mock.module("templates")); | ||
14 | + | ||
15 | + let state = jasmine.createSpyObj("state", ["go"]); | ||
16 | + let providers = [ | ||
17 | + new Provider('$state', { useValue: state }), | ||
18 | + new Provider('ArticleService', { | ||
19 | + useValue: { | ||
20 | + getByProfile: (profileId: number, filters: any): any => { | ||
21 | + return Promise.resolve({ data: { articles: [{ name: "article1" }] } }); | ||
22 | + } | ||
21 | } | 23 | } |
24 | + }), | ||
25 | + ].concat(provideFilters("truncateFilter", "stripTagsFilter")); | ||
26 | + | ||
27 | + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [RecentDocumentsBlock], providers: providers }) | ||
28 | + class BlockContainerComponent { | ||
29 | + block = { type: 'Block', settings: {} }; | ||
30 | + owner = { name: 'profile-name' }; | ||
31 | + constructor() { | ||
22 | } | 32 | } |
23 | - }), | ||
24 | - ].concat(provideFilters("truncateFilter", "stripTagsFilter")); | ||
25 | - | ||
26 | - @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [RecentDocumentsBlock], providers: providers }) | ||
27 | - class BlockContainerComponent { | ||
28 | - block = { type: 'Block', settings: {} }; | ||
29 | - owner = { name: 'profile-name' }; | ||
30 | - constructor() { | ||
31 | } | 33 | } |
32 | - } | ||
33 | 34 | ||
34 | - it("get recent documents from the article service", done => { | ||
35 | - tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
36 | - let recentDocumentsBlock: RecentDocumentsBlock = fixture.debugElement.componentViewChildren[0].componentInstance; | ||
37 | - expect(recentDocumentsBlock.documents).toEqual([{ name: "article1" }]); | ||
38 | - done(); | 35 | + it("get recent documents from the article service", done => { |
36 | + tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
37 | + let recentDocumentsBlock: RecentDocumentsBlock = fixture.debugElement.componentViewChildren[0].componentInstance; | ||
38 | + expect(recentDocumentsBlock.documents).toEqual([{ name: "article1" }]); | ||
39 | + done(); | ||
40 | + }); | ||
39 | }); | 41 | }); |
40 | - }); | ||
41 | 42 | ||
42 | - it("go to article page when open a document", done => { | ||
43 | - tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
44 | - let recentDocumentsBlock: RecentDocumentsBlock = fixture.debugElement.componentViewChildren[0].componentInstance; | ||
45 | - recentDocumentsBlock.openDocument({ path: "path", profile: { identifier: "identifier" } }); | ||
46 | - expect(state.go).toHaveBeenCalledWith("main.profile.page", { page: "path", profile: "identifier" }); | ||
47 | - done(); | 43 | + it("go to article page when open a document", done => { |
44 | + tcb.createAsync(BlockContainerComponent).then(fixture => { | ||
45 | + let recentDocumentsBlock: RecentDocumentsBlock = fixture.debugElement.componentViewChildren[0].componentInstance; | ||
46 | + recentDocumentsBlock.openDocument({ path: "path", profile: { identifier: "identifier" } }); | ||
47 | + expect(state.go).toHaveBeenCalledWith("main.profile.page", { page: "path", profile: "identifier" }); | ||
48 | + done(); | ||
49 | + }); | ||
48 | }); | 50 | }); |
49 | - }); | ||
50 | 51 | ||
51 | -}); | 52 | + }); |
53 | +}); | ||
52 | \ No newline at end of file | 54 | \ No newline at end of file |
src/app/components/noosfero-blocks/recent-documents/recent-documents.component.ts
@@ -13,6 +13,8 @@ export class RecentDocumentsBlock { | @@ -13,6 +13,8 @@ export class RecentDocumentsBlock { | ||
13 | 13 | ||
14 | profile: any; | 14 | profile: any; |
15 | documents: any; | 15 | documents: any; |
16 | + | ||
17 | + documentsLoaded: boolean = false; | ||
16 | 18 | ||
17 | constructor(private ArticleService: ArticleService, private $state: any) { | 19 | constructor(private ArticleService: ArticleService, private $state: any) { |
18 | } | 20 | } |
@@ -25,6 +27,7 @@ export class RecentDocumentsBlock { | @@ -25,6 +27,7 @@ export class RecentDocumentsBlock { | ||
25 | //FIXME get all text articles | 27 | //FIXME get all text articles |
26 | this.ArticleService.getByProfile(this.profile.id, { content_type: 'TinyMceArticle', per_page: limit }).then((response: any) => { | 28 | this.ArticleService.getByProfile(this.profile.id, { content_type: 'TinyMceArticle', per_page: limit }).then((response: any) => { |
27 | this.documents = response.data.articles; | 29 | this.documents = response.data.articles; |
30 | + this.documentsLoaded = true; | ||
28 | }); | 31 | }); |
29 | } | 32 | } |
30 | 33 | ||
@@ -33,3 +36,4 @@ export class RecentDocumentsBlock { | @@ -33,3 +36,4 @@ export class RecentDocumentsBlock { | ||
33 | } | 36 | } |
34 | 37 | ||
35 | } | 38 | } |
39 | + |
src/spec/helpers.ts
@@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
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 {quickFixture} from 'ng-forward/cjs/tests/utils'; | 3 | import {quickFixture} from 'ng-forward/cjs/tests/utils'; |
4 | import {Provider, Input, provide, Component} from 'ng-forward'; | 4 | import {Provider, Input, provide, Component} from 'ng-forward'; |
5 | - | 5 | +import {User, Person} from "./../app/models/interfaces"; |
6 | 6 | ||
7 | 7 | ||
8 | export interface ComponentFixtureTemplate { | 8 | export interface ComponentFixtureTemplate { |
@@ -29,10 +29,36 @@ export function createComponentFromClass(yourClass: ngClass) { | @@ -29,10 +29,36 @@ export function createComponentFromClass(yourClass: ngClass) { | ||
29 | return tcb.createAsync(yourClass); | 29 | return tcb.createAsync(yourClass); |
30 | } | 30 | } |
31 | 31 | ||
32 | +export function createProviderToValue(name: string, value: any) { | ||
33 | + return new Provider(name, { useValue: value }); | ||
34 | +} | ||
35 | + | ||
36 | +export function provideEmptyObjects(...providedNames: string[]) { | ||
37 | + let providers: Provider[] = []; | ||
38 | + for (let name of providedNames) { | ||
39 | + providers.push(createProviderToValue(name, {})); | ||
40 | + } | ||
41 | + return providers; | ||
42 | +} | ||
43 | + | ||
32 | export function provideFilters(...filters: string[]) { | 44 | export function provideFilters(...filters: string[]) { |
33 | let providers: Provider[] = []; | 45 | let providers: Provider[] = []; |
34 | - for (var filter of filters) { | 46 | + for (let filter of filters) { |
35 | providers.push(new Provider(filter, { useValue: () => { } })); | 47 | providers.push(new Provider(filter, { useValue: () => { } })); |
36 | } | 48 | } |
37 | return providers; | 49 | return providers; |
38 | } | 50 | } |
51 | + | ||
52 | +export var fixtures = { | ||
53 | + user: { | ||
54 | + id: 1, | ||
55 | + login: 'user', | ||
56 | + email: 'user@company.com', | ||
57 | + person: <Person>{ | ||
58 | + id: 1, | ||
59 | + identifier: 'user' | ||
60 | + }, | ||
61 | + private_token: 'token', | ||
62 | + userRole: 'admin' | ||
63 | + } | ||
64 | +}; | ||
39 | \ No newline at end of file | 65 | \ No newline at end of file |