test: Avoid creation of new server/app instance for each route test

This commit is contained in:
Tom Moor
2022-08-08 12:06:54 +02:00
parent b45e6c504f
commit 71c9fcf59b
22 changed files with 59 additions and 129 deletions

View File

@@ -1,6 +1,4 @@
import TestServer from "fetch-test-server";
import Attachment from "@server/models/Attachment";
import webService from "@server/services/web";
import {
buildUser,
buildAdmin,
@@ -8,15 +6,13 @@ import {
buildAttachment,
buildDocument,
} from "@server/test/factories";
import { flushdb } from "@server/test/support";
import { flushdb, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
jest.mock("@server/utils/s3");
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#attachments.create", () => {
it("should require authentication", async () => {

View File

@@ -1,14 +1,10 @@
import TestServer from "fetch-test-server";
import sharedEnv from "@shared/env";
import env from "@server/env";
import webService from "@server/services/web";
import { buildUser, buildTeam } from "@server/test/factories";
import { flushdb } from "@server/test/support";
import { flushdb, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#auth.info", () => {
it("should return current authentication", async () => {

View File

@@ -1,14 +1,10 @@
import TestServer from "fetch-test-server";
import { v4 as uuidv4 } from "uuid";
import webService from "@server/services/web";
import { buildUser, buildAdmin, buildTeam } from "@server/test/factories";
import { flushdb } from "@server/test/support";
import { flushdb, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#authenticationProviders.info", () => {
it("should return auth provider", async () => {

View File

@@ -1,7 +1,5 @@
import TestServer from "fetch-test-server";
import { colorPalette } from "@shared/utils/collections";
import { Document, CollectionUser, CollectionGroup } from "@server/models";
import webService from "@server/services/web";
import {
buildUser,
buildAdmin,
@@ -9,12 +7,10 @@ import {
buildCollection,
buildDocument,
} from "@server/test/factories";
import { flushdb, seed } from "@server/test/support";
import { flushdb, seed, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#collections.list", () => {
it("should require authentication", async () => {

View File

@@ -1,12 +1,8 @@
import TestServer from "fetch-test-server";
import webService from "@server/services/web";
import { flushdb } from "@server/test/support";
import { flushdb, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#cron.daily", () => {
it("should require authentication", async () => {

View File

@@ -1,4 +1,3 @@
import TestServer from "fetch-test-server";
import {
Document,
View,
@@ -9,7 +8,6 @@ import {
SearchQuery,
Event,
} from "@server/models";
import webService from "@server/services/web";
import {
buildShare,
buildCollection,
@@ -17,12 +15,10 @@ import {
buildDocument,
buildViewer,
} from "@server/test/factories";
import { flushdb, seed } from "@server/test/support";
import { flushdb, seed, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#documents.info", () => {
it("should return published document", async () => {

View File

@@ -1,12 +1,8 @@
import TestServer from "fetch-test-server";
import webService from "@server/services/web";
import { buildEvent, buildUser } from "@server/test/factories";
import { flushdb, seed } from "@server/test/support";
import { flushdb, seed, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#events.list", () => {
it("should only return activity events", async () => {

View File

@@ -1,10 +1,8 @@
import TestServer from "fetch-test-server";
import { Collection, User, Event, FileOperation } from "@server/models";
import {
FileOperationState,
FileOperationType,
} from "@server/models/FileOperation";
import webService from "@server/services/web";
import {
buildAdmin,
buildCollection,
@@ -12,15 +10,13 @@ import {
buildTeam,
buildUser,
} from "@server/test/factories";
import { flushdb } from "@server/test/support";
import { flushdb, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
jest.mock("@server/utils/s3");
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#fileOperations.info", () => {
it("should return fileOperation", async () => {

View File

@@ -1,13 +1,9 @@
import TestServer from "fetch-test-server";
import { Event } from "@server/models";
import webService from "@server/services/web";
import { buildUser, buildAdmin, buildGroup } from "@server/test/factories";
import { flushdb } from "@server/test/support";
import { flushdb, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#groups.create", () => {
it("should create a group", async () => {

View File

@@ -1,15 +1,12 @@
import TestServer from "fetch-test-server";
import env from "@server/env";
import { IntegrationAuthentication, SearchQuery } from "@server/models";
import webService from "@server/services/web";
import { buildDocument, buildIntegration } from "@server/test/factories";
import { flushdb, seed } from "@server/test/support";
import { flushdb, seed, getTestServer } from "@server/test/support";
import * as Slack from "@server/utils/slack";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
jest.mock("../../utils/slack", () => ({
post: jest.fn(),
}));

View File

@@ -1,11 +1,8 @@
import TestServer from "fetch-test-server";
import webService from "@server/services/web";
import { flushdb } from "@server/test/support";
import { flushdb, getTestServer } from "@server/test/support";
const server = getTestServer();
const app = webService();
const server = new TestServer(app.callback());
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("POST unknown endpoint", () => {
it("should be not found", async () => {

View File

@@ -1,18 +1,14 @@
import TestServer from "fetch-test-server";
import webService from "@server/services/web";
import {
buildAdmin,
buildTeam,
buildUser,
buildIntegration,
} from "@server/test/factories";
import { flushdb } from "@server/test/support";
import { flushdb, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#integrations.update", () => {
it("should allow updating integration events", async () => {

View File

@@ -1,11 +1,7 @@
import TestServer from "fetch-test-server";
import webService from "@server/services/web";
import { flushdb, seed } from "@server/test/support";
import { flushdb, seed, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#pagination", () => {
it("should allow offset and limit", async () => {

View File

@@ -1,13 +1,9 @@
import TestServer from "fetch-test-server";
import { Revision } from "@server/models";
import webService from "@server/services/web";
import { buildDocument, buildUser } from "@server/test/factories";
import { flushdb, seed } from "@server/test/support";
import { flushdb, seed, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#revisions.info", () => {
it("should return a document revision", async () => {

View File

@@ -1,6 +1,4 @@
import TestServer from "fetch-test-server";
import { CollectionUser } from "@server/models";
import webService from "@server/services/web";
import {
buildUser,
buildDocument,
@@ -8,12 +6,10 @@ import {
buildAdmin,
buildCollection,
} from "@server/test/factories";
import { flushdb, seed } from "@server/test/support";
import { flushdb, seed, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#shares.list", () => {
it("should only return shares created by user", async () => {

View File

@@ -1,12 +1,8 @@
import TestServer from "fetch-test-server";
import webService from "@server/services/web";
import { buildUser, buildStar, buildDocument } from "@server/test/factories";
import { flushdb } from "@server/test/support";
import { flushdb, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#stars.create", () => {
it("should create a star", async () => {

View File

@@ -1,13 +1,9 @@
import TestServer from "fetch-test-server";
import { TeamDomain } from "@server/models";
import webService from "@server/services/web";
import { buildAdmin, buildCollection, buildTeam } from "@server/test/factories";
import { flushdb, seed } from "@server/test/support";
import { flushdb, seed, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#team.update", () => {
it("should update team details", async () => {

View File

@@ -1,13 +1,9 @@
import TestServer from "fetch-test-server";
import { View, CollectionUser } from "@server/models";
import webService from "@server/services/web";
import { buildUser } from "@server/test/factories";
import { flushdb, seed } from "@server/test/support";
import { flushdb, seed, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("#views.list", () => {
it("should return views for a document", async () => {

View File

@@ -1,13 +1,9 @@
import TestServer from "fetch-test-server";
import webService from "@server/services/web";
import { buildUser, buildCollection } from "@server/test/factories";
import { flushdb } from "@server/test/support";
import { flushdb, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("auth/redirect", () => {
it("should redirect to home", async () => {

View File

@@ -1,19 +1,13 @@
import TestServer from "fetch-test-server";
import sharedEnv from "@shared/env";
import SigninEmail from "@server/emails/templates/SigninEmail";
import WelcomeEmail from "@server/emails/templates/WelcomeEmail";
import env from "@server/env";
import webService from "@server/services/web";
import { buildUser, buildGuestUser, buildTeam } from "@server/test/factories";
import { flushdb } from "@server/test/support";
import { flushdb, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(async () => {
await flushdb();
});
afterAll(() => server.close());
beforeEach(() => flushdb());
describe("email", () => {
it("should require email param", async () => {

View File

@@ -1,12 +1,8 @@
import TestServer from "fetch-test-server";
import { buildShare, buildDocument } from "@server/test/factories";
import { flushdb } from "@server/test/support";
import webService from "../services/web";
import { flushdb, getTestServer } from "@server/test/support";
const app = webService();
const server = new TestServer(app.callback());
const server = getTestServer();
beforeEach(() => flushdb());
afterAll(() => server.close());
describe("/share/:id", () => {
it("should return standard title in html when loading unpublished share", async () => {

View File

@@ -1,6 +1,8 @@
import TestServer from "fetch-test-server";
import { v4 as uuidv4 } from "uuid";
import { sequelize } from "@server/database/sequelize";
import { User, Document, Collection, Team } from "@server/models";
import webService from "@server/services/web";
const sql = sequelize.getQueryInterface();
const tables = Object.keys(sequelize.models).map((model) => {
@@ -109,3 +111,15 @@ export const seed = async () => {
};
});
};
let testServer: typeof TestServer | undefined;
export function getTestServer() {
if (testServer) {
return testServer;
}
const app = webService();
testServer = new TestServer(app.callback());
return testServer;
}