mirror of https://github.com/Squidex/squidex.git
11 changed files with 102 additions and 66 deletions
@ -0,0 +1,38 @@ |
|||
/* |
|||
* Squidex Headless CMS |
|||
* |
|||
* @license |
|||
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. |
|||
*/ |
|||
|
|||
import { Observable } from 'rxjs'; |
|||
import { IMock, Mock, Times } from 'typemoq'; |
|||
|
|||
import { LanguagesState } from '@app/shared'; |
|||
|
|||
import { LoadLanguagesGuard } from './load-languages.guard'; |
|||
|
|||
describe('LoadLanguagesGuard', () => { |
|||
let languagesState: IMock<LanguagesState>; |
|||
let languageGuard: LoadLanguagesGuard; |
|||
|
|||
beforeEach(() => { |
|||
languagesState = Mock.ofType<LanguagesState>(); |
|||
languageGuard = new LoadLanguagesGuard(languagesState.object); |
|||
}); |
|||
|
|||
it('should load languages', () => { |
|||
languagesState.setup(x => x.load()) |
|||
.returns(() => Observable.of(null)); |
|||
|
|||
let result = false; |
|||
|
|||
languageGuard.canActivate().subscribe(value => { |
|||
result = value; |
|||
}); |
|||
|
|||
expect(result).toBeTruthy(); |
|||
|
|||
languagesState.verify(x => x.load(), Times.once()); |
|||
}); |
|||
}); |
|||
@ -0,0 +1,24 @@ |
|||
/* |
|||
* Squidex Headless CMS |
|||
* |
|||
* @license |
|||
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. |
|||
*/ |
|||
|
|||
import { Injectable } from '@angular/core'; |
|||
import { CanActivate } from '@angular/router'; |
|||
import { Observable } from 'rxjs'; |
|||
|
|||
import { LanguagesState } from './../state/languages.state'; |
|||
|
|||
@Injectable() |
|||
export class LoadLanguagesGuard implements CanActivate { |
|||
constructor( |
|||
private readonly languagesState: LanguagesState |
|||
) { |
|||
} |
|||
|
|||
public canActivate(): Observable<boolean> { |
|||
return this.languagesState.load().map(a => true); |
|||
} |
|||
} |
|||
@ -1,42 +0,0 @@ |
|||
/* |
|||
* Squidex Headless CMS |
|||
* |
|||
* @license |
|||
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. |
|||
*/ |
|||
|
|||
import { Injectable } from '@angular/core'; |
|||
import { ActivatedRouteSnapshot, Resolve, Router } from '@angular/router'; |
|||
import { Observable } from 'rxjs'; |
|||
|
|||
import { allParams } from '@app/framework'; |
|||
|
|||
import { AppLanguageDto, AppLanguagesService } from './../services/app-languages.service'; |
|||
|
|||
@Injectable() |
|||
export class ResolveAppLanguagesGuard implements Resolve<AppLanguageDto[] | null> { |
|||
constructor( |
|||
private readonly appLanguagesService: AppLanguagesService, |
|||
private readonly router: Router |
|||
) { |
|||
} |
|||
|
|||
public resolve(route: ActivatedRouteSnapshot): Observable<AppLanguageDto[] | null> { |
|||
const appName = allParams(route)['appName']; |
|||
|
|||
const result = |
|||
this.appLanguagesService.getLanguages(appName).map(d => d.languages) |
|||
.do(dto => { |
|||
if (!dto) { |
|||
this.router.navigate(['/404']); |
|||
} |
|||
}) |
|||
.catch(error => { |
|||
this.router.navigate(['/404']); |
|||
|
|||
return Observable.of(null); |
|||
}); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue