From 101921ceac142a2e4a7958f07843c48891635cac Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Tue, 29 May 2018 15:03:40 +0200 Subject: [PATCH] refactored IDToUUIDSerializer --- .../core/cache/it-to-uuid-serializer.spec.ts | 34 +++++++++++++++++++ src/app/core/cache/it-to-uuid-serializer.ts | 19 +++++++++++ .../normalized-bitstream-format.model.ts | 17 ++-------- .../normalized-resource-policy.model.ts | 19 +++-------- 4 files changed, 60 insertions(+), 29 deletions(-) create mode 100644 src/app/core/cache/it-to-uuid-serializer.spec.ts create mode 100644 src/app/core/cache/it-to-uuid-serializer.ts diff --git a/src/app/core/cache/it-to-uuid-serializer.spec.ts b/src/app/core/cache/it-to-uuid-serializer.spec.ts new file mode 100644 index 0000000000..425aa26c5b --- /dev/null +++ b/src/app/core/cache/it-to-uuid-serializer.spec.ts @@ -0,0 +1,34 @@ +import { IDToUUIDSerializer } from './it-to-uuid-serializer'; + +fdescribe('IDToUUIDSerializer', () => { + let serializer: IDToUUIDSerializer; + const prefix = 'test-prefix'; + + beforeEach(() => { + serializer = new IDToUUIDSerializer(prefix); + }); + + describe('Serialize', () => { + it('should return undefined', () => { + expect(serializer.Serialize('some-uuid')).toBeUndefined() + }); + }); + + describe('Deserialize', () => { + describe('when ID is defined', () => { + it('should prepend the prefix to the ID', () => { + const id = 'some-id'; + expect(serializer.Deserialize(id)).toBe(`${prefix}-${id}`); + }); + }); + + describe('when ID is null or undefined', () => { + it('should return null or undefined', () => { + expect(serializer.Deserialize(null)).toBeNull(); + expect(serializer.Deserialize(undefined)).toBeUndefined(); + }); + }); + + }); + +}); diff --git a/src/app/core/cache/it-to-uuid-serializer.ts b/src/app/core/cache/it-to-uuid-serializer.ts new file mode 100644 index 0000000000..0d619f457b --- /dev/null +++ b/src/app/core/cache/it-to-uuid-serializer.ts @@ -0,0 +1,19 @@ +import { hasValue } from '../../shared/empty.util'; + +export class IDToUUIDSerializer { + constructor(private prefix: string) { + } + + Serialize(uuid: string): any { + return undefined; // ui-only uuid doesn't need to be sent back to the server + } + + Deserialize(id: string): string { + if (hasValue(id)) { + return `${this.prefix}-${id}`; + } else { + return id; + } + + } +} diff --git a/src/app/core/cache/models/normalized-bitstream-format.model.ts b/src/app/core/cache/models/normalized-bitstream-format.model.ts index 8126c6f850..db9fa571f1 100644 --- a/src/app/core/cache/models/normalized-bitstream-format.model.ts +++ b/src/app/core/cache/models/normalized-bitstream-format.model.ts @@ -1,20 +1,9 @@ import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; +import { BitstreamFormat } from '../../shared/bitstream-format.model'; import { mapsTo } from '../builders/build-decorators'; -import { BitstreamFormat } from '../../shared/bitstream-format.model'; +import { IDToUUIDSerializer } from '../it-to-uuid-serializer'; import { NormalizedObject } from './normalized-object.model'; -import { NormalizedDSpaceObject } from './normalized-dspace-object.model'; - -// While BitstreamFormats don't have a UUID, but need to be cachable: use this serializer. Remove it when the REST API returns them with UUID -const BitstreamFormatUUIDSerializer = { - Serialize(json: any): any { - // No need to serialize again, de ID is already serialized by the id field itself - return {}; - }, - Deserialize(json: any): any { - return 'bitstream-format-' + json.id; - } -}; @mapsTo(BitstreamFormat) @inheritSerialization(NormalizedObject) @@ -41,6 +30,6 @@ export class NormalizedBitstreamFormat extends NormalizedObject { @autoserialize id: string; - @autoserializeAs(BitstreamFormatUUIDSerializer) + @autoserializeAs(new IDToUUIDSerializer('bitstream-format'), 'id') uuid: string; } diff --git a/src/app/core/cache/models/normalized-resource-policy.model.ts b/src/app/core/cache/models/normalized-resource-policy.model.ts index 253019fc23..3a874da46b 100644 --- a/src/app/core/cache/models/normalized-resource-policy.model.ts +++ b/src/app/core/cache/models/normalized-resource-policy.model.ts @@ -1,20 +1,9 @@ import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; - -import { mapsTo } from '../builders/build-decorators'; -import { BitstreamFormat } from '../../shared/bitstream-format.model'; -import { NormalizedObject } from './normalized-object.model'; import { ResourcePolicy } from '../../shared/resource-policy.model'; -// While ResourcePolicyUUIDSerializer don't have a UUID, but need to be cachable: use this serializer. Remove it when the REST API returns them with UUID -const ResourcePolicyUUIDSerializer = { - Serialize(json: any): any { - // No need to serialize again, de ID is already serialized by the id field itself - return {}; - }, - Deserialize(json: any): any { - return 'resource-policy-' + json.id; - } -}; +import { mapsTo } from '../builders/build-decorators'; +import { IDToUUIDSerializer } from '../it-to-uuid-serializer'; +import { NormalizedObject } from './normalized-object.model'; @mapsTo(ResourcePolicy) @inheritSerialization(NormalizedObject) @@ -29,6 +18,6 @@ export class NormalizedResourcePolicy extends NormalizedObject { @autoserialize id: string; - @autoserializeAs(ResourcePolicyUUIDSerializer) + @autoserializeAs(new IDToUUIDSerializer('resource-policy'), 'id') uuid: string; }