Skip to content

Commit 5db7ba4

Browse files
committed
Remove seeding, change to passing the raw db rather than the adapter type
1 parent 50aa106 commit 5db7ba4

File tree

10 files changed

+55
-35
lines changed

10 files changed

+55
-35
lines changed

apps/template/app.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
import {
22
createAppServer,
33
asyncJsonHandler as handler,
4+
createDb,
45
LowDBUserDao,
56
} from "@stanlemon/server-with-auth";
67
import { v4 as uuid } from "uuid";
78

8-
const dao = new LowDBUserDao();
9-
export const db = dao.getDB();
9+
export const db = createDb();
10+
const dao = new LowDBUserDao(db);
11+
1012
db.data.items = db.data.items || [];
1113

12-
const app = createAppServer({
14+
export const app = createAppServer({
1315
webpack: "http://localhost:8080",
1416
secure: ["/api/"],
1517
dao,
@@ -37,5 +39,3 @@ app.delete(
3739
return db.data.items;
3840
})
3941
);
40-
41-
export default app;

apps/template/app.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* @jest-environment node
33
*/
44
import request from "supertest";
5-
import app, { db } from "./app.js";
5+
import { app, db } from "./app.js";
66

77
describe("/app", () => {
88
afterEach(() => {

apps/template/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@stanlemon/app-template",
3-
"version": "0.3.0",
3+
"version": "0.3.1",
44
"description": "A template for creating apps using the webdev package.",
55
"author": "Stan Lemon <[email protected]>",
66
"license": "MIT",

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/server-with-auth/app.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { createAppServer, asyncJsonHandler as handler } from "./src/index.js";
2-
import LowDBUserDao from "./src/data/lowdb-user-dao.js";
2+
import LowDBUserDao, { createDb } from "./src/data/lowdb-user-dao.js";
33

4-
const dao = new LowDBUserDao();
4+
const db = createDb();
5+
const dao = new LowDBUserDao(db);
56

67
const app = createAppServer({
78
port: 3003,
@@ -24,5 +25,5 @@ app.get(
2425
// Secure endpoint
2526
app.get(
2627
"/api/users",
27-
handler(() => ({ users: dao.getDB().data.users }))
28+
handler(() => ({ users: db.data.users }))
2829
);

packages/server-with-auth/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@stanlemon/server-with-auth",
3-
"version": "0.2.0",
3+
"version": "0.2.1",
44
"description": "A basic express web server setup with authentication baked in.",
55
"author": "Stan Lemon <[email protected]>",
66
"license": "MIT",

packages/server-with-auth/src/data/lowdb-user-dao.js

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,40 @@ import { v4 as uuidv4 } from "uuid";
44
import bcrypt from "bcryptjs";
55
import UserDao from "./user-dao.js";
66

7-
const DEFAULT_ADAPTER =
8-
process.env.NODE_ENV === "test"
9-
? new MemorySync()
10-
: new JSONFileSync("./db.json");
7+
export function createInMemoryDb() {
8+
return new LowSync(new MemorySync(), {});
9+
}
10+
11+
export function createJsonFileDb(filename = "./db.json") {
12+
return new LowSync(new JSONFileSync(filename), {});
13+
}
14+
15+
/**
16+
* Create a database based on the environment.
17+
* Test environment (NODE_ENV=test) will use {MemorySync}.
18+
* @returns {LowSync} Database
19+
*/
20+
export function createDb() {
21+
return process.env.NODE_ENV === "test"
22+
? createInMemoryDb()
23+
: createJsonFileDb();
24+
}
1125

1226
export default class LowDBUserDao extends UserDao {
1327
#db;
1428

15-
constructor(seeds = [], adapter = DEFAULT_ADAPTER) {
29+
constructor(db = createDb()) {
1630
super();
1731

18-
this.#db = new LowSync(adapter, { users: [] });
19-
this.#db.read();
20-
21-
if (seeds.length > 0) {
22-
seeds.forEach((user) => this.createUser(user));
32+
if (!(db instanceof LowSync)) {
33+
throw new Error("The db object must be of type LowSync.");
2334
}
24-
}
2535

26-
getDB() {
27-
return this.#db;
36+
this.#db = db;
37+
this.#db.read();
38+
39+
// Default data, ensure that users is an array if it is not already
40+
this.#db.data.users = db.data.users || [];
2841
}
2942

3043
/** @inheritdoc */

packages/server-with-auth/src/data/lowdb-user-dao.test.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
/**
22
* @jest-environment node
33
*/
4-
import { MemorySync } from "lowdb";
5-
import LowDBUserDao from "./lowdb-user-dao.js";
4+
import LowDBUserDao, { createInMemoryDb } from "./lowdb-user-dao.js";
65

76
describe("lowdb-user-dao", () => {
87
// This is a user that we will reuse in our tests
@@ -11,12 +10,15 @@ describe("lowdb-user-dao", () => {
1110
password: "password",
1211
};
1312

13+
/** @type {LowSync} */
14+
let db;
1415
/** @type {LowDBUserDao} */
1516
let dao;
1617

1718
beforeEach(() => {
1819
// Before each test reset our users database
19-
dao = new LowDBUserDao([], new MemorySync());
20+
db = createInMemoryDb();
21+
dao = new LowDBUserDao(db);
2022
});
2123

2224
it("creates a user", async () => {
@@ -97,13 +99,13 @@ describe("lowdb-user-dao", () => {
9799
it("deletes a user by id", async () => {
98100
const user = await dao.createUser(data);
99101

100-
expect(dao.getDB().data.users).toHaveLength(1);
102+
expect(db.data.users).toHaveLength(1);
101103

102104
const deleted = dao.deleteUser(user.id);
103105

104106
expect(deleted).toBe(true);
105107
expect(dao.getUserById(user.id)).toBeUndefined();
106108

107-
expect(dao.getDB().data.users).toHaveLength(0);
109+
expect(db.data.users).toHaveLength(0);
108110
});
109111
});

packages/server-with-auth/src/index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,9 @@ export { default as checkAuth } from "./checkAuth.js";
1313
export { default as createAppServer } from "./createAppServer.js";
1414
export { default as schema } from "./schema/user.js";
1515
export { default as SimpleUsersDao } from "./data/simple-users-dao.js";
16-
export { default as LowDBUserDao } from "./data/lowdb-user-dao.js";
16+
export {
17+
default as LowDBUserDao,
18+
createDb,
19+
createInMemoryDb,
20+
createJsonFileDb,
21+
} from "./data/lowdb-user-dao.js";

packages/server-with-auth/src/routes/auth.test.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@
22
* @jest-environment node
33
*/
44
import request from "supertest";
5-
import { MemorySync } from "lowdb";
65
import createAppServer from "../createAppServer";
7-
import LowDBUserDao from "../data/lowdb-user-dao.js";
6+
import LowDBUserDao, { createInMemoryDb } from "../data/lowdb-user-dao.js";
87

98
// This suppresses a warning we don't need in tests
109
process.env.JWT_SECRET = "SECRET";
1110

12-
let dao = new LowDBUserDao([], new MemorySync());
11+
let dao = new LowDBUserDao(createInMemoryDb());
1312

1413
// We want to explicitly test functionality we disable during testing
1514
process.env.NODE_ENV = "override";

0 commit comments

Comments
 (0)