Skip to content

Commit

Permalink
Merge e9d38e1 into 86d5f36
Browse files Browse the repository at this point in the history
  • Loading branch information
freyavs committed Aug 27, 2020
2 parents 86d5f36 + e9d38e1 commit 5a91c69
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 8 deletions.
17 changes: 11 additions & 6 deletions src/storage/FileResourceStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -249,13 +249,18 @@ export class FileResourceStore implements ResourceStore {
private async getFileRepresentation(path: string, stats: Stats): Promise<Representation> {
const readStream = createReadStream(path);
const contentType = getContentTypeFromExtension(extname(path));
let rawMetadata: Quad[] = [];
try {
const rawMetadataPromise = new Promise<Quad[]>((resolve): void => {
const readMetadataStream = createReadStream(`${path}.metadata`);
rawMetadata = await this.metadataController.generateQuadsFromReadable(readMetadataStream);
} catch (_) {
// Metadata file doesn't exist so lets keep `rawMetaData` an empty array.
}
readMetadataStream.on('open', async(): Promise<void> => {
resolve(this.metadataController.generateQuadsFromReadable(readMetadataStream));
})
.on('error', (): void => {
// Metadata file doesn't exist so lets keep `rawMetaData` an empty array.
resolve([]);
});
});

const rawMetadata: Quad[] = await rawMetadataPromise;
const metadata: RepresentationMetadata = {
raw: rawMetadata,
dateTime: stats.mtime,
Expand Down
13 changes: 11 additions & 2 deletions test/unit/storage/FileResourceStore.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,15 @@ describe('A FileResourceStore', (): void => {
stats.isFile = jest.fn((): any => true);
(fsPromises.lstat as jest.Mock).mockReturnValueOnce(stats);
(fs.createReadStream as jest.Mock).mockReturnValueOnce(streamifyArray([ rawData ]));
(fs.createReadStream as jest.Mock).mockImplementationOnce((): any => new Error('Metadata file does not exist.'));
const readable = streamifyArray([]);
readable.on('newListener', (event): void => {
if (event === 'open') {
setImmediate((): void => {
readable.emit('open');
});
}
});
(fs.createReadStream as jest.Mock).mockReturnValueOnce(readable);

// Tests
await store.setRepresentation({ path: `${base}file.txt` }, representation);
Expand Down Expand Up @@ -488,7 +496,8 @@ describe('A FileResourceStore', (): void => {
stats.isFile = jest.fn((): any => true);
(fsPromises.lstat as jest.Mock).mockReturnValueOnce(stats);
(fs.createReadStream as jest.Mock).mockReturnValueOnce(streamifyArray([ rawData ]));
(fs.createReadStream as jest.Mock).mockImplementationOnce((): any => new Error('Metadata file does not exist.'));
(fs.createReadStream as jest.Mock).mockReturnValueOnce(new Readable()
.destroy(new Error('Metadata file does not exist.')));

const result = await store.getRepresentation({ path: `${base}.htaccess` });
expect(result).toEqual({
Expand Down

0 comments on commit 5a91c69

Please sign in to comment.