From f082feed3feb02387c2eea02f0c839653ad4270c Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Tue, 15 Mar 2016 18:43:21 -0300 Subject: [PATCH] Refactor language component --- src/app/components/language-selector/language-selector.component.spec.ts | 53 ++++++----------------------------------------------- src/app/components/language-selector/language-selector.component.ts | 41 +++++++---------------------------------- src/app/components/language-selector/language-selector.html | 2 +- src/app/components/language-selector/language.service.spec.ts | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/app/components/language-selector/language.service.ts | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/app/components/notification/notification.component.spec.ts | 25 ++++++++++++------------- src/app/components/notification/notification.component.ts | 12 ++++++------ src/spec/mocks.ts | 7 +++++-- typings.json | 1 + 9 files changed, 158 insertions(+), 103 deletions(-) create mode 100644 src/app/components/language-selector/language.service.spec.ts create mode 100644 src/app/components/language-selector/language.service.ts diff --git a/src/app/components/language-selector/language-selector.component.spec.ts b/src/app/components/language-selector/language-selector.component.spec.ts index f1da99f..3f8e9de 100644 --- a/src/app/components/language-selector/language-selector.component.spec.ts +++ b/src/app/components/language-selector/language-selector.component.spec.ts @@ -11,69 +11,28 @@ describe("Components", () => { beforeEach(angular.mock.module("templates")); + let languageService: any; + let buildComponent = (): Promise => { + languageService = jasmine.createSpyObj("languageService", ["availableLanguages", "currentLanguage"]) return helpers.quickCreateComponent({ template: "", directives: [LanguageSelector], providers: [ - provide('$translate', { - useValue: helpers.mocks.$translate - }), - provide('tmhDynamicLocale', { - useValue: helpers.mocks.tmhDynamicLocale - }), - provide('amMoment', { - useValue: helpers.mocks.amMoment - }), - provide('angularLoad', { - useValue: helpers.mocks.angularLoad + provide('LanguageService', { + useValue: languageService }) ].concat(helpers.provideFilters("translateFilter")) }); } - it("set available languages when change language", (done) => { - let component: LanguageSelector = new LanguageSelector( - helpers.mocks.$translate, - helpers.mocks.tmhDynamicLocale, - helpers.mocks.amMoment, - helpers.mocks.angularLoad - ); - component.availableLanguages = null; - expect(component.availableLanguages).toBeNull(); - component.changeLanguage('en'); - expect(component.availableLanguages).toBeDefined(); - done(); - }); - it("display language options", (done) => { buildComponent().then(fixture => { + fixture.debugElement.getLocal("$rootScope").$apply(); expect(fixture.debugElement.queryAll('li.language').length).toEqual(2); done(); }); }); - it("change the language", (done) => { - buildComponent().then(fixture => { - let component: LanguageSelector = fixture.debugElement.componentViewChildren[0].componentInstance; - let $q = fixture.debugElement.getLocal("$q"); - let loadScripPromise = $q.defer(); - loadScripPromise.resolve(); - component["angularLoad"].loadScript = jasmine.createSpy("loadScript").and.returnValue(loadScripPromise.promise); - component["tmhDynamicLocale"].set = jasmine.createSpy("set"); - component["tmhDynamicLocale"].get = jasmine.createSpy("get").and.returnValue("en"); - component["$translate"].use = jasmine.createSpy("use"); - - component.changeLanguage('pt'); - fixture.debugElement.getLocal("$rootScope").$digest(); - - expect(component["angularLoad"].loadScript).toHaveBeenCalledWith("/bower_components/moment/locale/pt.js"); - expect(component["angularLoad"].loadScript).toHaveBeenCalledWith("/bower_components/messageformat/locale/pt.js"); - expect(component["tmhDynamicLocale"].set).toHaveBeenCalledWith("pt"); - expect(component["$translate"].use).toHaveBeenCalledWith("pt"); - done(); - }); - }); - }); }); diff --git a/src/app/components/language-selector/language-selector.component.ts b/src/app/components/language-selector/language-selector.component.ts index 87c6060..892ee33 100644 --- a/src/app/components/language-selector/language-selector.component.ts +++ b/src/app/components/language-selector/language-selector.component.ts @@ -1,51 +1,24 @@ import {Component, Inject} from "ng-forward"; +import {LanguageService} from "./language.service"; @Component({ selector: "language-selector", templateUrl: "app/components/language-selector/language-selector.html" }) -@Inject("$translate", "tmhDynamicLocale", "amMoment", "angularLoad") +@Inject(LanguageService) export class LanguageSelector { - availableLanguages: any; - - constructor(private $translate: angular.translate.ITranslateService, - private tmhDynamicLocale: any, - private amMoment: any, - private angularLoad: any) { - - this.configAvailableLanguages(); - this.changeLanguage(tmhDynamicLocale.get() || $translate.use()); - } + constructor(private languageService: LanguageService) { } currentLanguage() { - return this.$translate.use(); + return this.languageService.currentLanguage(); } changeLanguage(language: string) { - this.changeMomentLocale(language); - this.tmhDynamicLocale.set(language); - this.angularLoad.loadScript(`/bower_components/messageformat/locale/${language}.js`).then(() => { - return this.$translate.use(language); - }).then(() => { - this.configAvailableLanguages(); - }); - } - - private configAvailableLanguages() { - this.availableLanguages = { - "en": this.$translate.instant("language.en"), - "pt": this.$translate.instant("language.pt") - }; + this.languageService.changeLanguage(language); } - private changeMomentLocale(language: string) { - let localePromise = Promise.resolve(); - if (language != "en") { - localePromise = this.angularLoad.loadScript(`/bower_components/moment/locale/${language}.js`); - } - localePromise.then(() => { - this.amMoment.changeLocale(language); - }); + availableLanguages() { + return this.languageService.availableLanguages; } } diff --git a/src/app/components/language-selector/language-selector.html b/src/app/components/language-selector/language-selector.html index 4f7b6f6..9499df5 100644 --- a/src/app/components/language-selector/language-selector.html +++ b/src/app/components/language-selector/language-selector.html @@ -3,7 +3,7 @@ {{"language.selector" | translate}}