Skip to content

Commit

Permalink
BC-6620 - add migration pending command (#4778)
Browse files Browse the repository at this point in the history
  • Loading branch information
virgilchiriac authored Feb 21, 2024
1 parent 8ec8cfa commit 882007c
Show file tree
Hide file tree
Showing 8 changed files with 43 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/migrations.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ jobs:
- run: npm ci
- run: npm run setup:db:seed
- name: check no pending migrations (migration is in db)
run: test $(npx mikro-orm migration:pending | grep -c "Migration") -eq 0
run: test $(npm run migration:pending | grep -c "Migration") -eq 0
Original file line number Diff line number Diff line change
Expand Up @@ -156,4 +156,12 @@ describe('DatabaseManagementService', () => {
expect(orm.getMigrator().down).toHaveBeenCalledWith({ migrations: [params.only] });
});
});

describe('When call migrationPending()', () => {
it('should call migrator.getPendingMigrations()', async () => {
const spy = jest.spyOn(orm.getMigrator(), 'getPendingMigrations');
await service.migrationPending();
expect(spy).toHaveBeenCalled();
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { EntityManager } from '@mikro-orm/mongodb';
import { Injectable } from '@nestjs/common';
import { BaseEntity } from '@shared/domain/entity';
import { Collection, Db } from 'mongodb';
import { MigrateOptions } from '@mikro-orm/migrations-mongodb';
import { MigrateOptions, UmzugMigration } from '@mikro-orm/migrations-mongodb';

@Injectable()
export class DatabaseManagementService {
Expand Down Expand Up @@ -81,6 +81,12 @@ export class DatabaseManagementService {
await migrator.down(params);
}

async migrationPending(): Promise<UmzugMigration[]> {
const migrator = this.orm.getMigrator();
const pendingMigrations = await migrator.getPendingMigrations();
return pendingMigrations;
}

private migrationParams(only?: string, from?: string, to?: string) {
const params: MigrateOptions = {};
if (only) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,11 @@ describe('DatabaseManagementConsole', () => {
expect(consoleInfoSpy).toHaveBeenCalledWith('migration down is completed');
expect(databaseManagementUc.migrationDown).toHaveBeenCalled();
});
it('should check pending migrations', async () => {
await service.migration({ pending: true });
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('Pending:'));
expect(databaseManagementUc.migrationPending).toHaveBeenCalled();
});
it('should no migrate if no param specified', async () => {
await service.migration({});
expect(consoleErrorSpy).toHaveBeenCalledWith('no migration option was given');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ interface MigrationOptions {
from?: string;
to?: string;
only?: string;
pending?: boolean;
}

@Console({ command: 'database', description: 'database setup console' })
Expand Down Expand Up @@ -112,12 +113,17 @@ export class DatabaseManagementConsole {
required: false,
description: 'run a single migration',
},
{
flags: '--pending',
required: false,
description: 'list pending migrations',
},
],
description: 'Execute MikroOrm migration up/down',
})
async migration(migrationOptions: MigrationOptions): Promise<string> {
let report = 'no migration option was given';
if (!migrationOptions.up && !migrationOptions.down) {
if (!migrationOptions.up && !migrationOptions.down && !migrationOptions.pending) {
this.consoleWriter.error(report);
return report;
}
Expand All @@ -129,6 +135,10 @@ export class DatabaseManagementConsole {
await this.databaseManagementUc.migrationDown(migrationOptions.from, migrationOptions.to, migrationOptions.only);
report = 'migration down is completed';
}
if (migrationOptions.pending) {
const pendingMigrations = await this.databaseManagementUc.migrationPending();
report = `Pending: ${JSON.stringify(pendingMigrations.map((migration) => migration.name))}`;
}

this.consoleWriter.info(report);
return report;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -679,5 +679,10 @@ describe('DatabaseManagementService', () => {
await uc.migrationDown('foo', 'bar', 'baz');
expect(dbService.migrationDown).toHaveBeenCalledWith('foo', 'bar', 'baz');
});
it('should call migrationPending', async () => {
dbService.migrationDown = jest.fn();
await uc.migrationPending();
expect(dbService.migrationPending).toHaveBeenCalled();
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { ConfigService } from '@nestjs/config';
import { StorageProviderEntity, SystemEntity } from '@shared/domain/entity';
import { LegacyLogger } from '@src/core/logger';
import { orderBy } from 'lodash';
import { UmzugMigration } from '@mikro-orm/migrations-mongodb';
import { BsonConverter } from '../converter/bson.converter';
import { generateSeedData } from '../seed-data/generateSeedData';

Expand Down Expand Up @@ -412,4 +413,8 @@ export class DatabaseManagementUc {
public async migrationDown(from?: string, to?: string, only?: string): Promise<void> {
return this.databaseManagementService.migrationDown(from, to, only);
}

public async migrationPending(): Promise<UmzugMigration[]> {
return this.databaseManagementService.migrationPending();
}
}
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
"mocha-metrics": "cross-env NODE_ENV=test mocha \"test/routes/*.metrics.js\" --exclude \"{test,src}/**/*.test.{js,ts}\" --no-timeout --exit",
"migration:up": "npm run nest:start:console -- database migration --up",
"migration:down": "npm run nest:start:console -- database migration --down",
"migration:pending": "npm run nest:start:console -- database migration --pending",
"migration:persisted": "npm run nest:start:console -- database export --collection migrations --override",
"nest:prebuild": "rimraf dist",
"nest:build": "nest build",
Expand Down

0 comments on commit 882007c

Please sign in to comment.