src/tests/testAllChanges.js
import test from 'tape';
import optimizer from '..';
test('when optimizing all changes, including duplicates', (t) => {
var changes = [
{
change: 'project.create',
projectId: '0',
project: {
name: 'demo',
version: 0,
schemas: {
'0': {
name: 'users',
columns: {}
}
}
}
},
{
change: 'column.create',
projectId: '0',
schemaId: '0',
columnId: '0',
column: {
name: 'id',
type: 'integer'
}
},
{
change: 'column.typechange',
projectId: '0',
schemaId: '0',
columnId: '0',
columnName: 'id',
type: 'uuid',
oldType: 'integer'
},
{
change: 'column.typechange',
projectId: '0',
schemaId: '0',
columnId: '0',
columnName: 'id',
type: 'string',
oldType: 'uuid'
},
{
change: 'project.rename',
projectId: '0',
name: 'demos',
oldName: 'demo'
},
{
change: 'project.rename',
projectId: '0',
name: 'demokes',
oldName: 'demos'
},
{
change: 'project.tag',
projectId: '0',
version: 1,
oldVersion: 0
}
];
var actual = optimizer.optimize(changes);
console.log(actual);
var expected = [
{
change: 'project.create',
projectId: '0',
project: {
name: 'demo',
version: 0,
schemas: {
'0': {
name: 'users',
columns: {}
}
}
}
},
{
change: 'project.rename',
projectId: '0',
name: 'demokes',
oldName: 'demos'
},
{
change: 'project.tag',
projectId: '0',
version: 1,
oldVersion: 0
},
{
change: 'column.create',
projectId: '0',
schemaId: '0',
columnId: '0',
column: {
name: 'id',
type: 'integer'
}
},
{
change: 'column.typechange',
projectId: '0',
schemaId: '0',
columnId: '0',
columnName: 'id',
type: 'string',
oldType: 'uuid'
}
];
t.deepEqual(actual, expected, 'non-agressive should only remove the duplicates');
var actual = optimizer.optimize(changes, true);
console.log(actual);
var expected = [
{
change: 'project.create',
projectId: '0',
project: {
name: 'demokes',
version: 1,
schemas: {
'0': {
name: 'users',
columns: {
'0': {
name: 'id',
type: 'string'
}
}
}
}
}
}
];
t.deepEqual(actual, expected, 'agressive should merge all changes together');
t.end();
});