Skip to content

Commit a6774bb

Browse files
test: edge controller 테스트코드
1 parent d453cf8 commit a6774bb

File tree

2 files changed

+100
-5
lines changed

2 files changed

+100
-5
lines changed
Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,120 @@
11
import { Test, TestingModule } from '@nestjs/testing';
22
import { EdgeController } from './edge.controller';
33
import { EdgeService } from './edge.service';
4+
import { CreateEdgeDto } from './dtos/createEdge.dto';
5+
import { EdgeResponseMessage } from './edge.controller';
6+
import { EdgeNotFoundException } from '../exception/edge.exception';
7+
import { Edge } from './edge.entity';
8+
import { Node } from '../node/node.entity';
49

510
describe('EdgeController', () => {
611
let controller: EdgeController;
12+
let edgeService: EdgeService;
713

814
beforeEach(async () => {
915
const module: TestingModule = await Test.createTestingModule({
1016
controllers: [EdgeController],
1117
providers: [
1218
{
1319
provide: EdgeService,
14-
useValue: {},
20+
useValue: {
21+
createEdge: jest.fn(),
22+
deleteEdge: jest.fn(),
23+
findEdges: jest.fn(),
24+
},
1525
},
1626
],
1727
}).compile();
1828

1929
controller = module.get<EdgeController>(EdgeController);
30+
edgeService = module.get<EdgeService>(EdgeService);
2031
});
2132

2233
it('컨트롤러 클래스가 정상적으로 인스턴스화된다.', () => {
2334
expect(controller).toBeDefined();
2435
});
36+
37+
describe('createEdge', () => {
38+
it('엣지가 성공적으로 만들어진다', async () => {
39+
const dto: CreateEdgeDto = { fromNode: 1, toNode: 3 };
40+
const expectedResponse = {
41+
message: EdgeResponseMessage.EDGE_CREATED,
42+
};
43+
44+
jest.spyOn(edgeService, 'createEdge').mockResolvedValue(undefined);
45+
const result = await controller.createEdge(dto);
46+
47+
expect(edgeService.createEdge).toHaveBeenCalledWith(dto);
48+
expect(result).toEqual(expectedResponse);
49+
});
50+
});
51+
52+
describe('deleteEdge', () => {
53+
it('id에 해당하는 엣지를 찾아 삭제한다.', async () => {
54+
const id = 2;
55+
const expectedResponse = {
56+
message: EdgeResponseMessage.EDGE_DELETED,
57+
};
58+
59+
const result = await controller.deleteEdge(id);
60+
61+
expect(edgeService.deleteEdge).toHaveBeenCalledWith(id);
62+
expect(result).toEqual(expectedResponse);
63+
});
64+
65+
it('id에 해당하는 엣지가 존재하지 않으면 NodeNotFoundException을 throw한다.', async () => {
66+
jest
67+
.spyOn(edgeService, 'deleteEdge')
68+
.mockRejectedValue(new EdgeNotFoundException());
69+
70+
await expect(controller.deleteEdge(1)).rejects.toThrow(
71+
EdgeNotFoundException,
72+
);
73+
});
74+
});
75+
76+
describe('findEdges', () => {
77+
it('모든 엣지 목록을 반환한다.', async () => {
78+
const node3 = {
79+
id: 3,
80+
x: 0,
81+
y: 0,
82+
title: 'Node Title',
83+
page: null,
84+
outgoingEdges: [],
85+
incomingEdges: [],
86+
} as Node;
87+
const node4 = {
88+
id: 4,
89+
x: 0,
90+
y: 0,
91+
title: 'Node Title',
92+
page: null,
93+
outgoingEdges: [],
94+
incomingEdges: [],
95+
} as Node;
96+
const node5 = {
97+
id: 5,
98+
x: 0,
99+
y: 0,
100+
title: 'Node Title',
101+
page: null,
102+
outgoingEdges: [],
103+
incomingEdges: [],
104+
} as Node;
105+
106+
const expectedEdges = [
107+
{ id: 1, fromNode: node3, toNode: node5 },
108+
{ id: 2, fromNode: node3, toNode: node4 },
109+
] as Edge[];
110+
node3.outgoingEdges = [];
111+
112+
jest.spyOn(edgeService, 'findEdges').mockResolvedValue(expectedEdges);
113+
114+
await expect(controller.findEdges()).resolves.toEqual({
115+
message: EdgeResponseMessage.EDGE_ALL_RETURNED,
116+
edges: expectedEdges,
117+
});
118+
});
119+
});
25120
});

apps/backend/src/edge/edge.controller.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ export class EdgeController {
3333
})
3434
@Get('/')
3535
@HttpCode(HttpStatus.OK)
36-
async getNodes() {
37-
const nodes = await this.edgeService.findEdges();
36+
async findEdges() {
37+
const edges = await this.edgeService.findEdges();
3838
return {
3939
message: EdgeResponseMessage.EDGE_ALL_RETURNED,
40-
nodes: nodes,
40+
edges: edges,
4141
};
4242
}
4343

@@ -56,7 +56,7 @@ export class EdgeController {
5656
@ApiOperation({ summary: '엣지를 삭제합니다.' })
5757
@Delete('/:id')
5858
@HttpCode(HttpStatus.OK)
59-
async deleteNode(
59+
async deleteEdge(
6060
@Param('id', ParseIntPipe) id: number,
6161
): Promise<{ message: string }> {
6262
await this.edgeService.deleteEdge(id);

0 commit comments

Comments
 (0)