deploy test refactor

This commit is contained in:
Jan Prochazka
2024-10-31 14:20:11 +01:00
parent 5d4d2a447a
commit e5d4bbadc1

View File

@@ -70,13 +70,7 @@ function checkStructure(
} }
async function testDatabaseDeploy(engine, conn, driver, dbModelsYaml, options) { async function testDatabaseDeploy(engine, conn, driver, dbModelsYaml, options) {
const { const { testEmptyLastScript, finalCheckAgainstModel, dbdiffOptionsExtra } = options || {};
testEmptyLastScript,
checkDeletedObjects,
finalCheckAgainstModel,
finalCheckAgainstFirstModel,
dbdiffOptionsExtra,
} = options || {};
let index = 0; let index = 0;
for (const loadedDbModel of dbModelsYaml) { for (const loadedDbModel of dbModelsYaml) {
const { sql, isEmpty } = await generateDeploySql({ const { sql, isEmpty } = await generateDeploySql({
@@ -108,12 +102,7 @@ async function testDatabaseDeploy(engine, conn, driver, dbModelsYaml, options) {
const dbhan = conn.isPreparedOnly ? await connectUtility(driver, conn, 'read') : conn; const dbhan = conn.isPreparedOnly ? await connectUtility(driver, conn, 'read') : conn;
const structure = await driver.analyseFull(dbhan); const structure = await driver.analyseFull(dbhan);
if (conn.isPreparedOnly) await driver.close(dbhan); if (conn.isPreparedOnly) await driver.close(dbhan);
checkStructure( checkStructure(engine, structure, finalCheckAgainstModel ?? dbModelsYaml[dbModelsYaml.length - 1], options);
engine,
structure,
finalCheckAgainstFirstModel ? dbModelsYaml[0] : finalCheckAgainstModel ?? dbModelsYaml[dbModelsYaml.length - 1],
options
);
} }
describe('Deploy database', () => { describe('Deploy database', () => {
@@ -416,242 +405,123 @@ describe('Deploy database', () => {
}) })
); );
const T1 = {
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
};
const T1_DELETED = {
name: '_deleted_t1.table.yaml',
json: {
name: '_deleted_t1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
};
const T1_NO_VAL = {
name: 't1.table.yaml',
json: {
name: 't1',
columns: [{ name: 'id', type: 'int' }],
primaryKey: ['id'],
},
};
const T1_DELETED_VAL = {
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: '_deleted_val', type: 'int' },
],
primaryKey: ['id'],
},
};
const V1 = {
name: 'v1.view.sql',
text: 'create view v1 as select * from t1',
};
const V1_DELETED = {
name: '_deleted_v1.view.sql',
text: 'create view _deleted_v1 as select * from t1',
};
test.each(engines.map(engine => [engine.label, engine]))( test.each(engines.map(engine => [engine.label, engine]))(
'Dont remove column - %s', 'Dont remove column - %s',
testWrapper(async (conn, driver, engine) => { testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy( await testDatabaseDeploy(engine, conn, driver, [[T1], [T1_NO_VAL]], {
engine, finalCheckAgainstModel: [T1],
conn, disallowExtraObjects: true,
driver, });
[
[
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
[
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [{ name: 'id', type: 'int' }],
primaryKey: ['id'],
},
},
],
],
{ finalCheckAgainstFirstModel: true, disallowExtraObjects: true }
);
}) })
); );
test.each(engines.map(engine => [engine.label, engine]))( test.each(engines.map(engine => [engine.label, engine]))(
'Dont remove table - %s', 'Dont remove table - %s',
testWrapper(async (conn, driver, engine) => { testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy( await testDatabaseDeploy(engine, conn, driver, [[T1], []], {
engine, finalCheckAgainstModel: [T1],
conn, disallowExtraObjects: true,
driver, });
[
[
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
[],
],
{ finalCheckAgainstFirstModel: true, disallowExtraObjects: true }
);
}) })
); );
test.each(engines.map(engine => [engine.label, engine]))( test.each(engines.map(engine => [engine.label, engine]))(
'Mark table removed - %s', 'Mark table removed - %s',
testWrapper(async (conn, driver, engine) => { testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy( await testDatabaseDeploy(engine, conn, driver, [[T1], [], []], {
engine, dbdiffOptionsExtra: {
conn, deletedTablePrefix: '_deleted_',
driver, deletedColumnPrefix: '_deleted_',
[ deletedSqlObjectPrefix: '_deleted_',
[ },
{ disallowExtraObjects: true,
name: 't1.table.yaml', finalCheckAgainstModel: [T1_DELETED],
json: { });
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
[],
[],
],
{
dbdiffOptionsExtra: {
deletedTablePrefix: '_deleted_',
deletedColumnPrefix: '_deleted_',
deletedSqlObjectPrefix: '_deleted_',
},
disallowExtraObjects: true,
finalCheckAgainstModel: [
{
name: 't1.table.yaml',
json: {
name: '_deleted_t1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
}
);
}) })
); );
test.each(engines.filter(engine => engine.supportRenameSqlObject).map(engine => [engine.label, engine]))( test.each(engines.filter(engine => engine.supportRenameSqlObject).map(engine => [engine.label, engine]))(
'Mark view removed - %s', 'Mark view removed - %s',
testWrapper(async (conn, driver, engine) => { testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy( await testDatabaseDeploy(engine, conn, driver, [[T1, V1], [T1]], {
engine, dbdiffOptionsExtra: {
conn, deletedTablePrefix: '_deleted_',
driver, deletedColumnPrefix: '_deleted_',
[ deletedSqlObjectPrefix: '_deleted_',
[ },
{ disallowExtraObjects: true,
name: 't1.table.yaml', finalCheckAgainstModel: [T1, V1_DELETED],
json: { });
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
{
name: 'v1.view.sql',
text: 'create view v1 as select * from t1',
},
],
[
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
],
{
dbdiffOptionsExtra: {
deletedTablePrefix: '_deleted_',
deletedColumnPrefix: '_deleted_',
deletedSqlObjectPrefix: '_deleted_',
},
disallowExtraObjects: true,
finalCheckAgainstModel: [
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
{
name: '_deleted_v1.view.sql',
text: 'create view v1 as select * from t1',
},
],
}
);
}) })
); );
test.each(engines.map(engine => [engine.label, engine]))( test.each(engines.map(engine => [engine.label, engine]))(
'Mark column removed - %s', 'Mark column removed - %s',
testWrapper(async (conn, driver, engine) => { testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy( await testDatabaseDeploy(engine, conn, driver, [[T1], [T1_NO_VAL]], {
engine, dbdiffOptionsExtra: {
conn, deletedTablePrefix: '_deleted_',
driver, deletedColumnPrefix: '_deleted_',
[ deletedSqlObjectPrefix: '_deleted_',
[ },
{ disallowExtraObjects: true,
name: 't1.table.yaml', finalCheckAgainstModel: [T1_DELETED_VAL],
json: { });
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
[
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [{ name: 'id', type: 'int' }],
primaryKey: ['id'],
},
},
],
],
{
dbdiffOptionsExtra: {
deletedTablePrefix: '_deleted_',
deletedColumnPrefix: '_deleted_',
deletedSqlObjectPrefix: '_deleted_',
},
disallowExtraObjects: true,
finalCheckAgainstModel: [
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: '_deleted_val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
}
);
}) })
); );
@@ -663,35 +533,11 @@ describe('Deploy database', () => {
conn, conn,
driver, driver,
[ [
[ [T1],
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
// delete table // delete table
[], [],
// undelete table // undelete table
[ [T1],
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
], ],
{ {
dbdiffOptionsExtra: { dbdiffOptionsExtra: {
@@ -700,21 +546,23 @@ describe('Deploy database', () => {
deletedSqlObjectPrefix: '_deleted_', deletedSqlObjectPrefix: '_deleted_',
}, },
disallowExtraObjects: true, disallowExtraObjects: true,
finalCheckAgainstModel: [
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
} }
); );
}) })
); );
test.each(engines.filter(engine => engine.supportRenameSqlObject).map(engine => [engine.label, engine]))(
'Undelete view - %s',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(engine, conn, driver, [[T1, V1], [T1], [T1, V1]], {
dbdiffOptionsExtra: {
deletedTablePrefix: '_deleted_',
deletedColumnPrefix: '_deleted_',
deletedSqlObjectPrefix: '_deleted_',
},
disallowExtraObjects: true,
finalCheckAgainstModel: [T1, V1],
});
})
);
}); });