mirror of https://github.com/Squidex/squidex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
5.9 KiB
185 lines
5.9 KiB
/*
|
|
* Squidex Headless CMS
|
|
*
|
|
* @license
|
|
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
|
|
*/
|
|
|
|
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
|
|
import { inject, TestBed } from '@angular/core/testing';
|
|
|
|
import {
|
|
AnalyticsService,
|
|
ApiUrlConfig,
|
|
AppLanguageDto,
|
|
AppLanguagesDto,
|
|
AppLanguagesPayload,
|
|
AppLanguagesService,
|
|
Resource,
|
|
ResourceLinks,
|
|
Version
|
|
} from '@app/shared/internal';
|
|
|
|
describe('AppLanguagesService', () => {
|
|
const version = new Version('1');
|
|
|
|
beforeEach(() => {
|
|
TestBed.configureTestingModule({
|
|
imports: [
|
|
HttpClientTestingModule
|
|
],
|
|
providers: [
|
|
AppLanguagesService,
|
|
{ provide: ApiUrlConfig, useValue: new ApiUrlConfig('http://service/p/') },
|
|
{ provide: AnalyticsService, useValue: new AnalyticsService() }
|
|
]
|
|
});
|
|
});
|
|
|
|
afterEach(inject([HttpTestingController], (httpMock: HttpTestingController) => {
|
|
httpMock.verify();
|
|
}));
|
|
|
|
it('should make get request to get app languages',
|
|
inject([AppLanguagesService, HttpTestingController], (appLanguagesService: AppLanguagesService, httpMock: HttpTestingController) => {
|
|
|
|
let languages: AppLanguagesDto;
|
|
|
|
appLanguagesService.getLanguages('my-app').subscribe(result => {
|
|
languages = result;
|
|
});
|
|
|
|
const req = httpMock.expectOne('http://service/p/api/apps/my-app/languages');
|
|
|
|
expect(req.request.method).toEqual('GET');
|
|
expect(req.request.headers.get('If-Match')).toBeNull();
|
|
|
|
req.flush(languagesResponse('en', 'de', 'it'), {
|
|
headers: {
|
|
etag: '2'
|
|
}
|
|
});
|
|
|
|
expect(languages!).toEqual({payload: createLanguages('en', 'de', 'it'), version: new Version('2') });
|
|
}));
|
|
|
|
it('should make post request to add language',
|
|
inject([AppLanguagesService, HttpTestingController], (appLanguagesService: AppLanguagesService, httpMock: HttpTestingController) => {
|
|
|
|
const dto = { language: 'de' };
|
|
|
|
let languages: AppLanguagesDto;
|
|
|
|
appLanguagesService.postLanguage('my-app', dto, version).subscribe(result => {
|
|
languages = result;
|
|
});
|
|
|
|
const req = httpMock.expectOne('http://service/p/api/apps/my-app/languages');
|
|
|
|
expect(req.request.method).toEqual('POST');
|
|
expect(req.request.headers.get('If-Match')).toEqual(version.value);
|
|
|
|
req.flush(languagesResponse('en', 'de', 'it'), {
|
|
headers: {
|
|
etag: '2'
|
|
}
|
|
});
|
|
|
|
expect(languages!).toEqual({payload: createLanguages('en', 'de', 'it'), version: new Version('2') });
|
|
}));
|
|
|
|
it('should make put request to make master language',
|
|
inject([AppLanguagesService, HttpTestingController], (appLanguagesService: AppLanguagesService, httpMock: HttpTestingController) => {
|
|
|
|
const dto = { isMaster: true };
|
|
|
|
const resource: Resource = {
|
|
_links: {
|
|
update: { method: 'PUT', href: 'api/apps/my-app/languages/de' }
|
|
}
|
|
};
|
|
|
|
let languages: AppLanguagesDto;
|
|
|
|
appLanguagesService.putLanguage('my-app', resource, dto, version).subscribe(result => {
|
|
languages = result;
|
|
});
|
|
|
|
const req = httpMock.expectOne('http://service/p/api/apps/my-app/languages/de');
|
|
|
|
expect(req.request.method).toEqual('PUT');
|
|
expect(req.request.headers.get('If-Match')).toEqual(version.value);
|
|
|
|
req.flush(languagesResponse('en', 'de', 'it'), {
|
|
headers: {
|
|
etag: '2'
|
|
}
|
|
});
|
|
|
|
expect(languages!).toEqual({payload: createLanguages('en', 'de', 'it'), version: new Version('2') });
|
|
}));
|
|
|
|
it('should make delete request to remove language',
|
|
inject([AppLanguagesService, HttpTestingController], (appLanguagesService: AppLanguagesService, httpMock: HttpTestingController) => {
|
|
|
|
const resource: Resource = {
|
|
_links: {
|
|
delete: { method: 'DELETE', href: 'api/apps/my-app/languages/de' }
|
|
}
|
|
};
|
|
|
|
let languages: AppLanguagesDto;
|
|
|
|
appLanguagesService.deleteLanguage('my-app', resource, version).subscribe(result => {
|
|
languages = result;
|
|
});
|
|
|
|
const req = httpMock.expectOne('http://service/p/api/apps/my-app/languages/de');
|
|
|
|
expect(req.request.method).toEqual('DELETE');
|
|
expect(req.request.headers.get('If-Match')).toEqual(version.value);
|
|
|
|
req.flush(languagesResponse('en', 'de', 'it'), {
|
|
headers: {
|
|
etag: '2'
|
|
}
|
|
});
|
|
|
|
expect(languages!).toEqual({payload: createLanguages('en', 'de', 'it'), version: new Version('2') });
|
|
}));
|
|
|
|
function languagesResponse(...codes: string[]) {
|
|
return {
|
|
items: codes.map((code, i) => ({
|
|
iso2Code: code,
|
|
englishName: code,
|
|
isMaster: i === 0,
|
|
isOptional: i % 2 === 1,
|
|
fallback: codes.removed(code),
|
|
_links: {
|
|
update: { method: 'PUT', href: `/languages/${code}` }
|
|
}
|
|
})),
|
|
_links: {
|
|
create: { method: 'POST', href: '/languages' }
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
export function createLanguages(...codes: ReadonlyArray<string>): AppLanguagesPayload {
|
|
return {
|
|
items: codes.map((code, i) => createLanguage(code, codes, i)),
|
|
_links: {
|
|
create: { method: 'POST', href: '/languages' }
|
|
},
|
|
canCreate: true
|
|
};
|
|
}
|
|
function createLanguage(code: string, codes: ReadonlyArray<string>, i: number) {
|
|
const links: ResourceLinks = {
|
|
update: { method: 'PUT', href: `/languages/${code}` }
|
|
};
|
|
|
|
return new AppLanguageDto(links, code, code, i === 0, i % 2 === 1, codes.removed(code));
|
|
}
|