mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-25 11:55:03 +03:00
Added test to validate schema structure
refs https://github.com/TryGhost/Toolbox/issues/441 - this is only v1 of the test I would like but it validates the keys on a column definition are part of an allowlist - this has already uncovered a bug with `maxLength` (vs `maxlength`)
This commit is contained in:
parent
178df69ae2
commit
845f8d965e
@ -3,7 +3,77 @@ const _ = require('lodash');
|
|||||||
|
|
||||||
const schema = require('../../../../../core/server/data/schema/schema');
|
const schema = require('../../../../../core/server/data/schema/schema');
|
||||||
|
|
||||||
|
const VALID_KEYS = {
|
||||||
|
bigInteger: [
|
||||||
|
'nullable'
|
||||||
|
],
|
||||||
|
bool: [
|
||||||
|
'nullable',
|
||||||
|
'defaultTo'
|
||||||
|
],
|
||||||
|
boolean: [
|
||||||
|
'nullable',
|
||||||
|
'defaultTo'
|
||||||
|
],
|
||||||
|
dateTime: [
|
||||||
|
'nullable',
|
||||||
|
'index'
|
||||||
|
],
|
||||||
|
integer: [
|
||||||
|
'nullable',
|
||||||
|
'unsigned',
|
||||||
|
'defaultTo',
|
||||||
|
'index'
|
||||||
|
],
|
||||||
|
string: [
|
||||||
|
'maxlength',
|
||||||
|
'maxLength', // this is the result of a bug and should NOT be used, will be deleted soon
|
||||||
|
'nullable',
|
||||||
|
'primary',
|
||||||
|
'unique',
|
||||||
|
'validations',
|
||||||
|
'defaultTo',
|
||||||
|
'references',
|
||||||
|
'cascadeDelete',
|
||||||
|
'setNullDelete',
|
||||||
|
'index'
|
||||||
|
],
|
||||||
|
text: [
|
||||||
|
'fieldtype',
|
||||||
|
'maxlength',
|
||||||
|
'nullable',
|
||||||
|
'validations'
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
describe('schema validations', function () {
|
describe('schema validations', function () {
|
||||||
|
it('matches the required format', function () {
|
||||||
|
// The top-level export should be an object of table names to definitions
|
||||||
|
should(schema).be.Object();
|
||||||
|
|
||||||
|
// Each table should be an object, and each column should be an object
|
||||||
|
_.each(schema, function (table, tableName) {
|
||||||
|
should(table).be.Object();
|
||||||
|
|
||||||
|
_.each(table, function (column, columnName) {
|
||||||
|
if (['@@INDEXES@@', '@@UNIQUE_CONSTRAINTS@@'].includes(columnName)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the column is an object
|
||||||
|
should(column).be.Object();
|
||||||
|
|
||||||
|
// Ensure the `type` key exists on a column
|
||||||
|
should.exist(column.type, `${tableName}.${columnName}.type should exist`);
|
||||||
|
|
||||||
|
// Ensure the column type is one of the ones we allow
|
||||||
|
should(column.type).be.equalOneOf(Object.keys(VALID_KEYS));
|
||||||
|
|
||||||
|
should(_.difference(Object.keys(column), [...VALID_KEYS[column.type], 'type'])).be.Array().with.length(0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('has correct isIn validation structure', async function () {
|
it('has correct isIn validation structure', async function () {
|
||||||
const tablesOnlyValidation = _.cloneDeep(schema);
|
const tablesOnlyValidation = _.cloneDeep(schema);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user