From df0ba5748ab4d0d7b38a3d6ace0146e806f8a8bb Mon Sep 17 00:00:00 2001
From: Jure Triglav <juretriglav@gmail.com>
Date: Sun, 28 Jan 2018 16:01:52 +0100
Subject: [PATCH] Bring over a commit that brings jest testing to all packages

---
 package.json                                  | 20 ++++++++++++++++-
 packages/cli/package.json                     |  3 ++-
 packages/cli/test/cli/{add.js => add.test.js} |  4 +---
 .../test/cli/{adduser.js => adduser.test.js}  |  0
 packages/cli/test/cli/{new.js => new.test.js} |  0
 .../test/cli/{remove.js => remove.test.js}    |  4 +---
 .../test/cli/{setupdb.js => setupdb.test.js}  |  0
 .../cli/test/cli/{start.js => start.test.js}  |  0
 packages/cli/test/helpers/index.js            |  3 ++-
 .../{integration.js => integration.test.js}   | 22 +++++++++++++++++--
 packages/cli/test/jest-setup.js               |  5 +++++
 packages/client/package.json                  |  1 +
 packages/client/test/jest-setup.js            |  7 ++++++
 packages/components/package.json              |  3 ++-
 packages/components/test/jest-setup.js        |  7 ++++++
 packages/db-manager/package.json              |  4 ++--
 packages/db-manager/test/jest-setup.js        |  3 +++
 packages/logger/package.json                  |  5 +++--
 packages/logger/test/jest-setup.js            |  3 +++
 packages/server/package.json                  |  3 ++-
 packages/server/test/db_test.js               |  4 ++++
 packages/server/test/jest-setup.js            |  3 +++
 .../server/test/register_components_test.js   |  7 +-----
 23 files changed, 88 insertions(+), 23 deletions(-)
 rename packages/cli/test/cli/{add.js => add.test.js} (94%)
 rename packages/cli/test/cli/{adduser.js => adduser.test.js} (100%)
 rename packages/cli/test/cli/{new.js => new.test.js} (100%)
 rename packages/cli/test/cli/{remove.js => remove.test.js} (94%)
 rename packages/cli/test/cli/{setupdb.js => setupdb.test.js} (100%)
 rename packages/cli/test/cli/{start.js => start.test.js} (100%)
 rename packages/cli/test/{integration.js => integration.test.js} (89%)
 create mode 100644 packages/cli/test/jest-setup.js
 create mode 100644 packages/client/test/jest-setup.js
 create mode 100644 packages/components/test/jest-setup.js
 create mode 100644 packages/db-manager/test/jest-setup.js
 create mode 100644 packages/logger/test/jest-setup.js
 create mode 100644 packages/server/test/jest-setup.js

diff --git a/package.json b/package.json
index 8c24d7c79..a27527e80 100644
--- a/package.json
+++ b/package.json
@@ -26,11 +26,29 @@
   },
   "scripts": {
     "clean": "lerna clean",
-    "test": "lerna run test",
+    "test": "jest",
     "lint": "npm run lint:js && npm run lint:style",
     "lint:js": "eslint 'packages/**/*.{js,jsx}'",
     "lint:style": "stylelint 'packages/**/*.{css,scss}'",
     "precommit": "lint-staged"
   },
+  "jest": {
+    "collectCoverage": true,
+    "collectCoverageFrom": [
+      "packages/cli/src/*.js",
+      "packages/cli/cli/*.js",
+      "client/src/**/*.{js,jsx}",
+      "components/**/*.{js,jsx}",
+      "db-manager/src/**/*.js",
+      "logger/src/**/*.js",
+      "server/src/**/*.js",
+      "sse/lib/**/*.js",
+      "theme-plugin/*.js",
+      "ui/src/**/*.{js,jsx}",
+      "!**/*.test.{js,jsx}",
+      "!**/node_modules/**"
+    ],
+    "projects": ["packages/*"]
+  },
   "workspaces": ["packages/*", "packages/components/packages/*"]
 }
