Skip to content

Commit b5a45fa

Browse files
authored
feat: Adds dryRun option. (#9)
1 parent f250aed commit b5a45fa

File tree

14 files changed

+66
-30
lines changed

14 files changed

+66
-30
lines changed

src/migrate/Signature.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1-
type Signature = () => Promise<void>;
1+
export interface Opts {
2+
readonly dryRun?: boolean;
3+
}
4+
5+
type Signature = (opts?: Opts) => Promise<void>;
26

37
export default Signature;

src/migrate/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ import FacadeConfig from '../FacadeConfig';
33
import getUnprocessedKeys from '../utils/getUnprocessedKeys';
44
import handleLocks from '../utils/handleLocks';
55
import migrateKey from '../utils/migrateKey';
6-
import Signature from './Signature';
6+
import Signature, { Opts } from './Signature';
77

88
export default (config: FacadeConfig): Signature => {
9-
return async () => {
9+
return async ({ dryRun = false }: Opts = {}) => {
1010
await handleLocks(config, async () => {
1111
const unprocessedKeys = await getUnprocessedKeys(config);
1212
const batchStart = new Date();
1313

1414
await Promise.resolve(reduce(unprocessedKeys, async (_result, key) => {
15-
await migrateKey({ config, key, batchStart });
15+
await migrateKey({ config, key, batchStart, dryRun });
1616
}, Promise.resolve()));
1717
});
1818
};

src/migrate/test.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ const testMigrate: TestFactory = (createService) => {
1616

1717
describe('migrate', () => {
1818
it('should not error when there are no migrations', async () => {
19-
const service = createService([]);
20-
await service.migrate();
19+
await createService([]).migrate();
2120
});
2221

2322
it('should error when there are duplicate keys', async () => {
@@ -26,6 +25,10 @@ const testMigrate: TestFactory = (createService) => {
2625
await assertRejects(promise, DuplicateKeyError);
2726
});
2827

28+
it('should not error when a migration fails during a dry run', async () => {
29+
await createService([failingMigration]).migrate({ dryRun: true });
30+
});
31+
2932
it('should error when the first migration errors', async () => {
3033
const promise = createService([failingMigration, successfulMigration]).migrate();
3134
await assertRejects(promise, FailingMigrationError);

src/migrateByKey/Signature.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export interface Opts {
22
readonly key: string;
33
readonly force?: boolean;
4+
readonly dryRun?: boolean;
45
}
56

67
type Signature = (opts: Opts) => Promise<void>;

src/migrateByKey/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ import migrateKey from '../utils/migrateKey';
66
import Signature from './Signature';
77

88
export default (config: FacadeConfig): Signature => {
9-
return async ({ key, force = false }) => {
9+
return async ({ key, force = false, dryRun = false }) => {
1010
await handleLocks(config, async () => {
1111
const isProcessed = await hasProcessedKey(config, key);
1212
if (isProcessed && !force) {
1313
throw new ProcessedMigrationError(key);
1414
}
1515

16-
await migrateKey({ config, key });
16+
await migrateKey({ config, key, dryRun });
1717
});
1818
};
1919
};

src/migrateByKey/test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ const testMigrateByKey: TestFactory = (createService) => {
2727
await assertRejects(promise, DuplicateKeyError);
2828
});
2929

30+
it('should not error when the migration fails during a dry run', async () => {
31+
const service = createService([failingMigration]);
32+
await service.migrateByKey({ key: testMigrationKey, dryRun: true });
33+
});
34+
3035
it('should error when the migration errors', async () => {
3136
const service = createService([failingMigration]);
3237
const promise = service.migrateByKey({ key: testMigrationKey });

src/rollback/Signature.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1-
type Signature = () => Promise<void>;
1+
export interface Opts {
2+
readonly dryRun?: boolean;
3+
}
4+
5+
type Signature = (opts?: Opts) => Promise<void>;
26

37
export default Signature;

src/rollback/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ import FacadeConfig from '../FacadeConfig';
33
import getLastBatchKeys from '../utils/getLastBatchKeys';
44
import handleLocks from '../utils/handleLocks';
55
import rollbackKey from '../utils/rollbackKey';
6-
import Signature from './Signature';
6+
import Signature, { Opts } from './Signature';
77

88
export default (config: FacadeConfig): Signature => {
9-
return async () => {
9+
return async ({ dryRun = false }: Opts = {}) => {
1010
await handleLocks(config, async () => {
1111
const lastBatchKeys = await getLastBatchKeys(config);
1212

1313
await Promise.resolve(reduce(lastBatchKeys, async (_result, key) => {
14-
await rollbackKey({ config, key });
14+
await rollbackKey({ config, key, dryRun });
1515
}, Promise.resolve()));
1616
});
1717
};

src/rollback/test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ const testRollback: TestFactory = (createService) => {
3737
await assertRejects(promise, MissingMigrationError);
3838
});
3939

40+
it('should not error when the migration fails during a dry run', async () => {
41+
const service = createService([failingMigration]);
42+
await service.migrate();
43+
await service.rollback({ dryRun: true });
44+
});
45+
4046
it('should error when the first migration errors', async () => {
4147
const service = createService([failingMigration, successfulMigration]);
4248
await service.migrate();

src/rollbackByKey/Signature.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export interface Opts {
22
readonly key: string;
33
readonly force?: boolean;
4+
readonly dryRun?: boolean;
45
}
56

67
type Signature = (opts: Opts) => Promise<void>;

0 commit comments

Comments
 (0)