From 8350aef34e7f57239775d52a4086efc690e5a89b Mon Sep 17 00:00:00 2001 From: hasezoey Date: Fri, 6 Aug 2021 13:51:31 +0200 Subject: [PATCH] chore: update test environment --- jest.config.js | 22 ----------- jest.config.json | 34 ++++++++++++++++ package.json | 20 +++++----- test/basic.test.ts | 9 ----- test/utils/globalSetup.ts | 22 +++++++++++ test/utils/globalTeardown.ts | 9 +++++ test/utils/mongooseConnect.ts | 67 +++++++------------------------- test/utils/setupFile.ts | 9 +++++ yarn.lock | 73 ++++++++++++++++++----------------- 9 files changed, 135 insertions(+), 130 deletions(-) delete mode 100644 jest.config.js create mode 100644 jest.config.json create mode 100644 test/utils/globalSetup.ts create mode 100644 test/utils/globalTeardown.ts create mode 100644 test/utils/setupFile.ts diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 46f9635..0000000 --- a/jest.config.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: "node", - globals: { - 'ts-jest': { - tsConfig: '/tsconfig.json', - diagnostics: true, - }, - }, - moduleFileExtensions: ['ts', 'js'], - transform: { - '^.+\\.(t|j)s$': 'ts-jest', - }, - testPathIgnorePatterns: ['/node_modules/', '/lib/'], - testRegex: ".test.ts$", - collectCoverage: false, - collectCoverageFrom: [ - "**/src/**.ts", - "!**/*.{test.ts,d.ts,js}" - ], - coverageDirectory: "./coverage", -}; diff --git a/jest.config.json b/jest.config.json new file mode 100644 index 0000000..31b56a8 --- /dev/null +++ b/jest.config.json @@ -0,0 +1,34 @@ +{ + "preset": "ts-jest", + "testEnvironment": "node", + "globals": { + "ts-jest": { + "tsconfig": "/tsconfig.json", + "diagnostics": true + } + }, + "moduleFileExtensions": [ + "ts", + "js" + ], + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "testPathIgnorePatterns": [ + "/node_modules/", + "/lib/" + ], + "testRegex": ".test.ts$", + "collectCoverage": false, + "collectCoverageFrom": [ + "**/src/**/*.ts", + "!**/*.{test.ts,d.ts,js}" + ], + "coverageDirectory": "./coverage", + "globalSetup": "/test/utils/globalSetup.ts", + "globalTeardown": "/test/utils/globalTeardown.ts", + "maxConcurrency": 2, + "setupFilesAfterEnv": [ + "/test/utils/setupFile.ts" + ] +} diff --git a/package.json b/package.json index 9c06931..6a75733 100644 --- a/package.json +++ b/package.json @@ -32,30 +32,30 @@ "contributors": [], "license": "MIT", "peerDependencies": { - "mongoose": "~5.9.25", - "@types/mongoose": "~5.7.32" + "@types/mongoose": "~5.7.32", + "mongoose": "~5.9.25" }, "devDependencies": { - "@types/mongodb": "~3.6.x", "@typegoose/typegoose": "~7.3.5", "@types/jest": "^26.0.14", + "@types/mongodb": "~3.6.x", "@types/mongoose": "~5.7.36", "@types/node": "^10.17.16", "@types/semver": "^7.3.4", + "@typescript-eslint/eslint-plugin": "^4.28.5", + "@typescript-eslint/parser": "^4.28.5", "coveralls": "^3.1.0", + "eslint": "^7.32.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^3.4.0", "jest": "^26.5.3", - "mongodb-memory-server": "~6.9.2", + "mongodb-memory-server": "^7.3.4", "mongoose": "~5.9.25", + "prettier": "^2.3.2", "rimraf": "3.0.2", "source-map-support": "^0.5.19", "ts-jest": "^26.4.1", "ts-node": "^9.0.0", - "prettier": "^2.3.2", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-prettier": "^3.4.0", - "@typescript-eslint/eslint-plugin": "^4.28.5", - "@typescript-eslint/parser": "^4.28.5", "typescript": "4.0.3" }, "dependencies": { diff --git a/test/basic.test.ts b/test/basic.test.ts index 0edfeb4..55fa2ab 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -1,17 +1,8 @@ import { getModelForClass, modelOptions, plugin, prop } from '@typegoose/typegoose'; import * as mongoose from 'mongoose'; import { AutoIncrementID, AutoIncrementSimple } from '../src/autoIncrement'; -import { connect, disconnect } from './utils/mongooseConnect'; describe('Basic Suite', () => { - beforeAll(async () => { - await connect(); - }); - - afterAll(async () => { - await disconnect(); - }); - describe('AutoIncrementSimple', () => { it('Basic Function Mongoose', async () => { const schema = new mongoose.Schema({ diff --git a/test/utils/globalSetup.ts b/test/utils/globalSetup.ts new file mode 100644 index 0000000..118505e --- /dev/null +++ b/test/utils/globalSetup.ts @@ -0,0 +1,22 @@ +import { MongoMemoryServer } from 'mongodb-memory-server'; +import * as mongoose from 'mongoose'; +import { logger } from '../../src/logSettings'; +import { config } from './config'; + +export = async function globalSetup() { + logger.setLevel('DEBUG'); + + if (config.Memory) { + /** it's needed in global space, because we don't want to create a new instance every time */ + const instance = await MongoMemoryServer.create(); + const uri = instance.getUri(); + (global as any).__MONGOINSTANCE = instance; + process.env.MONGO_URI = uri.slice(0, uri.lastIndexOf('/')); + } else { + process.env.MONGO_URI = `mongodb://${config.IP}:${config.Port}`; + } + + await mongoose.connect(`${process.env.MONGO_URI}/${config.DataBase}`, { useNewUrlParser: true, useUnifiedTopology: true }); + await mongoose.connection.db.dropDatabase(); + await mongoose.disconnect(); +}; diff --git a/test/utils/globalTeardown.ts b/test/utils/globalTeardown.ts new file mode 100644 index 0000000..d6fee6c --- /dev/null +++ b/test/utils/globalTeardown.ts @@ -0,0 +1,9 @@ +import { MongoMemoryServer } from 'mongodb-memory-server'; +import { config } from './config'; + +export = async function globalTeardown() { + if (config.Memory) { + const instance: MongoMemoryServer = (global as any).__MONGOINSTANCE; + await instance.stop(); + } +}; diff --git a/test/utils/mongooseConnect.ts b/test/utils/mongooseConnect.ts index 1a166c5..3f424b0 100644 --- a/test/utils/mongooseConnect.ts +++ b/test/utils/mongooseConnect.ts @@ -1,22 +1,10 @@ -import { MongoMemoryServer } from 'mongodb-memory-server'; import * as mongoose from 'mongoose'; -import { isNullOrUndefined } from 'util'; import { config } from './config'; -/** its needed in global space, because we dont want to create a new instance everytime */ -let instance: MongoMemoryServer = null; - -if (config.Memory) { - // only create an instance, if it is enabled in the config, wich defaults to "true" - instance = new MongoMemoryServer(); -} - -/** is it the First time connecting in this test run? */ -let isFirst = true; - interface ExtraConnectionConfig { dbName?: string; createNewConnection?: boolean; + differentMongoose?: mongoose.Mongoose; } // to not duplicate code @@ -32,19 +20,12 @@ const staticOptions = { * Make a Connection to MongoDB */ export async function connect(extraConfig: ExtraConnectionConfig = {}): Promise { + const mongooseInstance: mongoose.Mongoose = extraConfig.differentMongoose ?? mongoose; let connection: mongoose.Connection; - if (config.Memory) { - // use in-memory-engine - if (extraConfig.createNewConnection) { - connection = mongoose.createConnection(await instance.getUri(extraConfig.dbName), staticOptions); - } else { - await mongoose.connect(await instance.getUri(extraConfig?.dbName), staticOptions); - } - } else { - // use external already running database - const options = Object.assign({}, staticOptions); + const options = Object.assign({}, staticOptions); + if (config.Memory) { if (config?.Auth?.User?.length > 0) { Object.assign(options, { user: config.Auth.User, @@ -52,22 +33,19 @@ export async function connect(extraConfig: ExtraConnectionConfig = {}): Promise< authSource: config.Auth.DB, }); } - - // to not duplicate code - const connectionString = `mongodb://${config.IP}:${config.Port}/${extraConfig.dbName ?? config.DataBase}`; - - if (extraConfig.createNewConnection) { - connection = mongoose.createConnection(connectionString, options); - } else { - await mongoose.connect(connectionString, options); - } } - if (isFirst && !extraConfig.createNewConnection) { - await firstConnect(); + // to not duplicate code + const connectionString = `${process.env.MONGO_URI}/${extraConfig.dbName ?? config.DataBase}`; + + if (extraConfig.createNewConnection) { + connection = mongooseInstance.createConnection(connectionString, options); + } else { + await mongoose.connect(connectionString, options); + connection = mongooseInstance.connection; } - return connection ?? mongoose.connection; + return connection; } /** @@ -77,24 +55,5 @@ export async function connect(extraConfig: ExtraConnectionConfig = {}): Promise< export async function disconnect(): Promise { await mongoose.disconnect(); - if (config.Memory || !isNullOrUndefined(instance)) { - await instance.stop(); - } - return; } - -/** - * Only execute this function when the tests were not started - */ -async function firstConnect() { - isFirst = false; - await mongoose.connection.db.dropDatabase(); // to always have a clean database - - await Promise.all( - // recreate the indexes that were dropped - Object.keys(mongoose.models).map(async (modelName) => { - await mongoose.models[modelName].ensureIndexes(); - }) - ); -} diff --git a/test/utils/setupFile.ts b/test/utils/setupFile.ts new file mode 100644 index 0000000..a4266e8 --- /dev/null +++ b/test/utils/setupFile.ts @@ -0,0 +1,9 @@ +import { connect, disconnect } from './mongooseConnect'; + +beforeAll(async () => { + await connect(); +}); + +afterAll(async () => { + await disconnect(); +}); diff --git a/yarn.lock b/yarn.lock index 73a089b..1e5628d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -954,6 +954,13 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async-mutex@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.3.1.tgz#7033af665f1c7cebed8b878267a43ba9e77c5f67" + integrity sha512-vRfQwcqBnJTLzVQo72Sf7KIUbcSUP5hNchx6udI1U6LuPQpfePgdjJzlCe76yFZ8pxlLjn9lwcl/Ya0TSOv0Tw== + dependencies: + tslib "^2.1.0" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1196,7 +1203,7 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.1.0: version "6.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== @@ -1382,7 +1389,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1431,7 +1438,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1: +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== @@ -1939,11 +1946,6 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-package-json@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/find-package-json/-/find-package-json-1.2.0.tgz#4057d1b943f82d8445fe52dc9cf456f6b8b58083" - integrity sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw== - find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -3065,13 +3067,6 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lockfile@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" - integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== - dependencies: - signal-exit "^3.0.2" - lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -3229,36 +3224,36 @@ mkdirp@1.x, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mongodb-memory-server-core@6.9.6: - version "6.9.6" - resolved "https://registry.yarnpkg.com/mongodb-memory-server-core/-/mongodb-memory-server-core-6.9.6.tgz#90ef0562bea675ef68bd687533792da02bcc81f3" - integrity sha512-ZcXHTI2TccH3L5N9JyAMGm8bbAsfLn8SUWOeYGHx/vDx7vu4qshyaNXTIxeHjpUQA29N+Z1LtTXA6vXjl1eg6w== +mongodb-memory-server-core@7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/mongodb-memory-server-core/-/mongodb-memory-server-core-7.3.4.tgz#10dae40e21162406a3a643b82c1a348dcd943299" + integrity sha512-bryHNy34LWuXJui2Hs0sTWWtU5svqVragHtvKuUqLuaXirTgGGhmW5/qsnEAMa/7eZnxDJW5jle9yfM7wiBIKA== dependencies: "@types/tmp" "^0.2.0" - camelcase "^6.0.0" - cross-spawn "^7.0.3" + async-mutex "^0.3.0" + camelcase "^6.1.0" debug "^4.2.0" find-cache-dir "^3.3.1" - find-package-json "^1.2.0" get-port "^5.1.1" https-proxy-agent "^5.0.0" - lockfile "^1.0.4" md5-file "^5.0.0" mkdirp "^1.0.4" - semver "^7.3.2" + mongodb "^3.6.9" + new-find-package-json "^1.1.0" + semver "^7.3.5" tar-stream "^2.1.4" tmp "^0.2.1" - uuid "^8.3.0" + tslib "^2.3.0" + uuid "^8.3.1" yauzl "^2.10.0" - optionalDependencies: - mongodb "^3.6.2" -mongodb-memory-server@~6.9.2: - version "6.9.6" - resolved "https://registry.yarnpkg.com/mongodb-memory-server/-/mongodb-memory-server-6.9.6.tgz#ced1a100f58363317a562efaf8821726c433cfd2" - integrity sha512-BjGPPh5f61lMueG7px9DneBIrRR/GoWUHDvLWVAXhQhKVcwMMXxgeEba6zdDolZHfYAu6aYGPzhOuYKIKPgpBQ== +mongodb-memory-server@^7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/mongodb-memory-server/-/mongodb-memory-server-7.3.4.tgz#044596bac7b291a727aa4b6316dc2facbdb75f24" + integrity sha512-W3VXLKnZZX5pdfSrLcer7m4RKISiQ8AMG4TTcfl7SMGvKELsUcSGwIWYXP7TeCQ8RkZpj9riz0OxphQow5qi3g== dependencies: - mongodb-memory-server-core "6.9.6" + mongodb-memory-server-core "7.3.4" + tslib "^2.3.0" mongodb@3.5.10: version "3.5.10" @@ -3273,7 +3268,7 @@ mongodb@3.5.10: optionalDependencies: saslprep "^1.0.0" -mongodb@^3.6.2: +mongodb@^3.6.9: version "3.6.11" resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.6.11.tgz#8a59a0491a92b00a8c925f72ed9d9a5b054aebb2" integrity sha512-4Y4lTFHDHZZdgMaHmojtNAlqkvddX2QQBEN0K//GzxhGwlI9tZ9R0vhbjr1Decw+TF7qK0ZLjQT292XgHRRQgw== @@ -3356,6 +3351,14 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +new-find-package-json@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/new-find-package-json/-/new-find-package-json-1.1.0.tgz#053e006b17f409b9a816d5bcf0ee2b90a50326a3" + integrity sha512-KOH3BNZcTKPzEkaJgG2iSUaurxKmefqRKmCOYH+8xqJytNIgjqU4J88BHfK+gy/UlEzlhccLyuJDJAcCgexSwA== + dependencies: + debug "^4.3.2" + tslib "^2.3.0" + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -4433,7 +4436,7 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== @@ -4558,7 +4561,7 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.3.0: +uuid@^8.3.0, uuid@^8.3.1: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==