Files
inkreach-official-website/apps/api/src/positions/positions.service.spec.ts
T
yeuimu 7e04877bb6 chore: migrate to pnpm workspaces monorepo with Turborepo
- Restructure directories: apps/api, apps/admin, apps/website
- Add root pnpm-workspace.yaml, turbo.json, .prettierrc, .gitignore
- Rename packages to @inkreach/api, @inkreach/admin, @inkreach/website
- Add shared packages: packages/tsconfig, packages/shared-types
- Add pnpm.onlyBuiltDependencies for native builds
- Update docs: README.md, structs.md
- All three projects build successfully
2026-07-11 16:54:05 +08:00

98 lines
3.0 KiB
TypeScript

import { Test } from '@nestjs/testing';
import { NotFoundException } from '@nestjs/common';
import { PositionsService } from './positions.service';
import { PrismaService } from '../prisma/prisma.service';
describe('PositionsService', () => {
let service: PositionsService;
let prisma: PrismaService;
let countryId: bigint;
let categoryId: bigint;
const createdIds: bigint[] = [];
beforeAll(async () => {
const moduleRef = await Test.createTestingModule({
providers: [PositionsService, PrismaService],
}).compile();
service = moduleRef.get(PositionsService);
prisma = moduleRef.get(PrismaService);
await prisma.onModuleInit();
const stamp = Date.now();
const c = await prisma.country.create({
data: { countryName: `Pos Country ${stamp}` },
});
countryId = c.id;
const cat = await prisma.category.create({
data: { categoryName: `Pos Cat ${stamp}` },
});
categoryId = cat.id;
});
afterAll(async () => {
if (createdIds.length) {
await prisma.position.deleteMany({ where: { id: { in: createdIds } } });
}
await prisma.country.delete({ where: { id: countryId } });
await prisma.category.delete({ where: { id: categoryId } });
await prisma.onModuleDestroy();
});
it('should be defined', () => {
expect(service).toBeDefined();
});
it('creates a position linked to country + category and returns joined names', async () => {
const created = await service.create({
indexVal: 1,
countryId: Number(countryId),
categoryId: Number(categoryId),
});
createdIds.push(created.id);
expect(created.country?.countryName).toBeTruthy();
expect(created.category?.categoryName).toBeTruthy();
const fetched = await service.findOne(created.id);
expect(fetched.country?.id).toBe(countryId);
expect(fetched.category?.id).toBe(categoryId);
});
it('filters by countryId and categoryId', async () => {
const list = await service.findAll({
countryId,
categoryId,
});
expect(list.length).toBeGreaterThan(0);
expect(list.every((p) => p.countryId === countryId)).toBe(true);
expect(list.every((p) => p.categoryId === categoryId)).toBe(true);
});
it('updates indexVal and disconnects country', async () => {
const created = await service.create({
indexVal: 5,
countryId: Number(countryId),
});
createdIds.push(created.id);
const updated = await service.update(created.id, {
indexVal: 9,
countryId: null,
});
expect(updated.indexVal).toBe(9);
expect(updated.countryId).toBeNull();
});
it('throws NotFoundException for unknown country during create', async () => {
await expect(
service.create({ indexVal: 1, countryId: 99999999 }),
).rejects.toBeInstanceOf(NotFoundException);
});
it('deletes a position', async () => {
const created = await service.create({ indexVal: 7 });
await service.remove(created.id);
const list = await service.findAll();
expect(list.find((p) => p.id === created.id)).toBeUndefined();
});
});