Skip to content

Commit 862bc17

Browse files
authored
feat: Adds LockedMigration error. (#4)
1 parent 818c857 commit 862bc17

File tree

6 files changed

+47
-1
lines changed

6 files changed

+47
-1
lines changed

src/factory.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import * as sourceMapSupport from 'source-map-support';
22
sourceMapSupport.install();
33

44
import factoryTest from './factoryTest';
5+
import LockedMigrationsError from './utils/errors/LockedMigrationsError';
56
import ProcessedMigration from './utils/types/ProcessedMigration';
67

78
let processedMigrations: ProcessedMigration[] = []; // tslint:disable-line:no-let
@@ -16,7 +17,7 @@ factoryTest({
1617
},
1718
lockMigrations: async () => {
1819
if (hasLockedMigrations) {
19-
throw new Error();
20+
throw new LockedMigrationsError();
2021
}
2122
hasLockedMigrations = true;
2223
},

src/migrate/test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'mocha'; // tslint:disable-line:no-import-side-effect
44
import factory from '../factory';
55
import RepoFacade from '../RepoFacade';
66
import FailingMigrationError from '../utils/errors/FailingMigrationError';
7+
import LockedMigrationsError from '../utils/errors/LockedMigrationsError';
78
import createMigrationProcess from '../utils/tests/createMigrationProcess';
89
import createTestUpMigration from '../utils/tests/createTestUpMigration';
910
import MigrationDictionary from '../utils/types/MigrationDictionary';
@@ -71,5 +72,11 @@ export default (repo: RepoFacade) => {
7172
assert.equal(skippedMigration.getProcessed(), false);
7273
assert.equal(unskippedMigration.getProcessed(), true);
7374
});
75+
76+
it('should error when migrations are locked', async () => {
77+
const service = createService({});
78+
const promise = Promise.all([service.migrate(), service.migrate()]);
79+
await assertRejects(promise, LockedMigrationsError);
80+
});
7481
});
7582
};

src/migrateByKey/test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import 'mocha'; // tslint:disable-line:no-import-side-effect
44
import factory from '../factory';
55
import RepoFacade from '../RepoFacade';
66
import FailingMigrationError from '../utils/errors/FailingMigrationError';
7+
import LockedMigrationsError from '../utils/errors/LockedMigrationsError';
78
import MissingMigrationError from '../utils/errors/MissingMigrationError';
89
import ProcessedMigrationError from '../utils/errors/ProcessedMigrationError';
910
import createMigrationProcess from '../utils/tests/createMigrationProcess';
1011
import createTestUpMigration from '../utils/tests/createTestUpMigration';
1112
import MigrationDictionary from '../utils/types/MigrationDictionary';
1213

1314
export default (repo: RepoFacade) => {
15+
const successfulMigration = createTestUpMigration();
1416
const failingMigration = createTestUpMigration(() => { throw new Error(); });
1517

1618
const createService = (migrations: MigrationDictionary) => {
@@ -54,5 +56,14 @@ export default (repo: RepoFacade) => {
5456
await service.migrateByKey({ key: 'testMigration', force: true });
5557
assert.equal(getProcessed(), true);
5658
});
59+
60+
it('should error when migrations are locked', async () => {
61+
const service = createService({ successfulMigration });
62+
const promise = Promise.all([
63+
service.migrateByKey({ key: 'successfulMigration' }),
64+
service.migrateByKey({ key: 'successfulMigration' }),
65+
]);
66+
await assertRejects(promise, LockedMigrationsError);
67+
});
5768
});
5869
};

src/rollback/test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'mocha'; // tslint:disable-line:no-import-side-effect
44
import factory from '../factory';
55
import RepoFacade from '../RepoFacade';
66
import FailingMigrationError from '../utils/errors/FailingMigrationError';
7+
import LockedMigrationsError from '../utils/errors/LockedMigrationsError';
78
import MissingMigrationError from '../utils/errors/MissingMigrationError';
89
import createMigrationProcess from '../utils/tests/createMigrationProcess';
910
import createTestDownMigration from '../utils/tests/createTestDownMigration';
@@ -83,5 +84,11 @@ export default (repo: RepoFacade) => {
8384
assert.equal(skippedMigration.getProcessed(), false);
8485
assert.equal(unskippedMigration.getProcessed(), true);
8586
});
87+
88+
it('should error when migrations are locked', async () => {
89+
const service = createService({});
90+
const promise = Promise.all([service.rollback(), service.rollback()]);
91+
await assertRejects(promise, LockedMigrationsError);
92+
});
8693
});
8794
};

src/rollbackByKey/test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ import 'mocha'; // tslint:disable-line:no-import-side-effect
44
import factory from '../factory';
55
import RepoFacade from '../RepoFacade';
66
import FailingMigrationError from '../utils/errors/FailingMigrationError';
7+
import LockedMigrationsError from '../utils/errors/LockedMigrationsError';
78
import UnprocessedMigrationError from '../utils/errors/UnprocessedMigrationError';
89
import createMigrationProcess from '../utils/tests/createMigrationProcess';
910
import createTestDownMigration from '../utils/tests/createTestDownMigration';
1011
import MigrationDictionary from '../utils/types/MigrationDictionary';
1112

1213
export default (repo: RepoFacade) => {
14+
const successfulMigration = createTestDownMigration();
1315
const failingMigration = createTestDownMigration(() => { throw new Error(); });
1416

1517
const createService = (migrations: MigrationDictionary) => {
@@ -53,5 +55,15 @@ export default (repo: RepoFacade) => {
5355
await service.rollbackByKey({ key: 'testMigration', force: true });
5456
assert.equal(getProcessed(), true);
5557
});
58+
59+
it('should error when migrations are locked', async () => {
60+
const service = createService({ successfulMigration });
61+
await service.migrate();
62+
const promise = Promise.all([
63+
service.rollbackByKey({ key: 'successfulMigration' }),
64+
service.rollbackByKey({ key: 'successfulMigration' }),
65+
]);
66+
await assertRejects(promise, LockedMigrationsError);
67+
});
5668
});
5769
};
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// tslint:disable:no-class
2+
import { BaseError } from 'make-error';
3+
4+
export default class LockedMigrationsError extends BaseError {
5+
constructor() {
6+
super();
7+
}
8+
}

0 commit comments

Comments
 (0)