diff --git a/packages/cli/package.json b/packages/cli/package.json
index dc1d42488..1cc449410 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -43,13 +43,14 @@
     "nsp": "^2.8.1"
   },
   "jest": {
-    "testMatch": ["**/test/*.js", "**/test/cli/*.js"],
+    "testMatch": ["<rootDir>/test/*.test.js", "<rootDir>/test/cli/*.test.js"],
     "testPathIgnorePatterns": ["<rootDir>/build/"],
     "collectCoverage": true,
     "collectCoverageFrom": ["src/*.js", "cli/*.js"],
     "modulePaths": ["<rootDir>/node_modules"],
     "testEnvironment": "node",
     "unmockedModulePathPatterns": ["/src/models"],
+    "setupTestFrameworkScriptFile": "<rootDir>/test/jest-setup.js",
     "verbose": true
   }
 }
diff --git a/packages/cli/test/cli/add.js b/packages/cli/test/cli/add.test.js
similarity index 94%
rename from packages/cli/test/cli/add.js
rename to packages/cli/test/cli/add.test.js
index 0ec0254eb..bfae775ec 100644
--- a/packages/cli/test/cli/add.js
+++ b/packages/cli/test/cli/add.test.js
@@ -24,9 +24,7 @@ const writeSpy = fs.writeJsonSync
 
 describe('add', () => {
   beforeAll(() => {
-    process.chdir(
-      path.join(__dirname, '..', '..', 'node_modules', '@pubsweet', 'starter'),
-    )
+    process.chdir(path.dirname(require.resolve('@pubsweet/starter')))
   })
 
   beforeEach(() => {
diff --git a/packages/cli/test/cli/adduser.js b/packages/cli/test/cli/adduser.test.js
similarity index 100%
rename from packages/cli/test/cli/adduser.js
rename to packages/cli/test/cli/adduser.test.js
diff --git a/packages/cli/test/cli/new.js b/packages/cli/test/cli/new.test.js
similarity index 100%
rename from packages/cli/test/cli/new.js
rename to packages/cli/test/cli/new.test.js
diff --git a/packages/cli/test/cli/remove.js b/packages/cli/test/cli/remove.test.js
similarity index 94%
rename from packages/cli/test/cli/remove.js
rename to packages/cli/test/cli/remove.test.js
index ca2fe44ad..f2ebd2087 100644
--- a/packages/cli/test/cli/remove.js
+++ b/packages/cli/test/cli/remove.test.js
@@ -24,9 +24,7 @@ const writeSpy = fs.writeJsonSync
 
 describe('remove', () => {
   beforeAll(() => {
-    process.chdir(
-      path.join(__dirname, '..', '..', 'node_modules', '@pubsweet', 'starter'),
-    )
+    process.chdir(path.dirname(require.resolve('@pubsweet/starter')))
   })
 
   beforeEach(() => {
diff --git a/packages/cli/test/cli/setupdb.js b/packages/cli/test/cli/setupdb.test.js
similarity index 100%
rename from packages/cli/test/cli/setupdb.js
rename to packages/cli/test/cli/setupdb.test.js
diff --git a/packages/cli/test/cli/start.js b/packages/cli/test/cli/start.test.js
similarity index 100%
rename from packages/cli/test/cli/start.js
rename to packages/cli/test/cli/start.test.js
diff --git a/packages/cli/test/helpers/index.js b/packages/cli/test/helpers/index.js
index e5e971816..fc837419d 100644
--- a/packages/cli/test/helpers/index.js
+++ b/packages/cli/test/helpers/index.js
@@ -3,7 +3,7 @@ const { spawn } = require('child_process')
 const path = require('path')
 const reduce = require('lodash/fp/reduce').convert({ cap: false })
 
-const pubsweet = path.resolve('bin/pubsweet.js')
+const pubsweet = path.resolve(__dirname, '..', '..', 'bin', 'pubsweet.js')
 
 const formatOpts = reduce(
   (acc, value, key) => acc.concat(`--${key}`, value),
@@ -41,6 +41,7 @@ const runCommandAsync = ({ args, options, cwd, nodeConfig, stdio }) =>
     stdio,
     env: getEnvWithConfig(nodeConfig),
     shell: true,
+    detached: true,
   })
 
 module.exports = {
diff --git a/packages/cli/test/integration.js b/packages/cli/test/integration.test.js
similarity index 89%
rename from packages/cli/test/integration.js
rename to packages/cli/test/integration.test.js
index 316d531b9..7a3e56f25 100644
--- a/packages/cli/test/integration.js
+++ b/packages/cli/test/integration.test.js
@@ -18,6 +18,18 @@ const nodeConfig = {
     dbPath,
     adapter: 'leveldb',
   },
+  // TODO: Remove this once version of server that handles
+  // undefined app validations is released.
+  validations: 'path',
+  authsome: {
+    mode: 'authsome/src/modes/blog',
+  },
+  pubsweet: {
+    components: [],
+  },
+  'pubsweet-client': {
+    theme: 'PepperTheme',
+  },
 }
 
 const dbOptions = {
@@ -155,11 +167,17 @@ describe('CLI: integration test', () => {
       app.stdout.on('data', async data => {
         console.log('stdout:', data.toString())
         if (data.toString().includes('App is listening')) {
-          const result = await fetch('http://localhost:4000')
+          const result = await fetch('http://localhost:3000')
           expect(result.status).toBe(200)
-          done()
+          console.log('Killing the app')
+          process.kill(-app.pid)
         }
       })
+
+      app.on('close', (code, signal) => {
+        console.log(`App killed ${signal}`)
+        done()
+      })
     })
   })
 })
diff --git a/packages/cli/test/jest-setup.js b/packages/cli/test/jest-setup.js
new file mode 100644
index 000000000..7363485a9
--- /dev/null
+++ b/packages/cli/test/jest-setup.js
@@ -0,0 +1,5 @@
+const path = require('path')
+
+process.env.NODE_CONFIG_DIR = path.resolve(__dirname, '..', 'config')
+
+process.cwd = () => path.resolve(__dirname, '..')
diff --git a/packages/client/package.json b/packages/client/package.json
index c0e171854..666b81586 100644
--- a/packages/client/package.json
+++ b/packages/client/package.json
@@ -58,6 +58,7 @@
   "jest": {
     "testRegex": "/test/.+test.jsx?$",
     "collectCoverage": true,
+    "setupTestFrameworkScriptFile": "<rootDir>/test/jest-setup.js",
     "collectCoverageFrom": ["src/**/*.{js,jsx}"],
     "globals": {
       "window": {}
diff --git a/packages/client/test/jest-setup.js b/packages/client/test/jest-setup.js
new file mode 100644
index 000000000..bc711820f
--- /dev/null
+++ b/packages/client/test/jest-setup.js
@@ -0,0 +1,7 @@
+import Enzyme from 'enzyme'
+import Adapter from 'enzyme-adapter-react-16'
+import path from 'path'
+
+Enzyme.configure({ adapter: new Adapter() })
+
+process.env.NODE_CONFIG_DIR = path.resolve(__dirname, '..', 'config')
diff --git a/packages/components/package.json b/packages/components/package.json
index 5c6fe970d..2aaafed34 100644
--- a/packages/components/package.json
+++ b/packages/components/package.json
@@ -51,6 +51,7 @@
       "\\.s?css$": "identity-obj-proxy"
     },
     "transformIgnorePatterns": ["/node_modules/(?!pubsweet)"],
-    "testPathIgnorePatterns": ["/node_modules", "config/"]
+    "testPathIgnorePatterns": ["/node_modules", "config/"],
+    "setupTestFrameworkScriptFile": "<rootDir>/test/jest-setup.js"
   }
 }
diff --git a/packages/components/test/jest-setup.js b/packages/components/test/jest-setup.js
new file mode 100644
index 000000000..bc711820f
--- /dev/null
+++ b/packages/components/test/jest-setup.js
@@ -0,0 +1,7 @@
+import Enzyme from 'enzyme'
+import Adapter from 'enzyme-adapter-react-16'
+import path from 'path'
+
+Enzyme.configure({ adapter: new Adapter() })
+
+process.env.NODE_CONFIG_DIR = path.resolve(__dirname, '..', 'config')
diff --git a/packages/db-manager/package.json b/packages/db-manager/package.json
index 90c1b8f29..93b91ce9e 100644
--- a/packages/db-manager/package.json
+++ b/packages/db-manager/package.json
@@ -19,10 +19,10 @@
     "npm": ">=3.0.0"
   },
   "jest": {
-    "testMatch": ["**/test/**/*.js"],
+    "testMatch": ["**/test/**/*.test.js"],
     "collectCoverage": true,
     "collectCoverageFrom": ["src/**/*.js"],
-    "modulePaths": ["<rootDir>/node_modules"],
+    "setupTestFrameworkScriptFile": "<rootDir>/test/jest-setup.js",
     "testEnvironment": "node",
     "verbose": true
   },
diff --git a/packages/db-manager/test/jest-setup.js b/packages/db-manager/test/jest-setup.js
new file mode 100644
index 000000000..7de2beed5
--- /dev/null
+++ b/packages/db-manager/test/jest-setup.js
@@ -0,0 +1,3 @@
+const path = require('path')
+
+process.env.NODE_CONFIG_DIR = path.resolve(__dirname, '..', 'config')
diff --git a/packages/logger/package.json b/packages/logger/package.json
index a154b4bc5..0a4aa1f2d 100644
--- a/packages/logger/package.json
+++ b/packages/logger/package.json
@@ -25,12 +25,13 @@
     "winston": "^2.3.1"
   },
   "jest": {
-    "testMatch": ["**/test/**/*.js"],
+    "testMatch": ["**/test/**/*test.js"],
     "collectCoverage": true,
     "collectCoverageFrom": ["src/**/*.js"],
     "modulePaths": ["<rootDir>/node_modules"],
     "testEnvironment": "node",
-    "verbose": true
+    "verbose": true,
+    "setupTestFrameworkScriptFile": "<rootDir>/test/jest-setup.js"
   },
   "dependencies": {
     "config": "^1.26.2",
diff --git a/packages/logger/test/jest-setup.js b/packages/logger/test/jest-setup.js
new file mode 100644
index 000000000..7de2beed5
--- /dev/null
+++ b/packages/logger/test/jest-setup.js
@@ -0,0 +1,3 @@
+const path = require('path')
+
+process.env.NODE_CONFIG_DIR = path.resolve(__dirname, '..', 'config')
diff --git a/packages/server/package.json b/packages/server/package.json
index a980b7ad9..6351a13cb 100644
--- a/packages/server/package.json
+++ b/packages/server/package.json
@@ -65,6 +65,7 @@
     "testEnvironment": "node",
     "testRegex": "/test/.*_test.js$",
     "collectCoverage": true,
-    "collectCoverageFrom": ["src/**/*.js"]
+    "collectCoverageFrom": ["src/**/*.js"],
+    "setupTestFrameworkScriptFile": "<rootDir>/test/jest-setup.js"
   }
 }
