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