Skip to content
This repository was archived by the owner on Oct 1, 2018. It is now read-only.

Commit 5f27e23

Browse files
authored
Merge branch 'master' into bump-flex-layout
2 parents 27890ec + dfaeff8 commit 5f27e23

21 files changed

+383
-108
lines changed

src/app/app.component.spec.ts

+18-8
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
22
import { RouterTestingModule } from '@angular/router/testing';
33
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
44
import { MatSidenavModule, MatListModule } from '@angular/material';
5+
56
import { TranslateModule } from '@ngx-translate/core';
67

78
import { AppComponent } from './app.component';
89
import { CoreModule } from './core/core.module';
9-
import { LanguageService } from './core/services/language.service';
10+
import { OperatorMenuService } from './core/services/operator-menu.service';
1011

1112
describe('AppComponent', () => {
1213
let component: AppComponent;
1314
let fixture: ComponentFixture<AppComponent>;
14-
let languageService: LanguageService;
15+
let operatorMenuService: OperatorMenuService;
1516

1617
beforeEach(() => {
1718
TestBed.configureTestingModule({
@@ -24,19 +25,28 @@ describe('AppComponent', () => {
2425
TranslateModule.forRoot()
2526
],
2627
declarations: [AppComponent],
27-
providers: [LanguageService]
28+
providers: [OperatorMenuService]
2829
});
2930

31+
operatorMenuService = TestBed.get(OperatorMenuService);
3032
fixture = TestBed.createComponent(AppComponent);
3133
component = fixture.componentInstance;
32-
languageService = TestBed.get(LanguageService);
34+
fixture.detectChanges();
3335
});
3436

35-
it('should init supported languages on initialization', () => {
36-
spyOn(languageService, 'init').and.stub();
37+
it('should call openOperatorMenu on shouldOpenChildMenu if condition is true', () => {
38+
spyOn(operatorMenuService, 'openOperatorMenu').and.stub();
3739

38-
fixture.detectChanges();
40+
component.shouldOpenChildMenu('MENU.OPERATORS');
41+
42+
expect(operatorMenuService.openOperatorMenu).toHaveBeenCalled();
43+
});
44+
45+
it('should not call openOperatorMenu on shouldOpenChildMenu if condition is false', () => {
46+
spyOn(operatorMenuService, 'openOperatorMenu').and.stub();
47+
48+
component.shouldOpenChildMenu('MENU.HOME');
3949

40-
expect(languageService.init).toHaveBeenCalledWith(['en', 'ru']);
50+
expect(operatorMenuService.openOperatorMenu).not.toHaveBeenCalled();
4151
});
4252
});

src/app/app.component.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
import { filter, map, mergeMap } from 'rxjs/operators';
99
import { SeoService, SeoData } from './core/services/seo.service';
1010
import { OperatorMenuService } from './core/services/operator-menu.service';
11-
import { LanguageService } from './core/services/language.service';
1211

1312
interface Menu {
1413
title: string;
@@ -49,8 +48,7 @@ export class AppComponent implements OnInit {
4948
private _router: Router,
5049
private _activatedRoute: ActivatedRoute,
5150
private _seo: SeoService,
52-
private _operatorMenuService: OperatorMenuService,
53-
private languageService: LanguageService
51+
private _operatorMenuService: OperatorMenuService
5452
) {}
5553

5654
ngOnInit() {
@@ -69,8 +67,6 @@ export class AppComponent implements OnInit {
6967
filter((data: SeoData) => data.title !== undefined)
7068
)
7169
.subscribe((data: SeoData) => this._seo.setHeaders(data));
72-
73-
this.languageService.init(['en', 'ru']);
7470
}
7571

7672
shouldOpenChildMenu(title: string): void {

src/app/app.module.ts

-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import { CoreModule } from '../app/core/core.module';
1313
import { MaterialModule } from './material/material.module';
1414
import { AppRoutingModule } from './app-routing.module';
1515
import { AppComponent } from './app.component';
16-
import { LanguageService } from './core/services/language.service';
1716

1817
export function HttpLoaderFactory(http: HttpClient) {
1918
return new TranslateHttpLoader(http);
@@ -40,7 +39,6 @@ export function HttpLoaderFactory(http: HttpClient) {
4039
}
4140
})
4241
],
43-
providers: [LanguageService],
4442
bootstrap: [AppComponent]
4543
})
4644
export class AppModule {}

src/app/core/components/toolbar/toolbar.component.spec.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ import { MaterialModule } from '../../../material/material.module';
1010
import { LanguageService } from '../../services/language.service';
1111
import { TranslateModule } from '@ngx-translate/core';
1212
import { languagesList } from '../../data/language.data';
13+
import { OperatorsService } from '../../services/operators.service';
1314

1415
describe('ToolbarComponent', () => {
1516
const languages = languagesList;
1617
let component: ToolbarComponent;
1718
let fixture: ComponentFixture<ToolbarComponent>;
1819
let languageService: LanguageService;
20+
let operatorsService: OperatorsService;
1921

2022
beforeEach(() => {
2123
TestBed.configureTestingModule({
@@ -26,10 +28,11 @@ describe('ToolbarComponent', () => {
2628
TranslateModule.forRoot()
2729
],
2830
declarations: [ToolbarComponent],
29-
providers: [LanguageService]
31+
providers: [LanguageService, OperatorsService]
3032
});
3133

3234
languageService = TestBed.get(LanguageService);
35+
operatorsService = TestBed.get(OperatorsService);
3336
fixture = TestBed.createComponent(ToolbarComponent);
3437
component = fixture.componentInstance;
3538
});
@@ -50,15 +53,17 @@ describe('ToolbarComponent', () => {
5053
fixture.detectChanges();
5154

5255
expect(component.languagesList).toEqual(languages);
53-
expect(component.currentLang).toEqual(languages[1]);
5456
});
5557

5658
it('should change current language on onLangSwitch', () => {
5759
spyOn(languageService, 'saveLang').and.stub();
60+
spyOn(operatorsService, 'changeOperatorsLang').and.stub();
5861

5962
component.onLangSwitch(languages[1]);
6063

61-
expect(component.currentLang).toEqual(languages[1]);
64+
expect(operatorsService.changeOperatorsLang).toHaveBeenCalledWith(
65+
languages[1]
66+
);
6267
expect(languageService.saveLang).toHaveBeenCalledWith(languages[1]);
6368
});
6469
});
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { Component, OnInit, Output, EventEmitter } from '@angular/core';
2+
23
import { Lang } from '../../models/language.model';
34
import { LanguageService } from '../../services/language.service';
5+
import { OperatorsService } from '../../services/operators.service';
46

57
@Component({
68
selector: 'app-toolbar',
@@ -9,22 +11,23 @@ import { LanguageService } from '../../services/language.service';
911
})
1012
export class ToolbarComponent implements OnInit {
1113
@Output() navToggle = new EventEmitter<boolean>();
12-
currentLang: Lang;
1314
languagesList: Lang[];
1415

15-
constructor(private languageService: LanguageService) {}
16+
constructor(
17+
private languageService: LanguageService,
18+
private operatorsService: OperatorsService
19+
) {}
1620

1721
ngOnInit() {
1822
this.languagesList = this.languageService.getLanguagesList();
19-
this.currentLang = this.languageService.getCurrentLang();
2023
}
2124

2225
navOpen() {
2326
this.navToggle.emit(true);
2427
}
2528

2629
onLangSwitch(lang: Lang): void {
27-
this.currentLang = lang;
2830
this.languageService.saveLang(lang);
31+
this.operatorsService.changeOperatorsLang(lang);
2932
}
3033
}

src/app/core/core.module.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { SeoService } from './services/seo.service';
88
import { OperatorMenuService } from './services/operator-menu.service';
99
import { ToolbarComponent } from './components/toolbar/toolbar.component';
1010
import { MaterialModule } from '../material/material.module';
11+
import { OperatorsService } from './services/operators.service';
12+
import { LanguageService } from './services/language.service';
1113

1214
@NgModule({
1315
imports: [FlexLayoutModule, RouterModule, CommonModule, MaterialModule],
@@ -18,7 +20,13 @@ export class CoreModule {
1820
static forRoot() {
1921
return {
2022
ngModule: CoreModule,
21-
providers: [CopierService, SeoService, OperatorMenuService]
23+
providers: [
24+
CopierService,
25+
SeoService,
26+
OperatorMenuService,
27+
OperatorsService,
28+
LanguageService
29+
]
2230
};
2331
}
2432
}

src/app/core/services/language.service.ts

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { Injectable } from '@angular/core';
2+
23
import { TranslateService } from '@ngx-translate/core';
4+
35
import { Lang } from '../models/language.model';
46
import { languagesList } from '../data/language.data';
57

@@ -9,6 +11,7 @@ export class LanguageService {
911

1012
constructor(private translate: TranslateService) {
1113
this.fullLangList = languagesList;
14+
this.init(['en', 'ru']);
1215
}
1316

1417
init(languages: string[]): void {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { TestBed, tick, fakeAsync } from '@angular/core/testing';
2+
import { TranslateModule } from '@ngx-translate/core';
3+
4+
import { LanguageService } from './language.service';
5+
import { OperatorsService } from './operators.service';
6+
7+
describe('OperatorsService', () => {
8+
let operatorsService: OperatorsService;
9+
let languageService: LanguageService;
10+
const lang = {
11+
code: 'en',
12+
name: 'English',
13+
nativeName: 'English'
14+
};
15+
16+
beforeEach(() => {
17+
TestBed.configureTestingModule({
18+
imports: [TranslateModule.forRoot()],
19+
providers: [OperatorsService, LanguageService]
20+
});
21+
22+
operatorsService = TestBed.get(OperatorsService);
23+
languageService = TestBed.get(LanguageService);
24+
});
25+
26+
it('should set currentLang on initialization', () => {
27+
spyOn(languageService, 'getCurrentLang').and.returnValue(lang);
28+
29+
expect(Object.keys(operatorsService.currentLang)).toEqual(
30+
Object.keys(lang)
31+
);
32+
});
33+
34+
it(
35+
'should return Observable on getOperators',
36+
fakeAsync(() => {
37+
operatorsService.initOperators('en');
38+
tick();
39+
40+
const result = operatorsService.getOperators();
41+
42+
result.subscribe(data => {
43+
expect(data).toBeTruthy();
44+
});
45+
})
46+
);
47+
});
+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { Injectable } from '@angular/core';
2+
3+
import { Observable } from 'rxjs/Observable';
4+
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
5+
6+
import { OperatorDoc } from '../../../operator-docs';
7+
import { LanguageService } from './language.service';
8+
import { Lang } from '../models/language.model';
9+
10+
@Injectable()
11+
export class OperatorsService {
12+
readonly currentLang: Lang;
13+
private _operators = new BehaviorSubject([]);
14+
operators = this._operators.asObservable();
15+
16+
constructor(private languageService: LanguageService) {
17+
this.currentLang = this.languageService.getCurrentLang();
18+
19+
this.initOperators(this.currentLang.code);
20+
}
21+
22+
initOperators(code: string): void {
23+
switch (code) {
24+
case 'ru':
25+
import('../../../i18n/ru').then(module => {
26+
this._operators.next(module.ALL_OPERATORS_RU);
27+
});
28+
break;
29+
default:
30+
import('../../../operator-docs').then(module => {
31+
this._operators.next(module.ALL_OPERATORS_EN);
32+
});
33+
break;
34+
}
35+
}
36+
37+
changeOperatorsLang(lang: Lang): void {
38+
this.initOperators(lang.code);
39+
}
40+
41+
getOperators(): Observable<OperatorDoc[]> {
42+
return this.operators;
43+
}
44+
}

0 commit comments

Comments
 (0)