mirror of https://github.com/certd/certd
164 lines
4.5 KiB
TypeScript
164 lines
4.5 KiB
TypeScript
import {Flyway} from "../src/flyway";
|
||
import {DataSource} from 'typeorm';
|
||
import * as fs from 'fs'
|
||
import {FlywayHistory} from "../src/entity";
|
||
|
||
const dbPath = "./data/db.sqlite"
|
||
const AppDataSource = new DataSource({
|
||
type: "sqlite",
|
||
database: dbPath,
|
||
entities: [FlywayHistory]
|
||
})
|
||
|
||
describe('test/flyway/flyway.test.ts', () => {
|
||
|
||
beforeEach(async () => {
|
||
if (fs.existsSync(dbPath)) {
|
||
fs.rmSync(dbPath)
|
||
}
|
||
await AppDataSource.initialize()
|
||
console.log('before each')
|
||
});
|
||
|
||
afterEach(async () => {
|
||
// close app
|
||
await AppDataSource.destroy()
|
||
if (fs.existsSync(dbPath)) {
|
||
fs.rmSync(dbPath)
|
||
}
|
||
console.log('after each')
|
||
});
|
||
|
||
/**
|
||
* sql分割测试
|
||
*/
|
||
it('split', async () => {
|
||
let opts = {
|
||
scriptDir: "./test/db/split"
|
||
};
|
||
const content = fs.readFileSync("./test/db/split/split.sql").toString();
|
||
const sqlArray = new Flyway(opts).splitSql2Array(content)
|
||
console.log('sql array',sqlArray)
|
||
expect(sqlArray.length).toBe(1);
|
||
});
|
||
|
||
/**
|
||
* sql分号测试
|
||
*/
|
||
it('semicolon', async () => {
|
||
const connection = AppDataSource
|
||
let opts = {
|
||
scriptDir: "./test/db/semicolon",
|
||
connection: connection
|
||
};
|
||
await new Flyway(opts).run();
|
||
const queryRunner = connection.createQueryRunner();
|
||
const flywayHistoryRet = await queryRunner.query("select * from flyway_history");
|
||
console.log('flywayHistoryRet', flywayHistoryRet)
|
||
expect(flywayHistoryRet.length).toBe(1);
|
||
});
|
||
|
||
/**
|
||
* 正常执行
|
||
*/
|
||
it('success', async () => {
|
||
const connection = AppDataSource
|
||
let opts = {
|
||
scriptDir: "./test/db/migration",
|
||
connection: connection
|
||
};
|
||
await new Flyway(opts).run();
|
||
const queryRunner = connection.createQueryRunner();
|
||
const ret = await queryRunner.query("select count(*) as count from sys_user");
|
||
console.log('useCount',ret)
|
||
expect(ret[0].count).toBe(4);
|
||
|
||
const flywayHistoryRet = await queryRunner.query("select * from flyway_history");
|
||
console.log('flywayHistoryRet',flywayHistoryRet)
|
||
expect(flywayHistoryRet.length).toBe(3);
|
||
expect(flywayHistoryRet[0].id).toBe(1);
|
||
expect(flywayHistoryRet[0].success).toBe(1);
|
||
expect(flywayHistoryRet[0].name).toBe('v1__init.sql');
|
||
|
||
//再运行一次,应该没有变化
|
||
await new Flyway(opts).run();
|
||
const flywayHistoryRet2 = await queryRunner.query("select * from flyway_history");
|
||
expect(flywayHistoryRet.length).toBe(3);
|
||
expect(flywayHistoryRet2[0].id).toBe(1);
|
||
|
||
});
|
||
|
||
|
||
/**
|
||
* 测试基准线,基准线之前的sql不执行
|
||
*/
|
||
it('base line', async () => {
|
||
const connection = AppDataSource
|
||
let opts = {
|
||
scriptDir: "./test/db/baseline",
|
||
baseline: 'v0__baseline.sql',
|
||
connection
|
||
};
|
||
try {
|
||
await new Flyway(opts).run();
|
||
} catch (e) {
|
||
console.log('error',e)
|
||
throw e
|
||
}
|
||
const queryRunner = connection.createQueryRunner();
|
||
const ret = await queryRunner.query("select count(*) as count from sys_user");
|
||
console.log('useCount', ret)
|
||
expect(ret[0].count).toBe(2);
|
||
|
||
const flywayHistoryRet = await queryRunner.query("select * from flyway_history");
|
||
console.log('flywayHistoryRet', flywayHistoryRet)
|
||
expect(flywayHistoryRet.length).toBe(2);
|
||
expect(flywayHistoryRet[0].id).toBe(1);
|
||
expect(flywayHistoryRet[0].success).toBe(1);
|
||
expect(flywayHistoryRet[0].name).toBe('v0__baseline.sql');
|
||
expect(flywayHistoryRet[1].name).toBe('v1__init.sql');
|
||
|
||
});
|
||
|
||
it('hash check', async () => {
|
||
const connection = AppDataSource;
|
||
let opts = {
|
||
scriptDir: "./test/db/migration",
|
||
connection
|
||
};
|
||
await new Flyway(opts).run();
|
||
const queryRunner = connection.createQueryRunner();
|
||
const ret = await queryRunner.query("select count(*) as count from sys_user");
|
||
console.log('useCount',ret)
|
||
expect(ret[0].count).toBe(4);
|
||
|
||
//再运行一次,应该抛异常
|
||
let error
|
||
try{
|
||
opts.scriptDir="./test/db/hash-check"
|
||
await new Flyway(opts).run();
|
||
}catch (e){
|
||
error = e.message;
|
||
}
|
||
expect(error).toContain('hash conflict');
|
||
|
||
});
|
||
|
||
|
||
it('blank sql', async () => {
|
||
const connection = AppDataSource;
|
||
let opts = {
|
||
scriptDir: "./test/db/blank",
|
||
connection
|
||
};
|
||
await new Flyway(opts).run();
|
||
|
||
const queryRunner = connection.createQueryRunner();
|
||
const flywayHistoryRet = await queryRunner.query("select * from flyway_history");
|
||
console.log('flywayHistoryRet', flywayHistoryRet)
|
||
expect(flywayHistoryRet.length).toBe(1);
|
||
|
||
});
|
||
|
||
});
|