From f5c48da923574a76ea1f99e5d19627cd5c68840f Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 16 Dec 2018 18:08:28 +0100 Subject: [PATCH] Tests fixed and state for preview urls. --- .../shared/services/schemas.service.spec.ts | 24 +++++++++++++++++-- .../app/shared/services/schemas.service.ts | 13 ++++++++++ .../app/shared/state/comments.state.spec.ts | 2 +- .../app/shared/state/schemas.state.spec.ts | 21 ++++++++++++++-- src/Squidex/app/shared/state/schemas.state.ts | 17 ++++++++++++- 5 files changed, 71 insertions(+), 6 deletions(-) diff --git a/src/Squidex/app/shared/services/schemas.service.spec.ts b/src/Squidex/app/shared/services/schemas.service.spec.ts index 3b7df6d12..807cc0e34 100644 --- a/src/Squidex/app/shared/services/schemas.service.spec.ts +++ b/src/Squidex/app/shared/services/schemas.service.spec.ts @@ -147,6 +147,9 @@ describe('SchemasService', () => { label: 'label1', hints: 'hints1' }, + previewUrls: { + 'Default': 'url' + }, fields: [ { fieldId: 11, @@ -312,6 +315,9 @@ describe('SchemasService', () => { new RootFieldDto(19, 'field19', createProperties('String'), 'language', true, true, true), new RootFieldDto(20, 'field20', createProperties('Tags'), 'language', true, true, true) ], + { + 'Default': 'url' + }, '', '', '', @@ -343,8 +349,7 @@ describe('SchemasService', () => { } }); - expect(schema!).toEqual( - new SchemaDetailsDto('1', dto.name, '', new SchemaPropertiesDto(), true, false, now, user, now, user, new Version('2'), [])); + expect(schema!).toEqual(new SchemaDetailsDto('1', dto.name, '', new SchemaPropertiesDto(), true, false, now, user, now, user, new Version('2'), [], {})); })); it('should make put request to update schema', @@ -392,6 +397,21 @@ describe('SchemasService', () => { req.flush({}); })); + it('should make put request to update preview urls', + inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { + + const dto = {}; + + schemasService.putPreviewUrls('my-app', 'my-schema', dto, version).subscribe(); + + const req = httpMock.expectOne('http://service/p/api/apps/my-app/schemas/my-schema/preview-urls'); + + expect(req.request.method).toEqual('PUT'); + expect(req.request.headers.get('If-Match')).toBe(version.value); + + req.flush({}); + })); + it('should make post request to add field', inject([SchemasService, HttpTestingController], (schemasService: SchemasService, httpMock: HttpTestingController) => { diff --git a/src/Squidex/app/shared/services/schemas.service.ts b/src/Squidex/app/shared/services/schemas.service.ts index a02bbeeb8..0bf1276dd 100644 --- a/src/Squidex/app/shared/services/schemas.service.ts +++ b/src/Squidex/app/shared/services/schemas.service.ts @@ -64,6 +64,7 @@ export class SchemaDetailsDto extends SchemaDto { lastModifiedBy: string, version: Version, public readonly fields: RootFieldDto[], + public readonly previewUrls: { [name: string]: string }, public readonly scriptQuery?: string, public readonly scriptCreate?: string, public readonly scriptUpdate?: string, @@ -317,6 +318,7 @@ export class SchemasService { DateTime.parseISO_UTC(body.lastModified), body.lastModifiedBy, response.version, fields, + body.previewUrls || {}, body.scriptQuery, body.scriptCreate, body.scriptUpdate, @@ -346,6 +348,7 @@ export class SchemasService { now, user, response.version, dto.fields || [], + {}, body.scriptQuery, body.scriptCreate, body.scriptUpdate, @@ -418,6 +421,16 @@ export class SchemasService { pretifyError('Failed to change category. Please reload.')); } + public putPreviewUrls(appName: string, schemaName: string, dto: { [name: string]: string }, version: Version): Observable> { + const url = this.apiUrl.buildUrl(`api/apps/${appName}/schemas/${schemaName}/preview-urls`); + + return HTTP.putVersioned(this.http, url, dto, version).pipe( + tap(() => { + this.analytics.trackEvent('Schema', 'PreviewUrlsConfigured', appName); + }), + pretifyError('Failed to configure preview urls. Please reload.')); + } + public postField(appName: string, schemaName: string, dto: AddFieldDto, parentId: number | undefined, version: Version): Observable> { const url = this.buildUrl(appName, schemaName, parentId, ''); diff --git a/src/Squidex/app/shared/state/comments.state.spec.ts b/src/Squidex/app/shared/state/comments.state.spec.ts index cf12f8101..22d44f376 100644 --- a/src/Squidex/app/shared/state/comments.state.spec.ts +++ b/src/Squidex/app/shared/state/comments.state.spec.ts @@ -47,7 +47,7 @@ describe('CommentsState', () => { commentsService = Mock.ofType(); - commentsService.setup(x => x.getComments(app, commentsId, new Version(''))) + commentsService.setup(x => x.getComments(app, commentsId, new Version('-1'))) .returns(() => of(oldComments)); commentsState = new CommentsState(appsState.object, commentsId, commentsService.object, dialogs.object); diff --git a/src/Squidex/app/shared/state/schemas.state.spec.ts b/src/Squidex/app/shared/state/schemas.state.spec.ts index c02091aac..362450e21 100644 --- a/src/Squidex/app/shared/state/schemas.state.spec.ts +++ b/src/Squidex/app/shared/state/schemas.state.spec.ts @@ -56,7 +56,8 @@ describe('SchemasState', () => { creation, creator, creation, creator, version, - [field1, field2]); + [field1, field2], + {}); let dialogs: IMock; let appsState: IMock; @@ -263,6 +264,22 @@ describe('SchemasState', () => { expectToBeModified(schema_1); }); + it('should update script properties and update user info when preview urls configured', () => { + const request = { + 'Default': 'url' + }; + + schemasService.setup(x => x.putPreviewUrls(app, schema.name, It.isAny(), version)) + .returns(() => of(new Versioned(newVersion, {}))); + + schemasState.configurePreviewUrls(schema, request, modified).subscribe(); + + const schema_1 = schemasState.snapshot.schemas.at(1); + + expect(schema_1.previewUrls).toEqual(request); + expectToBeModified(schema_1); + }); + it('should update script properties and update user info when scripts configured', () => { const request = new UpdateSchemaScriptsDto('query', 'create', 'update', 'delete', 'change'); @@ -284,7 +301,7 @@ describe('SchemasState', () => { it('should add schema to snapshot when created', () => { const request = new CreateSchemaDto('newName'); - const result = new SchemaDetailsDto('id4', 'newName', '', {}, false, false, modified, modifier, modified, modifier, version, []); + const result = new SchemaDetailsDto('id4', 'newName', '', {}, false, false, modified, modifier, modified, modifier, version, [], {}); schemasService.setup(x => x.postSchema(app, request, modifier, modified)) .returns(() => of(result)); diff --git a/src/Squidex/app/shared/state/schemas.state.ts b/src/Squidex/app/shared/state/schemas.state.ts index b7c64a602..4e3d65fd3 100644 --- a/src/Squidex/app/shared/state/schemas.state.ts +++ b/src/Squidex/app/shared/state/schemas.state.ts @@ -191,6 +191,14 @@ export class SchemasState extends State { notify(this.dialogs)); } + public configurePreviewUrls(schema: SchemaDetailsDto, request: { [name: string]: string }, now?: DateTime): Observable { + return this.schemasService.putPreviewUrls(this.appName, schema.name, request, schema.version).pipe( + tap(dto => { + this.replaceSchema(configurePreviewUrls(schema, request, this.user, dto.version, now)); + }), + notify(this.dialogs)); + } + public configureScripts(schema: SchemaDetailsDto, request: UpdateSchemaScriptsDto, now?: DateTime): Observable { return this.schemasService.putScripts(this.appName, schema.name, request, schema.version).pipe( tap(dto => { @@ -370,7 +378,6 @@ const setPublished = (schema: T, isPublished: boolean, user version }); - const changeCategory = (schema: T, category: string, user: string, version: Version, now?: DateTime) => schema.with({ category, @@ -379,6 +386,14 @@ const changeCategory = (schema: T, category: string, user: version }); +const configurePreviewUrls = (schema: SchemaDetailsDto, previewUrls: { [name: string]: string }, user: string, version: Version, now?: DateTime) => + schema.with({ + previewUrls, + lastModified: now || DateTime.now(), + lastModifiedBy: user, + version + }); + const configureScripts = (schema: SchemaDetailsDto, scripts: UpdateSchemaScriptsDto, user: string, version: Version, now?: DateTime) => schema.with({ ...scripts,