mirror of
https://github.com/directus/directus.git
synced 2026-01-25 13:38:02 -05:00
* [Related to #11292] Safe Metadata Upload - Created FILE_METADATA_ALLOWLIST - Added test library for `FilesService` * Rename ALLOWLIST->ALLOW_LIST to be consistent with other env vars * Make sure it still works for files without Exif * Prevent breaking changes in metadata formatting * Allow * for all * Fix md sup Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import exifr from 'exifr';
|
|
import knex, { Knex } from 'knex';
|
|
import { MockClient, Tracker, getTracker } from 'knex-mock-client';
|
|
import { FilesService } from '../../src/services';
|
|
|
|
jest.mock('exifr');
|
|
jest.mock('../../src/database/index', () => {
|
|
return { getDatabaseClient: jest.fn().mockReturnValue('postgres') };
|
|
});
|
|
jest.requireMock('../../src/database/index');
|
|
|
|
describe('Integration Tests', () => {
|
|
let db: jest.Mocked<Knex>;
|
|
let tracker: Tracker;
|
|
|
|
beforeAll(async () => {
|
|
db = knex({ client: MockClient }) as jest.Mocked<Knex>;
|
|
tracker = getTracker();
|
|
});
|
|
|
|
afterEach(() => {
|
|
tracker.reset();
|
|
});
|
|
|
|
describe('Services / Files', () => {
|
|
describe('getMetadata', () => {
|
|
let service: FilesService;
|
|
let exifrParseSpy: jest.SpyInstance<any>;
|
|
|
|
const sampleMetadata = {
|
|
CustomTagA: 'value a',
|
|
CustomTagB: 'value b',
|
|
CustomTagC: 'value c',
|
|
};
|
|
|
|
beforeEach(() => {
|
|
exifrParseSpy = jest.spyOn(exifr, 'parse');
|
|
service = new FilesService({
|
|
knex: db,
|
|
schema: { collections: {}, relations: [] },
|
|
});
|
|
});
|
|
|
|
it('accepts allowlist metadata tags', async () => {
|
|
exifrParseSpy.mockReturnValue(Promise.resolve({ ...sampleMetadata }));
|
|
const bufferContent = 'file buffer content';
|
|
const allowList = ['CustomTagB', 'CustomTagA'];
|
|
|
|
const metadata = await service.getMetadata(bufferContent, allowList);
|
|
|
|
expect(exifrParseSpy).toHaveBeenCalled();
|
|
expect(metadata.metadata.CustomTagA).toStrictEqual(sampleMetadata.CustomTagA);
|
|
expect(metadata.metadata.CustomTagB).toStrictEqual(sampleMetadata.CustomTagB);
|
|
expect(metadata.metadata.CustomTagC).toBeUndefined();
|
|
});
|
|
});
|
|
});
|
|
});
|