Commit ec0140bcb3d2be6325cc3ce77b1fcca8789c23dd
Exists in
master
and in
14 other branches
Merge branch 'change_environment_name' into 'master'
Change environment name ### Updated to shows the EnvironmentName dinamically on the navbar component. Some changes were made to bring the request to the api to return the environment to the `@StateConfig` `resolve` function of the mainComponent. See merge request !35
Showing
10 changed files
with
138 additions
and
34 deletions
Show diff stats
src/app/article/comment/comments.component.ts
| ... | ... | @@ -36,7 +36,7 @@ export class CommentsComponent { |
| 36 | 36 | comment.__show_reply = false; |
| 37 | 37 | if (comment.reply_of) { |
| 38 | 38 | this.comments.forEach((commentOnList) => { |
| 39 | - if (commentOnList.id == comment.reply_of.id) { | |
| 39 | + if (commentOnList.id === comment.reply_of.id) { | |
| 40 | 40 | if (commentOnList.replies) { |
| 41 | 41 | commentOnList.replies.push(comment); |
| 42 | 42 | } else { | ... | ... |
src/app/environment/environment-home.component.ts
| ... | ... | @@ -22,7 +22,7 @@ export class EnvironmentHomeComponent { |
| 22 | 22 | environment: noosfero.Environment; |
| 23 | 23 | |
| 24 | 24 | constructor(private environmentService: EnvironmentService, private $sce: ng.ISCEService) { |
| 25 | - environmentService.getByIdentifier("default").then((result: noosfero.Environment) => { | |
| 25 | + environmentService.get().then((result: noosfero.Environment) => { | |
| 26 | 26 | this.environment = result; |
| 27 | 27 | }); |
| 28 | 28 | } | ... | ... |
src/app/environment/environment.component.spec.ts
| ... | ... | @@ -9,6 +9,7 @@ describe("Components", () => { |
| 9 | 9 | let environmentServiceMock: any; |
| 10 | 10 | let notificationMock: any; |
| 11 | 11 | let $state: any; |
| 12 | + let defaultEnvironment = <any> {id: 1, name: 'Noosfero' }; | |
| 12 | 13 | |
| 13 | 14 | beforeEach(inject((_$rootScope_: ng.IRootScopeService, _$q_: ng.IQService) => { |
| 14 | 15 | $rootScope = _$rootScope_; |
| ... | ... | @@ -17,44 +18,40 @@ describe("Components", () => { |
| 17 | 18 | |
| 18 | 19 | beforeEach(() => { |
| 19 | 20 | $state = jasmine.createSpyObj("$state", ["transitionTo"]); |
| 20 | - environmentServiceMock = jasmine.createSpyObj("environmentServiceMock", ["getByIdentifier", "getBoxes"]); | |
| 21 | + environmentServiceMock = jasmine.createSpyObj("environmentServiceMock", ["get", "getBoxes"]); | |
| 21 | 22 | notificationMock = jasmine.createSpyObj("notificationMock", ["error"]); |
| 22 | 23 | |
| 23 | - let environmentResponse = $q.defer(); | |
| 24 | - environmentResponse.resolve({ id: 1 }); | |
| 25 | 24 | let getBoxesResponse = $q.defer(); |
| 26 | 25 | getBoxesResponse.resolve({ data: { boxes: [{ id: 2 }] } }); |
| 27 | 26 | |
| 28 | - environmentServiceMock.getByIdentifier = jasmine.createSpy('getByIdentifier').and.returnValue(environmentResponse.promise); | |
| 29 | 27 | environmentServiceMock.getBoxes = jasmine.createSpy("getBoxes").and.returnValue(getBoxesResponse.promise); |
| 30 | 28 | }); |
| 31 | 29 | |
| 32 | 30 | it("get the default environment", done => { |
| 33 | - let component: EnvironmentComponent = new EnvironmentComponent(environmentServiceMock, $state, notificationMock); | |
| 31 | + let component: EnvironmentComponent = new EnvironmentComponent(environmentServiceMock, $state, notificationMock, defaultEnvironment); | |
| 34 | 32 | $rootScope.$apply(); |
| 35 | - expect(component.environment).toEqual({ id: 1 }); | |
| 33 | + expect(component.environment).toEqual({ id: 1, name: 'Noosfero' }); | |
| 36 | 34 | done(); |
| 37 | 35 | }); |
| 38 | 36 | |
| 39 | 37 | it("get the environment boxes", done => { |
| 40 | - let component: EnvironmentComponent = new EnvironmentComponent(environmentServiceMock, $state, notificationMock); | |
| 38 | + let component: EnvironmentComponent = new EnvironmentComponent(environmentServiceMock, $state, notificationMock, defaultEnvironment); | |
| 41 | 39 | $rootScope.$apply(); |
| 42 | 40 | expect(environmentServiceMock.getBoxes).toHaveBeenCalled(); |
| 43 | 41 | expect(component.boxes).toEqual({ data: { boxes: [{ id: 2 }] } }); |
| 44 | 42 | done(); |
| 45 | 43 | }); |
| 46 | 44 | |
| 47 | - it("display notification error when the environment wasn't found", done => { | |
| 45 | + it("display notification error when does not find boxes to the environment", done => { | |
| 48 | 46 | let environmentResponse = $q.defer(); |
| 49 | 47 | environmentResponse.reject(); |
| 50 | 48 | |
| 51 | - environmentServiceMock.getByIdentifier = jasmine.createSpy('getByIdentifier').and.returnValue(environmentResponse.promise); | |
| 49 | + environmentServiceMock.getBoxes = jasmine.createSpy('getBoxes').and.returnValue(environmentResponse.promise); | |
| 52 | 50 | |
| 53 | - let component: EnvironmentComponent = new EnvironmentComponent(environmentServiceMock, $state, notificationMock); | |
| 51 | + let component: EnvironmentComponent = new EnvironmentComponent(environmentServiceMock, $state, notificationMock, defaultEnvironment); | |
| 54 | 52 | $rootScope.$apply(); |
| 55 | 53 | |
| 56 | 54 | expect(notificationMock.error).toHaveBeenCalled(); |
| 57 | - expect(component.environment).toBeUndefined(); | |
| 58 | 55 | done(); |
| 59 | 56 | }); |
| 60 | 57 | ... | ... |
src/app/environment/environment.component.ts
| ... | ... | @@ -31,21 +31,23 @@ import {EnvironmentHomeComponent} from "./environment-home.component"; |
| 31 | 31 | } |
| 32 | 32 | } |
| 33 | 33 | ]) |
| 34 | -@Inject(EnvironmentService, "$state") | |
| 34 | +@Inject(EnvironmentService, "$state", "currentEnvironment") | |
| 35 | 35 | export class EnvironmentComponent { |
| 36 | 36 | |
| 37 | 37 | boxes: noosfero.Box[]; |
| 38 | 38 | environment: noosfero.Environment; |
| 39 | 39 | |
| 40 | - constructor(environmentService: EnvironmentService, $state: ng.ui.IStateService, notificationService: NotificationService) { | |
| 41 | - let boxesPromisse = environmentService.getByIdentifier("default").then((environment: noosfero.Environment) => { | |
| 42 | - this.environment = environment; | |
| 43 | - return environmentService.getBoxes(this.environment.id); | |
| 44 | - }).then((boxes: noosfero.Box[]) => { | |
| 45 | - this.boxes = boxes; | |
| 46 | - }).catch(() => { | |
| 47 | - $state.transitionTo('main'); | |
| 48 | - notificationService.error({ message: "notification.environment.not_found" }); | |
| 49 | - }); | |
| 40 | + constructor(private environmentService: EnvironmentService, private $state: ng.ui.IStateService, private notificationService: NotificationService, currentEnvironment: noosfero.Environment) { | |
| 41 | + this.environment = currentEnvironment; | |
| 42 | + | |
| 43 | + this.environmentService.getBoxes(this.environment.id) | |
| 44 | + .then((boxes: noosfero.Box[]) => { | |
| 45 | + this.boxes = boxes; | |
| 46 | + }).catch(() => { | |
| 47 | + this.$state.transitionTo('main'); | |
| 48 | + this.notificationService.error({ message: "notification.environment.not_found" }); | |
| 49 | + }); | |
| 50 | + | |
| 50 | 51 | } |
| 52 | + | |
| 51 | 53 | } | ... | ... |
src/app/layout/navbar/navbar.html
| ... | ... | @@ -7,7 +7,7 @@ |
| 7 | 7 | </button> |
| 8 | 8 | <a class="navbar-brand" ui-sref="main.environment.home"> |
| 9 | 9 | <span class="noosfero-logo"> </span> |
| 10 | - <span class="noosfero-name">{{"noosfero.name" | translate}}</span> | |
| 10 | + <span class="noosfero-name">{{ ctrl.currentEnvironment.name }}</span> | |
| 11 | 11 | </a> |
| 12 | 12 | </div> |
| 13 | 13 | ... | ... |
src/app/layout/navbar/navbar.spec.ts
| ... | ... | @@ -69,6 +69,11 @@ describe("Components", () => { |
| 69 | 69 | AuthEvents |
| 70 | 70 | } |
| 71 | 71 | }), |
| 72 | + provide('EnvironmentService', { | |
| 73 | + useValue: { | |
| 74 | + getCurrentEnviroment: () => { return { id: 1, name: 'Nosofero' }; } | |
| 75 | + } | |
| 76 | + }), | |
| 72 | 77 | provide('TranslatorService', { |
| 73 | 78 | useValue: helpers.mocks.translatorService |
| 74 | 79 | }) | ... | ... |
src/app/layout/navbar/navbar.ts
| 1 | 1 | import {Component, Inject, EventEmitter, Input} from "ng-forward"; |
| 2 | 2 | import {LanguageSelectorComponent} from "../language-selector/language-selector.component"; |
| 3 | 3 | import {SessionService, AuthService, AuthController, AuthEvents} from "./../../login"; |
| 4 | +import {EnvironmentService} from "./../../../lib/ng-noosfero-api/http/environment.service"; | |
| 4 | 5 | import {SidebarNotificationService} from "../sidebar/sidebar.notification.service"; |
| 5 | 6 | import {BodyStateClassesService} from '../services/body-state-classes.service'; |
| 6 | 7 | |
| ... | ... | @@ -8,15 +9,15 @@ import {BodyStateClassesService} from '../services/body-state-classes.service'; |
| 8 | 9 | selector: "acme-navbar", |
| 9 | 10 | templateUrl: "app/layout/navbar/navbar.html", |
| 10 | 11 | directives: [LanguageSelectorComponent], |
| 11 | - providers: [AuthService, SessionService, SidebarNotificationService] | |
| 12 | + providers: [AuthService, SessionService, SidebarNotificationService, EnvironmentService] | |
| 12 | 13 | }) |
| 13 | -@Inject("$uibModal", AuthService, "SessionService", "$state", SidebarNotificationService, BodyStateClassesService) | |
| 14 | +@Inject("$uibModal", AuthService, "SessionService", "$state", SidebarNotificationService, BodyStateClassesService, EnvironmentService) | |
| 14 | 15 | export class Navbar { |
| 15 | 16 | |
| 16 | 17 | private currentUser: noosfero.User; |
| 17 | 18 | private modalInstance: any = null; |
| 18 | - | |
| 19 | 19 | public showHamburguer: boolean = false; |
| 20 | + public currentEnvironment: noosfero.Environment = <any>{ name: '' }; | |
| 20 | 21 | |
| 21 | 22 | /** |
| 22 | 23 | * |
| ... | ... | @@ -27,9 +28,11 @@ export class Navbar { |
| 27 | 28 | private session: SessionService, |
| 28 | 29 | private $state: ng.ui.IStateService, |
| 29 | 30 | private sidebarNotificationService: SidebarNotificationService, |
| 30 | - private bodyStateService: BodyStateClassesService | |
| 31 | + private bodyStateService: BodyStateClassesService, | |
| 32 | + private environmentService: EnvironmentService | |
| 31 | 33 | ) { |
| 32 | 34 | this.currentUser = this.session.currentUser(); |
| 35 | + this.currentEnvironment = environmentService.getCurrentEnviroment(); | |
| 33 | 36 | |
| 34 | 37 | this.showHamburguer = this.authService.isAuthenticated(); |
| 35 | 38 | this.bodyStateService.addContentClass(!this.sidebarNotificationService.sidebarVisible); | ... | ... |
| ... | ... | @@ -0,0 +1,81 @@ |
| 1 | + | |
| 2 | +import { provide, Component, componentStore, bundleStore } from "ng-forward"; | |
| 3 | +import {MainComponent} from "./main.component"; | |
| 4 | +import {TestComponentBuilder, ComponentFixture} from "ng-forward/cjs/testing/test-component-builder"; | |
| 5 | + | |
| 6 | +import {quickCreateComponent} from "./../../spec/helpers"; | |
| 7 | + | |
| 8 | +describe("MainComponent", function () { | |
| 9 | + | |
| 10 | + let localFixture: ComponentFixture; | |
| 11 | + let $state: angular.ui.IStateService; | |
| 12 | + let $q: ng.IQService; | |
| 13 | + let authService: any = jasmine.createSpyObj("authService", ["loginFromCookie"]); | |
| 14 | + let environmentService: any = jasmine.createSpyObj("environmentService", ["get"]); | |
| 15 | + | |
| 16 | + beforeEach(angular.mock.module("ui.router")); | |
| 17 | + beforeEach(angular.mock.module("templates")); | |
| 18 | + | |
| 19 | + @Component({ | |
| 20 | + selector: "parent", | |
| 21 | + template: "<main></main>", | |
| 22 | + directives: [MainComponent], | |
| 23 | + providers: [ | |
| 24 | + provide("AuthService", | |
| 25 | + { | |
| 26 | + useValue: authService | |
| 27 | + }), | |
| 28 | + | |
| 29 | + provide("EnvironmentService", | |
| 30 | + { | |
| 31 | + useValue: environmentService | |
| 32 | + }), | |
| 33 | + ] | |
| 34 | + }) | |
| 35 | + class MainComponentParent { | |
| 36 | + constructor() { | |
| 37 | + | |
| 38 | + } | |
| 39 | + } | |
| 40 | + | |
| 41 | + beforeEach(() => { | |
| 42 | + authService.loginFromCookie = jasmine.createSpy("loginFromCookie").and.returnValue({ id: 1, name: "user1" }); | |
| 43 | + environmentService.get = jasmine.createSpy("get").and.returnValue({ id: 1, name: "Noosfero Default Environment" }); | |
| 44 | + }); | |
| 45 | + | |
| 46 | + it("renders the main component only when the login and environment were resolved", (done) => { | |
| 47 | + quickCreateComponent({ directives: [MainComponentParent], template: "<parent></parent>" }) | |
| 48 | + .then((fixture) => { | |
| 49 | + localFixture = fixture; | |
| 50 | + // get the $state service to navigate between routes | |
| 51 | + $state = fixture.debugElement.getLocal("$state"); | |
| 52 | + // navigates to the environment home | |
| 53 | + $state.go("main.environment.home"); | |
| 54 | + localFixture.detectChanges(); | |
| 55 | + // after changes were detected it checks the current $state route | |
| 56 | + expect($state.current.name).toEqual("main.environment.home"); | |
| 57 | + done(); | |
| 58 | + }); | |
| 59 | + | |
| 60 | + }); | |
| 61 | + | |
| 62 | + it("does not render the main component when get error loading the environment", (done) => { | |
| 63 | + quickCreateComponent({ directives: [MainComponentParent], template: "<parent></parent>" }) | |
| 64 | + .then((fixture) => { | |
| 65 | + localFixture = fixture; | |
| 66 | + // get the $state service to navigate between routes | |
| 67 | + $state = fixture.debugElement.getLocal("$state"); | |
| 68 | + // get the $q service to create a rejected promise | |
| 69 | + $q = fixture.debugElement.getLocal("$q"); | |
| 70 | + // mock the environmentService to force a rejected promise | |
| 71 | + environmentService.get = jasmine.createSpy("get").and.returnValue($q.reject("Error simulated")); | |
| 72 | + // tries to navigate to the environment home | |
| 73 | + $state.go("main.environment.home"); | |
| 74 | + localFixture.detectChanges(); | |
| 75 | + // after the changes were detected the state remains '' because the environment could not be loaded | |
| 76 | + expect($state.current.name).toEqual(""); | |
| 77 | + done(); | |
| 78 | + }); | |
| 79 | + | |
| 80 | + }); | |
| 81 | +}); | ... | ... |
src/app/main/main.component.ts
| ... | ... | @@ -28,7 +28,7 @@ import {DateFormat} from "../shared/pipes/date-format.filter"; |
| 28 | 28 | |
| 29 | 29 | import {AuthService} from "../login/auth.service"; |
| 30 | 30 | import {SessionService} from "../login/session.service"; |
| 31 | - | |
| 31 | +import {EnvironmentService} from "./../../lib/ng-noosfero-api/http/environment.service"; | |
| 32 | 32 | import {NotificationService} from "../shared/services/notification.service"; |
| 33 | 33 | |
| 34 | 34 | import {BodyStateClassesService} from "./../layout/services/body-state-classes.service"; |
| ... | ... | @@ -114,6 +114,9 @@ export class EnvironmentContent { |
| 114 | 114 | resolve: { |
| 115 | 115 | currentUser: function(AuthService: AuthService) { |
| 116 | 116 | return AuthService.loginFromCookie(); |
| 117 | + }, | |
| 118 | + currentEnvironment: function(EnvironmentService: EnvironmentService) { | |
| 119 | + return EnvironmentService.get(); | |
| 117 | 120 | } |
| 118 | 121 | } |
| 119 | 122 | }, | ... | ... |
src/lib/ng-noosfero-api/http/environment.service.ts
| ... | ... | @@ -4,12 +4,16 @@ import { Injectable, Inject } from "ng-forward"; |
| 4 | 4 | @Inject("Restangular", "$q") |
| 5 | 5 | export class EnvironmentService { |
| 6 | 6 | |
| 7 | - private _currentEnvironmentPromise: ng.IDeferred<noosfero.Environment>; | |
| 8 | 7 | |
| 8 | + private currentEnvironment: noosfero.Environment = null; | |
| 9 | 9 | constructor(private restangular: restangular.IService, private $q: ng.IQService) { |
| 10 | 10 | |
| 11 | 11 | } |
| 12 | 12 | |
| 13 | + getCurrentEnviroment(): noosfero.Environment { | |
| 14 | + return this.currentEnvironment; | |
| 15 | + } | |
| 16 | + | |
| 13 | 17 | getEnvironmentPeople(params: any): ng.IPromise<noosfero.Person[]> { |
| 14 | 18 | let p = this.restangular.one('people').get(params); |
| 15 | 19 | let deferred = this.$q.defer<noosfero.Person[]>(); |
| ... | ... | @@ -18,10 +22,19 @@ export class EnvironmentService { |
| 18 | 22 | return deferred.promise; |
| 19 | 23 | } |
| 20 | 24 | |
| 21 | - getByIdentifier(identifier: string): ng.IPromise<noosfero.Environment> { | |
| 25 | + get(identifier: string = 'default'): ng.IPromise<noosfero.Environment> { | |
| 22 | 26 | let p = this.restangular.one('environment').customGET(identifier); |
| 23 | 27 | let deferred = this.$q.defer<noosfero.Environment>(); |
| 24 | - p.then(this.getHandleSuccessFunction<noosfero.Environment>(deferred)); | |
| 28 | + if (identifier === 'default') { | |
| 29 | + p.then((response) => { | |
| 30 | + let data = this.restangular.stripRestangular(response.data); | |
| 31 | + this.currentEnvironment = data; | |
| 32 | + this.getHandleSuccessFunction<noosfero.Environment>(deferred).bind(this)(response); | |
| 33 | + }); | |
| 34 | + } else { | |
| 35 | + p.then(this.getHandleSuccessFunction<noosfero.Environment>(deferred)); | |
| 36 | + } | |
| 37 | + | |
| 25 | 38 | p.catch(this.getHandleErrorFunction<noosfero.Environment>(deferred)); |
| 26 | 39 | return deferred.promise; |
| 27 | 40 | } |
| ... | ... | @@ -37,7 +50,7 @@ export class EnvironmentService { |
| 37 | 50 | /** TODO - Please, use the base class RestangularService |
| 38 | 51 | * (description) |
| 39 | 52 | * |
| 40 | - * @template T | |
| 53 | + * @template T_currentEnvironmentPromise | |
| 41 | 54 | * @param {ng.IDeferred<T>} deferred (description) |
| 42 | 55 | * @returns {(response: restangular.IResponse) => void} (description) |
| 43 | 56 | */ | ... | ... |