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