diff --git a/packages/server/test/db_test.js b/packages/server/test/db_test.js
index a91b0b9eb..69ecc99d0 100644
--- a/packages/server/test/db_test.js
+++ b/packages/server/test/db_test.js
@@ -1,3 +1,7 @@
+const path = require('path')
+
+process.env.NODE_CONFIG_DIR = path.resolve(__dirname, '..', 'config')
+
 describe('db configuration', () => {
   it('overrides default adapter with config', async () => {
     const originalNodeEnv = process.env.NODE_ENV
diff --git a/packages/server/test/jest-setup.js b/packages/server/test/jest-setup.js
new file mode 100644
index 000000000..7de2beed5
--- /dev/null
+++ b/packages/server/test/jest-setup.js
@@ -0,0 +1,3 @@
+const path = require('path')
+
+process.env.NODE_CONFIG_DIR = path.resolve(__dirname, '..', 'config')
diff --git a/packages/server/test/register_components_test.js b/packages/server/test/register_components_test.js
index a43a5507f..3af0161ac 100644
--- a/packages/server/test/register_components_test.js
+++ b/packages/server/test/register_components_test.js
@@ -3,12 +3,7 @@ const request = require('supertest')
 const path = require('path')
 const config = require('config')
 
-const mockComponentPath = path.join(
-  process.cwd(),
-  'test',
-  'mocks',
-  'mock_component.js',
-)
+const mockComponentPath = path.resolve(__dirname, 'mocks', 'mock_component.js')
 config.pubsweet = { components: [mockComponentPath] }
 
 const api = require('./helpers/api')
-- 
GitLab