Added unit tests for UserController

This commit is contained in:
Marco Cetica 2024-01-15 09:35:20 +01:00
parent a577b29eec
commit 34c359bb76
Signed by: marco
GPG Key ID: 45060A949E90D0FD
6 changed files with 77 additions and 11 deletions

View File

@ -40,6 +40,11 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>

View File

@ -19,7 +19,7 @@ public class JsonEmitter<T> {
}
public String emitJsonKey() {
String jsonString = "";
String jsonString;
try {
jsonString = objectMapper.writeValueAsString(this.entity);
@ -31,7 +31,7 @@ public class JsonEmitter<T> {
}
public String emitJsonKey(String key) {
String jsonString = "";
String jsonString;
try {
var jsonNode = objectMapper.createObjectNode().put(key, this.entity.toString());

View File

@ -48,4 +48,8 @@ public class User {
public void setPassword(String password) { this.password = password; }
public void setId(String id) { this.id = id; }
public void setUsername(String username) { this.username = username; }
public void setEmail(String email) { this.email = email; }
}

View File

@ -40,7 +40,7 @@ public class UserController {
* @param user the new user
* @return on success, the userId, on failure the error message
*/
@PostMapping("/users")
@PostMapping("/users/new")
public ResponseEntity<String> submitUser(@Valid @RequestBody User user) {
var res = userService.addNewUser(user)
.map(userId -> new JsonEmitter<>(userId).emitJsonKey("user_id"))
@ -59,7 +59,7 @@ public class UserController {
* @param user the email and the password of the user
* @return on failure, the error message
*/
@DeleteMapping("/users")
@DeleteMapping("/users/delete")
public ResponseEntity<String> deleteUser(@RequestBody User user) {
// Check if email and password are specified
if(user.getPassword() == null || user.getEmail() == null) {

View File

@ -4,8 +4,13 @@ spring.jpa.properties.hibernate.format_sql=true
# Adjust these values in production
server.port=3000
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/bits
spring.datasource.username=postgres
spring.datasource.password=toor
spring.security.user.name=admin
spring.security.user.password=admin
#spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/bits
#spring.datasource.username=postgres
#spring.datasource.password=toor
#spring.security.user.name=admin
#spring.security.user.password=admin
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password

View File

@ -1,13 +1,65 @@
package com.ceticamarco.bits;
import com.ceticamarco.bits.user.User;
import com.ceticamarco.bits.user.UserService;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.vavr.control.Either;
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.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import java.util.Optional;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
@SpringBootTest
class BitsApplicationTests {
@AutoConfigureMockMvc
class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@MockBean
private UserService userService;
@Test
void contextLoads() {
public void addNewUser() throws Exception {
var user = new User();
user.setUsername("john");
user.setEmail("john@example.com");
user.setPassword("qwerty");
when(userService.addNewUser(any(User.class))).thenReturn(Either.right("userId123"));
mockMvc.perform(MockMvcRequestBuilders.post("/users/new")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(user)))
.andExpect(MockMvcResultMatchers.status().isOk());
Mockito.verify(userService, Mockito.times(1)).addNewUser(any(User.class));
}
@Test
public void deleteExistingUser() throws Exception {
var user = new User();
user.setEmail("john@example.com");
user.setPassword("qwerty");
when(userService.deleteUser(any(User.class))).thenReturn(Optional.empty());
mockMvc.perform(MockMvcRequestBuilders.delete("/users/delete")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(user)))
.andExpect(MockMvcResultMatchers.status().isOk());
Mockito.verify(userService, Mockito.times(1)).deleteUser(any(User.class));
}
}