diff --git a/src/storage/RepresentationConvertingStore.ts b/src/storage/RepresentationConvertingStore.ts index 70378928b5..8fd746b7fe 100644 --- a/src/storage/RepresentationConvertingStore.ts +++ b/src/storage/RepresentationConvertingStore.ts @@ -29,17 +29,20 @@ export class RepresentationConvertingStore { // We can potentially run into problems here if we convert a turtle document where the base IRI is required, // since we don't know the resource IRI yet at this point. - representation = await this.convertRepresentation(container, representation); + representation = await this.convertInRepresentation(container, representation); return this.source.addResource(container, representation, conditions); } public async setRepresentation(identifier: ResourceIdentifier, representation: Representation, conditions?: Conditions): Promise { - representation = await this.convertRepresentation(identifier, representation); + representation = await this.convertInRepresentation(identifier, representation); return this.source.setRepresentation(identifier, representation, conditions); } @@ -79,11 +82,15 @@ export class RepresentationConvertingStore { - if (!this.inPreferences || !this.inConverter || this.matchesPreferences(representation, this.inPreferences)) { + if (!this.inType) { return representation; } - return this.inConverter.handleSafe({ identifier, representation, preferences: this.inPreferences }); + const inPreferences: RepresentationPreferences = { type: [{ value: this.inType, weight: 1 }]}; + if (!inPreferences || !this.inConverter || this.matchesPreferences(representation, inPreferences)) { + return representation; + } + return this.inConverter.handleSafe({ identifier, representation, preferences: inPreferences }); } } diff --git a/test/unit/storage/RepresentationConvertingStore.test.ts b/test/unit/storage/RepresentationConvertingStore.test.ts index 696effd745..7920acf7c8 100644 --- a/test/unit/storage/RepresentationConvertingStore.test.ts +++ b/test/unit/storage/RepresentationConvertingStore.test.ts @@ -1,6 +1,5 @@ import type { Representation } from '../../../src/ldp/representation/Representation'; import { RepresentationMetadata } from '../../../src/ldp/representation/RepresentationMetadata'; -import type { RepresentationPreferences } from '../../../src/ldp/representation/RepresentationPreferences'; import type { RepresentationConverter } from '../../../src/storage/conversion/RepresentationConverter'; import { RepresentationConvertingStore } from '../../../src/storage/RepresentationConvertingStore'; import type { ResourceStore } from '../../../src/storage/ResourceStore'; @@ -11,7 +10,7 @@ describe('A RepresentationConvertingStore', (): void => { let source: ResourceStore; let inConverter: RepresentationConverter; let outConverter: RepresentationConverter; - const inPreferences: RepresentationPreferences = { type: [{ value: 'text/turtle', weight: 1 }]}; + const inType = 'text/turtle'; const metadata = new RepresentationMetadata({ [CONTENT_TYPE]: 'text/turtle' }); let representation: Representation; @@ -25,7 +24,7 @@ describe('A RepresentationConvertingStore', (): void => { inConverter = { handleSafe: jest.fn(async(): Promise => 'inConvert') } as any; outConverter = { handleSafe: jest.fn(async(): Promise => 'outConvert') } as any; - store = new RepresentationConvertingStore(source, { inPreferences, inConverter, outConverter }); + store = new RepresentationConvertingStore(source, { inType, inConverter, outConverter }); representation = { binary: true, data: 'data', metadata } as any; }); @@ -81,6 +80,10 @@ describe('A RepresentationConvertingStore', (): void => { await expect(store.setRepresentation(id, representation, 'conditions' as any)).resolves.toBeUndefined(); expect(inConverter.handleSafe).toHaveBeenCalledTimes(0); expect(source.setRepresentation).toHaveBeenLastCalledWith(id, representation, 'conditions'); + + store = new RepresentationConvertingStore(source, {}); + await expect(store.addResource(id, representation, 'conditions' as any)).resolves.toBeUndefined(); + expect(source.addResource).toHaveBeenLastCalledWith(id, representation, 'conditions'); }); it('converts the data if it is required.', async(): Promise => {