diff --git a/src/app/core/cache/builders/build-decorators.spec.ts b/src/app/core/cache/builders/build-decorators.spec.ts new file mode 100644 index 0000000000..e47cf1a80a --- /dev/null +++ b/src/app/core/cache/builders/build-decorators.spec.ts @@ -0,0 +1,83 @@ +import { HALLink } from '../../shared/hal-link.model'; +import { HALResource } from '../../shared/hal-resource.model'; +import { ResourceType } from '../../shared/resource-type'; +import { + dataService, + getDataServiceFor, + getLinkDefinition, + link, +} from './build-decorators'; + +/* tslint:disable:max-classes-per-file */ +class TestService {} +class AnotherTestService {} +class TestHALResource implements HALResource { + _links: { + self: HALLink; + foo: HALLink; + }; + + bar?: any +} +let testType; + +describe('build decorators', () => { + beforeEach(() => { + testType = new ResourceType('testType-' + new Date().getTime()); + }); + describe('@dataService/getDataServiceFor', () => { + + it('should register a resourcetype for a dataservice', () => { + dataService(testType)(TestService); + expect(getDataServiceFor(testType)).toBe(TestService); + }); + + describe(`when the resource type isn't specified`, () => { + it(`should throw an error`, () => { + expect(() => { + dataService(undefined)(TestService); + }).toThrow(); + }); + }); + + describe(`when there already is a registered dataservice for a resourcetype`, () => { + it(`should throw an error`, () => { + dataService(testType)(TestService); + expect(() => { + dataService(testType)(AnotherTestService); + }).toThrow(); + }); + }); + + }); + + describe(`@link/getLinkDefinitions`, () => { + it(`should register a link`, () => { + const target = new TestHALResource(); + link(testType, true, 'foo')(target, 'bar'); + const result = getLinkDefinition(TestHALResource, 'foo'); + expect(result.resourceType).toBe(testType); + expect(result.isList).toBe(true); + expect(result.linkName).toBe('foo'); + expect(result.propertyName).toBe('bar'); + }); + + describe(`when the linkname isn't specified`, () => { + it(`should use the propertyname`, () => { + const target = new TestHALResource(); + link(testType)(target, 'foo'); + const result = getLinkDefinition(TestHALResource, 'foo'); + expect(result.linkName).toBe('foo'); + expect(result.propertyName).toBe('foo'); + }); + }); + + describe(`when there's no @link`, () => { + it(`should return undefined`, () => { + const result = getLinkDefinition(TestHALResource, 'self'); + expect(result).toBeUndefined(); + }); + }); + }); +}); +/* tslint:enable:max-classes-per-file */ diff --git a/src/app/core/cache/builders/build-decorators.ts b/src/app/core/cache/builders/build-decorators.ts index 50a70e051f..e8382d02cf 100644 --- a/src/app/core/cache/builders/build-decorators.ts +++ b/src/app/core/cache/builders/build-decorators.ts @@ -66,25 +66,6 @@ export function getDataServiceFor(resourceType: Resou return dataServiceMap.get(resourceType.value); } -export function resolvedLink, K extends keyof T>(provider: GenericConstructor, methodName?: K, ...params: any[]): any { - return function r(target: any, propertyKey: string, descriptor: PropertyDescriptor) { - if (!target || !propertyKey) { - return; - } - - const metaDataList: string[] = resolvedLinkMap.get(target.constructor) || []; - if (metaDataList.indexOf(propertyKey) === -1) { - metaDataList.push(propertyKey); - } - resolvedLinkMap.set(target.constructor, metaDataList); - return Reflect.metadata(resolvedLinkKey, { - provider, - methodName, - params - }).apply(this, arguments); - }; -} - /** * A class to represent the data that can be set by the @link decorator */ @@ -124,7 +105,7 @@ export const link = ( linkName = propertyName as any; } - targetMap.set(propertyName, { + targetMap.set(linkName, { resourceType, isList, linkName, diff --git a/src/app/thumbnail/thumbnail.component.spec.ts b/src/app/thumbnail/thumbnail.component.spec.ts index da5529fb67..c4258aceb9 100644 --- a/src/app/thumbnail/thumbnail.component.spec.ts +++ b/src/app/thumbnail/thumbnail.component.spec.ts @@ -58,7 +58,4 @@ describe('ThumbnailComponent', () => { }) }); }); - -; - });