mirror of
https://github.com/samsonjs/immich.git
synced 2026-03-25 09:15:56 +00:00
88 lines
3.6 KiB
TypeScript
88 lines
3.6 KiB
TypeScript
import { compareTriggers } from 'src/sql-tools/comparers/trigger.comparer';
|
|
import { DatabaseTrigger, Reason } from 'src/sql-tools/types';
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
const testTrigger: DatabaseTrigger = {
|
|
name: 'test',
|
|
tableName: 'table1',
|
|
timing: 'before',
|
|
actions: ['delete'],
|
|
scope: 'row',
|
|
functionName: 'my_trigger_function',
|
|
synchronize: true,
|
|
};
|
|
|
|
describe('compareTriggers', () => {
|
|
describe('onExtra', () => {
|
|
it('should work', () => {
|
|
expect(compareTriggers.onExtra(testTrigger)).toEqual([
|
|
{
|
|
type: 'TriggerDrop',
|
|
tableName: 'table1',
|
|
triggerName: 'test',
|
|
reason: Reason.MissingInSource,
|
|
},
|
|
]);
|
|
});
|
|
});
|
|
|
|
describe('onMissing', () => {
|
|
it('should work', () => {
|
|
expect(compareTriggers.onMissing(testTrigger)).toEqual([
|
|
{
|
|
type: 'TriggerCreate',
|
|
trigger: testTrigger,
|
|
reason: Reason.MissingInTarget,
|
|
},
|
|
]);
|
|
});
|
|
});
|
|
|
|
describe('onCompare', () => {
|
|
it('should work', () => {
|
|
expect(compareTriggers.onCompare(testTrigger, testTrigger)).toEqual([]);
|
|
});
|
|
|
|
it('should detect a change in function name', () => {
|
|
const source: DatabaseTrigger = { ...testTrigger, functionName: 'my_new_name' };
|
|
const target: DatabaseTrigger = { ...testTrigger, functionName: 'my_old_name' };
|
|
const reason = `function is different (my_new_name vs my_old_name)`;
|
|
expect(compareTriggers.onCompare(source, target)).toEqual([{ type: 'TriggerCreate', trigger: source, reason }]);
|
|
});
|
|
|
|
it('should detect a change in actions', () => {
|
|
const source: DatabaseTrigger = { ...testTrigger, actions: ['delete'] };
|
|
const target: DatabaseTrigger = { ...testTrigger, actions: ['delete', 'insert'] };
|
|
const reason = `action is different (delete vs delete,insert)`;
|
|
expect(compareTriggers.onCompare(source, target)).toEqual([{ type: 'TriggerCreate', trigger: source, reason }]);
|
|
});
|
|
|
|
it('should detect a change in timing', () => {
|
|
const source: DatabaseTrigger = { ...testTrigger, timing: 'before' };
|
|
const target: DatabaseTrigger = { ...testTrigger, timing: 'after' };
|
|
const reason = `timing method is different (before vs after)`;
|
|
expect(compareTriggers.onCompare(source, target)).toEqual([{ type: 'TriggerCreate', trigger: source, reason }]);
|
|
});
|
|
|
|
it('should detect a change in scope', () => {
|
|
const source: DatabaseTrigger = { ...testTrigger, scope: 'row' };
|
|
const target: DatabaseTrigger = { ...testTrigger, scope: 'statement' };
|
|
const reason = `scope is different (row vs statement)`;
|
|
expect(compareTriggers.onCompare(source, target)).toEqual([{ type: 'TriggerCreate', trigger: source, reason }]);
|
|
});
|
|
|
|
it('should detect a change in new table reference', () => {
|
|
const source: DatabaseTrigger = { ...testTrigger, referencingNewTableAs: 'new_table' };
|
|
const target: DatabaseTrigger = { ...testTrigger, referencingNewTableAs: undefined };
|
|
const reason = `new table reference is different (new_table vs undefined)`;
|
|
expect(compareTriggers.onCompare(source, target)).toEqual([{ type: 'TriggerCreate', trigger: source, reason }]);
|
|
});
|
|
|
|
it('should detect a change in old table reference', () => {
|
|
const source: DatabaseTrigger = { ...testTrigger, referencingOldTableAs: 'old_table' };
|
|
const target: DatabaseTrigger = { ...testTrigger, referencingOldTableAs: undefined };
|
|
const reason = `old table reference is different (old_table vs undefined)`;
|
|
expect(compareTriggers.onCompare(source, target)).toEqual([{ type: 'TriggerCreate', trigger: source, reason }]);
|
|
});
|
|
});
|
|
});
|