Skip to content

Commit 6db6309

Browse files
committed
feat: NewsRequestDto에 생성자 추가 + 테스트케이스 작성
1 parent f936cc3 commit 6db6309

File tree

2 files changed

+118
-0
lines changed

2 files changed

+118
-0
lines changed

src/main/java/dmu/dasom/api/domain/news/dto/NewsRequestDto.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@
33
import io.swagger.v3.oas.annotations.media.Schema;
44
import jakarta.validation.constraints.NotBlank;
55
import jakarta.validation.constraints.Size;
6+
import lombok.AllArgsConstructor;
67
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
79

810
@Getter
11+
@NoArgsConstructor
12+
@AllArgsConstructor
913
@Schema(name = "NewsRequestDto", description = "뉴스 생성 요청 DTO")
1014
public class NewsRequestDto {
1115

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package dmu.dasom.api.domain.news;
2+
3+
import dmu.dasom.api.domain.news.dto.NewsRequestDto;
4+
import dmu.dasom.api.domain.news.dto.NewsResponseDto;
5+
import dmu.dasom.api.domain.news.entity.NewsEntity;
6+
import dmu.dasom.api.domain.news.repository.NewsRepository;
7+
import dmu.dasom.api.domain.news.service.NewsService;
8+
import org.junit.jupiter.api.DisplayName;
9+
import org.junit.jupiter.api.Test;
10+
import org.junit.jupiter.api.extension.ExtendWith;
11+
import org.mockito.InjectMocks;
12+
import org.mockito.Mock;
13+
import org.mockito.junit.jupiter.MockitoExtension;
14+
15+
import java.util.List;
16+
import java.util.Optional;
17+
18+
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.junit.jupiter.api.Assertions.assertThrows;
20+
import static org.mockito.Mockito.*;
21+
22+
@ExtendWith(MockitoExtension.class)
23+
class NewsServiceTest {
24+
25+
@Mock
26+
private NewsRepository newsRepository;
27+
28+
@InjectMocks
29+
private NewsService newsService;
30+
31+
@Test
32+
@DisplayName("뉴스 전체 조회 테스트")
33+
void getAllNews() {
34+
// Given
35+
NewsEntity news1 = NewsEntity.builder().id(1L).title("뉴스1").content("내용1").imageUrl("url1").build();
36+
NewsEntity news2 = NewsEntity.builder().id(2L).title("뉴스2").content("내용2").imageUrl("url2").build();
37+
38+
when(newsRepository.findAll()).thenReturn(List.of(news1, news2));
39+
40+
// When
41+
List<NewsResponseDto> newsList = newsService.getAllNews();
42+
43+
// Then
44+
assertThat(newsList).hasSize(2);
45+
assertThat(newsList.get(0).getTitle()).isEqualTo("뉴스1");
46+
verify(newsRepository, times(1)).findAll();
47+
}
48+
49+
@Test
50+
@DisplayName("뉴스 개별 조회 - 성공")
51+
void getNewsById_Success() {
52+
// Given
53+
Long id = 1L;
54+
NewsEntity news = NewsEntity.builder().id(id).title("뉴스1").content("내용1").imageUrl("url1").build();
55+
56+
when(newsRepository.findById(id)).thenReturn(Optional.of(news));
57+
58+
// When
59+
NewsResponseDto responseDto = newsService.getNewsById(id);
60+
61+
// Then
62+
assertThat(responseDto.getId()).isEqualTo(id);
63+
assertThat(responseDto.getTitle()).isEqualTo("뉴스1");
64+
verify(newsRepository, times(1)).findById(id);
65+
}
66+
67+
@Test
68+
@DisplayName("뉴스 개별 조회 - 실패 (존재하지 않는 ID)")
69+
void getNewsById_NotFound() {
70+
// Given
71+
Long id = 999L;
72+
73+
when(newsRepository.findById(id)).thenReturn(Optional.empty());
74+
75+
// When & Then
76+
Exception exception = assertThrows(IllegalArgumentException.class, () -> newsService.getNewsById(id));
77+
assertThat(exception.getMessage()).isEqualTo("해당 뉴스가 존재하지 않습니다. ID: " + id);
78+
verify(newsRepository, times(1)).findById(id);
79+
}
80+
81+
@Test
82+
@DisplayName("뉴스 생성 테스트")
83+
void createNews() {
84+
// Given
85+
NewsRequestDto requestDto = new NewsRequestDto("새 뉴스", "새 내용", "새 이미지");
86+
87+
NewsEntity news = NewsEntity.builder()
88+
.title(requestDto.getTitle())
89+
.content(requestDto.getContent())
90+
.imageUrl(requestDto.getImageUrl())
91+
.build();
92+
93+
NewsEntity savedNews = NewsEntity.builder()
94+
.id(1L)
95+
.title(news.getTitle())
96+
.content(news.getContent())
97+
.imageUrl(news.getImageUrl())
98+
.build();
99+
100+
when(newsRepository.save(any(NewsEntity.class))).thenReturn(savedNews);
101+
102+
// When
103+
NewsResponseDto responseDto = newsService.createNews(requestDto);
104+
105+
// Then
106+
assertThat(responseDto.getId()).isEqualTo(1L); // 저장된 뉴스의 ID 할당확인
107+
assertThat(responseDto.getTitle()).isEqualTo("새 뉴스");
108+
assertThat(responseDto.getContent()).isEqualTo("새 내용");
109+
assertThat(responseDto.getImageUrl()).isEqualTo("새 이미지");
110+
111+
verify(newsRepository, times(1)).save(any(NewsEntity.class)); // save() 호출 검증
112+
}
113+
114+
}

0 commit comments

Comments
 (0)