npm package diff
Package: @forge/sql
Versions: 2.3.0-next.0 - 2.3.0-next.1
File: package/out/__test__/migration.test.js
Index: package/out/__test__/migration.test.js
===================================================================
--- package/out/__test__/migration.test.js
+++ package/out/__test__/migration.test.js
@@ -4,8 +4,9 @@
const sql_1 = require("../sql");
const errorCodes_1 = require("../errorCodes");
const jest_when_1 = require("jest-when");
const sql_statement_1 = require("../sql-statement");
+const errors_1 = require("../errors");
jest.mock('../sql');
describe('Migration', () => {
let migrationRunner;
let mockSqlClient;
@@ -91,8 +92,88 @@
expect(result).toEqual(['v_002_create_table_bar']);
expect(mockSqlClient.prepare).toHaveBeenCalledTimes(1);
expect(mockSqlClient.executeDDL).toHaveBeenCalledTimes(3);
});
+ it('should throw forge sql api error during check point', async () => {
+ migrationRunner.enqueue('v_001_create_table_foo', CREATE_TABLE_FOO_QUERY);
+ migrationRunner.enqueue('v_002_create_table_bar', CREATE_TABLE_BAR_QUERY);
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
+ .calledWith((0, jest_when_1.when)((arg) => arg.startsWith('CREATE TABLE IF NOT EXISTS __migrations')))
+ .mockResolvedValue({ rows: [] });
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
+ .calledWith('SELECT id, name, migratedAt FROM __migrations;')
+ .mockResolvedValue({
+ rows: [{ name: 'v_001_create_table_foo', statement: CREATE_TABLE_FOO_QUERY, migratedAt: new Date() }]
+ });
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
+ .calledWith(CREATE_TABLE_BAR_QUERY)
+ .mockRejectedValue(new errors_1.ForgeSQLAPIError({ status: 400, statusText: 'Invalid query' }, { code: 'SQL_EXECUTION_ERROR', message: '', suggestion: 'Check your SQL query' }));
+ await expect(migrationRunner.run()).rejects.toMatchObject({
+ migrationName: 'v_002_create_table_bar',
+ migrationsYetToRun: ['v_002_create_table_bar'],
+ cause: new errors_1.ForgeSQLAPIError({ status: 400, statusText: 'Invalid query' }, { code: 'SQL_EXECUTION_ERROR', message: '', suggestion: 'Check your SQL query' })
+ });
+ });
+ it('should throw an error when a migration fails', async () => {
+ migrationRunner.enqueue('v_001_create_table_foo', CREATE_TABLE_FOO_QUERY);
+ migrationRunner.enqueue('v_002_create_table_bar', CREATE_TABLE_BAR_QUERY);
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
+ .calledWith((0, jest_when_1.when)((arg) => arg.startsWith('CREATE TABLE IF NOT EXISTS __migrations')))
+ .mockResolvedValue({ rows: [] });
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
+ .calledWith('SELECT id, name, migratedAt FROM __migrations;')
+ .mockResolvedValue({
+ rows: [{ name: 'v_001_create_table_foo', statement: CREATE_TABLE_FOO_QUERY, migratedAt: new Date() }]
+ });
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
+ .calledWith(CREATE_TABLE_BAR_QUERY)
+ .mockRejectedValue(new errors_1.ForgeSQLAPIError({ status: 400, statusText: 'Invalid query' }, { code: 'SQL_EXECUTION_ERROR', message: '', suggestion: 'Check your SQL query' }));
+ await expect(migrationRunner.run()).rejects.toMatchObject({
+ migrationName: 'v_002_create_table_bar',
+ migrationsYetToRun: ['v_002_create_table_bar'],
+ cause: new errors_1.ForgeSQLAPIError({ status: 400, statusText: 'Invalid query' }, { code: 'SQL_EXECUTION_ERROR', message: '', suggestion: 'Check your SQL query' })
+ });
+ });
+ it('should throw generic error when a migration fails', async () => {
+ migrationRunner.enqueue('v_001_create_table_foo', CREATE_TABLE_FOO_QUERY);
+ migrationRunner.enqueue('v_002_create_table_bar', CREATE_TABLE_BAR_QUERY);
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
+ .calledWith((0, jest_when_1.when)((arg) => arg.startsWith('CREATE TABLE IF NOT EXISTS __migrations')))
+ .mockResolvedValue({ rows: [] });
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
+ .calledWith('SELECT id, name, migratedAt FROM __migrations;')
+ .mockResolvedValue({
+ rows: [{ name: 'v_001_create_table_foo', statement: CREATE_TABLE_FOO_QUERY, migratedAt: new Date() }]
+ });
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
+ .calledWith(CREATE_TABLE_BAR_QUERY)
+ .mockRejectedValue(new Error('Failed to execute migration'));
+ await expect(migrationRunner.run()).rejects.toMatchObject({
+ migrationName: 'v_002_create_table_bar',
+ migrationsYetToRun: ['v_002_create_table_bar'],
+ cause: new Error('Failed to execute migration')
+ });
+ });
+ it('should throw generic error when check point fails', async () => {
+ migrationRunner.enqueue('v_001_create_table_foo', CREATE_TABLE_FOO_QUERY);
+ migrationRunner.enqueue('v_002_create_table_bar', CREATE_TABLE_BAR_QUERY);
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
+ .calledWith((0, jest_when_1.when)((arg) => arg.startsWith('CREATE TABLE IF NOT EXISTS __migrations')))
+ .mockResolvedValue({ rows: [] });
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
+ .calledWith('SELECT id, name, migratedAt FROM __migrations;')
+ .mockResolvedValue({
+ rows: [{ name: 'v_001_create_table_foo', statement: CREATE_TABLE_FOO_QUERY, migratedAt: new Date() }]
+ });
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
+ .calledWith(CREATE_TABLE_BAR_QUERY)
+ .mockRejectedValue(new Error('Failed to execute migration'));
+ await expect(migrationRunner.run()).rejects.toMatchObject({
+ migrationName: 'v_002_create_table_bar',
+ migrationsYetToRun: ['v_002_create_table_bar'],
+ cause: new Error('Failed to execute migration')
+ });
+ });
});
describe('when no migrations have been run in the past', () => {
it('should execute migrations that have not been previously run', async () => {
const CREATE_TABLE_FOO_QUERY = 'CREATE TABLE IF NOT EXISTS foo (id INT)';