diff --git a/pom.xml b/pom.xml
index 8b1fcbc..d84642f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,11 @@
spring-boot-starter-test
test
+
+ com.h2database
+ h2
+ test
+
org.springframework.security
spring-security-test
diff --git a/src/main/java/com/ceticamarco/bits/json/JsonEmitter.java b/src/main/java/com/ceticamarco/bits/json/JsonEmitter.java
index 73eef69..a0ccb99 100644
--- a/src/main/java/com/ceticamarco/bits/json/JsonEmitter.java
+++ b/src/main/java/com/ceticamarco/bits/json/JsonEmitter.java
@@ -19,7 +19,7 @@ public class JsonEmitter {
}
public String emitJsonKey() {
- String jsonString = "";
+ String jsonString;
try {
jsonString = objectMapper.writeValueAsString(this.entity);
@@ -31,7 +31,7 @@ public class JsonEmitter {
}
public String emitJsonKey(String key) {
- String jsonString = "";
+ String jsonString;
try {
var jsonNode = objectMapper.createObjectNode().put(key, this.entity.toString());
diff --git a/src/main/java/com/ceticamarco/bits/user/User.java b/src/main/java/com/ceticamarco/bits/user/User.java
index b3502b5..eb8cbb3 100644
--- a/src/main/java/com/ceticamarco/bits/user/User.java
+++ b/src/main/java/com/ceticamarco/bits/user/User.java
@@ -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; }
}
diff --git a/src/main/java/com/ceticamarco/bits/user/UserController.java b/src/main/java/com/ceticamarco/bits/user/UserController.java
index b871dcb..80fae3a 100644
--- a/src/main/java/com/ceticamarco/bits/user/UserController.java
+++ b/src/main/java/com/ceticamarco/bits/user/UserController.java
@@ -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 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 deleteUser(@RequestBody User user) {
// Check if email and password are specified
if(user.getPassword() == null || user.getEmail() == null) {
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index d4b4a27..473a212 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -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
\ No newline at end of file
+#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
\ No newline at end of file
diff --git a/src/test/java/com/ceticamarco/bits/BitsApplicationTests.java b/src/test/java/com/ceticamarco/bits/BitsApplicationTests.java
index 4cfbe0b..cbdda20 100644
--- a/src/test/java/com/ceticamarco/bits/BitsApplicationTests.java
+++ b/src/test/java/com/ceticamarco/bits/BitsApplicationTests.java
@@ -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));
+ }
}