Skip to content

Commit

Permalink
fix: down command handle exception (#84)
Browse files Browse the repository at this point in the history
  • Loading branch information
mycodeself authored Apr 1, 2023
1 parent c7ecb1c commit 2413295
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 7 deletions.
18 changes: 18 additions & 0 deletions __tests__/down.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { MigrationInterface } from '../lib/MigrationInterface';
import { loadMigrationFile } from '../lib/migrations';
import { configMock } from './__mocks__/config.mock';
import { connectionMock } from './__mocks__/connection.mock';
import { ExecuteMigrationError } from '../lib/errors';

describe('down command', () => {
const numberOfMigrations = 10;
Expand Down Expand Up @@ -74,4 +75,21 @@ describe('down command', () => {
expect(deleteMigration).toBeCalledTimes(1);
expect(connectionMock.client.close).toBeCalled();
});

it('should handle exception when migration down fails', async () => {
(fakeMigrationInstance.down as jest.Mock).mockReturnValue(
new Promise((_, reject) => reject('Error'))
);

type Mode = 'all' | 'last';
const modes: Mode[] = ['all', 'last'];

for await (const mode of modes) {
const downOperation = () => down({ mode, config: configMock });

await expect(downOperation()).rejects.toThrow(ExecuteMigrationError);
expect(deleteMigration).toBeCalledTimes(0);
expect(connectionMock.client.close());
}
});
});
24 changes: 17 additions & 7 deletions lib/commands/down.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
MigrationModel,
mongoConnect,
} from '../database';
import { ExecuteMigrationError } from '../errors';
import { MigrationObject, loadMigrationFile } from '../migrations';
import { flatArray } from '../utils/flatArray';

Expand Down Expand Up @@ -38,10 +39,14 @@ const downLastAppliedMigration = async (
if (!migration) {
throw new Error(`Migration (${lastApplied.className}) not found`);
}

await migration.instance.down(connection.db);
await deleteMigration(collection, migration);
spinner.succeed(`Migration ${lastApplied.className} down`).stop();
try {
await migration.instance.down(connection.db);
await deleteMigration(collection, migration);
spinner.succeed(`Migration ${lastApplied.className} down`).stop();
} catch (e) {
spinner.fail(`Error down migration ${lastApplied.className}`);
throw new ExecuteMigrationError(e);
}
};

const downAll = async (
Expand Down Expand Up @@ -73,9 +78,14 @@ const downAll = async (
const localSpinner = ora(
`Undoing migration ${migration.className}`
).start();
await migration.instance.down(connection.db);
await deleteMigration(collection, migration);
localSpinner.succeed(`Migration ${migration.className} down`).stop();
try {
await migration.instance.down(connection.db);
await deleteMigration(collection, migration);
localSpinner.succeed(`Migration ${migration.className} down`).stop();
} catch (e) {
localSpinner.fail(`Error down migration ${migration.className}`);
throw new ExecuteMigrationError(e);
}
}

spinner.succeed('All migrations down').stop();
Expand Down

0 comments on commit 2413295

Please sign in to comment.