Skip to content

Commit bedc4b7

Browse files
authored
feat: Adds getMigrations to RepoFacade. (#5)
BREAKING CHANGE: Adds `getMigrations` to `RepoFacade`.
1 parent 3ceb639 commit bedc4b7

File tree

13 files changed

+86
-51
lines changed

13 files changed

+86
-51
lines changed

readme.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,14 @@
33
44
### Usage
55
1. Install it with `npm i @js-migrations/core`.
6+
1. [Use the factory to create the service facade](#use-the-factory).
7+
8+
### Use the factory
9+
```typescript
10+
import migrationsServiceFactory from '@js-migrations/core/dist/factory';
11+
12+
const migrationsServiceFacade = migrationsServiceFactory({
13+
log: console.log.bind(console),
14+
repo: migrationsRepoFacade,
15+
});
16+
```

src/FacadeConfig.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import RepoFacade from './RepoFacade';
2-
import MigrationDictionary from './utils/types/MigrationDictionary';
32

43
export default interface FacadeConfig {
54
readonly repo: RepoFacade;
65
readonly log: (message: string) => void;
7-
readonly migrations: MigrationDictionary;
86
}

src/RepoFacade.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import MigrationDictionary from './utils/types/MigrationDictionary';
12
import ProcessedMigration from './utils/types/ProcessedMigration';
23

34
export default interface RepoFacade {
5+
readonly getMigrations: () => Promise<MigrationDictionary>;
46
readonly getProcessedMigrations: () => Promise<ProcessedMigration[]>;
57
readonly updateProcessedMigration: (migration: ProcessedMigration) => Promise<void>;
68
readonly removeProcessedMigration: (key: string) => Promise<void>;

src/factory.test.ts

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,36 @@ import ProcessedMigration from './utils/types/ProcessedMigration';
88
let processedMigrations: ProcessedMigration[] = []; // tslint:disable-line:no-let
99
let hasLockedMigrations = false; // tslint:disable-line:no-let
1010

11-
factoryTest({
12-
clearMigrations: async () => {
13-
processedMigrations = [];
14-
},
15-
getProcessedMigrations: async () => {
16-
return processedMigrations;
17-
},
18-
lockMigrations: async () => {
19-
if (hasLockedMigrations) {
20-
throw new LockedMigrationsError();
21-
}
22-
hasLockedMigrations = true;
23-
},
24-
removeProcessedMigration: async (key) => {
25-
processedMigrations = processedMigrations.filter((processedMigration) => {
26-
return processedMigration.key !== key;
27-
});
28-
},
29-
unlockMigrations: async () => {
30-
hasLockedMigrations = false;
31-
},
32-
updateProcessedMigration: async (migration) => {
33-
const unmatchedMigrations = processedMigrations.filter((processedMigration) => {
34-
return processedMigration.key !== migration.key;
35-
});
36-
processedMigrations = [...unmatchedMigrations, migration];
37-
},
11+
factoryTest((migrations) => {
12+
return {
13+
clearMigrations: async () => {
14+
processedMigrations = [];
15+
},
16+
getMigrations: async () => {
17+
return migrations;
18+
},
19+
getProcessedMigrations: async () => {
20+
return processedMigrations;
21+
},
22+
lockMigrations: async () => {
23+
if (hasLockedMigrations) {
24+
throw new LockedMigrationsError();
25+
}
26+
hasLockedMigrations = true;
27+
},
28+
removeProcessedMigration: async (key) => {
29+
processedMigrations = processedMigrations.filter((processedMigration) => {
30+
return processedMigration.key !== key;
31+
});
32+
},
33+
unlockMigrations: async () => {
34+
hasLockedMigrations = false;
35+
},
36+
updateProcessedMigration: async (migration) => {
37+
const unmatchedMigrations = processedMigrations.filter((processedMigration) => {
38+
return processedMigration.key !== migration.key;
39+
});
40+
processedMigrations = [...unmatchedMigrations, migration];
41+
},
42+
};
3843
});

src/factoryTest.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
import migrateTest from './migrate/test';
22
import migrateByKeyTest from './migrateByKey/test';
3-
import RepoFacade from './RepoFacade';
43
import rollbackTest from './rollback/test';
54
import rollbackByKeyTest from './rollbackByKey/test';
5+
import TestFactory from './utils/tests/TestFactory';
66

7-
export default (repo: RepoFacade) => {
7+
const testFactory: TestFactory = (repoFactory) => {
88
describe('factory', () => {
99
beforeEach(async () => {
10-
await repo.clearMigrations();
10+
await repoFactory({}).clearMigrations();
1111
});
1212

13-
migrateTest(repo);
14-
migrateByKeyTest(repo);
15-
rollbackTest(repo);
16-
rollbackByKeyTest(repo);
13+
migrateTest(repoFactory);
14+
migrateByKeyTest(repoFactory);
15+
rollbackTest(repoFactory);
16+
rollbackByKeyTest(repoFactory);
1717
});
1818
};
19+
20+
export default testFactory;

src/migrate/test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@ import * as assert from 'assert';
22
import * as assertRejects from 'assert-rejects';
33
import 'mocha'; // tslint:disable-line:no-import-side-effect
44
import factory from '../factory';
5-
import RepoFacade from '../RepoFacade';
65
import FailingMigrationError from '../utils/errors/FailingMigrationError';
76
import assertLocked from '../utils/tests/assertLocked';
87
import createMigrationProcess from '../utils/tests/createMigrationProcess';
98
import createTestUpMigration from '../utils/tests/createTestUpMigration';
9+
import TestFactory from '../utils/tests/TestFactory';
1010
import MigrationDictionary from '../utils/types/MigrationDictionary';
1111

12-
export default (repo: RepoFacade) => {
12+
const testMigrate: TestFactory = (repoFactory) => {
1313
const successfulMigration = createTestUpMigration();
1414
const failingMigration = createTestUpMigration(() => { throw new Error(); });
1515

1616
const createService = (migrations: MigrationDictionary) => {
1717
const log = () => null;
18-
return factory({ log, migrations, repo });
18+
return factory({ log, repo: repoFactory(migrations) });
1919
};
2020

2121
describe('migrate', () => {
@@ -79,3 +79,5 @@ export default (repo: RepoFacade) => {
7979
});
8080
});
8181
};
82+
83+
export default testMigrate;

src/migrateByKey/test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@ import * as assert from 'assert';
22
import * as assertRejects from 'assert-rejects';
33
import 'mocha'; // tslint:disable-line:no-import-side-effect
44
import factory from '../factory';
5-
import RepoFacade from '../RepoFacade';
65
import FailingMigrationError from '../utils/errors/FailingMigrationError';
76
import MissingMigrationError from '../utils/errors/MissingMigrationError';
87
import ProcessedMigrationError from '../utils/errors/ProcessedMigrationError';
98
import assertLocked from '../utils/tests/assertLocked';
109
import createMigrationProcess from '../utils/tests/createMigrationProcess';
1110
import createTestUpMigration from '../utils/tests/createTestUpMigration';
11+
import TestFactory from '../utils/tests/TestFactory';
1212
import MigrationDictionary from '../utils/types/MigrationDictionary';
1313

14-
export default (repo: RepoFacade) => {
14+
const testMigrateByKey: TestFactory = (repoFactory) => {
1515
const successfulMigration = createTestUpMigration();
1616
const failingMigration = createTestUpMigration(() => { throw new Error(); });
1717

1818
const createService = (migrations: MigrationDictionary) => {
1919
const log = () => null;
20-
return factory({ log, migrations, repo });
20+
return factory({ log, repo: repoFactory(migrations) });
2121
};
2222

2323
describe('migrateByKey', () => {
@@ -66,3 +66,5 @@ export default (repo: RepoFacade) => {
6666
});
6767
});
6868
};
69+
70+
export default testMigrateByKey;

src/rollback/test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@ import * as assert from 'assert';
22
import * as assertRejects from 'assert-rejects';
33
import 'mocha'; // tslint:disable-line:no-import-side-effect
44
import factory from '../factory';
5-
import RepoFacade from '../RepoFacade';
65
import FailingMigrationError from '../utils/errors/FailingMigrationError';
76
import MissingMigrationError from '../utils/errors/MissingMigrationError';
87
import assertLocked from '../utils/tests/assertLocked';
98
import createMigrationProcess from '../utils/tests/createMigrationProcess';
109
import createTestDownMigration from '../utils/tests/createTestDownMigration';
10+
import TestFactory from '../utils/tests/TestFactory';
1111
import MigrationDictionary from '../utils/types/MigrationDictionary';
1212

13-
export default (repo: RepoFacade) => {
13+
const testRollback: TestFactory = (repoFactory) => {
1414
const successfulMigration = createTestDownMigration();
1515
const failingMigration = createTestDownMigration(() => { throw new Error(); });
1616

1717
const createService = (migrations: MigrationDictionary) => {
1818
const log = () => null;
19-
return factory({ log, migrations, repo });
19+
return factory({ log, repo: repoFactory(migrations) });
2020
};
2121

2222
describe('rollback', () => {
@@ -91,3 +91,5 @@ export default (repo: RepoFacade) => {
9191
});
9292
});
9393
};
94+
95+
export default testRollback;

src/rollbackByKey/test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@ import * as assert from 'assert';
22
import * as assertRejects from 'assert-rejects';
33
import 'mocha'; // tslint:disable-line:no-import-side-effect
44
import factory from '../factory';
5-
import RepoFacade from '../RepoFacade';
65
import FailingMigrationError from '../utils/errors/FailingMigrationError';
76
import UnprocessedMigrationError from '../utils/errors/UnprocessedMigrationError';
87
import assertLocked from '../utils/tests/assertLocked';
98
import createMigrationProcess from '../utils/tests/createMigrationProcess';
109
import createTestDownMigration from '../utils/tests/createTestDownMigration';
10+
import TestFactory from '../utils/tests/TestFactory';
1111
import MigrationDictionary from '../utils/types/MigrationDictionary';
1212

13-
export default (repo: RepoFacade) => {
13+
const testRollbackByKey: TestFactory = (repoFactory) => {
1414
const successfulMigration = createTestDownMigration();
1515
const failingMigration = createTestDownMigration(() => { throw new Error(); });
1616

1717
const createService = (migrations: MigrationDictionary) => {
1818
const log = () => null;
19-
return factory({ log, migrations, repo });
19+
return factory({ log, repo: repoFactory(migrations) });
2020
};
2121

2222
describe('rollbackByKey', () => {
@@ -66,3 +66,5 @@ export default (repo: RepoFacade) => {
6666
});
6767
});
6868
};
69+
70+
export default testRollbackByKey;

src/utils/getUnprocessedKeys.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import FacadeConfig from '../FacadeConfig';
33

44
export default async (config: FacadeConfig) => {
55
const processedMigrations = await config.repo.getProcessedMigrations();
6+
const migrations = await config.repo.getMigrations();
67
const processedKeys = processedMigrations.map(({ key }) => key);
7-
const migrationKeys = Object.keys(config.migrations);
8+
const migrationKeys = Object.keys(migrations);
89
return difference(migrationKeys, processedKeys);
910
};

0 commit comments

Comments
 (0)