Commit a4dac9eca7f123137a34fa9f0d5b3ebfd8fd302a
1 parent
224b593d
Exists in
master
and in
7 other branches
Added unit tests and minor refactories
Showing
8 changed files
with
131 additions
and
9 deletions
Show diff stats
src/app/account/register-component.html
| @@ -51,7 +51,7 @@ | @@ -51,7 +51,7 @@ | ||
| 51 | <div class="form-group col-md-6 register-field" ng-class="ctrl.isInvalid(signupForm.passwordConfirm)"> | 51 | <div class="form-group col-md-6 register-field" ng-class="ctrl.isInvalid(signupForm.passwordConfirm)"> |
| 52 | <div class="input-group"> | 52 | <div class="input-group"> |
| 53 | <span class="input-group-addon"><i class="fa fa-unlock-alt"></i></span> | 53 | <span class="input-group-addon"><i class="fa fa-unlock-alt"></i></span> |
| 54 | - <input type="password" class="form-control" id="passwordConfirm" name="passwordConfirm" match-password="password" placeholder="{{'account.register.passwordConfirmationLabel' | translate}}" ng-model="ctrl.account.password_confirmation" required> | 54 | + <input type="password" class="form-control" id="passwordConfirm" name="passwordConfirm" match-password="password" placeholder="{{'account.register.passwordConfirmationLabel' | translate}}" ng-model="ctrl.account.passwordConfirmation" required> |
| 55 | </div> | 55 | </div> |
| 56 | <div class="help-block" ng-show="signupForm.passwordConfirm.$touched" ng-messages="signupForm.passwordConfirm.$error"> | 56 | <div class="help-block" ng-show="signupForm.passwordConfirm.$touched" ng-messages="signupForm.passwordConfirm.$error"> |
| 57 | <ul class="list-unstyled"> | 57 | <ul class="list-unstyled"> |
| @@ -0,0 +1,52 @@ | @@ -0,0 +1,52 @@ | ||
| 1 | +import { ComponentTestHelper, createClass } from "../../spec/component-test-helper"; | ||
| 2 | +import * as helpers from "../../spec/helpers"; | ||
| 3 | +import { RegisterComponent } from "./register.component"; | ||
| 4 | +// import {RegisterService} from "../../lib/ng-noosfero-api/http/register.service" | ||
| 5 | + | ||
| 6 | + | ||
| 7 | +describe("Register Component", () => { | ||
| 8 | + const htmlTemplate: string = '<noosfero-register></noosfero-register>'; | ||
| 9 | + | ||
| 10 | + let helper: ComponentTestHelper<RegisterComponent>; | ||
| 11 | + let registerService = helpers.mocks.registerService; | ||
| 12 | + let stateService = jasmine.createSpyObj("$state", ["transitionTo"]); | ||
| 13 | + let notificationService = helpers.mocks.notificationService; | ||
| 14 | + notificationService.success = jasmine.createSpy('success'); | ||
| 15 | + notificationService.error = jasmine.createSpy('error'); | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + let account: any = { | ||
| 19 | + id: 1, | ||
| 20 | + login: 'test', | ||
| 21 | + email: 'test@email.com', | ||
| 22 | + password: 'xxx', | ||
| 23 | + passwordConfirmation: 'xxx' | ||
| 24 | + }; | ||
| 25 | + | ||
| 26 | + beforeEach(() => { | ||
| 27 | + angular.mock.module('templates'); | ||
| 28 | + angular.mock.module('ngSanitize'); | ||
| 29 | + angular.mock.module('ngMessages'); | ||
| 30 | + angular.mock.module('ngPassword'); | ||
| 31 | + }); | ||
| 32 | + | ||
| 33 | + beforeEach((done) => { | ||
| 34 | + let cls = createClass({ | ||
| 35 | + template: htmlTemplate, | ||
| 36 | + directives: [RegisterComponent], | ||
| 37 | + providers: [ | ||
| 38 | + helpers.createProviderToValue('$state', stateService), | ||
| 39 | + helpers.createProviderToValue('$uibModal', helpers.mocks.$modal), | ||
| 40 | + helpers.createProviderToValue('RegisterService', registerService), | ||
| 41 | + helpers.createProviderToValue('NotificationService', notificationService), | ||
| 42 | + helpers.createProviderToValue('EnvironmentService', helpers.mocks.environmentService) | ||
| 43 | + ] | ||
| 44 | + }); | ||
| 45 | + helper = new ComponentTestHelper<RegisterComponent>(cls, done); | ||
| 46 | + }); | ||
| 47 | + | ||
| 48 | + it('register page was rendered', () => { | ||
| 49 | + expect(helper.debugElement.query('div.register-page').length).toEqual(1); | ||
| 50 | + }); | ||
| 51 | + | ||
| 52 | +}); |
src/app/account/register.component.ts
| @@ -26,15 +26,16 @@ export class RegisterComponent { | @@ -26,15 +26,16 @@ export class RegisterComponent { | ||
| 26 | private $scope: ng.IScope, | 26 | private $scope: ng.IScope, |
| 27 | public registerService: RegisterService, | 27 | public registerService: RegisterService, |
| 28 | private notificationService: NotificationService, | 28 | private notificationService: NotificationService, |
| 29 | - private environmentService: EnvironmentService, | 29 | + private environmentService: EnvironmentService |
| 30 | ) { | 30 | ) { |
| 31 | this.account = {}; | 31 | this.account = {}; |
| 32 | this.environment = environmentService.getCurrentEnvironment(); | 32 | this.environment = environmentService.getCurrentEnvironment(); |
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | signup() { | 35 | signup() { |
| 36 | - if (this.account.password === this.account.password_confirmation) { | 36 | + if (this.account.password === this.account.passwordConfirmation) { |
| 37 | this.registerService.createAccount(this.account).then((response) => { | 37 | this.registerService.createAccount(this.account).then((response) => { |
| 38 | + | ||
| 38 | if (response.status === 201) { | 39 | if (response.status === 201) { |
| 39 | this.$state.transitionTo('main.environment'); | 40 | this.$state.transitionTo('main.environment'); |
| 40 | this.notificationService.success({ title: "account.register.success.title", message: "account.register.success.message" }); | 41 | this.notificationService.success({ title: "account.register.success.title", message: "account.register.success.message" }); |
| @@ -47,7 +48,7 @@ export class RegisterComponent { | @@ -47,7 +48,7 @@ export class RegisterComponent { | ||
| 47 | } | 48 | } |
| 48 | } | 49 | } |
| 49 | 50 | ||
| 50 | - isInvalid(field: Object): Object { | 51 | + isInvalid(field: any): any { |
| 51 | return { 'has-error': field['$touched'] && field['$invalid'] }; | 52 | return { 'has-error': field['$touched'] && field['$invalid'] }; |
| 52 | } | 53 | } |
| 53 | 54 |
src/app/account/register.controller.ts
| @@ -8,7 +8,7 @@ export class RegisterController { | @@ -8,7 +8,7 @@ export class RegisterController { | ||
| 8 | 8 | ||
| 9 | constructor( | 9 | constructor( |
| 10 | private $log: ng.ILogService, | 10 | private $log: ng.ILogService, |
| 11 | - private $stateParams: any, | 11 | + private $stateParams: any |
| 12 | ) { } | 12 | ) { } |
| 13 | 13 | ||
| 14 | closeTerms() { | 14 | closeTerms() { |
| @@ -0,0 +1,39 @@ | @@ -0,0 +1,39 @@ | ||
| 1 | +import { RegisterService } from "./register.service"; | ||
| 2 | + | ||
| 3 | +describe("Services", () => { | ||
| 4 | + | ||
| 5 | + describe("Register Service", () => { | ||
| 6 | + | ||
| 7 | + let $httpBackend: ng.IHttpBackendService; | ||
| 8 | + let registerService: RegisterService; | ||
| 9 | + let $rootScope: ng.IRootScopeService; | ||
| 10 | + let user: any = { | ||
| 11 | + id: 1, | ||
| 12 | + login: 'test', | ||
| 13 | + email: 'test@email.com' | ||
| 14 | + }; | ||
| 15 | + | ||
| 16 | + beforeEach(angular.mock.module("main", ($translateProvider: angular.translate.ITranslateProvider) => { | ||
| 17 | + $translateProvider.translations('en', {}); | ||
| 18 | + })); | ||
| 19 | + | ||
| 20 | + beforeEach(inject((_$httpBackend_: ng.IHttpBackendService, _RegisterService_: RegisterService, _$rootScope_: ng.IRootScopeService) => { | ||
| 21 | + $httpBackend = _$httpBackend_; | ||
| 22 | + registerService = _RegisterService_; | ||
| 23 | + $rootScope = _$rootScope_; | ||
| 24 | + })); | ||
| 25 | + | ||
| 26 | + describe("Succesfull requests", () => { | ||
| 27 | + | ||
| 28 | + it("should creaet a new account", (done) => { | ||
| 29 | + | ||
| 30 | + $httpBackend.expectPOST(`/api/v1/register?email=${user.email}&id=${user.id}&login=${user.login}`).respond(201, [{ login: "test" }]); | ||
| 31 | + registerService.createAccount(user).then((response: restangular.IResponse) => { | ||
| 32 | + expect(response.data[0].login).toEqual("test"); | ||
| 33 | + done(); | ||
| 34 | + }); | ||
| 35 | + $httpBackend.flush(); | ||
| 36 | + }); | ||
| 37 | + }); | ||
| 38 | + }); | ||
| 39 | +}); |
src/lib/ng-noosfero-api/http/register.service.ts
| 1 | import { Injectable, Inject } from "ng-forward"; | 1 | import { Injectable, Inject } from "ng-forward"; |
| 2 | -import {RestangularService} from "./restangular_service"; | 2 | +import { RestangularService } from "./restangular_service"; |
| 3 | 3 | ||
| 4 | @Injectable() | 4 | @Injectable() |
| 5 | @Inject("Restangular") | 5 | @Inject("Restangular") |
src/lib/ng-noosfero-api/interfaces/environment.ts
| @@ -5,7 +5,7 @@ namespace noosfero { | @@ -5,7 +5,7 @@ namespace noosfero { | ||
| 5 | * @name noofero.Environment | 5 | * @name noofero.Environment |
| 6 | * @description | 6 | * @description |
| 7 | * A representation of a Noosfero Environment. | 7 | * A representation of a Noosfero Environment. |
| 8 | - */ | 8 | + */ |
| 9 | export interface Environment extends RestModel { | 9 | export interface Environment extends RestModel { |
| 10 | /** | 10 | /** |
| 11 | * @ngdoc property | 11 | * @ngdoc property |
| @@ -23,6 +23,21 @@ namespace noosfero { | @@ -23,6 +23,21 @@ namespace noosfero { | ||
| 23 | * @returns {string} The Environment layout (e.g. default, rightbar) | 23 | * @returns {string} The Environment layout (e.g. default, rightbar) |
| 24 | */ | 24 | */ |
| 25 | layout_template: string; | 25 | layout_template: string; |
| 26 | + | ||
| 27 | + /** | ||
| 28 | + * @ngdoc property | ||
| 29 | + * @name signup_intro | ||
| 30 | + * @propertyOf noofero.Environment | ||
| 31 | + * @returns {string} The Environment signup introduction HTML (e.g. Welcome to Noosfero...!!) | ||
| 32 | + */ | ||
| 33 | + signup_intro: string; | ||
| 34 | + | ||
| 35 | + /** | ||
| 36 | + * @ngdoc property | ||
| 37 | + * @name host | ||
| 38 | + * @propertyOf noofero.Environment | ||
| 39 | + * @returns {string} The Environment default domain address with 'http://' prefix (e.g. http://localhost) | ||
| 40 | + */ | ||
| 41 | + host: string; | ||
| 26 | } | 42 | } |
| 27 | } | 43 | } |
| 28 | - |
src/spec/mocks.ts
| @@ -40,6 +40,11 @@ export var mocks: any = { | @@ -40,6 +40,11 @@ export var mocks: any = { | ||
| 40 | return this.modalInstance; | 40 | return this.modalInstance; |
| 41 | } | 41 | } |
| 42 | }, | 42 | }, |
| 43 | + registerService: { | ||
| 44 | + createAccount: (user: noosfero.User) => { | ||
| 45 | + return Promise.resolve({ status: 201 }); | ||
| 46 | + } | ||
| 47 | + }, | ||
| 43 | authService: { | 48 | authService: { |
| 44 | loginSuccess: { | 49 | loginSuccess: { |
| 45 | event: Function, | 50 | event: Function, |
| @@ -145,6 +150,15 @@ export var mocks: any = { | @@ -145,6 +150,15 @@ export var mocks: any = { | ||
| 145 | return mocks.promiseResultTemplate({ | 150 | return mocks.promiseResultTemplate({ |
| 146 | people: {} | 151 | people: {} |
| 147 | }); | 152 | }); |
| 153 | + }, | ||
| 154 | + getCurrentEnvironment: (): any => { | ||
| 155 | + return { | ||
| 156 | + id: 1, | ||
| 157 | + settings: {}, | ||
| 158 | + layout_template: '', | ||
| 159 | + signup_intro: 'Welcome to Noosfero', | ||
| 160 | + host: 'http://localhost' | ||
| 161 | + }; | ||
| 148 | } | 162 | } |
| 149 | }, | 163 | }, |
| 150 | profileService: { | 164 | profileService: { |
| @@ -240,6 +254,7 @@ export var mocks: any = { | @@ -240,6 +254,7 @@ export var mocks: any = { | ||
| 240 | }, | 254 | }, |
| 241 | notificationService: { | 255 | notificationService: { |
| 242 | success: () => { }, | 256 | success: () => { }, |
| 243 | - confirmation: () => { } | 257 | + confirmation: () => { }, |
| 258 | + error: () => { } | ||
| 244 | } | 259 | } |
| 245 | }; | 260 | }; |