work-hub-server/apps/api/test/app.e2e-spec.ts

84 lines
2.8 KiB
TypeScript

import { Test, TestingModule } from "@nestjs/testing";
import { INestApplication } from "@nestjs/common";
import request from "supertest";
import { App } from "supertest/types";
import { AppModule } from "./../src/app.module";
import { ProjectRepository } from "./../src/project/project.repository";
describe("AppController (e2e)", () => {
let app: INestApplication<App>;
const TEST_UUID = "550e8400-e29b-41d4-a716-446655440000";
const mockRepository = {
create: jest.fn(),
findAll: jest.fn(),
findOne: jest.fn(),
update: jest.fn(),
remove: jest.fn(),
};
beforeEach(async () => {
mockRepository.findAll.mockResolvedValue([{ id: TEST_UUID, name: "Test" }]);
mockRepository.findOne.mockResolvedValue({ id: TEST_UUID, name: "Test" });
mockRepository.create.mockResolvedValue({ id: TEST_UUID, name: "E2E Project" });
mockRepository.update.mockResolvedValue({ id: TEST_UUID, name: "Updated E2E" });
mockRepository.remove.mockResolvedValue({ id: TEST_UUID });
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
})
.overrideProvider(ProjectRepository)
.useValue(mockRepository)
.compile();
app = moduleFixture.createNestApplication();
await app.init();
});
afterEach(async () => {
await app.close();
});
it("/ (GET)", () => {
return request(app.getHttpServer()).get("/").expect(200).expect("Hello World!");
});
describe("/projects", () => {
it("GET /projects returns an array", () => {
return request(app.getHttpServer())
.get("/projects")
.expect(200)
.expect([{ id: TEST_UUID, name: "Test" }]);
});
it("POST /projects creates a project", () => {
const body = { name: "E2E Project", status: "active" };
return request(app.getHttpServer()).post("/projects").send(body).expect(201);
});
it("GET /projects/:id returns a project by id", () => {
return request(app.getHttpServer())
.get(`/projects/${TEST_UUID}`)
.expect(200)
.expect({ id: TEST_UUID, name: "Test" });
});
it("PATCH /projects/:id updates a project", () => {
const body = { name: "Updated E2E" };
mockRepository.findOne.mockResolvedValue({ id: TEST_UUID, name: "Updated E2E" });
mockRepository.update.mockResolvedValue({ id: TEST_UUID, name: "Updated E2E" });
return request(app.getHttpServer())
.patch(`/projects/${TEST_UUID}`)
.send(body)
.expect(200)
.expect({ id: TEST_UUID, name: "Updated E2E" });
});
it("DELETE /projects/:id deletes a project", () => {
mockRepository.findOne.mockResolvedValue({ id: TEST_UUID });
return request(app.getHttpServer()).delete(`/projects/${TEST_UUID}`).expect(200).expect({ id: TEST_UUID });
});
});
});