CommunitySolidServer/test/integration/RepresentationConverter.test.ts
2021-01-11 14:03:38 +01:00

55 lines
2.1 KiB
TypeScript

import type { Representation } from '../../src/ldp/representation/Representation';
import { RepresentationMetadata } from '../../src/ldp/representation/RepresentationMetadata';
import { ChainedConverter } from '../../src/storage/conversion/ChainedConverter';
import { QuadToRdfConverter } from '../../src/storage/conversion/QuadToRdfConverter';
import { RdfToQuadConverter } from '../../src/storage/conversion/RdfToQuadConverter';
import { guardedStreamFrom, readableToString } from '../../src/util/StreamUtil';
describe('A ChainedConverter', (): void => {
const converters = [
new RdfToQuadConverter(),
new QuadToRdfConverter(),
];
const converter = new ChainedConverter(converters);
it('can convert from JSON-LD to turtle.', async(): Promise<void> => {
const metadata = new RepresentationMetadata('application/ld+json');
const representation: Representation = {
binary: true,
data: guardedStreamFrom(
[ '{"@id": "http://test.com/s", "http://test.com/p": { "@id": "http://test.com/o" }}' ],
),
metadata,
};
const result = await converter.handleSafe({
representation,
preferences: { type: { 'text/turtle': 1 }},
identifier: { path: 'path' },
});
await expect(readableToString(result.data)).resolves.toEqual('<http://test.com/s> <http://test.com/p> <http://test.com/o>.\n');
expect(result.metadata.contentType).toEqual('text/turtle');
});
it('can convert from turtle to JSON-LD.', async(): Promise<void> => {
const metadata = new RepresentationMetadata('text/turtle');
const representation: Representation = {
binary: true,
data: guardedStreamFrom([ '<http://test.com/s> <http://test.com/p> <http://test.com/o>.' ]),
metadata,
};
const result = await converter.handleSafe({
representation,
preferences: { type: { 'application/ld+json': 1 }},
identifier: { path: 'path' },
});
expect(JSON.parse(await readableToString(result.data))).toEqual(
[{ '@id': 'http://test.com/s', 'http://test.com/p': [{ '@id': 'http://test.com/o' }]}],
);
expect(result.metadata.contentType).toEqual('application/ld+json');
});
});