1+
2+ package com .back .domain .title ;
3+
4+ import com .back .domain .title .dto .CreateTitleDto ;
5+ import com .back .domain .title .dto .TitleDto ;
6+ import com .back .domain .title .entity .Title ;
7+ import com .back .domain .title .repository .TitleRepository ;
8+ import com .back .domain .title .service .TitleService ;
9+ import jakarta .persistence .EntityManager ;
10+ import org .junit .jupiter .api .BeforeEach ;
11+ import org .junit .jupiter .api .DisplayName ;
12+ import org .junit .jupiter .api .Test ;
13+ import org .springframework .beans .factory .annotation .Autowired ;
14+ import org .springframework .boot .test .context .SpringBootTest ;
15+ import org .springframework .boot .test .web .client .TestRestTemplate ;
16+ import org .springframework .boot .test .web .server .LocalServerPort ;
17+ import org .springframework .http .*;
18+ import org .springframework .test .context .ActiveProfiles ;
19+ import org .springframework .transaction .annotation .Transactional ;
20+
21+ import static org .assertj .core .api .Assertions .assertThat ;
22+
23+ @ SpringBootTest (webEnvironment = SpringBootTest .WebEnvironment .RANDOM_PORT )
24+ @ ActiveProfiles ("test" )
25+ @ Transactional
26+ @ DisplayName ("칭호 API CRUD 통합 테스트" )
27+ public class ApiV1TitleControllerTest {
28+
29+ @ LocalServerPort
30+ private int port ;
31+
32+ @ Autowired
33+ private TestRestTemplate restTemplate ;
34+
35+ @ Autowired
36+ private EntityManager em ;
37+
38+ @ Autowired
39+ TitleService titleService ;
40+
41+ @ Autowired
42+ TitleRepository titleRepository ;
43+ private String baseUrl ;
44+ private HttpHeaders headers ;
45+
46+ @ BeforeEach
47+ void setUp () {
48+
49+ baseUrl = "http://localhost:" + port + "/api/v1/title" ;
50+ headers = new HttpHeaders ();
51+ headers .setContentType (MediaType .APPLICATION_JSON );
52+ }
53+
54+
55+ @ Test
56+ @ DisplayName ("READ - 전체 칭호 조회 성공" )
57+ void findAllItems_Success () {
58+
59+ CreateTitleDto createTitleDto1 = new CreateTitleDto ("칭호 테스트 1" );
60+ CreateTitleDto createTitleDto2 = new CreateTitleDto ("칭호 테스트 2" );
61+ CreateTitleDto createTitleDto3 = new CreateTitleDto ("칭호 테스트 3" );
62+
63+ HttpEntity <CreateTitleDto > request1 = new HttpEntity <>(createTitleDto1 , headers );
64+ restTemplate .exchange (baseUrl , HttpMethod .POST , request1 , String .class );
65+ HttpEntity <CreateTitleDto > request2 = new HttpEntity <>(createTitleDto2 , headers );
66+ restTemplate .exchange (baseUrl , HttpMethod .POST , request2 , String .class );
67+ HttpEntity <CreateTitleDto > request3 = new HttpEntity <>(createTitleDto3 , headers );
68+ restTemplate .exchange (baseUrl , HttpMethod .POST , request3 , String .class );
69+
70+ ResponseEntity <String > response = restTemplate .getForEntity (baseUrl , String .class );
71+
72+ // then
73+ assertThat (response .getStatusCode ()).isEqualTo (HttpStatus .OK );
74+ assertThat (response .getBody ()).contains ("칭호 테스트 1" );
75+ assertThat (response .getBody ()).contains ("칭호 테스트 2" );
76+ assertThat (response .getBody ()).contains ("칭호 테스트 3" );
77+ }
78+
79+
80+ @ Test
81+ @ DisplayName ("READ - 칭호 단건 조회 성공" )
82+ void findAllTitle_Success () {
83+
84+ Title title = titleRepository .findAll ().getLast ();
85+
86+ CreateTitleDto createTitleDto1 = new CreateTitleDto ("칭호 테스트 1" );
87+ HttpEntity <CreateTitleDto > request1 = new HttpEntity <>(createTitleDto1 , headers );
88+ restTemplate .exchange (baseUrl , HttpMethod .POST , request1 , String .class );
89+ ResponseEntity <String > response = restTemplate .getForEntity (baseUrl + "/" + (title .getId () + 1 ), String .class );
90+
91+ // then
92+ assertThat (response .getStatusCode ()).isEqualTo (HttpStatus .OK );
93+ assertThat (response .getBody ()).contains ("칭호 테스트 1" );
94+ }
95+
96+ @ Test
97+ @ DisplayName ("UPDATE - 칭호 수정 성공" )
98+ void createTitle_Success () {
99+
100+ int titleId = titleRepository .findAll ().getLast ().getId () + 1 ;
101+ CreateTitleDto createTitleDto = new CreateTitleDto ("칭호 테스트 1" );
102+ HttpEntity <CreateTitleDto > request = new HttpEntity <>(createTitleDto , headers );
103+ ResponseEntity <String > response = restTemplate .postForEntity (baseUrl , request , String .class );
104+ assertThat (response .getStatusCode ()).isEqualTo (HttpStatus .OK );
105+ assertThat (response .getBody ()).contains ("칭호 테스트 1" );
106+
107+ TitleDto titleDto = new TitleDto (titleId , "칭호 수정 테스트 1" );
108+ HttpEntity <TitleDto > request1 = new HttpEntity <>(titleDto , headers );
109+ ResponseEntity <String > response1 = restTemplate .exchange (baseUrl + "/" + titleId , HttpMethod .PUT , request1 , String .class );
110+
111+ assertThat (response1 .getStatusCode ()).isEqualTo (HttpStatus .OK );
112+ assertThat (response1 .getBody ()).contains ("칭호 수정 테스트 1" );
113+ }
114+
115+ @ Test
116+ @ DisplayName ("DELETE - 칭호 삭제 성공" )
117+ void UpdateTitle_Success () {
118+
119+ CreateTitleDto createTitleDto = new CreateTitleDto ("칭호 테스트 1" );
120+ HttpEntity <CreateTitleDto > request = new HttpEntity <>(createTitleDto , headers );
121+
122+ ResponseEntity <String > response = restTemplate .postForEntity (baseUrl , request , String .class );
123+
124+ // then
125+ assertThat (response .getStatusCode ()).isEqualTo (HttpStatus .OK );
126+ assertThat (response .getBody ()).contains ("칭호 테스트 1" );
127+ }
128+
129+ }
0 commit comments