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,16 +405,7 @@ describe('Deploy database', () => {
}) })
); );
test.each(engines.map(engine => [engine.label, engine]))( const T1 = {
'Dont remove column - %s',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(
engine,
conn,
driver,
[
[
{
name: 't1.table.yaml', name: 't1.table.yaml',
json: { json: {
name: 't1', name: 't1',
@@ -435,86 +415,10 @@ describe('Deploy database', () => {
], ],
primaryKey: ['id'], 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]))( const T1_DELETED = {
'Dont remove table - %s', name: '_deleted_t1.table.yaml',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(
engine,
conn,
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]))(
'Mark table removed - %s',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(
engine,
conn,
driver,
[
[
{
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: { json: {
name: '_deleted_t1', name: '_deleted_t1',
columns: [ columns: [
@@ -523,122 +427,18 @@ describe('Deploy database', () => {
], ],
primaryKey: ['id'], primaryKey: ['id'],
}, },
}, };
],
}
);
})
);
test.each(engines.filter(engine => engine.supportRenameSqlObject).map(engine => [engine.label, engine]))( const T1_NO_VAL = {
'Mark view removed - %s',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(
engine,
conn,
driver,
[
[
{
name: 't1.table.yaml',
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]))(
'Mark column removed - %s',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(
engine,
conn,
driver,
[
[
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
[
{
name: 't1.table.yaml', name: 't1.table.yaml',
json: { json: {
name: 't1', name: 't1',
columns: [{ name: 'id', type: 'int' }], columns: [{ name: 'id', type: 'int' }],
primaryKey: ['id'], primaryKey: ['id'],
}, },
}, };
],
], const T1_DELETED_VAL = {
{
dbdiffOptionsExtra: {
deletedTablePrefix: '_deleted_',
deletedColumnPrefix: '_deleted_',
deletedSqlObjectPrefix: '_deleted_',
},
disallowExtraObjects: true,
finalCheckAgainstModel: [
{
name: 't1.table.yaml', name: 't1.table.yaml',
json: { json: {
name: 't1', name: 't1',
@@ -648,10 +448,80 @@ describe('Deploy database', () => {
], ],
primaryKey: ['id'], 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]))(
'Dont remove column - %s',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(engine, conn, driver, [[T1], [T1_NO_VAL]], {
finalCheckAgainstModel: [T1],
disallowExtraObjects: true,
});
})
); );
test.each(engines.map(engine => [engine.label, engine]))(
'Dont remove table - %s',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(engine, conn, driver, [[T1], []], {
finalCheckAgainstModel: [T1],
disallowExtraObjects: true,
});
})
);
test.each(engines.map(engine => [engine.label, engine]))(
'Mark table removed - %s',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(engine, conn, driver, [[T1], [], []], {
dbdiffOptionsExtra: {
deletedTablePrefix: '_deleted_',
deletedColumnPrefix: '_deleted_',
deletedSqlObjectPrefix: '_deleted_',
},
disallowExtraObjects: true,
finalCheckAgainstModel: [T1_DELETED],
});
})
);
test.each(engines.filter(engine => engine.supportRenameSqlObject).map(engine => [engine.label, engine]))(
'Mark view removed - %s',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(engine, conn, driver, [[T1, V1], [T1]], {
dbdiffOptionsExtra: {
deletedTablePrefix: '_deleted_',
deletedColumnPrefix: '_deleted_',
deletedSqlObjectPrefix: '_deleted_',
},
disallowExtraObjects: true,
finalCheckAgainstModel: [T1, V1_DELETED],
});
})
);
test.each(engines.map(engine => [engine.label, engine]))(
'Mark column removed - %s',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(engine, conn, driver, [[T1], [T1_NO_VAL]], {
dbdiffOptionsExtra: {
deletedTablePrefix: '_deleted_',
deletedColumnPrefix: '_deleted_',
deletedSqlObjectPrefix: '_deleted_',
},
disallowExtraObjects: true,
finalCheckAgainstModel: [T1_DELETED_VAL],
});
}) })
); );
@@ -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],
});
})
);
}); });