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

Added new tests for several controller classes

parent 2418084b
No related branches found
No related tags found
No related merge requests found
package ntnu.idatt2016.v233.SmartMat.controller;
import ntnu.idatt2016.v233.SmartMat.dto.enums.Authority;
import ntnu.idatt2016.v233.SmartMat.dto.request.LoginRequest;
import ntnu.idatt2016.v233.SmartMat.service.TokenService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.*;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestTemplate;
import org.springframework.security.core.AuthenticationException;
import java.time.Duration;
import java.util.Collection;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class AuthenticationControllerTest {
/**
@MockBean
class AuthenticationControllerTest {
private TokenService tokenService;
private AuthenticationManager authenticationManager;
private AuthenticationController authenticationController;
@BeforeEach
void setUp() {
tokenService = mock(TokenService.class);
authenticationManager = mock(AuthenticationManager.class);
authenticationController = new AuthenticationController(tokenService, authenticationManager);
}
@Test
public void token_validCredentials_shouldReturnToken() {
LoginRequest loginRequest = new LoginRequest("kari123", "sjokoladekake");
void testToken_success() {
String expectedToken = "generated_token";
LoginRequest validLoginRequest = new LoginRequest("valid_user", "valid_password");
Authentication authentication = mock(Authentication.class);
when(authenticationManager.authenticate(any(Authentication.class))).thenReturn(new Authentication() {
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return List.of(new SimpleGrantedAuthority(Authority.USER.toString()));
}
when(authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(
validLoginRequest.username(),
validLoginRequest.password()
))).thenReturn(authentication);
@Override
public Object getCredentials() {
return "test";
}
when(tokenService.generateToken(authentication)).thenReturn(expectedToken);
@Override
public Object getDetails() {
return "test";
}
ResponseEntity<?> response = authenticationController.token(validLoginRequest);
@Override
public Object getPrincipal() {
return "test";
}
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals(expectedToken, response.getBody());
}
@Override
public boolean isAuthenticated() {
return true;
}
@Test
void testToken_invalidInput() {
LoginRequest invalidLoginRequest = new LoginRequest("invalid_username", "");
@Override
public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
ResponseEntity<?> response = authenticationController.token(invalidLoginRequest);
}
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
assertEquals("Error: Invalid input.", response.getBody());
}
@Override
public String getName() {
return "test";
}
});
@Test
void testToken_invalidCredentials() {
LoginRequest invalidCredentialsRequest = new LoginRequest("invalid_user", "invalid_password");
when(authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(
invalidCredentialsRequest.username(),
invalidCredentialsRequest.password()
))).thenThrow(new BadCredentialsException("Invalid username or password."));
ResponseEntity<?> response = authenticationController.token(invalidCredentialsRequest);
RestTemplateBuilder rb = new RestTemplateBuilder();
rb.setConnectTimeout(Duration.ofSeconds(10));
rb.setReadTimeout(Duration.ofSeconds(10));
rb.requestFactory(() -> new HttpComponentsClientHttpRequestFactory());
rb.errorHandler(new DefaultResponseErrorHandler(){
protected boolean hasError(HttpStatus statusCode) {
return statusCode.is5xxServerError();
}
});
assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode());
assertEquals("Error: Invalid username or password.", response.getBody());
}
@Test
void testToken_tokenGenerationFailure() {
LoginRequest validLoginRequest = new LoginRequest("valid_user", "valid_password");
Authentication authentication = mock(Authentication.class);
RestTemplate restTemplate = rb.build();
when(authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(
validLoginRequest.username(),
validLoginRequest.password()
))).thenReturn(authentication);
when(tokenService.generateToken(authentication)).thenThrow(RuntimeException.class);
ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://localhost:8080/api/auth/credentials", loginRequest, String.class);
ResponseEntity<?> response = authenticationController.token(validLoginRequest);
assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
assertNotNull(responseEntity.getBody());
assertFalse(responseEntity.getBody().isEmpty());
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
assertEquals("Error: Unable to generate token. Please try again later.", response.getBody());
}
*/
}
......@@ -31,7 +31,6 @@ public class ShoppingListControllerTest {
@BeforeEach
public void setUp() {
shoppingList = new ShoppingList();
// Set properties for the shoppingList object
}
......
......@@ -31,7 +31,6 @@ public class WeeklyMenuControllerTest {
@BeforeEach
public void setUp() {
weeklyMenu = new ArrayList<>();
// Add WeeklyMenuResponse objects to the weeklyMenu list
weeklyMenu.add(WeeklyMenuResponse.builder()
.recipeId(1)
.recipeName("Recipe1")
......@@ -49,7 +48,7 @@ public class WeeklyMenuControllerTest {
@Test
public void getWeeklyMenu_found() {
Long fridgeId = 1L;
long fridgeId = 1L;
when(weeklyMenuService.getWeeklyMenu(fridgeId)).thenReturn(weeklyMenu);
ResponseEntity<List<WeeklyMenuResponse>> response = weeklyMenuController.getWeeklyMenu(fridgeId);
......@@ -60,7 +59,7 @@ public class WeeklyMenuControllerTest {
@Test
public void getWeeklyMenu_notFound() {
Long fridgeId = 1L;
long fridgeId = 1L;
when(weeklyMenuService.getWeeklyMenu(fridgeId)).thenReturn(new ArrayList<>());
ResponseEntity<List<WeeklyMenuResponse>> response = weeklyMenuController.getWeeklyMenu(fridgeId);
......
......@@ -26,7 +26,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
@ExtendWith(SpringExtension.class)
@WebMvcTest(FridgeController.class)
@AutoConfigureMockMvc(addFilters = false) // Disables security for this test class
@AutoConfigureMockMvc(addFilters = false)
public class FridgeControllerTest {
@Autowired
......
package ntnu.idatt2016.v233.SmartMat.controller.group;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import ntnu.idatt2016.v233.SmartMat.dto.request.WasteRequest;
import ntnu.idatt2016.v233.SmartMat.entity.group.Group;
import ntnu.idatt2016.v233.SmartMat.entity.product.Product;
import ntnu.idatt2016.v233.SmartMat.entity.Waste;
import ntnu.idatt2016.v233.SmartMat.entity.group.Group;
import ntnu.idatt2016.v233.SmartMat.entity.product.Product;
import ntnu.idatt2016.v233.SmartMat.service.group.WasteService;
import ntnu.idatt2016.v233.SmartMat.util.CategoryUtil;
import org.aspectj.lang.annotation.Before;
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.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
@ExtendWith(SpringExtension.class)
@WebMvcTest(WasteController.class)
@AutoConfigureMockMvc(addFilters = false)
public class WasteControllerTest {
@InjectMocks
private WasteController wasteController;
@Autowired
private MockMvc mockMvc;
@Mock
@Autowired
private ObjectMapper objectMapper;
@MockBean
private WasteService wasteService;
private Waste waste;
/**
private Group group;
private Product product;
private WasteRequest wasteRequest;
private Waste expectedWaste;
@BeforeEach
public void setUp() {
waste = Waste.builder()
.wasteId(1L)
.groupId(1L)
.ean(123456789L)
.timestamp(new Timestamp(System.currentTimeMillis()))
.amount(5.5)
.unit("kg")
.build();
group = new Group();
group.setGroupId(1L);
group.setGroupName("TestGroup");
product = new Product();
product.setEan(12345678L);
wasteRequest = new WasteRequest(1L, 12345678L, 0.5, "kg");
expectedWaste = new Waste();
expectedWaste.setWasteId(1L);
expectedWaste.setGroupId(group);
expectedWaste.setEan(product);
expectedWaste.setTimestamp(new Timestamp(System.currentTimeMillis()));
expectedWaste.setAmount(0.5);
expectedWaste.setUnit("kg");
}
// Test cases go here
@Test
public void testCreateWaste() {
when(wasteService.getWasteById(waste.getWasteId())).thenReturn(Optional.empty());
when(wasteService.createWaste(any(Waste.class))).thenReturn(waste);
ResponseEntity<Waste> response = wasteController.createWaste(waste);
public void testCreateWaste() throws Exception {
when(wasteService.createWaste(wasteRequest)).thenReturn(Optional.of(expectedWaste));
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals(waste, response.getBody());
mockMvc.perform(post("/api/waste/waste")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(wasteRequest)))
.andExpect(status().isOk())
.andExpect(jsonPath("wasteId").value(expectedWaste.getWasteId()));
verify(wasteService, times(1)).getWasteById(waste.getWasteId());
verify(wasteService, times(1)).createWaste(any(Waste.class));
verify(wasteService, times(1)).createWaste(wasteRequest);
}
@Test
public void testCreateWaste_badRequest() {
when(wasteService.getWasteById(waste.getWasteId())).thenReturn(Optional.of(waste));
public void testGetWasteOfCategoryByGroupId() throws Exception {
int categoryNumber = 1;
String categoryName = CategoryUtil.getCategoryName(categoryNumber);
List<Waste> expectedWastes = Arrays.asList(new Waste(/*...*/), new Waste(/*...*/));
ResponseEntity<Waste> response = wasteController.createWaste(waste);
when(wasteService.getWasteOfCategoryByGroupId(group.getGroupId(), categoryName)).thenReturn(Optional.of(expectedWastes));
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
mockMvc.perform(get("/api/waste/group/{groupId}/category/{categoryNumber}", group.getGroupId(), categoryNumber))
.andExpect(status().isOk())
.andExpect(jsonPath("$", hasSize(2)))
.andExpect(jsonPath("$[0].wasteId").value(expectedWastes.get(0).getWasteId()))
.andExpect(jsonPath("$[1].wasteId").value(expectedWastes.get(1).getWasteId()));
verify(wasteService, times(1)).getWasteById(waste.getWasteId());
verify(wasteService, never()).createWaste(any(Waste.class));
verify(wasteService, times(1)).getWasteOfCategoryByGroupId(group.getGroupId(), categoryName);
}
@Test
public void testGetWasteById_found() {
when(wasteService.getWasteById(waste.getWasteId())).thenReturn(Optional.of(waste));
public void testGetInformationOfCakeGraph() throws Exception {
double[] expectedData = new double[]{0.3, 0.2, 0.5};
ResponseEntity<Waste> response = wasteController.getWasteById(waste.getWasteId());
when(wasteService.getCakeDiagram(group.getGroupId())).thenReturn(Optional.of(expectedData));
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals(waste, response.getBody());
mockMvc.perform(get("/api/waste/statistic/cakeGraph/{groupId}", group.getGroupId()))
.andExpect(status().isOk())
.andExpect(jsonPath("$", hasSize(3)))
.andExpect(jsonPath("$[0]").value(expectedData[0]))
.andExpect(jsonPath("$[1]").value(expectedData[1]))
.andExpect(jsonPath("$[2]").value(expectedData[2]));
verify(wasteService, times(1)).getWasteById(waste.getWasteId());
verify(wasteService, times(1)).getCakeDiagram(group.getGroupId());
}
@Test
public void testGetWasteById_notFound() {
when(wasteService.getWasteById(waste.getWasteId())).thenReturn(Optional.empty());
public void testGetWasteById_NotFound() throws Exception {
long nonExistingWasteId = 99L;
ResponseEntity<Waste> response = wasteController.getWasteById(waste.getWasteId());
when(wasteService.getWasteById(nonExistingWasteId)).thenReturn(Optional.empty());
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
mockMvc.perform(get("/api/waste/{wasteId}", nonExistingWasteId))
.andExpect(status().isNotFound());
verify(wasteService, times(1)).getWasteById(waste.getWasteId());
verify(wasteService, times(1)).getWasteById(nonExistingWasteId);
}
*/
}
\ No newline at end of file
}
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