84 lines
2.8 KiB
TypeScript
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 });
|
|
});
|
|
});
|
|
});
|