Added unit tests for UserController
This commit is contained in:
parent
a577b29eec
commit
34c359bb76
5
pom.xml
5
pom.xml
@ -40,6 +40,11 @@
|
|||||||
<artifactId>spring-boot-starter-test</artifactId>
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.h2database</groupId>
|
||||||
|
<artifactId>h2</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.security</groupId>
|
<groupId>org.springframework.security</groupId>
|
||||||
<artifactId>spring-security-test</artifactId>
|
<artifactId>spring-security-test</artifactId>
|
||||||
|
@ -19,7 +19,7 @@ public class JsonEmitter<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String emitJsonKey() {
|
public String emitJsonKey() {
|
||||||
String jsonString = "";
|
String jsonString;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
jsonString = objectMapper.writeValueAsString(this.entity);
|
jsonString = objectMapper.writeValueAsString(this.entity);
|
||||||
@ -31,7 +31,7 @@ public class JsonEmitter<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String emitJsonKey(String key) {
|
public String emitJsonKey(String key) {
|
||||||
String jsonString = "";
|
String jsonString;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var jsonNode = objectMapper.createObjectNode().put(key, this.entity.toString());
|
var jsonNode = objectMapper.createObjectNode().put(key, this.entity.toString());
|
||||||
|
@ -48,4 +48,8 @@ public class User {
|
|||||||
public void setPassword(String password) { this.password = password; }
|
public void setPassword(String password) { this.password = password; }
|
||||||
|
|
||||||
public void setId(String id) { this.id = id; }
|
public void setId(String id) { this.id = id; }
|
||||||
|
|
||||||
|
public void setUsername(String username) { this.username = username; }
|
||||||
|
|
||||||
|
public void setEmail(String email) { this.email = email; }
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ public class UserController {
|
|||||||
* @param user the new user
|
* @param user the new user
|
||||||
* @return on success, the userId, on failure the error message
|
* @return on success, the userId, on failure the error message
|
||||||
*/
|
*/
|
||||||
@PostMapping("/users")
|
@PostMapping("/users/new")
|
||||||
public ResponseEntity<String> submitUser(@Valid @RequestBody User user) {
|
public ResponseEntity<String> submitUser(@Valid @RequestBody User user) {
|
||||||
var res = userService.addNewUser(user)
|
var res = userService.addNewUser(user)
|
||||||
.map(userId -> new JsonEmitter<>(userId).emitJsonKey("user_id"))
|
.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
|
* @param user the email and the password of the user
|
||||||
* @return on failure, the error message
|
* @return on failure, the error message
|
||||||
*/
|
*/
|
||||||
@DeleteMapping("/users")
|
@DeleteMapping("/users/delete")
|
||||||
public ResponseEntity<String> deleteUser(@RequestBody User user) {
|
public ResponseEntity<String> deleteUser(@RequestBody User user) {
|
||||||
// Check if email and password are specified
|
// Check if email and password are specified
|
||||||
if(user.getPassword() == null || user.getEmail() == null) {
|
if(user.getPassword() == null || user.getEmail() == null) {
|
||||||
|
@ -4,8 +4,13 @@ spring.jpa.properties.hibernate.format_sql=true
|
|||||||
|
|
||||||
# Adjust these values in production
|
# Adjust these values in production
|
||||||
server.port=3000
|
server.port=3000
|
||||||
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/bits
|
#spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/bits
|
||||||
spring.datasource.username=postgres
|
#spring.datasource.username=postgres
|
||||||
spring.datasource.password=toor
|
#spring.datasource.password=toor
|
||||||
spring.security.user.name=admin
|
#spring.security.user.name=admin
|
||||||
spring.security.user.password=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
|
@ -1,13 +1,65 @@
|
|||||||
package com.ceticamarco.bits;
|
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.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.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
|
@SpringBootTest
|
||||||
class BitsApplicationTests {
|
@AutoConfigureMockMvc
|
||||||
|
class UserControllerTest {
|
||||||
|
@Autowired
|
||||||
|
private MockMvc mockMvc;
|
||||||
|
@Autowired
|
||||||
|
private ObjectMapper objectMapper;
|
||||||
|
@MockBean
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
@Test
|
@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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user