@storyous/test-utils 1.0.4 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ export {};
@@ -28,9 +28,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const assert = __importStar(require("assert"));
30
30
  const koa_1 = __importDefault(require("koa"));
31
- const mocha_1 = require("mocha");
31
+ const mocha_1 = __importStar(require("mocha"));
32
32
  const testUtils_1 = __importDefault(require("../lib/testUtils"));
33
- testUtils_1.default.init(() => new koa_1.default(), 'mongodb://127.0.0.1/testing');
33
+ testUtils_1.default.init({ mocha: mocha_1.default, app: () => new koa_1.default(), cleanDatabaseUrl: 'mongodb://127.0.0.1/testing' });
34
34
  (0, mocha_1.describe)('packages/testUtils', async () => {
35
35
  (0, mocha_1.it)('should do some request', async () => {
36
36
  await testUtils_1.default.request().get('/').expect(404);
@@ -39,9 +39,9 @@ testUtils_1.default.init(() => new koa_1.default(), 'mongodb://127.0.0.1/testing
39
39
  assert.deepStrictEqual(testUtils_1.default.getSentMails(), []);
40
40
  });
41
41
  (0, mocha_1.it)('should generate uniqueDatabase', () => {
42
- testUtils_1.default.init(() => new koa_1.default());
42
+ testUtils_1.default.init({ mocha: mocha_1.default, app: () => new koa_1.default() });
43
43
  assert.deepStrictEqual(testUtils_1.default.uniqueDatabase(), null);
44
44
  assert.deepStrictEqual(testUtils_1.default.uniqueDatabase('mongodb://127.0.0.0:27017/test')?.startsWith('mongodb://127.0.0.0:27017/test___'), true);
45
45
  });
46
46
  });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdFV0aWxzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0VXRpbHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBQ2pDLDhDQUFzQjtBQUN0QixpQ0FBcUM7QUFDckMsaUVBQXlDO0FBRXpDLG1CQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBRyxFQUFFLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztBQUUvRCxJQUFBLGdCQUFRLEVBQUMsb0JBQW9CLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFFdEMsSUFBQSxVQUFFLEVBQUMsd0JBQXdCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDcEMsTUFBTSxtQkFBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFBLFVBQUUsRUFBQyx1QkFBdUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNuQyxNQUFNLENBQUMsZUFBZSxDQUFDLG1CQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFBLFVBQUUsRUFBQyxnQ0FBZ0MsRUFBRSxHQUFHLEVBQUU7UUFDdEMsbUJBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxlQUFlLENBQUMsbUJBQVMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsZUFBZSxDQUNsQixtQkFBUyxDQUFDLGNBQWMsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxtQ0FBbUMsQ0FBQyxFQUMzRyxJQUFJLENBQ1AsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMifQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdFV0aWxzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0VXRpbHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBQ2pDLDhDQUFzQjtBQUN0QiwrQ0FBNEM7QUFDNUMsaUVBQXlDO0FBRXpDLG1CQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFMLGVBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFHLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSw2QkFBNkIsRUFBRSxDQUFDLENBQUM7QUFFakcsSUFBQSxnQkFBUSxFQUFDLG9CQUFvQixFQUFFLEtBQUssSUFBSSxFQUFFO0lBRXRDLElBQUEsVUFBRSxFQUFDLHdCQUF3QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3BDLE1BQU0sbUJBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBQSxVQUFFLEVBQUMsdUJBQXVCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbkMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxtQkFBUyxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBQSxVQUFFLEVBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1FBQ3RDLG1CQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFMLGVBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxtQkFBUyxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxlQUFlLENBQ2xCLG1CQUFTLENBQUMsY0FBYyxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsVUFBVSxDQUFDLG1DQUFtQyxDQUFDLEVBQzNHLElBQUksQ0FDUCxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyJ9
@@ -1,9 +1,9 @@
1
1
  import * as assert from 'assert';
2
2
  import Koa from 'koa';
3
- import { describe, it } from 'mocha';
3
+ import mocha, { describe, it } from 'mocha';
4
4
  import testUtils from '../lib/testUtils';
5
5
 
6
- testUtils.init(() => new Koa(), 'mongodb://127.0.0.1/testing');
6
+ testUtils.init({ mocha, app: () => new Koa(), cleanDatabaseUrl: 'mongodb://127.0.0.1/testing' });
7
7
 
8
8
  describe('packages/testUtils', async () => {
9
9
 
@@ -16,7 +16,7 @@ describe('packages/testUtils', async () => {
16
16
  });
17
17
 
18
18
  it('should generate uniqueDatabase', () => {
19
- testUtils.init(() => new Koa());
19
+ testUtils.init({ mocha, app: () => new Koa() });
20
20
  assert.deepStrictEqual(testUtils.uniqueDatabase(), null);
21
21
  assert.deepStrictEqual(
22
22
  testUtils.uniqueDatabase('mongodb://127.0.0.0:27017/test')?.startsWith('mongodb://127.0.0.0:27017/test___'),
@@ -0,0 +1,10 @@
1
+ import { Transport } from 'nodemailer';
2
+ import MailMessage from 'nodemailer/lib/mailer/mail-message';
3
+ export default class MockTransport implements Transport {
4
+ private _sentMail;
5
+ readonly name: 'Mock';
6
+ readonly version: '1.0.0';
7
+ getSentMail(): MailMessage<any>[];
8
+ send(mail: MailMessage<any>, callback: (err: Error | null, info?: any) => void): void;
9
+ private _validate;
10
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class MockTransport {
4
+ constructor() {
5
+ this._sentMail = [];
6
+ this._validate = (address) => {
7
+ if (!address) {
8
+ return new Error('Error validating address.');
9
+ }
10
+ if (typeof address !== 'string') {
11
+ address = address.address;
12
+ }
13
+ if (address.length > 254) {
14
+ return new Error('Error validating address.');
15
+ }
16
+ if (!address.match(/^[^@]+@.+\..+$/)) {
17
+ return new Error('Error validating address.');
18
+ }
19
+ return null;
20
+ };
21
+ }
22
+ getSentMail() {
23
+ return this._sentMail;
24
+ }
25
+ send(mail, callback) {
26
+ let err;
27
+ if (!mail.data.to) {
28
+ callback(new Error('I need to know who this email is being sent to :-('));
29
+ return;
30
+ }
31
+ if (Array.isArray(mail.data.to)) {
32
+ for (let i = 0; i < mail.data.to.length; i++) {
33
+ const address = mail.data.to[i];
34
+ err = this._validate(address);
35
+ if (err !== null) {
36
+ callback(err);
37
+ return;
38
+ }
39
+ }
40
+ }
41
+ else {
42
+ err = this._validate(mail.data.to);
43
+ if (err !== null) {
44
+ callback(err);
45
+ return;
46
+ }
47
+ }
48
+ this._sentMail.push(mail);
49
+ callback(null, { accepted: [mail.data.to] });
50
+ }
51
+ }
52
+ exports.default = MockTransport;
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja1RyYW5zcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2NrVHJhbnNwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsTUFBcUIsYUFBYTtJQUFsQztRQUNZLGNBQVMsR0FBdUIsRUFBRSxDQUFDO1FBdUNuQyxjQUFTLEdBQUcsQ0FBQyxPQUEwQixFQUFFLEVBQUU7WUFDL0MsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDVixPQUFPLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7YUFDakQ7WUFFRCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRTtnQkFDN0IsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7YUFDN0I7WUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUN0QixPQUFPLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7YUFDakQ7WUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO2dCQUNsQyxPQUFPLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7YUFDakQ7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUM7SUFDTixDQUFDO0lBcERHLFdBQVc7UUFDUCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVNLElBQUksQ0FBRSxJQUFzQixFQUFFLFFBQWlEO1FBQ2xGLElBQUksR0FBRyxDQUFDO1FBRVIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ2YsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUMsQ0FBQztZQUMxRSxPQUFPO1NBQ1Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlCLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtvQkFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2QsT0FBTztpQkFDVjthQUNKO1NBQ0o7YUFBTTtZQUNILEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO2dCQUNkLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZCxPQUFPO2FBQ1Y7U0FDSjtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBcUJKO0FBM0RELGdDQTJEQyJ9
@@ -0,0 +1,27 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="koa-bodyparser" />
3
+ import http from 'http';
4
+ import Koa from 'koa';
5
+ import nodemailer from 'nodemailer';
6
+ import MailMessage from 'nodemailer/lib/mailer/mail-message';
7
+ import { SuperAgentTest } from 'supertest';
8
+ import MockTransport from './mockTransport';
9
+ interface TypeParams {
10
+ mocha: any;
11
+ app?: () => Koa;
12
+ cleanDatabaseUrl?: string;
13
+ mailer?: {
14
+ _transporter: any;
15
+ };
16
+ }
17
+ declare const testUtils: {
18
+ _app: http.Server | null;
19
+ _originalTransporter: nodemailer.Transporter<any> | undefined;
20
+ _mockTransporter: MockTransport | undefined;
21
+ init({ mocha, app, cleanDatabaseUrl, mailer, }: TypeParams): void;
22
+ getSentMails(): MailMessage<any>[];
23
+ request(): SuperAgentTest;
24
+ uniqueDatabase(mongodbUrl?: string | undefined): string | null;
25
+ cleanTestingDatabases(mongodbUrl: string): Promise<void>;
26
+ };
27
+ export default testUtils;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const http_1 = __importDefault(require("http"));
7
+ const mongodb_1 = require("mongodb");
8
+ const nodemailer_1 = __importDefault(require("nodemailer"));
9
+ const supertest_1 = __importDefault(require("supertest"));
10
+ const mockTransport_1 = __importDefault(require("./mockTransport"));
11
+ const testUtils = {
12
+ _app: null,
13
+ _originalTransporter: undefined,
14
+ _mockTransporter: undefined,
15
+ init({ mocha, app, cleanDatabaseUrl, mailer, }) {
16
+ const { afterEach, before, beforeEach } = mocha;
17
+ before(async () => {
18
+ if (cleanDatabaseUrl) {
19
+ await this.cleanTestingDatabases(cleanDatabaseUrl);
20
+ }
21
+ if (app) {
22
+ this._app = http_1.default.createServer((await app()).callback());
23
+ }
24
+ });
25
+ beforeEach(() => {
26
+ if (mailer) {
27
+ this._originalTransporter = mailer._transporter;
28
+ this._mockTransporter = new mockTransport_1.default();
29
+ mailer._transporter = nodemailer_1.default.createTransport(this._mockTransporter);
30
+ }
31
+ });
32
+ afterEach(() => {
33
+ if (mailer) {
34
+ mailer._transporter = this._originalTransporter;
35
+ }
36
+ });
37
+ },
38
+ getSentMails() {
39
+ if (!this._mockTransporter) {
40
+ throw new Error('The Email Transporter is not initialized yet!');
41
+ }
42
+ return this._mockTransporter.getSentMail();
43
+ },
44
+ request() {
45
+ if (!this._app) {
46
+ throw new Error('The app is not initialized yet!');
47
+ }
48
+ return supertest_1.default.agent(this._app);
49
+ },
50
+ uniqueDatabase(mongodbUrl) {
51
+ if (!mongodbUrl) {
52
+ return null;
53
+ }
54
+ const parsed = new URL(mongodbUrl);
55
+ parsed.pathname = `${parsed.pathname}___${Date.now()}`;
56
+ return parsed.toString();
57
+ },
58
+ async cleanTestingDatabases(mongodbUrl) {
59
+ const client = new mongodb_1.MongoClient(mongodbUrl, { directConnection: true });
60
+ await client.connect();
61
+ const db = client.db();
62
+ const { databaseName } = db;
63
+ if (!/testing/i.test(databaseName)) {
64
+ throw new Error('The database name has to contains the "testing" keyword.');
65
+ }
66
+ const postfixMatcher = /___([0-9]{12,})/;
67
+ const baseName = databaseName.replace(postfixMatcher, '');
68
+ const matcher = new RegExp(`^${baseName}(${postfixMatcher.source})?$`);
69
+ const adminDb = db.admin();
70
+ const { databases } = await adminDb.listDatabases({ nameOnly: true });
71
+ const maxAgeDate = new Date();
72
+ maxAgeDate.setMinutes(maxAgeDate.getMinutes() - 15);
73
+ await Promise.all(databases.map(async ({ name }) => {
74
+ const [match, , timestamp] = name.match(matcher) || [];
75
+ if (match && (!timestamp || new Date(parseInt(timestamp, 10)) < maxAgeDate)) {
76
+ // eslint-disable-next-line no-console
77
+ console.log(`DROPPING OLD TESTING database ${name}`);
78
+ await client.db(name).dropDatabase();
79
+ }
80
+ }));
81
+ await client.close();
82
+ },
83
+ };
84
+ exports.default = testUtils;
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdFV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL3Rlc3RVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdEQUFvQztBQUVwQyxxQ0FBc0M7QUFDdEMsNERBQXFEO0FBRXJELDBEQUFzRDtBQUN0RCxvRUFBNEM7QUFTNUMsTUFBTSxTQUFTLEdBQUc7SUFDZCxJQUFJLEVBQWlCLElBQUk7SUFDekIsb0JBQW9CLEVBQTJCLFNBQVM7SUFDeEQsZ0JBQWdCLEVBQTZCLFNBQVM7SUFFdEQsSUFBSSxDQUFFLEVBQ0YsS0FBSyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEdBQzNCO1FBQ1QsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNkLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ2xCLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDdEQ7WUFFRCxJQUFJLEdBQUcsRUFBRTtnQkFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLGNBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUMzRDtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksTUFBTSxFQUFFO2dCQUNSLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSx1QkFBYSxFQUFFLENBQUM7Z0JBQzVDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsb0JBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDM0U7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsQ0FB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
@@ -0,0 +1,10 @@
1
+ import { Transport } from 'nodemailer';
2
+ import MailMessage from 'nodemailer/lib/mailer/mail-message';
3
+ export default class MockTransport implements Transport {
4
+ private _sentMail;
5
+ readonly name: 'Mock';
6
+ readonly version: '1.0.0';
7
+ getSentMail(): MailMessage<any>[];
8
+ send(mail: MailMessage<any>, callback: (err: Error | null, info?: any) => void): void;
9
+ private _validate;
10
+ }
@@ -0,0 +1,27 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="koa-bodyparser" />
3
+ import http from 'http';
4
+ import Koa from 'koa';
5
+ import nodemailer from 'nodemailer';
6
+ import MailMessage from 'nodemailer/lib/mailer/mail-message';
7
+ import { SuperAgentTest } from 'supertest';
8
+ import MockTransport from './mockTransport';
9
+ interface TypeParams {
10
+ mocha: any;
11
+ app?: () => Koa;
12
+ cleanDatabaseUrl?: string;
13
+ mailer?: {
14
+ _transporter: any;
15
+ };
16
+ }
17
+ declare const testUtils: {
18
+ _app: http.Server | null;
19
+ _originalTransporter: nodemailer.Transporter<any> | undefined;
20
+ _mockTransporter: MockTransport | undefined;
21
+ init({ mocha, app, cleanDatabaseUrl, mailer, }: TypeParams): void;
22
+ getSentMails(): MailMessage<any>[];
23
+ request(): SuperAgentTest;
24
+ uniqueDatabase(mongodbUrl?: string | undefined): string | null;
25
+ cleanTestingDatabases(mongodbUrl: string): Promise<void>;
26
+ };
27
+ export default testUtils;
package/lib/testUtils.js CHANGED
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const http_1 = __importDefault(require("http"));
7
- const mocha_1 = require("mocha");
8
7
  const mongodb_1 = require("mongodb");
9
8
  const nodemailer_1 = __importDefault(require("nodemailer"));
10
9
  const supertest_1 = __importDefault(require("supertest"));
@@ -13,8 +12,9 @@ const testUtils = {
13
12
  _app: null,
14
13
  _originalTransporter: undefined,
15
14
  _mockTransporter: undefined,
16
- init(app, cleanDatabaseUrl, mailer) {
17
- (0, mocha_1.before)(async () => {
15
+ init({ mocha, app, cleanDatabaseUrl, mailer, }) {
16
+ const { afterEach, before, beforeEach } = mocha;
17
+ before(async () => {
18
18
  if (cleanDatabaseUrl) {
19
19
  await this.cleanTestingDatabases(cleanDatabaseUrl);
20
20
  }
@@ -22,14 +22,14 @@ const testUtils = {
22
22
  this._app = http_1.default.createServer((await app()).callback());
23
23
  }
24
24
  });
25
- (0, mocha_1.beforeEach)(() => {
25
+ beforeEach(() => {
26
26
  if (mailer) {
27
27
  this._originalTransporter = mailer._transporter;
28
28
  this._mockTransporter = new mockTransport_1.default();
29
29
  mailer._transporter = nodemailer_1.default.createTransport(this._mockTransporter);
30
30
  }
31
31
  });
32
- (0, mocha_1.afterEach)(() => {
32
+ afterEach(() => {
33
33
  if (mailer) {
34
34
  mailer._transporter = this._originalTransporter;
35
35
  }
@@ -82,4 +82,4 @@ const testUtils = {
82
82
  },
83
83
  };
84
84
  exports.default = testUtils;
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdFV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdFV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0RBQW9DO0FBRXBDLGlDQUFzRDtBQUN0RCxxQ0FBc0M7QUFDdEMsNERBQXFEO0FBRXJELDBEQUFzRDtBQUN0RCxvRUFBNEM7QUFFNUMsTUFBTSxTQUFTLEdBQUc7SUFDZCxJQUFJLEVBQWdCLElBQUk7SUFDeEIsb0JBQW9CLEVBQTBCLFNBQVM7SUFDdkQsZ0JBQWdCLEVBQTRCLFNBQVM7SUFFckQsSUFBSSxDQUFFLEdBQWUsRUFBRSxnQkFBeUIsRUFBRSxNQUE0QjtRQUMxRSxJQUFBLGNBQU0sRUFBQyxLQUFLLElBQUksRUFBRTtZQUNkLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ2xCLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDdEQ7WUFFRCxJQUFJLEdBQUcsRUFBRTtnQkFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLGNBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUMzRDtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBQSxrQkFBVSxFQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksTUFBTSxFQUFFO2dCQUNSLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSx1QkFBYSxFQUFFLENBQUM7Z0JBQzVDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsb0JBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDM0U7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUEsaUJBQVMsRUFBQyxHQUFHLEVBQUU7WUFDWCxJQUFJLE1BQU0sRUFBRTtnQkFDUixNQUFNLENBQUMsWUFBWSxHQUFH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
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdFV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdFV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0RBQW9DO0FBRXBDLHFDQUFzQztBQUN0Qyw0REFBcUQ7QUFFckQsMERBQXNEO0FBQ3RELG9FQUE0QztBQVM1QyxNQUFNLFNBQVMsR0FBRztJQUNkLElBQUksRUFBaUIsSUFBSTtJQUN6QixvQkFBb0IsRUFBMkIsU0FBUztJQUN4RCxnQkFBZ0IsRUFBNkIsU0FBUztJQUV0RCxJQUFJLENBQUUsRUFDRixLQUFLLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sR0FDM0I7UUFDVCxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDaEQsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2QsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDbEIsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUN0RDtZQUVELElBQUksR0FBRyxFQUFFO2dCQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2FBQzNEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLHVCQUFhLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxDQUFDLFlBQVksR0FBRyxvQkFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUMzRTtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLEdBQUcs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
package/lib/testUtils.ts CHANGED
@@ -1,18 +1,27 @@
1
1
  import http, { Server } from 'http';
2
2
  import Koa from 'koa';
3
- import { afterEach, before, beforeEach } from 'mocha';
4
3
  import { MongoClient } from 'mongodb';
5
4
  import nodemailer, { Transporter } from 'nodemailer';
6
5
  import MailMessage from 'nodemailer/lib/mailer/mail-message';
7
6
  import supertest, { SuperAgentTest } from 'supertest';
8
7
  import MockTransport from './mockTransport';
9
8
 
10
- const testUtils = {
11
- _app: <Server|null> null,
12
- _originalTransporter: <Transporter|undefined> undefined,
13
- _mockTransporter: <MockTransport|undefined> undefined,
9
+ interface TypeParams {
10
+ mocha: any,
11
+ app?: () => Koa,
12
+ cleanDatabaseUrl?: string,
13
+ mailer?: { _transporter: any }
14
+ }
14
15
 
15
- init (app?: () => Koa, cleanDatabaseUrl?: string, mailer?: {_transporter: any}) {
16
+ const testUtils = {
17
+ _app: <Server | null>null,
18
+ _originalTransporter: <Transporter | undefined>undefined,
19
+ _mockTransporter: <MockTransport | undefined>undefined,
20
+
21
+ init ({
22
+ mocha, app, cleanDatabaseUrl, mailer,
23
+ }: TypeParams) {
24
+ const { afterEach, before, beforeEach } = mocha;
16
25
  before(async () => {
17
26
  if (cleanDatabaseUrl) {
18
27
  await this.cleanTestingDatabases(cleanDatabaseUrl);
@@ -53,7 +62,7 @@ const testUtils = {
53
62
  return supertest.agent(this._app);
54
63
  },
55
64
 
56
- uniqueDatabase (mongodbUrl?: string): string|null {
65
+ uniqueDatabase (mongodbUrl?: string): string | null {
57
66
 
58
67
  if (!mongodbUrl) {
59
68
  return null;
@@ -85,7 +94,7 @@ const testUtils = {
85
94
  maxAgeDate.setMinutes(maxAgeDate.getMinutes() - 15);
86
95
 
87
96
  await Promise.all(databases.map(async ({ name }) => {
88
- const [match,, timestamp] = name.match(matcher) || [];
97
+ const [match, , timestamp] = name.match(matcher) || [];
89
98
  if (match && (!timestamp || new Date(parseInt(timestamp, 10)) < maxAgeDate)) {
90
99
  // eslint-disable-next-line no-console
91
100
  console.log(`DROPPING OLD TESTING database ${name}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storyous/test-utils",
3
- "version": "1.0.4",
3
+ "version": "2.0.1",
4
4
  "description": "",
5
5
  "homepage": "https://github.com/Storyous/mono-utils#readme",
6
6
  "license": "ISC",
@@ -35,10 +35,9 @@
35
35
  "@types/nodemailer": "^6.4.4",
36
36
  "@types/supertest": "^2.0.12",
37
37
  "koa": "^2.13.4",
38
- "mocha": "^9.2.2",
39
38
  "mongodb": "^4.5.0",
40
39
  "nodemailer": "^6.7.3",
41
40
  "supertest": "^6.2.2"
42
41
  },
43
- "gitHead": "ee1c1b421d3e84a1afc9e2c14fd160e4c28d5597"
42
+ "gitHead": "3884746d0e2c36dd11a390e18f2eb05f5c9db510"
44
43
  }