mirror of
https://github.com/directus/directus.git
synced 2026-01-25 15:47:57 -05:00
* Validate type of items' primary keys * Update tests * Update validations * Remove DB specific check for statusCode in existing e2e test * Extract as util function * Add unit test * Refactor to generic validateKeys
108 lines
3.6 KiB
TypeScript
108 lines
3.6 KiB
TypeScript
import { validateKeys } from '../../src/utils/validate-keys';
|
|
import { SchemaOverview } from '@directus/shared/types';
|
|
import { v4 as uuid } from 'uuid';
|
|
|
|
const schema: SchemaOverview = {
|
|
collections: {
|
|
pk_integer: {
|
|
collection: 'pk_integer',
|
|
primary: 'id',
|
|
singleton: false,
|
|
note: 'Sample schema with integer primary key',
|
|
sortField: null,
|
|
accountability: null,
|
|
fields: {
|
|
id: {
|
|
field: 'id',
|
|
defaultValue: null,
|
|
nullable: false,
|
|
generated: false,
|
|
type: 'integer',
|
|
dbType: 'integer',
|
|
precision: null,
|
|
scale: null,
|
|
special: [],
|
|
note: null,
|
|
alias: false,
|
|
validation: null,
|
|
},
|
|
},
|
|
},
|
|
pk_uuid: {
|
|
collection: 'pk_uuid',
|
|
primary: 'id',
|
|
singleton: false,
|
|
note: 'Sample schema with uuid primary key',
|
|
sortField: null,
|
|
accountability: null,
|
|
fields: {
|
|
id: {
|
|
field: 'id',
|
|
defaultValue: null,
|
|
nullable: false,
|
|
generated: false,
|
|
type: 'uuid',
|
|
dbType: 'uuid',
|
|
precision: null,
|
|
scale: null,
|
|
special: [],
|
|
note: null,
|
|
alias: false,
|
|
validation: null,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
relations: [],
|
|
};
|
|
|
|
describe('validate keys', () => {
|
|
describe('of integer type', () => {
|
|
it('Throws an error when provided with an invalid integer key', () => {
|
|
expect(() => validateKeys(schema, 'pk_integer', 'id', 'invalid')).toThrowError();
|
|
expect(() => validateKeys(schema, 'pk_integer', 'id', NaN)).toThrowError();
|
|
});
|
|
|
|
it('Throws an error when provided with an array containing an invalid integer key', () => {
|
|
expect(() => validateKeys(schema, 'pk_integer', 'id', [111, 'invalid', 222])).toThrowError();
|
|
expect(() => validateKeys(schema, 'pk_integer', 'id', [555, NaN, 666])).toThrowError();
|
|
});
|
|
|
|
it('Does not throw an error when provided with a valid integer key', () => {
|
|
expect(() => validateKeys(schema, 'pk_integer', 'id', 111)).not.toThrowError();
|
|
expect(() => validateKeys(schema, 'pk_integer', 'id', '222')).not.toThrowError();
|
|
});
|
|
|
|
it('Does not throw an error when provided with an array of valid integer keys', () => {
|
|
expect(() => validateKeys(schema, 'pk_integer', 'id', [111, 222, 333])).not.toThrowError();
|
|
expect(() => validateKeys(schema, 'pk_integer', 'id', ['444', '555', '666'])).not.toThrowError();
|
|
});
|
|
});
|
|
|
|
describe('of uuid type', () => {
|
|
it('Throws an error when provided with an invalid uuid key', () => {
|
|
expect(() => validateKeys(schema, 'pk_uuid', 'id', 'fakeuuid-62d9-434d-a7c7-878c8376782e')).toThrowError();
|
|
expect(() => validateKeys(schema, 'pk_uuid', 'id', 'invalid')).toThrowError();
|
|
expect(() => validateKeys(schema, 'pk_uuid', 'id', NaN)).toThrowError();
|
|
expect(() => validateKeys(schema, 'pk_uuid', 'id', 111)).toThrowError();
|
|
});
|
|
|
|
it('Throws an error when provided with an array containing an invalid uuid key', () => {
|
|
expect(() =>
|
|
validateKeys(schema, 'pk_uuid', 'id', [uuid(), 'fakeuuid-62d9-434d-a7c7-878c8376782e', uuid()])
|
|
).toThrowError();
|
|
expect(() => validateKeys(schema, 'pk_uuid', 'id', [uuid(), 'invalid', uuid()])).toThrowError();
|
|
expect(() => validateKeys(schema, 'pk_uuid', 'id', [uuid(), NaN, uuid()])).toThrowError();
|
|
expect(() => validateKeys(schema, 'pk_uuid', 'id', [uuid(), 111, uuid()])).toThrowError();
|
|
});
|
|
|
|
it('Does not throw an error when provided with a valid uuid key', () => {
|
|
expect(() => validateKeys(schema, 'pk_uuid', 'id', uuid())).not.toThrowError();
|
|
});
|
|
|
|
it('Does not throw an error when provided with an array of valid uuid keys', () => {
|
|
expect(() => validateKeys(schema, 'pk_uuid', 'id', [uuid(), uuid(), uuid()])).not.toThrowError();
|
|
});
|
|
});
|
|
});
|