Skip to content

Commit

Permalink
chore: update test environment
Browse files Browse the repository at this point in the history
  • Loading branch information
hasezoey committed Aug 6, 2021
1 parent 0920d05 commit 8350aef
Show file tree
Hide file tree
Showing 9 changed files with 135 additions and 130 deletions.
22 changes: 0 additions & 22 deletions jest.config.js

This file was deleted.

34 changes: 34 additions & 0 deletions jest.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"preset": "ts-jest",
"testEnvironment": "node",
"globals": {
"ts-jest": {
"tsconfig": "<rootDir>/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": "<rootDir>/test/utils/globalSetup.ts",
"globalTeardown": "<rootDir>/test/utils/globalTeardown.ts",
"maxConcurrency": 2,
"setupFilesAfterEnv": [
"<rootDir>/test/utils/setupFile.ts"
]
}
20 changes: 10 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down
9 changes: 0 additions & 9 deletions test/basic.test.ts
Original file line number Diff line number Diff line change
@@ -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({
Expand Down
22 changes: 22 additions & 0 deletions test/utils/globalSetup.ts
Original file line number Diff line number Diff line change
@@ -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();
};
9 changes: 9 additions & 0 deletions test/utils/globalTeardown.ts
Original file line number Diff line number Diff line change
@@ -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();
}
};
67 changes: 13 additions & 54 deletions test/utils/mongooseConnect.ts
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -32,42 +20,32 @@ const staticOptions = {
* Make a Connection to MongoDB
*/
export async function connect(extraConfig: ExtraConnectionConfig = {}): Promise<mongoose.Connection> {
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,
pass: config.Auth.Passwd,
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;
}

/**
Expand All @@ -77,24 +55,5 @@ export async function connect(extraConfig: ExtraConnectionConfig = {}): Promise<
export async function disconnect(): Promise<void> {
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();
})
);
}
9 changes: 9 additions & 0 deletions test/utils/setupFile.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { connect, disconnect } from './mongooseConnect';

beforeAll(async () => {
await connect();
});

afterAll(async () => {
await disconnect();
});
Loading

0 comments on commit 8350aef

Please sign in to comment.