diff --git a/src/main/java/com/m3pro/groundflip/exception/ErrorCode.java b/src/main/java/com/m3pro/groundflip/exception/ErrorCode.java index 77fc3345..692c3d3e 100644 --- a/src/main/java/com/m3pro/groundflip/exception/ErrorCode.java +++ b/src/main/java/com/m3pro/groundflip/exception/ErrorCode.java @@ -15,6 +15,7 @@ public enum ErrorCode { IMAGE_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 이미지입니다."), PLACE_NOT_FOUND(HttpStatus.NOT_FOUND, "장소가 등록되어 있지 않습니다."), INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "서버 에러 입니다"), + VERSION_NOT_FOUND(HttpStatus.NOT_FOUND, "버전이 존재하지 않습니다."), // 권한 관련 에러 UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "권한이 없습니다"), diff --git a/src/main/java/com/m3pro/groundflip/repository/AppVersionRepository.java b/src/main/java/com/m3pro/groundflip/repository/AppVersionRepository.java index f72c6610..b57dff69 100644 --- a/src/main/java/com/m3pro/groundflip/repository/AppVersionRepository.java +++ b/src/main/java/com/m3pro/groundflip/repository/AppVersionRepository.java @@ -1,5 +1,7 @@ package com.m3pro.groundflip.repository; +import java.util.Optional; + import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; @@ -13,5 +15,5 @@ public interface AppVersionRepository extends CrudRepository { ORDER BY av.created_date DESC limit 1 """, nativeQuery = true) - AppVersion findLaestetVersion(); + Optional findLaestetVersion(); } diff --git a/src/main/java/com/m3pro/groundflip/service/VersionService.java b/src/main/java/com/m3pro/groundflip/service/VersionService.java index f0186971..6f7cdc65 100644 --- a/src/main/java/com/m3pro/groundflip/service/VersionService.java +++ b/src/main/java/com/m3pro/groundflip/service/VersionService.java @@ -5,6 +5,8 @@ import com.m3pro.groundflip.domain.dto.version.VersionRequest; import com.m3pro.groundflip.domain.dto.version.VersionResponse; import com.m3pro.groundflip.domain.entity.AppVersion; +import com.m3pro.groundflip.exception.AppException; +import com.m3pro.groundflip.exception.ErrorCode; import com.m3pro.groundflip.repository.AppVersionRepository; import jakarta.transaction.Transactional; @@ -25,7 +27,8 @@ public void postVersion(VersionRequest versionRequest) { } public VersionResponse getVersion() { - AppVersion appVersion = appVersionRepository.findLaestetVersion(); + AppVersion appVersion = appVersionRepository.findLaestetVersion() + .orElseThrow(() -> new AppException(ErrorCode.VERSION_NOT_FOUND)); return VersionResponse.builder() .version(appVersion.getVersion()) diff --git a/src/test/java/com/m3pro/groundflip/service/VersionServiceTest.java b/src/test/java/com/m3pro/groundflip/service/VersionServiceTest.java new file mode 100644 index 00000000..3d32dfe7 --- /dev/null +++ b/src/test/java/com/m3pro/groundflip/service/VersionServiceTest.java @@ -0,0 +1,81 @@ +package com.m3pro.groundflip.service; + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.time.LocalDateTime; +import java.util.Optional; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.m3pro.groundflip.domain.dto.version.VersionRequest; +import com.m3pro.groundflip.domain.dto.version.VersionResponse; +import com.m3pro.groundflip.domain.entity.AppVersion; +import com.m3pro.groundflip.exception.AppException; +import com.m3pro.groundflip.exception.ErrorCode; +import com.m3pro.groundflip.repository.AppVersionRepository; + +@ExtendWith(MockitoExtension.class) +public class VersionServiceTest { + @Mock + private AppVersionRepository appVersionRepository; + + @InjectMocks + private VersionService versionService; + + @Test + @DisplayName("[postVersion] version이 잘 post 되는지") + void postVersionTest() { + //Given + LocalDateTime localDate = LocalDateTime.now(); + + VersionRequest versionRequest = VersionRequest.builder().version("1.0.3").build(); + //When + versionService.postVersion(versionRequest); + + //Then + verify(appVersionRepository, times(1)).save(any(AppVersion.class)); + } + + @Test + @DisplayName("[getVersion] version이 잘 get 되는지") + void getVersionTest() { + //Given + LocalDateTime localDate = LocalDateTime.now(); + AppVersion appVersion = AppVersion.builder() + .version("1.0.3") + .createdDate(localDate) + .build(); + + when(appVersionRepository.findLaestetVersion()).thenReturn(Optional.of(appVersion)); + + //When + VersionResponse versionResponse = versionService.getVersion(); + + //Then + assertThat(versionResponse).isNotNull(); + assertThat(versionResponse.getVersion()).isEqualTo("1.0.3"); + assertThat(versionResponse.getCreatedDate()).isEqualTo(localDate); + + } + + @Test + @DisplayName("[getVersion] version이 없을때 예외가 잘 나오는지") + void getVersionExceptionTest() { + //When + when(appVersionRepository.findLaestetVersion()).thenReturn(Optional.empty()); + + AppException thrown = assertThrows(AppException.class, () -> { + versionService.getVersion(); + }); + + assertEquals(thrown.getErrorCode(), ErrorCode.VERSION_NOT_FOUND); + } + +}