Skip to content

Commit

Permalink
Step 16: Test UserDao
Browse files Browse the repository at this point in the history
  • Loading branch information
madooei committed Dec 17, 2022
1 parent 79955c5 commit 7d1aae9
Showing 1 changed file with 100 additions and 3 deletions.
103 changes: 100 additions & 3 deletions tests/data/UserDao.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import User from "../../src/model/User.js";
import * as db from "../../src/data/db.js";
import * as dotenv from "dotenv";
import mongoose from "mongoose";
import { verifyPassword } from "../../src/password";
import { verifyPassword } from "../../src/password.js";
import { UserRole } from "../../src/model/UserRole.js";

dotenv.config();

Expand All @@ -27,12 +28,26 @@ describe("Test UserDao", () => {
const name = faker.name.fullName();
const email = faker.internet.email();
const password = faker.internet.password(6);
const user = await User.create({ name, email, password });
const role = Math.random() > 0.5 ? UserRole.Student : UserRole.Instructor;
const user = await User.create({ name, email, password, role });
users.push(user);
}
});

it("test create()", async () => {
const name = faker.name.fullName();
const email = faker.internet.email();
const password = faker.internet.password(6);
const role = Math.random() > 0.5 ? UserRole.Student : UserRole.Instructor;
const _user = await userDao.create({ name, email, password, role });
expect(_user.name).toBe(name);
expect(_user.email).toBe(email);
expect(verifyPassword(password, _user.password)).toBe(true);
expect(_user.id).toBeDefined();
expect(_user.role).toBe(role);
});

it("test create() without given role", async () => {
const name = faker.name.fullName();
const email = faker.internet.email();
const password = faker.internet.password(6);
Expand All @@ -41,6 +56,7 @@ describe("Test UserDao", () => {
expect(_user.email).toBe(email);
expect(verifyPassword(password, _user.password)).toBe(true);
expect(_user.id).toBeDefined();
expect(_user.role).toBe(UserRole.Student);
});

describe("test create() throws error", () => {
Expand Down Expand Up @@ -179,6 +195,54 @@ describe("Test UserDao", () => {
expect(err.status).toBe(400);
}
});

it("test role is null", async () => {
try {
const name = faker.name.fullName();
const email = faker.internet.email();
const password = faker.internet.password(6);
const role = null;
await userDao.create({ name, email, password, role });
} catch (err) {
expect(err.status).toBe(400);
}
});

it("test role is undefined", async () => {
try {
const name = faker.name.fullName();
const email = faker.internet.email();
const password = faker.internet.password(6);
const role = undefined;
await userDao.create({ name, email, password, role });
} catch (err) {
expect(err.status).toBe(400);
}
});

it("test role is empty", async () => {
try {
const name = faker.name.fullName();
const email = faker.internet.email();
const password = faker.internet.password(6);
const role = "";
await userDao.create({ name, email, password, role });
} catch (err) {
expect(err.status).toBe(400);
}
});

it("test role is invalid", async () => {
try {
const name = faker.name.fullName();
const email = faker.internet.email();
const password = faker.internet.password(6);
const role = faker.random.word();
await userDao.create({ name, email, password, role });
} catch (err) {
expect(err.status).toBe(400);
}
});
});

it("test readAll()", async () => {
Expand All @@ -193,13 +257,27 @@ describe("Test UserDao", () => {
expect(_users.length).toBeGreaterThanOrEqual(1);
});

it("test readAll() given a email", async () => {
it("test readAll() given an email", async () => {
const index = Math.floor(Math.random() * numUsers);
const user = users[index];
const _users = await userDao.readAll({ email: user.email });
expect(_users.length).toBeGreaterThanOrEqual(1);
});

it("test readAll() given a role", async () => {
for (let role of Object.values(UserRole)) {
const count = users.reduce((total, user) => {
if (user.role === role) {
total += 1;
}
return total;
}, 0);

const _users = await userDao.readAll({ role });
expect(_users.length).toBeGreaterThanOrEqual(count);
}
});

it("test read() given valid ID", async () => {
const index = Math.floor(Math.random() * numUsers);
const user = users[index];
Expand All @@ -208,6 +286,7 @@ describe("Test UserDao", () => {
expect(_user.email).toBe(user.email);
expect(_user.password).toBe(user.password);
expect(_user.id).toBe(user.id);
expect(_user.role).toBe(user.role);
});

it("test read() given invalid ID", async () => {
Expand All @@ -232,17 +311,20 @@ describe("Test UserDao", () => {
const name = faker.name.fullName();
const email = faker.internet.email();
const password = faker.internet.password(6);
const role = Math.random() > 0.5 ? UserRole.Student : UserRole.Instructor;
const _user = await userDao.update({
id: user.id,
name,
email,
password,
role,
});

expect(_user.name).toBe(name);
expect(_user.email).toBe(email);
expect(verifyPassword(password, _user.password)).toBe(true);
expect(_user.id).toBe(user.id);
expect(_user.role).toBe(role);
});

it("test update() given invalid ID", async () => {
Expand Down Expand Up @@ -318,6 +400,20 @@ describe("Test UserDao", () => {
}
});

it("test update() given invalid role", async () => {
try {
const index = Math.floor(Math.random() * numUsers);
const user = users[index];
const role = faker.random.word();
await userDao.update({
id: user.id,
role,
});
} catch (err) {
expect(err.status).toBe(400);
}
});

it("test delete() given valid ID", async () => {
const index = Math.floor(Math.random() * numUsers);
const user = users[index];
Expand All @@ -326,6 +422,7 @@ describe("Test UserDao", () => {
expect(_user.email).toBe(user.email);
expect(_user.password).toBe(user.password);
expect(_user.id).toBe(user.id);
expect(_user.role).toBe(user.role);
});

it("test delete() given invalid ID", async () => {
Expand Down

0 comments on commit 7d1aae9

Please sign in to comment.