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