Spaces:
Sleeping
Sleeping
File size: 4,464 Bytes
bb5169d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
package com.krishna.controller;
import com.krishna.model.UserModel;
import com.krishna.repository.UserRepository;
import org.apache.commons.codec.digest.DigestUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
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.web.servlet.MockMvc;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import com.fasterxml.jackson.databind.ObjectMapper;
@WebMvcTest(UserController.class)
class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private UserRepository userRepository;
private ObjectMapper objectMapper;
private UserModel user;
@BeforeEach
void setUp() {
objectMapper = new ObjectMapper();
String rawPassword = "Password@123";
String hashedPassword = DigestUtils.sha1Hex(rawPassword); // from Apache Commons Codec
user = new UserModel("Krishna Dev", "krish123", "krishna@example.com", hashedPassword, rawPassword);
user.setId(UUID.randomUUID());
}
@Test
void registerUser_Success() throws Exception {
when(userRepository.findByEmail(user.getEmail())).thenReturn(Optional.empty());
when(userRepository.save(any(UserModel.class))).thenReturn(user);
mockMvc.perform(post("/user/register")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(user)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.email").value(user.getEmail()));
}
@Test
void registerUser_EmailAlreadyExists() throws Exception {
when(userRepository.findByEmail(user.getEmail())).thenReturn(Optional.of(user));
mockMvc.perform(post("/user/register")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(user)))
.andExpect(status().isBadRequest())
.andExpect(content().string("Email already registered."));
}
@Test
void loginUser_Success() throws Exception {
when(userRepository.findByEmail(user.getEmail())).thenReturn(Optional.of(user));
Map<String, String> loginRequest = new HashMap<>();
loginRequest.put("email", user.getEmail());
loginRequest.put("password", "Password@123");
mockMvc.perform(post("/user/login")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(loginRequest)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.email").value("krishna@example.com"))
.andExpect(jsonPath("$.username").value("krish123"))
.andExpect(jsonPath("$.token").exists());
}
@Test
void loginUser_InvalidPassword() throws Exception {
when(userRepository.findByEmail(user.getEmail())).thenReturn(Optional.of(user));
Map<String, String> loginRequest = new HashMap<>();
loginRequest.put("email", user.getEmail());
loginRequest.put("password", "WrongPassword123");
mockMvc.perform(post("/user/login")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(loginRequest)))
.andExpect(status().isUnauthorized())
.andExpect(content().string("Invalid password."));
}
@Test
void loginUser_UserNotFound() throws Exception {
when(userRepository.findByEmail(user.getEmail())).thenReturn(Optional.empty());
mockMvc.perform(post("/user/login")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(user)))
.andExpect(status().isNotFound())
.andExpect(content().string("User not found."));
}
}
|