mirror of https://github.com/Squidex/squidex.git
1 changed files with 430 additions and 0 deletions
@ -0,0 +1,430 @@ |
|||
/* |
|||
* Squidex Headless CMS |
|||
* |
|||
* @license |
|||
* Copyright (c) Sebastian Stehle. All rights reserved |
|||
*/ |
|||
|
|||
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; |
|||
import { inject, TestBed } from '@angular/core/testing'; |
|||
|
|||
import { |
|||
AddFieldDto, |
|||
ApiUrlConfig, |
|||
CreateSchemaDto, |
|||
createProperties, |
|||
DateTime, |
|||
EntityCreatedDto, |
|||
FieldDto, |
|||
SchemaDetailsDto, |
|||
SchemaDto, |
|||
SchemaPropertiesDto, |
|||
SchemasService, |
|||
UpdateFieldDto, |
|||
UpdateSchemaDto, |
|||
Version |
|||
} from './../'; |
|||
|
|||
describe('SchemasService', () => { |
|||
let version = new Version('1'); |
|||
|
|||
beforeEach(() => { |
|||
TestBed.configureTestingModule({ |
|||
imports: [ |
|||
HttpClientTestingModule |
|||
], |
|||
providers: [ |
|||
SchemasService, |
|||
{ provide: ApiUrlConfig, useValue: new ApiUrlConfig('http://service/p/') } |
|||
] |
|||
}); |
|||
}); |
|||
|
|||
afterEach(inject([HttpTestingController], (httpMock: HttpTestingController) => { |
|||
httpMock.verify(); |
|||
})); |
|||
|
|||
it('should throw if creating invalid property type', () => { |
|||
expect(() => createProperties('invalid')).toThrow('Invalid properties type'); |
|||
}); |
|||
|
|||
it('should make get request to get schemas', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
let schemas: SchemaDto[] | null = null; |
|||
|
|||
schemasService.getSchemas('my-app').subscribe(result => { |
|||
schemas = result; |
|||
}); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas'); |
|||
|
|||
expect(req.request.method).toEqual('GET'); |
|||
expect(req.request.headers.get('If-Match')).toBeNull(); |
|||
|
|||
req.flush([ |
|||
{ |
|||
id: 'id1', |
|||
name: 'name1', |
|||
properties: { |
|||
label: 'label1', |
|||
hints: 'hints1' |
|||
}, |
|||
isPublished: true, |
|||
created: '2016-12-12T10:10', |
|||
createdBy: 'Created1', |
|||
lastModified: '2017-12-12T10:10', |
|||
lastModifiedBy: 'LastModifiedBy1', |
|||
version: 11, |
|||
data: {} |
|||
}, |
|||
{ |
|||
id: 'id2', |
|||
name: 'name2', |
|||
properties: { |
|||
label: 'label2', |
|||
hints: 'hints2' |
|||
}, |
|||
isPublished: true, |
|||
created: '2016-10-12T10:10', |
|||
createdBy: 'Created2', |
|||
lastModified: '2017-10-12T10:10', |
|||
lastModifiedBy: 'LastModifiedBy2', |
|||
version: 22, |
|||
data: {} |
|||
} |
|||
]); |
|||
|
|||
expect(schemas).toEqual([ |
|||
new SchemaDto('id1', 'name1', new SchemaPropertiesDto('label1', 'hints1'), true, 'Created1', 'LastModifiedBy1', |
|||
DateTime.parseISO_UTC('2016-12-12T10:10'), |
|||
DateTime.parseISO_UTC('2017-12-12T10:10'), |
|||
new Version('11')), |
|||
new SchemaDto('id2', 'name2', new SchemaPropertiesDto('label2', 'hints2'), true, 'Created2', 'LastModifiedBy2', |
|||
DateTime.parseISO_UTC('2016-10-12T10:10'), |
|||
DateTime.parseISO_UTC('2017-10-12T10:10'), |
|||
new Version('22')) |
|||
]); |
|||
})); |
|||
|
|||
it('should make get request to get schema', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
let schema: SchemaDetailsDto | null = null; |
|||
|
|||
schemasService.getSchema('my-app', 'my-schema', version).subscribe(result => { |
|||
schema = result; |
|||
}); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema'); |
|||
|
|||
expect(req.request.method).toEqual('GET'); |
|||
expect(req.request.headers.get('If-Match')).toBeNull(); |
|||
|
|||
req.flush({ |
|||
id: 'id1', |
|||
name: 'name1', |
|||
isPublished: true, |
|||
created: '2016-12-12T10:10', |
|||
createdBy: 'Created1', |
|||
lastModified: '2017-12-12T10:10', |
|||
lastModifiedBy: 'LastModifiedBy1', |
|||
version: 11, |
|||
properties: { |
|||
label: 'label1', |
|||
hints: 'hints1' |
|||
}, |
|||
fields: [ |
|||
{ |
|||
fieldId: 1, |
|||
name: 'field1', |
|||
isHidden: true, |
|||
isDisabled: true, |
|||
partitioning: 'language', |
|||
properties: { |
|||
fieldType: 'Number' |
|||
} |
|||
}, |
|||
{ |
|||
fieldId: 2, |
|||
name: 'field2', |
|||
isHidden: true, |
|||
isDisabled: true, |
|||
partitioning: 'language', |
|||
properties: { |
|||
fieldType: 'String' |
|||
} |
|||
}, |
|||
{ |
|||
fieldId: 3, |
|||
name: 'field3', |
|||
isHidden: true, |
|||
isDisabled: true, |
|||
partitioning: 'language', |
|||
properties: { |
|||
fieldType: 'Boolean' |
|||
} |
|||
}, |
|||
{ |
|||
fieldId: 4, |
|||
name: 'field4', |
|||
isHidden: true, |
|||
isDisabled: true, |
|||
partitioning: 'language', |
|||
properties: { |
|||
fieldType: 'DateTime' |
|||
} |
|||
}, |
|||
{ |
|||
fieldId: 5, |
|||
name: 'field5', |
|||
isHidden: true, |
|||
isDisabled: true, |
|||
partitioning: 'language', |
|||
properties: { |
|||
fieldType: 'Json' |
|||
} |
|||
}, |
|||
{ |
|||
fieldId: 6, |
|||
name: 'field6', |
|||
isHidden: true, |
|||
isDisabled: true, |
|||
partitioning: 'language', |
|||
properties: { |
|||
fieldType: 'Geolocation' |
|||
} |
|||
}, |
|||
{ |
|||
fieldId: 7, |
|||
name: 'field7', |
|||
isHidden: true, |
|||
isDisabled: true, |
|||
partitioning: 'language', |
|||
properties: { |
|||
fieldType: 'Assets' |
|||
} |
|||
}, |
|||
{ |
|||
fieldId: 8, |
|||
name: 'field8', |
|||
isHidden: true, |
|||
isDisabled: true, |
|||
partitioning: 'language', |
|||
properties: { |
|||
fieldType: 'References' |
|||
} |
|||
} |
|||
] |
|||
}); |
|||
|
|||
expect(schema).toEqual( |
|||
new SchemaDetailsDto('id1', 'name1', new SchemaPropertiesDto('label1', 'hints1'), true, 'Created1', 'LastModifiedBy1', |
|||
DateTime.parseISO_UTC('2016-12-12T10:10'), |
|||
DateTime.parseISO_UTC('2017-12-12T10:10'), |
|||
new Version('11'), |
|||
[ |
|||
new FieldDto(1, 'field1', true, true, 'language', createProperties('Number')), |
|||
new FieldDto(2, 'field2', true, true, 'language', createProperties('String')), |
|||
new FieldDto(3, 'field3', true, true, 'language', createProperties('Boolean')), |
|||
new FieldDto(4, 'field4', true, true, 'language', createProperties('DateTime')), |
|||
new FieldDto(5, 'field5', true, true, 'language', createProperties('Json')), |
|||
new FieldDto(6, 'field6', true, true, 'language', createProperties('Geolocation')), |
|||
new FieldDto(7, 'field7', true, true, 'language', createProperties('Assets')), |
|||
new FieldDto(8, 'field8', true, true, 'language', createProperties('References')) |
|||
])); |
|||
})); |
|||
|
|||
it('should make post request to create schema', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
const dto = new CreateSchemaDto('name'); |
|||
|
|||
let created: EntityCreatedDto | null = null; |
|||
|
|||
schemasService.postSchema('my-app', dto, version).subscribe(result => { |
|||
created = result; |
|||
}); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas'); |
|||
|
|||
expect(req.request.method).toEqual('POST'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({ id: 'my-schema' }); |
|||
|
|||
expect(created).toEqual( |
|||
new EntityCreatedDto('my-schema')); |
|||
})); |
|||
|
|||
it('should make post request to add field', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
const dto = new AddFieldDto('name', 'invariant', createProperties('Number')); |
|||
|
|||
let created: EntityCreatedDto | null = null; |
|||
|
|||
schemasService.postField('my-app', 'my-schema', dto, version).subscribe(result => { |
|||
created = result; |
|||
}); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema/fields'); |
|||
|
|||
expect(req.request.method).toEqual('POST'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({ id: 123 }); |
|||
|
|||
expect(created).toEqual( |
|||
new EntityCreatedDto(123)); |
|||
})); |
|||
|
|||
it('should make put request to update schema', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
const dto = new UpdateSchemaDto('label', 'hints'); |
|||
|
|||
schemasService.putSchema('my-app', 'my-schema', dto, version).subscribe(); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema'); |
|||
|
|||
expect(req.request.method).toEqual('PUT'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({ id: 123 }); |
|||
})); |
|||
|
|||
it('should make put request to update field', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
const dto = new UpdateFieldDto(createProperties('Number')); |
|||
|
|||
schemasService.putField('my-app', 'my-schema', 1, dto, version).subscribe(); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema/fields/1'); |
|||
|
|||
expect(req.request.method).toEqual('PUT'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({}); |
|||
})); |
|||
|
|||
it('should make put request to update field ordering', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
const dto = [1, 2, 3]; |
|||
|
|||
schemasService.putFieldOrdering('my-app', 'my-schema', dto, version).subscribe(); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema/fields/ordering'); |
|||
|
|||
expect(req.request.method).toEqual('PUT'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({}); |
|||
})); |
|||
|
|||
it('should make put request to publish schema', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
schemasService.publishSchema('my-app', 'my-schema', version).subscribe(); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema/publish'); |
|||
|
|||
expect(req.request.method).toEqual('PUT'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({}); |
|||
})); |
|||
|
|||
it('should make put request to unpublish schema', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
schemasService.unpublishSchema('my-app', 'my-schema', version).subscribe(); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema/unpublish'); |
|||
|
|||
expect(req.request.method).toEqual('PUT'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({}); |
|||
})); |
|||
|
|||
it('should make put request to enable field', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
schemasService.enableField('my-app', 'my-schema', 1, version).subscribe(); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema/fields/1/enable'); |
|||
|
|||
expect(req.request.method).toEqual('PUT'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({}); |
|||
})); |
|||
|
|||
it('should make put request to disable field', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
schemasService.disableField('my-app', 'my-schema', 1, version).subscribe(); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema/fields/1/disable'); |
|||
|
|||
expect(req.request.method).toEqual('PUT'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({}); |
|||
})); |
|||
|
|||
it('should make put request to show field', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
schemasService.showField('my-app', 'my-schema', 1, version).subscribe(); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema/fields/1/show'); |
|||
|
|||
expect(req.request.method).toEqual('PUT'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({}); |
|||
})); |
|||
|
|||
it('should make put request to hide field', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
schemasService.hideField('my-app', 'my-schema', 1, version).subscribe(); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema/fields/1/hide'); |
|||
|
|||
expect(req.request.method).toEqual('PUT'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({}); |
|||
})); |
|||
|
|||
it('should make delete request to delete field', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
schemasService.deleteField('my-app', 'my-schema', 1, version).subscribe(); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema/fields/1'); |
|||
|
|||
expect(req.request.method).toEqual('DELETE'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({}); |
|||
})); |
|||
|
|||
it('should make delete request to delete schema', |
|||
inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { |
|||
|
|||
schemasService.deleteSchema('my-app', 'my-schema', version).subscribe(); |
|||
|
|||
const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema'); |
|||
|
|||
expect(req.request.method).toEqual('DELETE'); |
|||
expect(req.request.headers.get('If-Match')).toBe(version.value); |
|||
|
|||
req.flush({}); |
|||
})); |
|||
}); |
|||
Loading…
Reference in new issue