migrate-mongo-config.spec.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import {
  2. vi,
  3. beforeEach,
  4. describe, test, expect,
  5. } from 'vitest';
  6. import mockRequire from 'mock-require';
  7. const { reRequire } = mockRequire;
  8. describe('config/migrate-mongo-config.js', () => {
  9. test.concurrent('throws an error when MIGRATIONS_DIR is not set', () => {
  10. const getMongoUriMock = vi.fn();
  11. const mongoOptionsMock = vi.fn();
  12. // mock for mongoose-utils
  13. mockRequire('../src/server/util/mongoose-utils', {
  14. getMongoUri: getMongoUriMock,
  15. mongoOptions: mongoOptionsMock,
  16. });
  17. // use reRequire to avoid using module cache
  18. const caller = () => reRequire('./migrate-mongo-config');
  19. expect(caller).toThrow('An env var MIGRATIONS_DIR must be set.');
  20. mockRequire.stop('../src/server/util/mongoose-utils');
  21. expect(getMongoUriMock).not.toHaveBeenCalled();
  22. });
  23. describe.concurrent.each`
  24. MONGO_URI | expectedDbName
  25. ${'mongodb://example.com/growi'} | ${'growi'}
  26. ${'mongodb://user:pass@example.com/growi'} | ${'growi'}
  27. ${'mongodb://example.com/growi?replicaSet=mySet'} | ${'growi'}
  28. `('returns', ({ MONGO_URI, expectedDbName }) => {
  29. beforeEach(async() => {
  30. process.env.MIGRATIONS_DIR = 'testdir/migrations';
  31. });
  32. test(`when 'MONGO_URI' is '${MONGO_URI}`, () => {
  33. const getMongoUriMock = vi.fn(() => MONGO_URI);
  34. const mongoOptionsMock = vi.fn();
  35. // mock for mongoose-utils
  36. mockRequire('../src/server/util/mongoose-utils', {
  37. getMongoUri: getMongoUriMock,
  38. mongoOptions: mongoOptionsMock,
  39. });
  40. // use reRequire to avoid using module cache
  41. const { mongodb, migrationsDir, changelogCollectionName } = reRequire('./migrate-mongo-config');
  42. mockRequire.stop('../src/server/util/mongoose-utils');
  43. // expect(getMongoUriMock).toHaveBeenCalledOnce();
  44. expect(mongodb.url).toBe(MONGO_URI);
  45. expect(mongodb.databaseName).toBe(expectedDbName);
  46. expect(mongodb.options).toBe(mongoOptionsMock);
  47. expect(migrationsDir).toBe('testdir/migrations');
  48. expect(changelogCollectionName).toBe('migrations');
  49. });
  50. });
  51. });