migrate-mongo-config.spec.ts 2.1 KB

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