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

Merge branch 'feature/achievement-tests' into 'main'

Added unit tests for achievement controller and service

Closes #141

See merge request idatt2106-v23-03/backend!107
parents 7adbc5c8 f7f02692
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