Taichi Masuyama 4 лет назад
Родитель
Сommit
fcc4fe5376

+ 20 - 1
packages/app/jest.config.js

@@ -37,13 +37,32 @@ module.exports = {
 
       rootDir: '.',
       roots: ['<rootDir>'],
-      testMatch: ['<rootDir>/test/integration/**/*.test.ts', '<rootDir>/test/integration/**/*.test.js'],
+      testMatch: ['<rootDir>/test/integration/**/*.test.ts', '<rootDir>/test/integration/**/*.test.js',
+                  '?!<rootDir>/test/integration/service/v5.*.test.ts', '?!<rootDir>/test/integration/service/v5.*.test.js'],
 
       testEnvironment: 'node',
       globalSetup: '<rootDir>/test/integration/global-setup.js',
       globalTeardown: '<rootDir>/test/integration/global-teardown.js',
       setupFilesAfterEnv: ['<rootDir>/test/integration/setup.js'],
 
+      // Automatically clear mock calls and instances between every test
+      clearMocks: true,
+      moduleNameMapper: MODULE_NAME_MAPPING,
+    },
+    {
+      displayName: 'server-v5',
+
+      preset: 'ts-jest/presets/js-with-ts',
+
+      rootDir: '.',
+      roots: ['<rootDir>'],
+      testMatch: ['<rootDir>/test/integration/service/v5.*.test.ts', '<rootDir>/test/integration/service/v5.*.test.js'],
+
+      testEnvironment: 'node',
+      globalSetup: '<rootDir>/test/integration/v5-global-setup.js',
+      globalTeardown: '<rootDir>/test/integration/global-teardown.js',
+      setupFilesAfterEnv: ['<rootDir>/test/integration/v5-setup.js'],
+
       // Automatically clear mock calls and instances between every test
       clearMocks: true,
       moduleNameMapper: MODULE_NAME_MAPPING,

+ 13 - 8
packages/app/test/integration/global-setup.js

@@ -16,22 +16,27 @@ if (process.env.NODE_ENV !== 'test') {
   throw new Error('\'process.env.NODE_ENV\' must be \'test\'');
 }
 
-
-// eslint-disable-next-line @typescript-eslint/no-var-requires
-// const { getInstance } = require('./setup-crowi');
-
 module.exports = async() => {
   initMongooseGlobalSettings();
 
-  await mongoose.connect(getMongoUri(), mongoOptions);
+  process.env.MONGO_URI = 'mongodb://mongo/growi_test';
+  mongoose.connect(getMongoUri(), mongoOptions);
 
   // drop database
   await mongoose.connection.dropDatabase();
 
   // init DB
-  // const crowi = await getInstance();
-  // const appService = crowi.appService;
-  // await appService.initDB();
+  const pageCollection = mongoose.connection.collection('pages');
+  const userCollection = mongoose.connection.collection('users');
+
+  // create global user & rootPage
+  const globalUser = (await userCollection.insertMany([{ name: 'globalUser', username: 'globalUser', email: 'globalUser@example.com' }]))[0];
+  await pageCollection.insertMany([{
+    path: '/',
+    grant: 1,
+    creator: globalUser,
+    lastUpdateUser: globalUser,
+  }]);
 
   await mongoose.disconnect();
 };

+ 0 - 6
packages/app/test/integration/service/page-grant.test.js

@@ -109,12 +109,6 @@ describe('PageGrantService', () => {
     ]);
 
     // Root page (Depth: 0)
-    await Page.insertMany([
-      {
-        path: '/',
-        grant: Page.GRANT_PUBLIC,
-      },
-    ]);
     rootPage = await Page.findOne({ path: '/' });
 
     // Empty pages (Depth: 1)

+ 0 - 0
packages/app/test/integration/service/v5-migration.test.js → packages/app/test/integration/service/v5.migration.test.js


+ 1 - 0
packages/app/test/integration/setup.js

@@ -15,6 +15,7 @@ jest.setTimeout(30000); // default 5000
 
 beforeAll(async() => {
   initMongooseGlobalSettings();
+  process.env.MONGO_URI = 'mongodb://mongo/growi_test';
   await mongoose.connect(getMongoUri(), mongoOptions);
 });
 

+ 43 - 0
packages/app/test/integration/v5-global-setup.js

@@ -0,0 +1,43 @@
+/** **********************************************************
+ *                           Caution
+ *
+ * Module aliases by compilerOptions.paths in tsconfig.json
+ * are NOT available in setup scripts
+ *********************************************************** */
+
+import 'tsconfig-paths/register';
+
+import mongoose from 'mongoose';
+
+import { initMongooseGlobalSettings, getMongoUri, mongoOptions } from '@growi/core';
+
+import { getInstance } from './setup-crowi';
+
+// check env
+if (process.env.NODE_ENV !== 'test') {
+  throw new Error('\'process.env.NODE_ENV\' must be \'test\'');
+}
+
+module.exports = async() => {
+  initMongooseGlobalSettings();
+  process.env.MONGO_URI = 'mongodb://mongo/growi_v5_test';
+  mongoose.connect(getMongoUri(), mongoOptions);
+
+  // drop database
+  await mongoose.connection.dropDatabase();
+
+  // init DB
+  const pageCollection = mongoose.connection.collection('pages');
+  const userCollection = mongoose.connection.collection('users');
+
+  // create global user & rootPage
+  const globalUser = (await userCollection.insertMany([{ name: 'globalUser', username: 'globalUser', email: 'globalUser@example.com' }]))[0];
+  await pageCollection.insertMany([{
+    path: '/',
+    grant: 1,
+    creator: globalUser,
+    lastUpdateUser: globalUser,
+  }]);
+
+  await mongoose.disconnect();
+};

+ 26 - 0
packages/app/test/integration/v5-setup.js

@@ -0,0 +1,26 @@
+/** **********************************************************
+ *                           Caution
+ *
+ * Module aliases by compilerOptions.paths in tsconfig.json
+ * are NOT available in setup scripts
+ *********************************************************** */
+
+const mongoose = require('mongoose');
+
+const { initMongooseGlobalSettings, getMongoUri, mongoOptions } = require('@growi/core');
+
+mongoose.Promise = global.Promise;
+
+jest.setTimeout(30000); // default 5000
+
+beforeAll(async() => {
+  initMongooseGlobalSettings();
+  process.env.MONGO_URI = 'mongodb://mongo/growi_v5_test';
+  await mongoose.connect(getMongoUri(), mongoOptions);
+});
+
+afterAll(async() => {
+  await mongoose.disconnect();
+});
+
+module.exports = {};