@@ -36,36 +36,27 @@ class NewsServiceTest {
3636 @ InjectMocks
3737 private NewsService newsService ;
3838
39- @ Test
40- @ DisplayName ("뉴스 전체 조회 - 성공" )
41- void getAllNews_success () {
42- // Given
43- List <String > imageUrls1 = List .of ("/path/image1.jpg" );
44- List <String > imageUrls2 = List .of ("/path/image2.jpg" );
45-
46- NewsEntity news1 = new NewsEntity (1L , "뉴스1" , "내용1" , imageUrls1 );
47- NewsEntity news2 = new NewsEntity (2L , "뉴스2" , "내용2" , imageUrls2 );
48-
49- when (newsRepository .findAll ()).thenReturn (List .of (news1 , news2 ));
50-
51- // When
52- List <NewsResponseDto > newsList = newsService .getAllNews ();
53-
54- // Then
55- assertThat (newsList ).hasSize (2 );
56- assertThat (newsList .get (0 ).getTitle ()).isEqualTo ("뉴스1" );
57- assertThat (newsList .get (1 ).getTitle ()).isEqualTo ("뉴스2" );
58-
59- verify (newsRepository , times (1 )).findAll ();
60- }
61-
6239 @ Test
6340 @ DisplayName ("뉴스 개별 조회 - 성공" )
6441 void getNewsById_success () {
6542 // Given
6643 Long id = 1L ;
67- List <String > imageUrls = List .of ("/path/image1.jpg" );
68- NewsEntity news = new NewsEntity (id , "뉴스1" , "내용1" , imageUrls );
44+ List <FileEntity > images = List .of (
45+ FileEntity .builder ()
46+ .id (1L )
47+ .originalName ("image1.jpg" )
48+ .base64Data ("base64_encoded_data" )
49+ .fileType ("image/jpeg" )
50+ .fileSize (1024L )
51+ .build ()
52+ );
53+
54+ NewsEntity news = NewsEntity .builder ()
55+ .id (id )
56+ .title ("뉴스1" )
57+ .content ("내용1" )
58+ .images (images )
59+ .build ();
6960
7061 when (newsRepository .findById (id )).thenReturn (Optional .of (news ));
7162
@@ -92,83 +83,121 @@ void getNewsById_fail() {
9283 assertThat (exception .getErrorCode ()).isEqualTo (ErrorCode .NOT_FOUND );
9384 verify (newsRepository , times (1 )).findById (id );
9485 }
95- //
96- // @Test
97- // @DisplayName("뉴스 생성 - 성공")
98- // void createNews_success() {
99- // // Given
100- // List<Long> fileIds = List.of(1L, 2L);
101- // List<FileEntity> fileEntities = List.of(
102- // FileEntity file1 = new FileEntity(1L, "image1.jpg", "stored_image1.jpg", "/path/image1.jpg", "image/jpeg", 1024L);
103- // FileEntity file2 = new FileEntity(2L, "image2.jpg", "stored_image2.jpg", "/path/image2.jpg", "image/png", 2048L);
104- //
105- // );
106- //
107- // List<String> imageUrls = fileEntities.stream()
108- // .map(FileEntity::getFilePath)
109- // .collect(Collectors.toList());
110- //
111- // NewsRequestDto requestDto = new NewsRequestDto("새 뉴스", "새 내용", fileIds);
112- //
113- // when(fileRepository.findAllById(anyIterable())).thenReturn(fileEntities);
114- // when(newsRepository.save(any(NewsEntity.class)))
115- // .thenAnswer(invocation -> {
116- // NewsEntity news = invocation.getArgument(0);
117- // return new NewsEntity(1L, news.getTitle(), news.getContent(), imageUrls);
118- // });
119- //
120- // // When
121- // NewsResponseDto responseDto = newsService.createNews(requestDto);
122- //
123- // // Then
124- // assertThat(responseDto.getId()).isEqualTo(1L);
125- // assertThat(responseDto.getTitle()).isEqualTo("새 뉴스");
126- // assertThat(responseDto.getContent()).isEqualTo("새 내용");
127- // assertThat(responseDto.getImageUrls()).containsExactly("/path/image1.jpg", "/path/image2.jpg");
128- //
129- // verify(newsRepository, times(1)).save(any(NewsEntity.class));
130- // }
131-
132- // @Test
133- // @DisplayName("뉴스 수정 - 성공")
134- // void updateNews_success() {
135- // // Given
136- // Long id = 1L;
137- // List<String> oldImageUrls = List.of("/path/old_image.jpg");
138- // NewsEntity existingNews = new NewsEntity(id, "기존 뉴스", "기존 내용", oldImageUrls);
139- //
140- // List<Long> updatedFileIds = List.of(3L, 4L);
141- // List<FileEntity> updatedFiles = List.of(
142- // new FileEntity(3L, "updated_image1.jpg", "stored_updated_image1.jpg", "/path/updated_image1.jpg", "image/jpeg", 1024L),
143- // new FileEntity(4L, "updated_image2.jpg", "stored_updated_image2.jpg", "/path/updated_image2.jpg", "image/jpeg", 2048L)
144- // );
145- //
146- // List<String> updatedImageUrls = updatedFiles.stream()
147- // .map(FileEntity::getFilePath)
148- // .collect(Collectors.toList());
149- //
150- // NewsRequestDto updateRequest = new NewsRequestDto("수정된 뉴스", "수정된 내용", updatedFileIds);
151- //
152- // when(newsRepository.findById(id)).thenReturn(Optional.of(existingNews));
153- // when(fileRepository.findAllById(updatedFileIds)).thenReturn(updatedFiles);
154- //
155- // // When
156- // NewsResponseDto updatedNews = newsService.updateNews(id, updateRequest);
157- //
158- // // Then
159- // assertThat(updatedNews.getTitle()).isEqualTo("수정된 뉴스");
160- // assertThat(updatedNews.getContent()).isEqualTo("수정된 내용");
161- // assertThat(updatedNews.getImageUrls()).containsExactlyElementsOf(updatedImageUrls);
162- //
163- // verify(newsRepository, times(1)).findById(id);
164- // }
86+
87+ @ Test
88+ @ DisplayName ("뉴스 생성 - 성공" )
89+ void createNews_success () {
90+ // Given
91+ List <Long > fileIds = List .of (1L , 2L );
92+ List <FileEntity > fileEntities = List .of (
93+ FileEntity .builder ()
94+ .id (1L )
95+ .originalName ("image1.jpg" )
96+ .base64Data ("base64_encoded_data1" )
97+ .fileType ("image/jpeg" )
98+ .fileSize (1024L )
99+ .build (),
100+
101+ FileEntity .builder ()
102+ .id (2L )
103+ .originalName ("image2.jpg" )
104+ .base64Data ("base64_encoded_data2" )
105+ .fileType ("image/png" )
106+ .fileSize (2048L )
107+ .build ()
108+ );
109+
110+ NewsRequestDto requestDto = new NewsRequestDto ("새 뉴스" , "새 내용" , fileIds );
111+
112+ when (fileRepository .findAllById (anyIterable ())).thenReturn (fileEntities );
113+ when (newsRepository .save (any (NewsEntity .class )))
114+ .thenAnswer (invocation -> {
115+ NewsEntity news = invocation .getArgument (0 );
116+ return NewsEntity .builder ()
117+ .id (1L )
118+ .title (news .getTitle ())
119+ .content (news .getContent ())
120+ .images (news .getImages ())
121+ .build ();
122+ });
123+
124+ // When
125+ NewsResponseDto responseDto = newsService .createNews (requestDto );
126+
127+ // Then
128+ assertThat (responseDto .getId ()).isEqualTo (1L );
129+ assertThat (responseDto .getTitle ()).isEqualTo ("새 뉴스" );
130+ assertThat (responseDto .getContent ()).isEqualTo ("새 내용" );
131+
132+ verify (newsRepository , times (1 )).save (any (NewsEntity .class ));
133+ }
134+
135+ @ Test
136+ @ DisplayName ("뉴스 수정 - 성공" )
137+ void updateNews_success () {
138+ // Given
139+ Long id = 1L ;
140+ List <FileEntity > oldImages = List .of (
141+ FileEntity .builder ()
142+ .id (1L )
143+ .originalName ("old_image.jpg" )
144+ .base64Data ("old_base64_data" )
145+ .fileType ("image/jpeg" )
146+ .fileSize (1024L )
147+ .build ()
148+ );
149+
150+ NewsEntity existingNews = NewsEntity .builder ()
151+ .id (id )
152+ .title ("기존 뉴스" )
153+ .content ("기존 내용" )
154+ .images (oldImages )
155+ .build ();
156+
157+ List <Long > updatedFileIds = List .of (3L , 4L );
158+ List <FileEntity > updatedFiles = List .of (
159+ FileEntity .builder ()
160+ .id (3L )
161+ .originalName ("updated_image1.jpg" )
162+ .base64Data ("updated_base64_data1" )
163+ .fileType ("image/jpeg" )
164+ .fileSize (1024L )
165+ .build (),
166+
167+ FileEntity .builder ()
168+ .id (4L )
169+ .originalName ("updated_image2.jpg" )
170+ .base64Data ("updated_base64_data2" )
171+ .fileType ("image/jpeg" )
172+ .fileSize (2048L )
173+ .build ()
174+ );
175+
176+ NewsRequestDto updateRequest = new NewsRequestDto ("수정된 뉴스" , "수정된 내용" , updatedFileIds );
177+
178+ when (newsRepository .findById (id )).thenReturn (Optional .of (existingNews ));
179+ when (fileRepository .findAllById (updatedFileIds )).thenReturn (updatedFiles );
180+
181+ // When
182+ NewsResponseDto updatedNews = newsService .updateNews (id , updateRequest );
183+
184+ // Then
185+ assertThat (updatedNews .getTitle ()).isEqualTo ("수정된 뉴스" );
186+ assertThat (updatedNews .getContent ()).isEqualTo ("수정된 내용" );
187+
188+ verify (newsRepository , times (1 )).findById (id );
189+ }
165190
166191 @ Test
167192 @ DisplayName ("뉴스 삭제 - 성공" )
168193 void deleteNews_success () {
169194 // Given
170195 Long id = 1L ;
171- NewsEntity existingNews = new NewsEntity (id , "삭제할 뉴스" , "삭제할 내용" , List .of ());
196+ NewsEntity existingNews = NewsEntity .builder ()
197+ .id (id )
198+ .title ("삭제할 뉴스" )
199+ .content ("삭제할 내용" )
200+ .build ();
172201
173202 when (newsRepository .findById (id )).thenReturn (Optional .of (existingNews ));
174203 doNothing ().when (newsRepository ).delete (existingNews );
0 commit comments