Skip to content

Commit e976122

Browse files
committed
♻️ refactor(mock-db-setup): refactor @shelf/mongodb setup
1 parent 6e7009f commit e976122

File tree

5 files changed

+23
-22
lines changed

5 files changed

+23
-22
lines changed

jest.config.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,13 @@ module.exports = {
166166
"<rootDir>/packages/backend/src/__tests__/$1",
167167
},
168168

169-
setupFiles: [
170-
"<rootDir>/packages/core/src/__tests__/core.test.init.ts",
171-
"<rootDir>/packages/backend/src/__tests__/backend.test.init.ts",
172-
],
169+
setupFiles: ["<rootDir>/packages/core/src/__tests__/core.test.init.ts"],
173170
setupFilesAfterEnv: [
171+
// backend init intentionally here to accommodate @shelf/mongodb preset
172+
"<rootDir>/packages/backend/src/__tests__/backend.test.init.ts",
174173
"<rootDir>/packages/core/src/__tests__/core.test.start.ts",
175174
"<rootDir>/packages/backend/src/__tests__/backend.test.start.ts",
176175
],
177-
testEnvironment: "node",
178176
testMatch: ["<rootDir>/packages/backend/**/?(*.)+(spec|test).[tj]s?(x)"],
179177
// A preset that is used as a base for Jest's configuration
180178
preset: "@shelf/jest-mongodb", // https://jestjs.io/docs/mongodb,

packages/backend/globalConfig.json

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/backend/src/__tests__/backend.test.init.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
process.env["BASEURL"] = "https://foo.yourdomain.app";
1+
const mongoUri = (global as unknown as { __MONGO_URI__: string }).__MONGO_URI__;
2+
3+
process.env["BASEURL"] = "http;s://foo.yourdomain.app";
24
process.env["CORS"] =
35
"https://foo.yourdomain.app,http://localhost:3000,http://localhost:9080";
46
process.env["PORT"] = "3000";
5-
process.env["MONGO_URI"] = process.env["MONGO_URL"];
7+
process.env["MONGO_URI"] = mongoUri ?? process.env["MONGO_URL"];
68
process.env["DB"] = "test-db";
79
process.env["CLIENT_ID"] = "googleClientId";
810
process.env["CLIENT_SECRET"] = "googleSecret";

packages/backend/src/common/services/mongo.service.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const logger = Logger("app:mongo.service");
2121
interface InternalClient {
2222
db: Db;
2323
client: MongoClient;
24-
event: Collection<Schema_Event>;
24+
event: Collection<Omit<Schema_Event, "_id">>;
2525
sync: Collection<Schema_Sync>;
2626
user: Collection<Schema_User>;
2727
waitlist: Collection<Schema_Waitlist>;
@@ -39,7 +39,7 @@ class MongoService {
3939
*
4040
* mongo collection
4141
*/
42-
get event(): Collection<Schema_Event> {
42+
get event(): InternalClient["event"] {
4343
return this.#accessInternalCollectionProps("event");
4444
}
4545

@@ -48,7 +48,7 @@ class MongoService {
4848
*
4949
* mongo collection
5050
*/
51-
get sync(): Collection<Schema_Sync> {
51+
get sync(): InternalClient["sync"] {
5252
return this.#accessInternalCollectionProps("sync");
5353
}
5454

@@ -57,7 +57,7 @@ class MongoService {
5757
*
5858
* mongo collection
5959
*/
60-
get user(): Collection<Schema_User> {
60+
get user(): InternalClient["user"] {
6161
return this.#accessInternalCollectionProps("user");
6262
}
6363

@@ -66,12 +66,12 @@ class MongoService {
6666
*
6767
* mongo collection
6868
*/
69-
get waitlist(): Collection<Schema_Waitlist> {
69+
get waitlist(): InternalClient["waitlist"] {
7070
return this.#accessInternalCollectionProps("waitlist");
7171
}
7272

73-
private onConnect(client: MongoClient) {
74-
this.#internalClient = this.createInternalClient(client);
73+
private onConnect(client: MongoClient, useDynamicDb = false) {
74+
this.#internalClient = this.createInternalClient(client, useDynamicDb);
7575

7676
Object.seal(this);
7777
}
@@ -81,7 +81,6 @@ class MongoService {
8181
}
8282

8383
private onError(error: Error): void {
84-
console.log("hey there!");
8584
logger.error(error.message, error);
8685
}
8786

@@ -93,13 +92,16 @@ class MongoService {
9392
logger.debug(`Connection to database: '${event.address}' closed`);
9493
}
9594

96-
private createInternalClient(client: MongoClient): InternalClient {
97-
const db = client.db(ENV.DB);
95+
private createInternalClient(
96+
client: MongoClient,
97+
useDynamicDb = false,
98+
): InternalClient {
99+
const db = client.db(useDynamicDb ? undefined : ENV.DB);
98100

99101
return {
100102
db,
101103
client,
102-
event: db.collection<Schema_Event>(Collections.EVENT),
104+
event: db.collection<Omit<Schema_Event, "_id">>(Collections.EVENT),
103105
sync: db.collection<Schema_Sync>(Collections.SYNC),
104106
user: db.collection<Schema_User>(Collections.USER),
105107
waitlist: db.collection<Schema_Waitlist>(Collections.WAITLIST),
@@ -134,14 +136,14 @@ class MongoService {
134136
return retry;
135137
}
136138

137-
async start(uri: string = ENV.MONGO_URI): Promise<MongoService> {
139+
async start(useDynamicDb = false): Promise<MongoService> {
138140
if (this.#internalClient) return this;
139141

140-
const client = new MongoClient(uri, {
142+
const client = new MongoClient(ENV.MONGO_URI, {
141143
serverApi: { strict: true, version: "1" },
142144
});
143145

144-
client.on("open", this.onConnect.bind(this));
146+
client.on("open", (client) => this.onConnect(client, useDynamicDb));
145147
client.on("close", this.onDisconnect.bind(this));
146148
client.on("error", this.onError.bind(this));
147149
client.on("connectionClosed", this.onClose.bind(this));

0 commit comments

Comments
 (0)