minesweeper/backend/repositories/userRepository.test.ts

124 lines
3.5 KiB
TypeScript

import { describe, it, expect } from "bun:test";
import { getTestDb } from "../database/getTestDb";
import {
getUser,
getUserCount,
getUserSettings,
loginUser,
registerUser,
upsertUserSettings,
} from "./userRepository";
describe("UserRepository", () => {
it("should register a user", async () => {
const db = getTestDb();
await registerUser(db, "TestUser", "test");
const user = await getUser(db, "TestUser");
expect(user).toEqual({
name: "TestUser",
password: undefined,
});
});
it("should throw an error if user already exists register", async () => {
const db = getTestDb();
await registerUser(db, "TestUser", "test");
expect(registerUser(db, "TestUser", "test")).rejects.toThrow(
"User already exists",
);
});
it("should throw an error if user already exists register case insensitive", async () => {
const db = getTestDb();
await registerUser(db, "TestUser", "test");
expect(registerUser(db, "TESTUSER", "test")).rejects.toThrow(
"User already exists",
);
});
it("should throw an error if user does not exist on login", async () => {
const db = getTestDb();
expect(loginUser(db, "TestUser", "test")).rejects.toThrow(
"User does not exist",
);
});
it("should login a user", async () => {
const db = getTestDb();
await registerUser(db, "TestUser", "test");
const user = await loginUser(db, "TestUser", "test");
expect(user).toEqual({
name: "TestUser",
password: undefined,
});
});
it("should throw error if password is incorrect", async () => {
const db = getTestDb();
await registerUser(db, "TestUser", "test");
expect(loginUser(db, "TestUser", "wrongpassword")).rejects.toThrow(
"Incorrect password",
);
});
it("should handle getUser for nonexistent user", async () => {
const db = getTestDb();
const user = await getUser(db, "NonexistentUser");
expect(user?.name).toBeUndefined();
});
it("should get user count", async () => {
const db = getTestDb();
await registerUser(db, "TestUser1", "test");
await registerUser(db, "TestUser2", "test");
const count = await getUserCount(db);
expect(count).toBe(2);
});
it("should get default user settings", async () => {
const db = getTestDb();
const settings = await getUserSettings(db, "TestUser");
expect(settings).toEqual({
placeQuestionMark: false,
longPressOnDesktop: false,
showRevealAnimation: true,
soundEnabled: true,
});
});
it("should upsert user settings - insert", async () => {
const db = getTestDb();
const newSettings = {
placeQuestionMark: true,
longPressOnDesktop: true,
showRevealAnimation: false,
soundEnabled: false,
};
await upsertUserSettings(db, "TestUser", newSettings);
const settings = await getUserSettings(db, "TestUser");
expect(settings).toEqual(newSettings);
});
it("should upsert user settings - update", async () => {
const db = getTestDb();
const initialSettings = {
placeQuestionMark: false,
longPressOnDesktop: false,
showRevealAnimation: true,
soundEnabled: true,
};
await upsertUserSettings(db, "TestUser", initialSettings);
const updatedSettings = {
placeQuestionMark: true,
longPressOnDesktop: true,
showRevealAnimation: false,
soundEnabled: false,
};
await upsertUserSettings(db, "TestUser", updatedSettings);
const settings = await getUserSettings(db, "TestUser");
expect(settings).toEqual(updatedSettings);
});
});