- Created migration for accounts table with fields: id, username, password, role_id, created_at, updated_at. - Created migration for movies table with fields: id, title, overview, poster_path, backdrop_path, release_date, tmdb_id. refactor: update package.json scripts and dependencies - Changed dev script to use bun instead of tsx. - Added build:migrate script for migration. - Updated devDependencies for bun and oxlint. fix: refactor database connection and migration execution - Updated PgDatabase to use SQL from bun. - Refactored migration execution logic to read SQL files and execute them. feat: implement account creation and validation logic - Updated AccountEntity to use username instead of email. - Added validation for username format and password strength. - Implemented account repository methods for finding by username and inserting accounts. test: add tests for account entity, repository, and service - Created tests for AccountEntity to validate username and password. - Added tests for AccountRepository to ensure correct database interactions. - Implemented tests for AccountService to validate registration and login logic. chore: remove outdated tests and files - Deleted old tests related to email-based account management. - Cleaned up unused imports and files to streamline the codebase.
75 lines
2.2 KiB
TypeScript
75 lines
2.2 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach } from "bun:test";
|
|
import AccountRepository from "../../src/domain/account/repository/AccoutRepository";
|
|
import { AccountEntity } from "../../src/domain/account/entity/AccountEntity";
|
|
import { initTestDatabase } from "../utils";
|
|
import type { DatabaseInterface } from "../../src/database/DatabaseInterface";
|
|
|
|
describe("AccountRepository", () => {
|
|
let accountRepository: AccountRepository;
|
|
let database: DatabaseInterface;
|
|
|
|
beforeEach(async () => {
|
|
database = await initTestDatabase();
|
|
accountRepository = new AccountRepository(database);
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await database?.close();
|
|
});
|
|
|
|
describe("findByUsername", () => {
|
|
it("should return account when found", async () => {
|
|
const username = "testaccount";
|
|
|
|
const createAccount = await AccountEntity.create(username, "password123");
|
|
await accountRepository.insert(createAccount);
|
|
|
|
const result = await accountRepository.findByUsername(username);
|
|
|
|
expect(result).toBeInstanceOf(AccountEntity);
|
|
expect(result?.username).toBe(username);
|
|
});
|
|
|
|
it("should return null when account not found", async () => {
|
|
const username = "nonexistentaccount";
|
|
const result = await accountRepository.findByUsername(username);
|
|
|
|
expect(result).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe("findById", () => {
|
|
it("should return account when found", async () => {
|
|
const createAccount = await AccountEntity.create(
|
|
"test@example.com",
|
|
"password123",
|
|
);
|
|
|
|
const newId = await accountRepository.insert(createAccount);
|
|
const result = await accountRepository.findById(newId);
|
|
|
|
expect(result).toBeInstanceOf(AccountEntity);
|
|
expect(result?.id).toBe(newId);
|
|
});
|
|
|
|
it("should return null when account not found", async () => {
|
|
const id = 999;
|
|
const result = await accountRepository.findById(id);
|
|
|
|
expect(result).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe("insert", () => {
|
|
it("should insert account successfully", async () => {
|
|
const account = await AccountEntity.create(
|
|
"test@example.com",
|
|
"password123",
|
|
);
|
|
const result = await accountRepository.insert(account);
|
|
|
|
expect(result).toBeGreaterThan(0);
|
|
});
|
|
});
|
|
});
|