Home Reference Source Repository

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();
});