Skip to content

Commit 342a151

Browse files
committed
fix: backend 테스트 오류 수정
1 parent 3429054 commit 342a151

File tree

2 files changed

+87
-21
lines changed

2 files changed

+87
-21
lines changed

backend/src/node/node.service.spec.ts

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ describe('NodeService', () => {
2424
save: jest.fn(),
2525
delete: jest.fn(),
2626
findOneBy: jest.fn(),
27+
findOne: jest.fn(),
2728
},
2829
},
2930
{
@@ -101,7 +102,7 @@ describe('NodeService', () => {
101102
const node = new Node();
102103
node.page = new Page();
103104

104-
jest.spyOn(nodeRepository, 'findOneBy').mockResolvedValue(node);
105+
jest.spyOn(nodeRepository, 'findOne').mockResolvedValue(node);
105106
jest.spyOn(pageRepository, 'findOneBy').mockResolvedValue(node.page);
106107
jest.spyOn(nodeRepository, 'save').mockResolvedValue(node);
107108

@@ -119,7 +120,7 @@ describe('NodeService', () => {
119120
});
120121

121122
it('업데이트할 노드가 존재하지 않으면 NodeNotFoundException을 throw한다.', async () => {
122-
jest.spyOn(nodeRepository, 'findOneBy').mockResolvedValue(undefined);
123+
jest.spyOn(nodeRepository, 'findOne').mockResolvedValue(undefined);
123124

124125
await expect(service.updateNode(1, {} as any)).rejects.toThrow(
125126
NodeNotFoundException,
@@ -131,12 +132,24 @@ describe('NodeService', () => {
131132
it('노드 아이디를 받아 해당 노드의 좌표를 반환한다.', async () => {
132133
const node = { id: 1, x: 1, y: 2 } as Node;
133134

134-
nodeRepository.findOneBy.mockResolvedValue(node);
135+
jest.spyOn(nodeRepository, 'findOne').mockResolvedValue(node);
135136

136137
const coordinates = await service.getCoordinates(1);
137138

138139
expect(coordinates).toEqual({ x: 1, y: 2 });
139-
expect(nodeRepository.findOneBy).toHaveBeenCalledWith({ id: 1 });
140+
expect(nodeRepository.findOne).toHaveBeenCalledWith({
141+
relations: ['page'],
142+
select: {
143+
id: true,
144+
page: {
145+
id: true,
146+
title: true,
147+
},
148+
},
149+
where: {
150+
id: 1,
151+
},
152+
});
140153
});
141154

142155
it('노드를 찾을 수 없으면 NodeNotFoundException을 throw한다.', async () => {
@@ -159,20 +172,44 @@ describe('NodeService', () => {
159172
outgoingEdges: [],
160173
incomingEdges: [],
161174
} as Node;
162-
jest.spyOn(nodeRepository, 'findOneBy').mockResolvedValue(node);
175+
jest.spyOn(nodeRepository, 'findOne').mockResolvedValue(node);
163176

164177
const result = await service.findNodeById(1);
165178

166179
expect(result).toEqual(node);
167-
expect(nodeRepository.findOneBy).toHaveBeenCalledWith({ id: 1 });
180+
expect(nodeRepository.findOne).toHaveBeenCalledWith({
181+
relations: ['page'],
182+
select: {
183+
id: true,
184+
page: {
185+
id: true,
186+
title: true,
187+
},
188+
},
189+
where: {
190+
id: 1,
191+
},
192+
});
168193
});
169194

170195
it('노드를 찾을 수 없으면 NodeNotFoundException을 던진다.', async () => {
171-
jest.spyOn(nodeRepository, 'findOneBy').mockResolvedValue(undefined);
196+
jest.spyOn(nodeRepository, 'findOne').mockResolvedValue(undefined);
172197
await expect(service.findNodeById(1)).rejects.toThrow(
173198
NodeNotFoundException,
174199
);
175-
expect(nodeRepository.findOneBy).toHaveBeenCalledWith({ id: 1 });
200+
expect(nodeRepository.findOne).toHaveBeenCalledWith({
201+
relations: ['page'],
202+
select: {
203+
id: true,
204+
page: {
205+
id: true,
206+
title: true,
207+
},
208+
},
209+
where: {
210+
id: 1,
211+
},
212+
});
176213
});
177214
});
178215
});

backend/src/node/node.service.ts

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,25 @@ export class NodeService {
4747
}
4848

4949
async updateNode(id: number, dto: UpdateNodeDto): Promise<Node> {
50-
// 갱신할 노드를 조회한다.
51-
const node = await this.findNodeById(id);
50+
// 노드를 조회한다.
51+
const node = await this.nodeRepository.findOne({
52+
relations: ['page'],
53+
select: {
54+
id: true,
55+
page: {
56+
id: true,
57+
title: true, // content 제외하고 title만 선택
58+
},
59+
},
60+
where: {
61+
id,
62+
},
63+
});
5264

65+
// 노드가 없으면 NotFound 에러
66+
if (!node) {
67+
throw new NodeNotFoundException();
68+
}
5369
// 노드와 연결된 페이지를 조회한다.
5470
const linkedPage = await this.pageRepository.findOneBy({
5571
id: node.page.id,
@@ -66,12 +82,20 @@ export class NodeService {
6682

6783
async findNodeById(id: number): Promise<Node> {
6884
// 노드를 조회한다.
69-
const node = await this.nodeRepository
70-
.createQueryBuilder('node')
71-
.leftJoinAndSelect('node.page', 'page')
72-
.select(['node.id', 'node.x', 'node.y', 'page.id', 'page.title'])
73-
.where('node.id = :id', { id })
74-
.getOne();
85+
const node = await this.nodeRepository.findOne({
86+
relations: ['page'],
87+
select: {
88+
id: true,
89+
page: {
90+
id: true,
91+
title: true, // content 제외하고 title만 선택
92+
},
93+
},
94+
where: {
95+
id,
96+
},
97+
});
98+
7599
// 노드가 없으면 NotFound 에러
76100
if (!node) {
77101
throw new NodeNotFoundException();
@@ -81,11 +105,16 @@ export class NodeService {
81105

82106
async findNodes(): Promise<Node[]> {
83107
// 노드를 조회한다.
84-
const nodes = await this.nodeRepository
85-
.createQueryBuilder('node')
86-
.leftJoinAndSelect('node.page', 'page')
87-
.select(['node.id', 'node.x', 'node.y', 'page.id', 'page.title'])
88-
.getMany();
108+
const nodes = await this.nodeRepository.find({
109+
relations: ['page'],
110+
select: {
111+
id: true,
112+
page: {
113+
id: true,
114+
title: true, // content 제외하고 title만 선택
115+
},
116+
},
117+
});
89118
// 노드가 없으면 NotFound 에러
90119
if (!nodes) {
91120
throw new NodeNotFoundException();

0 commit comments

Comments
 (0)