diff --git a/.jestconfig.json b/.jestconfig.json index b99860db3..3d1cb3d88 100644 --- a/.jestconfig.json +++ b/.jestconfig.json @@ -15,7 +15,8 @@ "/server/test/setup.ts" ], "testEnvironment": "node", - "runner": "@getoutline/jest-runner-serial" + "runner": "@getoutline/jest-runner-serial", + "detectLeaks": true }, { "displayName": "app", @@ -56,6 +57,9 @@ "setupFiles": [ "/__mocks__/console.js" ], + "setupFilesAfterEnv": [ + "/shared/test/setup.ts" + ], "testEnvironment": "node" }, { @@ -79,4 +83,4 @@ } } ] -} \ No newline at end of file +} diff --git a/server/commands/accountProvisioner.test.ts b/server/commands/accountProvisioner.test.ts index 33b96048b..6060914fa 100644 --- a/server/commands/accountProvisioner.test.ts +++ b/server/commands/accountProvisioner.test.ts @@ -4,12 +4,14 @@ import { TeamDomain } from "@server/models"; import Collection from "@server/models/Collection"; import UserAuthentication from "@server/models/UserAuthentication"; import { buildUser, buildTeam } from "@server/test/factories"; -import { flushdb, seed } from "@server/test/support"; +import { getTestDatabase, seed } from "@server/test/support"; import accountProvisioner from "./accountProvisioner"; -beforeEach(() => { - return flushdb(); -}); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("accountProvisioner", () => { const ip = "127.0.0.1"; diff --git a/server/commands/documentImporter.test.ts b/server/commands/documentImporter.test.ts index 889c234e1..79b48752b 100644 --- a/server/commands/documentImporter.test.ts +++ b/server/commands/documentImporter.test.ts @@ -2,11 +2,16 @@ import path from "path"; import fs from "fs-extra"; import Attachment from "@server/models/Attachment"; import { buildUser } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import documentImporter from "./documentImporter"; jest.mock("../utils/s3"); -beforeEach(() => flushdb()); + +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("documentImporter", () => { const ip = "127.0.0.1"; diff --git a/server/commands/documentMover.test.ts b/server/commands/documentMover.test.ts index dd273181a..28a2abb81 100644 --- a/server/commands/documentMover.test.ts +++ b/server/commands/documentMover.test.ts @@ -5,10 +5,14 @@ import { buildCollection, buildUser, } from "@server/test/factories"; -import { flushdb, seed } from "@server/test/support"; +import { getTestDatabase, seed } from "@server/test/support"; import documentMover from "./documentMover"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("documentMover", () => { const ip = "127.0.0.1"; diff --git a/server/commands/documentPermanentDeleter.test.ts b/server/commands/documentPermanentDeleter.test.ts index 814780733..af4c8897f 100644 --- a/server/commands/documentPermanentDeleter.test.ts +++ b/server/commands/documentPermanentDeleter.test.ts @@ -1,10 +1,14 @@ import { subDays } from "date-fns"; import { Attachment, Document } from "@server/models"; import { buildAttachment, buildDocument } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import documentPermanentDeleter from "./documentPermanentDeleter"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("documentPermanentDeleter", () => { it("should destroy documents", async () => { diff --git a/server/commands/documentUpdater.test.ts b/server/commands/documentUpdater.test.ts index 177819bbb..4b45a2518 100644 --- a/server/commands/documentUpdater.test.ts +++ b/server/commands/documentUpdater.test.ts @@ -1,10 +1,14 @@ import { sequelize } from "@server/database/sequelize"; import { Event } from "@server/models"; import { buildDocument, buildUser } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import documentUpdater from "./documentUpdater"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("documentUpdater", () => { const ip = "127.0.0.1"; diff --git a/server/commands/fileOperationDeleter.test.ts b/server/commands/fileOperationDeleter.test.ts index f29ba2305..1f045af91 100644 --- a/server/commands/fileOperationDeleter.test.ts +++ b/server/commands/fileOperationDeleter.test.ts @@ -1,9 +1,13 @@ import { FileOperation } from "@server/models"; import { buildAdmin, buildFileOperation } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import fileOperationDeleter from "./fileOperationDeleter"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("fileOperationDeleter", () => { const ip = "127.0.0.1"; diff --git a/server/commands/pinCreator.test.ts b/server/commands/pinCreator.test.ts index 6e27bcd51..5c239af61 100644 --- a/server/commands/pinCreator.test.ts +++ b/server/commands/pinCreator.test.ts @@ -1,9 +1,14 @@ import { Event } from "@server/models"; import { buildDocument, buildUser } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import pinCreator from "./pinCreator"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); + describe("pinCreator", () => { const ip = "127.0.0.1"; diff --git a/server/commands/pinDestroyer.test.ts b/server/commands/pinDestroyer.test.ts index a3bf5fd9e..f505c4770 100644 --- a/server/commands/pinDestroyer.test.ts +++ b/server/commands/pinDestroyer.test.ts @@ -1,9 +1,14 @@ import { Pin, Event } from "@server/models"; import { buildDocument, buildUser } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import pinDestroyer from "./pinDestroyer"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); + describe("pinCreator", () => { const ip = "127.0.0.1"; diff --git a/server/commands/revisionCreator.test.ts b/server/commands/revisionCreator.test.ts index 62ea6bcb8..0bab15be0 100644 --- a/server/commands/revisionCreator.test.ts +++ b/server/commands/revisionCreator.test.ts @@ -1,9 +1,13 @@ import { Event } from "@server/models"; import { buildDocument, buildUser } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import revisionCreator from "./revisionCreator"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("revisionCreator", () => { const ip = "127.0.0.1"; diff --git a/server/commands/starCreator.test.ts b/server/commands/starCreator.test.ts index 47f87a736..aa3f5ce4f 100644 --- a/server/commands/starCreator.test.ts +++ b/server/commands/starCreator.test.ts @@ -1,10 +1,15 @@ import { sequelize } from "@server/database/sequelize"; import { Star, Event } from "@server/models"; import { buildDocument, buildUser } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import starCreator from "./starCreator"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); + describe("starCreator", () => { const ip = "127.0.0.1"; diff --git a/server/commands/starDestroyer.test.ts b/server/commands/starDestroyer.test.ts index 234bf98b8..3043fa354 100644 --- a/server/commands/starDestroyer.test.ts +++ b/server/commands/starDestroyer.test.ts @@ -1,9 +1,13 @@ import { Star, Event } from "@server/models"; import { buildDocument, buildUser } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import starDestroyer from "./starDestroyer"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("starDestroyer", () => { const ip = "127.0.0.1"; diff --git a/server/commands/starUpdater.test.ts b/server/commands/starUpdater.test.ts index 74f69d291..518f44ab6 100644 --- a/server/commands/starUpdater.test.ts +++ b/server/commands/starUpdater.test.ts @@ -1,9 +1,13 @@ import { Star, Event } from "@server/models"; import { buildDocument, buildUser } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import starUpdater from "./starUpdater"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("starUpdater", () => { const ip = "127.0.0.1"; diff --git a/server/commands/teamPermanentDeleter.test.ts b/server/commands/teamPermanentDeleter.test.ts index 7ebf2d98b..79e58d804 100644 --- a/server/commands/teamPermanentDeleter.test.ts +++ b/server/commands/teamPermanentDeleter.test.ts @@ -6,10 +6,14 @@ import { buildTeam, buildDocument, } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import teamPermanentDeleter from "./teamPermanentDeleter"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("teamPermanentDeleter", () => { it("should destroy related data", async () => { diff --git a/server/commands/teamProvisioner.test.ts b/server/commands/teamProvisioner.test.ts index c6e5f3b43..c2b0ac849 100644 --- a/server/commands/teamProvisioner.test.ts +++ b/server/commands/teamProvisioner.test.ts @@ -1,10 +1,14 @@ import env from "@server/env"; import TeamDomain from "@server/models/TeamDomain"; import { buildTeam, buildUser } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import teamProvisioner from "./teamProvisioner"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("teamProvisioner", () => { const ip = "127.0.0.1"; diff --git a/server/commands/userDestroyer.test.ts b/server/commands/userDestroyer.test.ts index 4676e229d..5dcc0587a 100644 --- a/server/commands/userDestroyer.test.ts +++ b/server/commands/userDestroyer.test.ts @@ -1,8 +1,12 @@ import { buildUser, buildAdmin } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import userDestroyer from "./userDestroyer"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("userDestroyer", () => { const ip = "127.0.0.1"; diff --git a/server/commands/userInviter.test.ts b/server/commands/userInviter.test.ts index cd143a4ad..cc8b9ce06 100644 --- a/server/commands/userInviter.test.ts +++ b/server/commands/userInviter.test.ts @@ -1,8 +1,12 @@ import { buildUser } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import userInviter from "./userInviter"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("userInviter", () => { const ip = "127.0.0.1"; diff --git a/server/commands/userProvisioner.test.ts b/server/commands/userProvisioner.test.ts index 31aa47375..c0547e326 100644 --- a/server/commands/userProvisioner.test.ts +++ b/server/commands/userProvisioner.test.ts @@ -1,10 +1,14 @@ import { v4 as uuidv4 } from "uuid"; import { TeamDomain } from "@server/models"; import { buildUser, buildTeam, buildInvite } from "@server/test/factories"; -import { flushdb, seed } from "@server/test/support"; +import { getTestDatabase, seed } from "@server/test/support"; import userProvisioner from "./userProvisioner"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("userProvisioner", () => { const ip = "127.0.0.1"; diff --git a/server/commands/userSuspender.test.ts b/server/commands/userSuspender.test.ts index 72b63c207..3de13aec0 100644 --- a/server/commands/userSuspender.test.ts +++ b/server/commands/userSuspender.test.ts @@ -1,9 +1,13 @@ import GroupUser from "@server/models/GroupUser"; import { buildGroup, buildAdmin, buildUser } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import userSuspender from "./userSuspender"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("userSuspender", () => { const ip = "127.0.0.1"; diff --git a/server/middlewares/authentication.test.ts b/server/middlewares/authentication.test.ts index d5d46a837..dc954022a 100644 --- a/server/middlewares/authentication.test.ts +++ b/server/middlewares/authentication.test.ts @@ -1,10 +1,14 @@ import randomstring from "randomstring"; import ApiKey from "@server/models/ApiKey"; import { buildUser, buildTeam } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import auth from "./authentication"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("Authentication middleware", () => { describe("with JWT", () => { diff --git a/server/models/Collection.test.ts b/server/models/Collection.test.ts index bc877297f..11db67c88 100644 --- a/server/models/Collection.test.ts +++ b/server/models/Collection.test.ts @@ -7,13 +7,19 @@ import { buildTeam, buildDocument, } from "@server/test/factories"; -import { flushdb, seed } from "@server/test/support"; +import { getTestDatabase, seed } from "@server/test/support"; import slugify from "@server/utils/slugify"; import Collection from "./Collection"; import Document from "./Document"; -beforeEach(() => flushdb()); -beforeEach(jest.resetAllMocks); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(async () => { + await db.flush(); + jest.resetAllMocks(); +}); describe("#url", () => { test("should return correct url for the collection", () => { diff --git a/server/models/Document.test.ts b/server/models/Document.test.ts index f894844de..d524ab41f 100644 --- a/server/models/Document.test.ts +++ b/server/models/Document.test.ts @@ -6,11 +6,17 @@ import { buildUser, buildShare, } from "@server/test/factories"; -import { flushdb, seed } from "@server/test/support"; +import { getTestDatabase, seed } from "@server/test/support"; import slugify from "@server/utils/slugify"; -beforeEach(() => flushdb()); -beforeEach(jest.resetAllMocks); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(async () => { + await db.flush(); + jest.resetAllMocks(); +}); describe("#getSummary", () => { test("should strip markdown", async () => { diff --git a/server/models/Group.test.ts b/server/models/Group.test.ts index 73f6fc894..2c116c45b 100644 --- a/server/models/Group.test.ts +++ b/server/models/Group.test.ts @@ -1,10 +1,16 @@ import { buildUser, buildGroup, buildCollection } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import CollectionGroup from "./CollectionGroup"; import GroupUser from "./GroupUser"; -beforeEach(() => flushdb()); -beforeEach(jest.resetAllMocks); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(async () => { + await db.flush(); + jest.resetAllMocks(); +}); describe("afterDestroy hook", () => { test("should destroy associated group and collection join relations", async () => { diff --git a/server/models/Revision.test.ts b/server/models/Revision.test.ts index e893038d1..9e62f7d52 100644 --- a/server/models/Revision.test.ts +++ b/server/models/Revision.test.ts @@ -1,9 +1,15 @@ import { buildDocument } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import Revision from "./Revision"; -beforeEach(() => flushdb()); -beforeEach(jest.resetAllMocks); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(async () => { + await db.flush(); + jest.resetAllMocks(); +}); describe("#findLatest", () => { test("should return latest revision", async () => { diff --git a/server/models/Team.test.ts b/server/models/Team.test.ts index 055bfa02b..a43b0b900 100644 --- a/server/models/Team.test.ts +++ b/server/models/Team.test.ts @@ -1,7 +1,14 @@ import { buildTeam, buildCollection } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(async () => { + await db.flush(); + jest.resetAllMocks(); +}); describe("collectionIds", () => { it("should return non-private collection ids", async () => { diff --git a/server/models/TeamDomain.test.ts b/server/models/TeamDomain.test.ts index 37da5da9d..a58f3ba0d 100644 --- a/server/models/TeamDomain.test.ts +++ b/server/models/TeamDomain.test.ts @@ -1,8 +1,15 @@ import { buildAdmin, buildTeam } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import TeamDomain from "./TeamDomain"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(async () => { + await db.flush(); + jest.resetAllMocks(); +}); describe("team domain model", () => { describe("create", () => { diff --git a/server/models/User.test.ts b/server/models/User.test.ts index 7cf5f9052..f941c2a06 100644 --- a/server/models/User.test.ts +++ b/server/models/User.test.ts @@ -1,16 +1,21 @@ import { buildUser, buildTeam, buildCollection } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import CollectionUser from "./CollectionUser"; import UserAuthentication from "./UserAuthentication"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + beforeAll(() => { jest.useFakeTimers().setSystemTime(new Date("2018-01-02T00:00:00.000Z")); }); + afterAll(() => { jest.useRealTimers(); + db.disconnect(); }); +beforeEach(db.flush); + describe("user model", () => { describe("destroy", () => { it("should delete user authentications", async () => { diff --git a/server/policies/collection.test.ts b/server/policies/collection.test.ts index 714d26ec6..e5537b5b9 100644 --- a/server/policies/collection.test.ts +++ b/server/policies/collection.test.ts @@ -1,9 +1,13 @@ import { CollectionUser, Collection } from "@server/models"; import { buildUser, buildTeam, buildCollection } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import { serialize } from "./index"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("read_write permission", () => { it("should allow read write permissions for team member", async () => { diff --git a/server/policies/document.test.ts b/server/policies/document.test.ts index 4c468eeee..755c20fd1 100644 --- a/server/policies/document.test.ts +++ b/server/policies/document.test.ts @@ -4,10 +4,14 @@ import { buildDocument, buildCollection, } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import { serialize } from "./index"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("read_write collection", () => { it("should allow read write permissions for team member", async () => { diff --git a/server/policies/index.test.ts b/server/policies/index.test.ts index 963665abd..86b9de99c 100644 --- a/server/policies/index.test.ts +++ b/server/policies/index.test.ts @@ -1,8 +1,12 @@ import { buildUser, buildTeam } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import { serialize } from "./index"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); it("should serialize policy", async () => { const user = await buildUser(); diff --git a/server/policies/team.test.ts b/server/policies/team.test.ts index 63634eebd..f04545212 100644 --- a/server/policies/team.test.ts +++ b/server/policies/team.test.ts @@ -1,8 +1,13 @@ import { buildUser, buildTeam, buildAdmin } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import { serialize } from "./index"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); + it("should allow reading only", async () => { const team = await buildTeam(); const user = await buildUser({ diff --git a/server/queues/processors/BacklinksProcessor.test.ts b/server/queues/processors/BacklinksProcessor.test.ts index 20f1462f2..c533669b7 100644 --- a/server/queues/processors/BacklinksProcessor.test.ts +++ b/server/queues/processors/BacklinksProcessor.test.ts @@ -1,12 +1,18 @@ import { Backlink } from "@server/models"; import { buildDocument } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import BacklinksProcessor from "./BacklinksProcessor"; const ip = "127.0.0.1"; -beforeEach(() => flushdb()); -beforeEach(jest.resetAllMocks); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(async () => { + await db.flush(); + jest.resetAllMocks(); +}); describe("documents.publish", () => { test("should create new backlink records", async () => { @@ -161,7 +167,7 @@ describe("documents.update", () => { ip, }); document.text = `First link is gone - + [this is a another link](${yetAnotherDocument.url})`; await document.save(); diff --git a/server/queues/processors/NotificationsProcessor.test.ts b/server/queues/processors/NotificationsProcessor.test.ts index e17aefbc4..078cbcc8a 100644 --- a/server/queues/processors/NotificationsProcessor.test.ts +++ b/server/queues/processors/NotificationsProcessor.test.ts @@ -5,14 +5,20 @@ import { buildCollection, buildUser, } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import NotificationsProcessor from "./NotificationsProcessor"; jest.mock("@server/emails/templates/DocumentNotificationEmail"); const ip = "127.0.0.1"; -beforeEach(() => flushdb()); -beforeEach(jest.resetAllMocks); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(async () => { + await db.flush(); + jest.resetAllMocks(); +}); describe("documents.publish", () => { test("should not send a notification to author", async () => { diff --git a/server/queues/processors/RevisionsProcessor.test.ts b/server/queues/processors/RevisionsProcessor.test.ts index 0c813d73f..a0934cf3c 100644 --- a/server/queues/processors/RevisionsProcessor.test.ts +++ b/server/queues/processors/RevisionsProcessor.test.ts @@ -1,12 +1,18 @@ import { Revision } from "@server/models"; import { buildDocument } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import RevisionsProcessor from "./RevisionsProcessor"; const ip = "127.0.0.1"; -beforeEach(() => flushdb()); -beforeEach(jest.resetAllMocks); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(async () => { + await db.flush(); + jest.resetAllMocks(); +}); describe("documents.update.debounced", () => { test("should create a revision", async () => { diff --git a/server/queues/processors/WebhookProcessor.test.ts b/server/queues/processors/WebhookProcessor.test.ts index 826d5c712..fd2d62f83 100644 --- a/server/queues/processors/WebhookProcessor.test.ts +++ b/server/queues/processors/WebhookProcessor.test.ts @@ -1,18 +1,21 @@ import { buildUser, buildWebhookSubscription } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import { UserEvent } from "@server/types"; import DeliverWebhookTask from "../tasks/DeliverWebhookTask"; import WebhookProcessor from "./WebhookProcessor"; jest.mock("@server/queues/tasks/DeliverWebhookTask"); +const ip = "127.0.0.1"; -beforeEach(() => flushdb()); -beforeEach(() => { +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(async () => { + await db.flush(); jest.resetAllMocks(); }); -const ip = "127.0.0.1"; - describe("WebhookProcessor", () => { test("it schedules a delivery for the event", async () => { const subscription = await buildWebhookSubscription({ diff --git a/server/queues/tasks/CleanupDeletedDocumentsTask.test.ts b/server/queues/tasks/CleanupDeletedDocumentsTask.test.ts index 0c654d6ce..ffa62f32a 100644 --- a/server/queues/tasks/CleanupDeletedDocumentsTask.test.ts +++ b/server/queues/tasks/CleanupDeletedDocumentsTask.test.ts @@ -1,10 +1,14 @@ import { subDays } from "date-fns"; import { Document } from "@server/models"; import { buildDocument } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import CleanupDeletedDocumentsTask from "./CleanupDeletedDocumentsTask"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("CleanupDeletedDocumentsTask", () => { it("should not destroy documents not deleted", async () => { diff --git a/server/queues/tasks/CleanupDemotedUserTask.test.ts b/server/queues/tasks/CleanupDemotedUserTask.test.ts index 2bc90742a..5d2ca9aac 100644 --- a/server/queues/tasks/CleanupDemotedUserTask.test.ts +++ b/server/queues/tasks/CleanupDemotedUserTask.test.ts @@ -6,10 +6,14 @@ import { buildWebhookSubscription, buildViewer, } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import CleanupDemotedUserTask from "./CleanupDemotedUserTask"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("CleanupDemotedUserTask", () => { it("should delete api keys for suspended user", async () => { diff --git a/server/queues/tasks/CleanupExpiredFileOperationsTask.test.ts b/server/queues/tasks/CleanupExpiredFileOperationsTask.test.ts index 77e9e1c92..2a6ca74b5 100644 --- a/server/queues/tasks/CleanupExpiredFileOperationsTask.test.ts +++ b/server/queues/tasks/CleanupExpiredFileOperationsTask.test.ts @@ -5,10 +5,14 @@ import { FileOperationType, } from "@server/models/FileOperation"; import { buildFileOperation } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import CleanupExpiredFileOperationsTask from "./CleanupExpiredFileOperationsTask"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("CleanupExpiredFileOperationsTask", () => { it("should expire exports older than 15 days ago", async () => { diff --git a/server/queues/tasks/CleanupWebhookDeliveriesTask.test.ts b/server/queues/tasks/CleanupWebhookDeliveriesTask.test.ts index 8b45d3c03..3ed4d6ce6 100644 --- a/server/queues/tasks/CleanupWebhookDeliveriesTask.test.ts +++ b/server/queues/tasks/CleanupWebhookDeliveriesTask.test.ts @@ -1,10 +1,14 @@ import { subDays } from "date-fns"; import { WebhookDelivery } from "@server/models"; import { buildWebhookDelivery } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import CleanupWebhookDeliveriesTask from "./CleanupWebhookDeliveriesTask"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); const deliveryExists = async (delivery: WebhookDelivery) => { const results = await WebhookDelivery.findOne({ where: { id: delivery.id } }); diff --git a/server/queues/tasks/DeliverWebhookTask.test.ts b/server/queues/tasks/DeliverWebhookTask.test.ts index 3e9610d3b..a9ea6f0bc 100644 --- a/server/queues/tasks/DeliverWebhookTask.test.ts +++ b/server/queues/tasks/DeliverWebhookTask.test.ts @@ -6,12 +6,16 @@ import { buildWebhookDelivery, buildWebhookSubscription, } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import { UserEvent } from "@server/types"; import DeliverWebhookTask from "./DeliverWebhookTask"; -beforeEach(() => flushdb()); -beforeEach(() => { +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(async () => { + await db.flush(); jest.resetAllMocks(); fetchMock.resetMocks(); fetchMock.doMock(); diff --git a/server/queues/tasks/ImportMarkdownZipTask.test.ts b/server/queues/tasks/ImportMarkdownZipTask.test.ts index 81de3efd9..a0c162ef4 100644 --- a/server/queues/tasks/ImportMarkdownZipTask.test.ts +++ b/server/queues/tasks/ImportMarkdownZipTask.test.ts @@ -2,10 +2,14 @@ import fs from "fs"; import path from "path"; import { FileOperation } from "@server/models"; import { buildFileOperation } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import ImportMarkdownZipTask from "./ImportMarkdownZipTask"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("ImportMarkdownZipTask", () => { it("should import the documents, attachments", async () => { diff --git a/server/queues/tasks/ImportNotionTask.test.ts b/server/queues/tasks/ImportNotionTask.test.ts index 68887aa51..e664e2589 100644 --- a/server/queues/tasks/ImportNotionTask.test.ts +++ b/server/queues/tasks/ImportNotionTask.test.ts @@ -2,10 +2,14 @@ import fs from "fs"; import path from "path"; import { FileOperation } from "@server/models"; import { buildFileOperation } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import ImportNotionTask from "./ImportNotionTask"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("ImportNotionTask", () => { it("should import successfully from a Markdown export", async () => { diff --git a/server/queues/tasks/InviteReminderTask.test.ts b/server/queues/tasks/InviteReminderTask.test.ts index 8d1f1907f..39f8529bd 100644 --- a/server/queues/tasks/InviteReminderTask.test.ts +++ b/server/queues/tasks/InviteReminderTask.test.ts @@ -1,10 +1,14 @@ import { subDays } from "date-fns"; import InviteReminderEmail from "@server/emails/templates/InviteReminderEmail"; import { buildInvite } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import InviteReminderTask from "./InviteReminderTask"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("InviteReminderTask", () => { it("should not destroy documents not deleted", async () => { diff --git a/server/routes/api/attachments.test.ts b/server/routes/api/attachments.test.ts index a67ceb4b3..ebf7baa7a 100644 --- a/server/routes/api/attachments.test.ts +++ b/server/routes/api/attachments.test.ts @@ -6,13 +6,16 @@ import { buildAttachment, buildDocument, } from "@server/test/factories"; -import { flushdb, getTestServer } from "@server/test/support"; - -const server = getTestServer(); +import { getTestDatabase, getTestServer } from "@server/test/support"; jest.mock("@server/utils/s3"); -beforeEach(() => flushdb()); +const db = getTestDatabase(); +const server = getTestServer(); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#attachments.create", () => { it("should require authentication", async () => { diff --git a/server/routes/api/auth.test.ts b/server/routes/api/auth.test.ts index 1bf2907b6..96d80b43e 100644 --- a/server/routes/api/auth.test.ts +++ b/server/routes/api/auth.test.ts @@ -1,10 +1,14 @@ import sharedEnv from "@shared/env"; import env from "@server/env"; import { buildUser, buildTeam } from "@server/test/factories"; -import { flushdb, getTestServer } from "@server/test/support"; +import { getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#auth.info", () => { it("should return current authentication", async () => { diff --git a/server/routes/api/authenticationProviders.test.ts b/server/routes/api/authenticationProviders.test.ts index 54587f62c..e7fd3af0a 100644 --- a/server/routes/api/authenticationProviders.test.ts +++ b/server/routes/api/authenticationProviders.test.ts @@ -1,10 +1,13 @@ import { v4 as uuidv4 } from "uuid"; import { buildUser, buildAdmin, buildTeam } from "@server/test/factories"; -import { flushdb, getTestServer } from "@server/test/support"; +import { getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#authenticationProviders.info", () => { it("should return auth provider", async () => { diff --git a/server/routes/api/collections.test.ts b/server/routes/api/collections.test.ts index 8a5f42752..dcb66c242 100644 --- a/server/routes/api/collections.test.ts +++ b/server/routes/api/collections.test.ts @@ -7,10 +7,14 @@ import { buildCollection, buildDocument, } from "@server/test/factories"; -import { flushdb, seed, getTestServer } from "@server/test/support"; +import { seed, getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#collections.list", () => { it("should require authentication", async () => { diff --git a/server/routes/api/cron.test.ts b/server/routes/api/cron.test.ts index 8eed54d5d..72162f261 100644 --- a/server/routes/api/cron.test.ts +++ b/server/routes/api/cron.test.ts @@ -1,8 +1,11 @@ -import { flushdb, getTestServer } from "@server/test/support"; +import { getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#cron.daily", () => { it("should require authentication", async () => { diff --git a/server/routes/api/documents.test.ts b/server/routes/api/documents.test.ts index 88f195305..7a8e5717b 100644 --- a/server/routes/api/documents.test.ts +++ b/server/routes/api/documents.test.ts @@ -15,10 +15,14 @@ import { buildDocument, buildViewer, } from "@server/test/factories"; -import { flushdb, seed, getTestServer } from "@server/test/support"; +import { seed, getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#documents.info", () => { it("should return published document", async () => { diff --git a/server/routes/api/events.test.ts b/server/routes/api/events.test.ts index 9e0bc4f6e..c2bc6b889 100644 --- a/server/routes/api/events.test.ts +++ b/server/routes/api/events.test.ts @@ -1,8 +1,12 @@ import { buildEvent, buildUser } from "@server/test/factories"; -import { flushdb, seed, getTestServer } from "@server/test/support"; +import { seed, getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#events.list", () => { it("should only return activity events", async () => { diff --git a/server/routes/api/fileOperations.test.ts b/server/routes/api/fileOperations.test.ts index c1ddbf51c..667ca9e9f 100644 --- a/server/routes/api/fileOperations.test.ts +++ b/server/routes/api/fileOperations.test.ts @@ -10,13 +10,17 @@ import { buildTeam, buildUser, } from "@server/test/factories"; -import { flushdb, getTestServer } from "@server/test/support"; +import { getTestDatabase, getTestServer } from "@server/test/support"; + +const db = getTestDatabase(); const server = getTestServer(); jest.mock("@server/utils/s3"); -beforeEach(() => flushdb()); +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#fileOperations.info", () => { it("should return fileOperation", async () => { diff --git a/server/routes/api/groups.test.ts b/server/routes/api/groups.test.ts index 4d3bd170c..f98576d22 100644 --- a/server/routes/api/groups.test.ts +++ b/server/routes/api/groups.test.ts @@ -1,9 +1,13 @@ import { Event } from "@server/models"; import { buildUser, buildAdmin, buildGroup } from "@server/test/factories"; -import { flushdb, getTestServer } from "@server/test/support"; +import { getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#groups.create", () => { it("should create a group", async () => { diff --git a/server/routes/api/hooks.test.ts b/server/routes/api/hooks.test.ts index b5b3d1701..0ba6332dd 100644 --- a/server/routes/api/hooks.test.ts +++ b/server/routes/api/hooks.test.ts @@ -1,16 +1,20 @@ import env from "@server/env"; import { IntegrationAuthentication, SearchQuery } from "@server/models"; import { buildDocument, buildIntegration } from "@server/test/factories"; -import { flushdb, seed, getTestServer } from "@server/test/support"; +import { seed, getTestDatabase, getTestServer } from "@server/test/support"; import * as Slack from "@server/utils/slack"; -const server = getTestServer(); -beforeEach(() => flushdb()); - jest.mock("../../utils/slack", () => ({ post: jest.fn(), })); +const db = getTestDatabase(); +const server = getTestServer(); + +afterAll(server.disconnect); + +beforeEach(db.flush); + describe("#hooks.unfurl", () => { it("should return documents", async () => { const { user, document } = await seed(); diff --git a/server/routes/api/index.test.ts b/server/routes/api/index.test.ts index d666392dd..e19716916 100644 --- a/server/routes/api/index.test.ts +++ b/server/routes/api/index.test.ts @@ -1,8 +1,8 @@ -import { flushdb, getTestServer } from "@server/test/support"; +import { getTestServer } from "@server/test/support"; const server = getTestServer(); -beforeEach(() => flushdb()); +afterAll(server.disconnect); describe("POST unknown endpoint", () => { it("should be not found", async () => { diff --git a/server/routes/api/integrations.test.ts b/server/routes/api/integrations.test.ts index 14cb0ebf4..546b637dc 100644 --- a/server/routes/api/integrations.test.ts +++ b/server/routes/api/integrations.test.ts @@ -4,11 +4,15 @@ import { buildUser, buildIntegration, } from "@server/test/factories"; -import { flushdb, getTestServer } from "@server/test/support"; +import { getTestDatabase, getTestServer } from "@server/test/support"; + +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#integrations.update", () => { it("should allow updating integration events", async () => { diff --git a/server/routes/api/middlewares/pagination.test.ts b/server/routes/api/middlewares/pagination.test.ts index 294f4329f..08c5667dd 100644 --- a/server/routes/api/middlewares/pagination.test.ts +++ b/server/routes/api/middlewares/pagination.test.ts @@ -1,7 +1,11 @@ -import { flushdb, seed, getTestServer } from "@server/test/support"; +import { seed, getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#pagination", () => { it("should allow offset and limit", async () => { diff --git a/server/routes/api/revisions.test.ts b/server/routes/api/revisions.test.ts index 23f777d67..9d7857155 100644 --- a/server/routes/api/revisions.test.ts +++ b/server/routes/api/revisions.test.ts @@ -1,9 +1,13 @@ import { Revision } from "@server/models"; import { buildDocument, buildUser } from "@server/test/factories"; -import { flushdb, seed, getTestServer } from "@server/test/support"; +import { seed, getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#revisions.info", () => { it("should return a document revision", async () => { diff --git a/server/routes/api/shares.test.ts b/server/routes/api/shares.test.ts index eadbc0da5..0f5c6324c 100644 --- a/server/routes/api/shares.test.ts +++ b/server/routes/api/shares.test.ts @@ -6,10 +6,15 @@ import { buildAdmin, buildCollection, } from "@server/test/factories"; -import { flushdb, seed, getTestServer } from "@server/test/support"; +import { seed, getTestDatabase, getTestServer } from "@server/test/support"; + +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#shares.list", () => { it("should only return shares created by user", async () => { diff --git a/server/routes/api/stars.test.ts b/server/routes/api/stars.test.ts index b2c7a6d6a..bececcbd2 100644 --- a/server/routes/api/stars.test.ts +++ b/server/routes/api/stars.test.ts @@ -1,8 +1,12 @@ import { buildUser, buildStar, buildDocument } from "@server/test/factories"; -import { flushdb, getTestServer } from "@server/test/support"; +import { getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#stars.create", () => { it("should create a star", async () => { diff --git a/server/routes/api/team.test.ts b/server/routes/api/team.test.ts index e2b5b4acb..dfa9d7343 100644 --- a/server/routes/api/team.test.ts +++ b/server/routes/api/team.test.ts @@ -1,9 +1,13 @@ import { TeamDomain } from "@server/models"; import { buildAdmin, buildCollection, buildTeam } from "@server/test/factories"; -import { flushdb, seed, getTestServer } from "@server/test/support"; +import { seed, getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#team.update", () => { it("should update team details", async () => { diff --git a/server/routes/api/users.test.ts b/server/routes/api/users.test.ts index 6eda1a814..e6bb4d249 100644 --- a/server/routes/api/users.test.ts +++ b/server/routes/api/users.test.ts @@ -1,20 +1,19 @@ -import TestServer from "fetch-test-server"; -import webService from "@server/services/web"; import { buildTeam, buildAdmin, buildUser } from "@server/test/factories"; -import { flushdb, seed } from "@server/test/support"; +import { seed, getTestDatabase, getTestServer } from "@server/test/support"; -const app = webService(); -const server = new TestServer(app.callback()); -beforeEach(() => flushdb()); +const db = getTestDatabase(); +const server = getTestServer(); beforeAll(() => { jest.useFakeTimers().setSystemTime(new Date("2018-01-02T00:00:00.000Z")); }); afterAll(() => { jest.useRealTimers(); - return server.close(); + server.disconnect(); }); +beforeEach(db.flush); + describe("#users.list", () => { it("should allow filtering by user name", async () => { const user = await buildUser({ diff --git a/server/routes/api/views.test.ts b/server/routes/api/views.test.ts index 1ed64dc69..7c0e32a70 100644 --- a/server/routes/api/views.test.ts +++ b/server/routes/api/views.test.ts @@ -1,9 +1,13 @@ import { View, CollectionUser } from "@server/models"; import { buildUser } from "@server/test/factories"; -import { flushdb, seed, getTestServer } from "@server/test/support"; +import { seed, getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("#views.list", () => { it("should return views for a document", async () => { diff --git a/server/routes/auth/index.test.ts b/server/routes/auth/index.test.ts index 5cf771119..9cc208139 100644 --- a/server/routes/auth/index.test.ts +++ b/server/routes/auth/index.test.ts @@ -1,9 +1,12 @@ import { buildUser, buildCollection } from "@server/test/factories"; -import { flushdb, getTestServer } from "@server/test/support"; +import { getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); +afterAll(server.disconnect); + +beforeEach(db.flush); describe("auth/redirect", () => { it("should redirect to home", async () => { diff --git a/server/routes/auth/providers/email.test.ts b/server/routes/auth/providers/email.test.ts index abf3b821d..b4391c447 100644 --- a/server/routes/auth/providers/email.test.ts +++ b/server/routes/auth/providers/email.test.ts @@ -3,11 +3,14 @@ import SigninEmail from "@server/emails/templates/SigninEmail"; import WelcomeEmail from "@server/emails/templates/WelcomeEmail"; import env from "@server/env"; import { buildUser, buildGuestUser, buildTeam } from "@server/test/factories"; -import { flushdb, getTestServer } from "@server/test/support"; +import { getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); +afterAll(server.disconnect); + +beforeEach(db.flush); describe("email", () => { it("should require email param", async () => { diff --git a/server/routes/index.test.ts b/server/routes/index.test.ts index b952549ae..4883144bf 100644 --- a/server/routes/index.test.ts +++ b/server/routes/index.test.ts @@ -1,8 +1,12 @@ import { buildShare, buildDocument } from "@server/test/factories"; -import { flushdb, getTestServer } from "@server/test/support"; +import { getTestDatabase, getTestServer } from "@server/test/support"; +const db = getTestDatabase(); const server = getTestServer(); -beforeEach(() => flushdb()); + +afterAll(server.disconnect); + +beforeEach(db.flush); describe("/share/:id", () => { it("should return standard title in html when loading unpublished share", async () => { diff --git a/server/scripts/20210716000000-backfill-revisions.test.ts b/server/scripts/20210716000000-backfill-revisions.test.ts index b6d1f3d8c..1bde5b58a 100644 --- a/server/scripts/20210716000000-backfill-revisions.test.ts +++ b/server/scripts/20210716000000-backfill-revisions.test.ts @@ -1,9 +1,13 @@ import { Revision, Event } from "@server/models"; import { buildDocument } from "@server/test/factories"; -import { flushdb } from "@server/test/support"; +import { getTestDatabase } from "@server/test/support"; import script from "./20210716000000-backfill-revisions"; -beforeEach(() => flushdb()); +const db = getTestDatabase(); + +afterAll(db.disconnect); + +beforeEach(db.flush); describe("#work", () => { it("should create events for revisions", async () => { diff --git a/server/test/support.ts b/server/test/support.ts index 4d31e05cf..3b10629bb 100644 --- a/server/test/support.ts +++ b/server/test/support.ts @@ -1,24 +1,11 @@ import TestServer from "fetch-test-server"; import { v4 as uuidv4 } from "uuid"; -import { sequelize } from "@server/database/sequelize"; +import { sequelize as db } 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) => { - const n = sequelize.models[model].getTableName(); - return (sql.queryGenerator as any).quoteTable( - typeof n === "string" ? n : n.tableName - ); -}); -const flushQuery = `TRUNCATE ${tables.join(", ")} CASCADE`; - -export function flushdb() { - return sequelize.query(flushQuery); -} - export const seed = async () => { - return sequelize.transaction(async (transaction) => { + return db.transaction(async (transaction) => { const team = await Team.create( { name: "Team", @@ -112,14 +99,35 @@ 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; + const server = new TestServer(app.callback()); + + server.disconnect = async () => { + await db.close(); + server.close(); + }; + + return server; +} + +export function getTestDatabase() { + const flush = async () => { + const sql = db.getQueryInterface(); + const tables = Object.keys(db.models).map((model) => { + const n = db.models[model].getTableName(); + return (sql.queryGenerator as any).quoteTable( + typeof n === "string" ? n : n.tableName + ); + }); + const flushQuery = `TRUNCATE ${tables.join(", ")} CASCADE`; + + await db.query(flushQuery); + }; + + const disconnect = async () => { + await db.close(); + }; + + return { flush, disconnect }; } diff --git a/shared/test/setup.ts b/shared/test/setup.ts new file mode 100644 index 000000000..df8684631 --- /dev/null +++ b/shared/test/setup.ts @@ -0,0 +1,3 @@ +jest.mock("i18next-http-backend"); + +export {};