Skip to content
Snippets Groups Projects
Commit f7f02692 authored by Anders Austlid's avatar Anders Austlid
Browse files

Added unit tests for achievement controller and service

parent f9273909
No related branches found
No related tags found
No related merge requests found
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());
}
}
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();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment