@@ -3,6 +3,7 @@ package io.csbroker.apiserver.controller.v1.admin.problem
3
3
import io.csbroker.apiserver.controller.IntegrationTest
4
4
import io.csbroker.apiserver.dto.problem.longproblem.LongProblemUpsertRequestDto
5
5
import io.csbroker.apiserver.model.LongProblem
6
+ import io.csbroker.apiserver.model.ProblemTag
6
7
import io.csbroker.apiserver.model.StandardAnswer
7
8
import io.csbroker.apiserver.model.Tag
8
9
import io.kotest.matchers.shouldBe
@@ -13,29 +14,23 @@ import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
13
14
class AdminLongProblemControllerIntegrationTest : IntegrationTest () {
14
15
15
16
@Test
16
- fun `문제 업데이트` () {
17
+ fun `문제 업데이트 - 모범 답안 ` () {
17
18
// given
18
- val problem = save(
19
- LongProblem (
20
- title = " 문제 제목" ,
21
- description = " 문제 설명" ,
22
- creator = adminUser,
23
- ),
24
- )
25
- save(StandardAnswer (content = " 삭제될 모범 답안" , longProblem = problem))
26
- save(Tag (name = " tag1" ))
19
+ val longProblem = LongProblem (title = " 문제 제목" , description = " 문제 설명" , creator = adminUser)
20
+ save(longProblem)
21
+ save(StandardAnswer (content = " 삭제될 모범 답안" , longProblem = longProblem))
27
22
val updateRequestDto = LongProblemUpsertRequestDto (
28
23
title = " Test problem" ,
29
24
description = " This is a test problem" ,
30
- tags = mutableListOf (" tag1 " ),
25
+ tags = mutableListOf (),
31
26
standardAnswers = listOf (" 업데이트될 모범 답안" ),
32
27
gradingStandards = mutableListOf (),
33
28
)
34
29
35
30
// when
36
31
val response = request(
37
32
method = HttpMethod .PUT ,
38
- url = " /api/admin/problems/long/${problem .id} " ,
33
+ url = " /api/admin/problems/long/${longProblem .id} " ,
39
34
isAdmin = true ,
40
35
body = updateRequestDto,
41
36
)
@@ -45,9 +40,47 @@ class AdminLongProblemControllerIntegrationTest : IntegrationTest() {
45
40
.andExpect {
46
41
val standardAnswers = findAll<StandardAnswer >(
47
42
" SELECT s FROM StandardAnswer s where s.longProblem.id = :id" ,
48
- mapOf (" id" to problem .id),
43
+ mapOf (" id" to longProblem .id),
49
44
)
50
45
standardAnswers.map { it.content }.toSet() shouldBe updateRequestDto.standardAnswers.toSet()
46
+ standardAnswers.size shouldBe updateRequestDto.standardAnswers.size
47
+ }
48
+ }
49
+
50
+ @Test
51
+ fun `문제 업데이트 - 태그` () {
52
+ // given
53
+ val oldTag = save(Tag (name = " long-problem-update-tag1" ))
54
+ val longProblem = LongProblem (title = " 문제 제목" , description = " 문제 설명" , creator = adminUser)
55
+ longProblem.addTag(oldTag)
56
+ save(longProblem)
57
+ val newTag1 = save(Tag (name = " ${longProblem.id} -tag2" ))
58
+ val newTag2 = save(Tag (name = " ${longProblem.id} -tag3" ))
59
+ val updateRequestDto = LongProblemUpsertRequestDto (
60
+ title = longProblem.title,
61
+ description = longProblem.description,
62
+ tags = mutableListOf (newTag1.name, newTag2.name),
63
+ standardAnswers = emptyList(),
64
+ gradingStandards = mutableListOf (),
65
+ )
66
+
67
+ // when
68
+ val response = request(
69
+ method = HttpMethod .PUT ,
70
+ url = " /api/admin/problems/long/${longProblem.id} " ,
71
+ isAdmin = true ,
72
+ body = updateRequestDto,
73
+ )
74
+
75
+ // then
76
+ response.andExpect(status().isOk)
77
+ .andExpect {
78
+ val problemTags = findAll<ProblemTag >(
79
+ " SELECT pt FROM ProblemTag pt JOIN FETCH pt.tag where pt.problem.id = :id" ,
80
+ mapOf (" id" to longProblem.id),
81
+ )
82
+ problemTags.map { it.tag.name }.toSet() shouldBe updateRequestDto.tags.toSet()
83
+ problemTags.size shouldBe updateRequestDto.tags.size
51
84
}
52
85
}
53
86
}
0 commit comments