@stanlemon/server-with-auth 0.2.0 → 0.2.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.
- package/app.js +4 -3
- package/package.json +1 -1
- package/src/data/lowdb-user-dao.js +26 -13
- package/src/data/lowdb-user-dao.test.js +7 -5
- package/src/index.js +6 -1
- package/src/routes/auth.test.js +2 -3
package/app.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
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";
|
|
3
3
|
|
|
4
|
-
const
|
|
4
|
+
const db = createDb();
|
|
5
|
+
const dao = new LowDBUserDao(db);
|
|
5
6
|
|
|
6
7
|
const app = createAppServer({
|
|
7
8
|
port: 3003,
|
|
@@ -24,5 +25,5 @@ app.get(
|
|
|
24
25
|
// Secure endpoint
|
|
25
26
|
app.get(
|
|
26
27
|
"/api/users",
|
|
27
|
-
handler(() => ({ users:
|
|
28
|
+
handler(() => ({ users: db.data.users }))
|
|
28
29
|
);
|
package/package.json
CHANGED
|
@@ -4,27 +4,40 @@ import { v4 as uuidv4 } from "uuid";
|
|
|
4
4
|
import bcrypt from "bcryptjs";
|
|
5
5
|
import UserDao from "./user-dao.js";
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
+
}
|
|
11
25
|
|
|
12
26
|
export default class LowDBUserDao extends UserDao {
|
|
13
27
|
#db;
|
|
14
28
|
|
|
15
|
-
constructor(
|
|
29
|
+
constructor(db = createDb()) {
|
|
16
30
|
super();
|
|
17
31
|
|
|
18
|
-
|
|
19
|
-
|
|
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.");
|
|
23
34
|
}
|
|
24
|
-
}
|
|
25
35
|
|
|
26
|
-
|
|
27
|
-
|
|
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 || [];
|
|
28
41
|
}
|
|
29
42
|
|
|
30
43
|
/** @inheritdoc */
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @jest-environment node
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import LowDBUserDao from "./lowdb-user-dao.js";
|
|
4
|
+
import LowDBUserDao, { createInMemoryDb } from "./lowdb-user-dao.js";
|
|
6
5
|
|
|
7
6
|
describe("lowdb-user-dao", () => {
|
|
8
7
|
// This is a user that we will reuse in our tests
|
|
@@ -11,12 +10,15 @@ describe("lowdb-user-dao", () => {
|
|
|
11
10
|
password: "password",
|
|
12
11
|
};
|
|
13
12
|
|
|
13
|
+
/** @type {LowSync} */
|
|
14
|
+
let db;
|
|
14
15
|
/** @type {LowDBUserDao} */
|
|
15
16
|
let dao;
|
|
16
17
|
|
|
17
18
|
beforeEach(() => {
|
|
18
19
|
// Before each test reset our users database
|
|
19
|
-
|
|
20
|
+
db = createInMemoryDb();
|
|
21
|
+
dao = new LowDBUserDao(db);
|
|
20
22
|
});
|
|
21
23
|
|
|
22
24
|
it("creates a user", async () => {
|
|
@@ -97,13 +99,13 @@ describe("lowdb-user-dao", () => {
|
|
|
97
99
|
it("deletes a user by id", async () => {
|
|
98
100
|
const user = await dao.createUser(data);
|
|
99
101
|
|
|
100
|
-
expect(
|
|
102
|
+
expect(db.data.users).toHaveLength(1);
|
|
101
103
|
|
|
102
104
|
const deleted = dao.deleteUser(user.id);
|
|
103
105
|
|
|
104
106
|
expect(deleted).toBe(true);
|
|
105
107
|
expect(dao.getUserById(user.id)).toBeUndefined();
|
|
106
108
|
|
|
107
|
-
expect(
|
|
109
|
+
expect(db.data.users).toHaveLength(0);
|
|
108
110
|
});
|
|
109
111
|
});
|
package/src/index.js
CHANGED
|
@@ -13,4 +13,9 @@ export { default as checkAuth } from "./checkAuth.js";
|
|
|
13
13
|
export { default as createAppServer } from "./createAppServer.js";
|
|
14
14
|
export { default as schema } from "./schema/user.js";
|
|
15
15
|
export { default as SimpleUsersDao } from "./data/simple-users-dao.js";
|
|
16
|
-
export {
|
|
16
|
+
export {
|
|
17
|
+
default as LowDBUserDao,
|
|
18
|
+
createDb,
|
|
19
|
+
createInMemoryDb,
|
|
20
|
+
createJsonFileDb,
|
|
21
|
+
} from "./data/lowdb-user-dao.js";
|
package/src/routes/auth.test.js
CHANGED
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
* @jest-environment node
|
|
3
3
|
*/
|
|
4
4
|
import request from "supertest";
|
|
5
|
-
import { MemorySync } from "lowdb";
|
|
6
5
|
import createAppServer from "../createAppServer";
|
|
7
|
-
import LowDBUserDao from "../data/lowdb-user-dao.js";
|
|
6
|
+
import LowDBUserDao, { createInMemoryDb } from "../data/lowdb-user-dao.js";
|
|
8
7
|
|
|
9
8
|
// This suppresses a warning we don't need in tests
|
|
10
9
|
process.env.JWT_SECRET = "SECRET";
|
|
11
10
|
|
|
12
|
-
let dao = new LowDBUserDao(
|
|
11
|
+
let dao = new LowDBUserDao(createInMemoryDb());
|
|
13
12
|
|
|
14
13
|
// We want to explicitly test functionality we disable during testing
|
|
15
14
|
process.env.NODE_ENV = "override";
|