diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/controller/user/AchievementControllerTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/controller/user/AchievementControllerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..02209b61614b8715df0c0a50b9db34ee0c44f81d --- /dev/null +++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/controller/user/AchievementControllerTest.java @@ -0,0 +1,96 @@ +package ntnu.idatt2016.v233.SmartMat.controller.user; + +import com.fasterxml.jackson.databind.ObjectMapper; +import ntnu.idatt2016.v233.SmartMat.entity.group.Achievement; +import ntnu.idatt2016.v233.SmartMat.service.user.AchievementService; +import org.junit.jupiter.api.BeforeEach; +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 org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@ExtendWith(MockitoExtension.class) +public class AchievementControllerTest { + + @Mock + private AchievementService achievementService; + + @InjectMocks + private AchievementController achievementController; + + private MockMvc mockMvc; + + private ObjectMapper objectMapper; + + private Achievement achievement1; + private Achievement achievement2; + + @BeforeEach + void setUp() { + mockMvc = MockMvcBuilders.standaloneSetup(achievementController).build(); + objectMapper = new ObjectMapper(); + + achievement1 = Achievement.builder() + .achievementName("Achievement 1") + .achievementDescription("Achievement 1 description") + .build(); + + achievement2 = Achievement.builder() + .achievementName("Achievement 2") + .achievementDescription("Achievement 2 description") + .build(); + } + + @Test + void getAchievement() throws Exception { + when(achievementService.getAchievement(achievement1.getAchievementName())).thenReturn(Optional.of(achievement1)); + + mockMvc.perform(get("/api/achievements/achievement/{achievementName}", achievement1.getAchievementName())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andExpect(jsonPath("$.achievementName").value(achievement1.getAchievementName())) + .andExpect(jsonPath("$.achievementDescription").value(achievement1.getAchievementDescription())); + } + + @Test + void getAchievement_notFound() throws Exception { + when(achievementService.getAchievement("Unknown")).thenReturn(Optional.empty()); + + mockMvc.perform(get("/api/achievements/achievement/{achievementName}", "Unknown")) + .andExpect(status().isNotFound()); + } + + @Test + void getAchievements() throws Exception { + List<Achievement> expectedAchievements = Arrays.asList(achievement1, achievement2); + when(achievementService.getAchievements()).thenReturn(expectedAchievements); + + mockMvc.perform(get("/api/achievements/all")) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andExpect(jsonPath("$.[0].achievementName").value(achievement1.getAchievementName())) + .andExpect(jsonPath("$.[0].achievementDescription").value(achievement1.getAchievementDescription())) + .andExpect(jsonPath("$.[1].achievementName").value(achievement2.getAchievementName())) + .andExpect(jsonPath("$.[1].achievementDescription").value(achievement2.getAchievementDescription())); + } + + @Test + void getAchievements_empty() throws Exception { + when(achievementService.getAchievements()).thenReturn(List.of()); + + mockMvc.perform(get("/api/achievements/all")) + .andExpect(status().isNotFound()); + } +} diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/service/user/AchievementServiceTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/user/AchievementServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..869d43ec74c65e97909b8deeb0219f052134896b --- /dev/null +++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/user/AchievementServiceTest.java @@ -0,0 +1,75 @@ +package ntnu.idatt2016.v233.SmartMat.service.user; + +import ntnu.idatt2016.v233.SmartMat.entity.group.Achievement; +import ntnu.idatt2016.v233.SmartMat.repository.user.AchievementRepository; +import org.junit.jupiter.api.BeforeEach; +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 java.util.Arrays; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class AchievementServiceTest { + + @Mock + private AchievementRepository achievementRepository; + + @InjectMocks + private AchievementService achievementService; + + private Achievement achievement1; + private Achievement achievement2; + + @BeforeEach + void setUp() { + achievement1 = Achievement.builder() + .achievementName("Achievement 1") + .achievementDescription("Achievement 1 description") + .build(); + + achievement2 = Achievement.builder() + .achievementName("Achievement 2") + .achievementDescription("Achievement 2 description") + .build(); + } + + @Test + void getAchievement() { + when(achievementRepository.findByAchievementName(achievement1.getAchievementName())).thenReturn(Optional.of(achievement1)); + + Optional<Achievement> result = achievementService.getAchievement(achievement1.getAchievementName()); + + assertThat(result).isPresent(); + assertThat(result.get()).isEqualTo(achievement1); + verify(achievementRepository).findByAchievementName(achievement1.getAchievementName()); + } + + @Test + void getAchievement_notFound() { + when(achievementRepository.findByAchievementName("Unknown")).thenReturn(Optional.empty()); + + Optional<Achievement> result = achievementService.getAchievement("Unknown"); + + assertThat(result).isNotPresent(); + verify(achievementRepository).findByAchievementName("Unknown"); + } + + @Test + void getAchievements() { + List<Achievement> expectedAchievements = Arrays.asList(achievement1, achievement2); + when(achievementRepository.findAll()).thenReturn(expectedAchievements); + + List<Achievement> result = achievementService.getAchievements(); + + assertThat(result).isEqualTo(expectedAchievements); + verify(achievementRepository).findAll(); + } +}