diff --git a/usermodel-initial/src/main/java/com/lambdaschool/usermodel/SeedData.java b/usermodel-initial/src/main/java/com/lambdaschool/usermodel/SeedData.java
index 50d2caa..0d265d1 100755
--- a/usermodel-initial/src/main/java/com/lambdaschool/usermodel/SeedData.java
+++ b/usermodel-initial/src/main/java/com/lambdaschool/usermodel/SeedData.java
@@ -11,6 +11,7 @@
import com.lambdaschool.usermodel.services.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@@ -23,6 +24,12 @@
* after the application context has been loaded.
*/
@Transactional
+@ConditionalOnProperty(
+ prefix = "command.line.runner",
+ value = "enabled",
+ havingValue = "true",
+ matchIfMissing = true
+)
@Component
public class SeedData
implements CommandLineRunner
diff --git a/usermodel-initial/src/main/java/com/lambdaschool/usermodel/UserModelApplication.java b/usermodel-initial/src/main/java/com/lambdaschool/usermodel/UserModelApplication.java
index 6a7fd50..a871c2f 100644
--- a/usermodel-initial/src/main/java/com/lambdaschool/usermodel/UserModelApplication.java
+++ b/usermodel-initial/src/main/java/com/lambdaschool/usermodel/UserModelApplication.java
@@ -9,7 +9,7 @@
/**
* Main class to start the application.
*/
-@EnableJpaAuditing
+//@EnableJpaAuditing
@SpringBootApplication
public class UserModelApplication
{
diff --git a/usermodel-initial/src/main/java/com/lambdaschool/usermodel/config/SimpleCorsFilter.java b/usermodel-initial/src/main/java/com/lambdaschool/usermodel/config/SimpleCorsFilter.java
index 46fb9d2..3655f90 100644
--- a/usermodel-initial/src/main/java/com/lambdaschool/usermodel/config/SimpleCorsFilter.java
+++ b/usermodel-initial/src/main/java/com/lambdaschool/usermodel/config/SimpleCorsFilter.java
@@ -17,7 +17,7 @@
*/
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
-public class SimpleCorsFilter
+public abstract class SimpleCorsFilter
implements Filter
{
@Override
diff --git a/usermodel-initial/src/main/resources/application.properties b/usermodel-initial/src/main/resources/application.properties
index 6467ccd..92abaad 100644
--- a/usermodel-initial/src/main/resources/application.properties
+++ b/usermodel-initial/src/main/resources/application.properties
@@ -17,7 +17,7 @@ spring.jpa.open-in-view=true
# What do with the schema
# drop n create table again, good for testing
spring.jpa.hibernate.ddl-auto=create
-spring.datasource.initialization-mode=always
+spring.datasource.initialization-mode=never
#
# Good for production!
# spring.jpa.hibernate.ddl-auto=update
diff --git a/usermodel-initial/src/test/java/com/lambdaschool/usermodel/SeedData.java b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/SeedData.java
new file mode 100644
index 0000000..6a31e3b
--- /dev/null
+++ b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/SeedData.java
@@ -0,0 +1,174 @@
+package com.lambdaschool.usermodel;
+
+import com.github.javafaker.Faker;
+import com.github.javafaker.service.FakeValuesService;
+import com.github.javafaker.service.RandomService;
+import com.lambdaschool.usermodel.models.Role;
+import com.lambdaschool.usermodel.models.User;
+import com.lambdaschool.usermodel.models.UserRoles;
+import com.lambdaschool.usermodel.models.Useremail;
+import com.lambdaschool.usermodel.services.RoleService;
+import com.lambdaschool.usermodel.services.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Locale;
+
+/**
+ * SeedData puts both known and random data into the database. It implements CommandLineRunner.
+ *
+ * CoomandLineRunner: Spring Boot automatically runs the run method once and only once
+ * after the application context has been loaded.
+ */
+@Transactional
+@ConditionalOnProperty(
+ prefix = "command.line.runner",
+ value = "enabled",
+ havingValue = "true",
+ matchIfMissing = true
+)
+@Component
+public class SeedData
+ implements CommandLineRunner
+{
+ /**
+ * Connects the Role Service to this process
+ */
+ @Autowired
+ RoleService roleService;
+
+ /**
+ * Connects the user service to this process
+ */
+ @Autowired
+ UserService userService;
+
+ /**
+ * Generates test, seed data for our application
+ * First a set of known data is seeded into our database.
+ * Second a random set of data using Java Faker is seeded into our database.
+ * Note this process does not remove data from the database. So if data exists in the database
+ * prior to running this process, that data remains in the database.
+ *
+ * @param args The parameter is required by the parent interface but is not used in this process.
+ */
+ @Transactional
+ @Override
+ public void run(String[] args) throws
+ Exception
+ {
+ userService.deleteAll();
+ roleService.deleteAll();
+ Role r1 = new Role("admin");
+ Role r2 = new Role("user");
+ Role r3 = new Role("data");
+
+ r1 = roleService.save(r1);
+ r2 = roleService.save(r2);
+ r3 = roleService.save(r3);
+
+ // admin, data, user
+ User u1 = new User("test admin",
+ "password",
+ "admin@lambdaschool.local");
+ u1.getRoles()
+ .add(new UserRoles(u1,
+ r1));
+ u1.getRoles()
+ .add(new UserRoles(u1,
+ r2));
+ u1.getRoles()
+ .add(new UserRoles(u1,
+ r3));
+ u1.getUseremails()
+ .add(new Useremail(u1,
+ "admin@email.local"));
+ u1.getUseremails()
+ .add(new Useremail(u1,
+ "admin@mymail.local"));
+
+ userService.save(u1);
+
+ // data, user
+ User u2 = new User("test cinnamon",
+ "1234567",
+ "cinnamon@lambdaschool.local");
+ u2.getRoles()
+ .add(new UserRoles(u2,
+ r2));
+ u2.getRoles()
+ .add(new UserRoles(u2,
+ r3));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "cinnamon@mymail.local"));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "hops@mymail.local"));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "bunny@email.local"));
+ userService.save(u2);
+
+ // user
+ User u3 = new User("test barnbarn",
+ "ILuvM4th!",
+ "barnbarn@lambdaschool.local");
+ u3.getRoles()
+ .add(new UserRoles(u3,
+ r2));
+ u3.getUseremails()
+ .add(new Useremail(u3,
+ "barnbarn@email.local"));
+ userService.save(u3);
+
+ User u4 = new User("test puttat",
+ "password",
+ "puttat@school.lambda");
+ u4.getRoles()
+ .add(new UserRoles(u4,
+ r2));
+ userService.save(u4);
+
+ User u5 = new User("test misskitty",
+ "password",
+ "misskitty@school.lambda");
+ u5.getRoles()
+ .add(new UserRoles(u5,
+ r2));
+ userService.save(u5);
+
+ if (false)
+ {
+ // using JavaFaker create a bunch of regular users
+ // https://www.baeldung.com/java-faker
+ // https://www.baeldung.com/regular-expressions-java
+
+ FakeValuesService fakeValuesService = new FakeValuesService(new Locale("en-US"),
+ new RandomService());
+ Faker nameFaker = new Faker(new Locale("en-US"));
+
+ for (int i = 0; i < 25; i++)
+ {
+ new User();
+ User fakeUser;
+
+ fakeUser = new User(nameFaker.name()
+ .username(),
+ "password",
+ nameFaker.internet()
+ .emailAddress());
+ fakeUser.getRoles()
+ .add(new UserRoles(fakeUser,
+ r2));
+ fakeUser.getUseremails()
+ .add(new Useremail(fakeUser,
+ fakeValuesService.bothify("????##@gmail.com")));
+ userService.save(fakeUser);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerTestIntegration.java b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerTestIntegration.java
new file mode 100644
index 0000000..cf08b1e
--- /dev/null
+++ b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerTestIntegration.java
@@ -0,0 +1,161 @@
+package com.lambdaschool.usermodel.controllers;
+
+import com.lambdaschool.usermodel.UserModelApplicationTesting;
+import io.restassured.module.mockmvc.RestAssuredMockMvc;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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.http.MediaType;
+import org.springframework.security.test.context.support.WithUserDetails;
+import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+
+import static org.hamcrest.Matchers.containsString;
+import static org.junit.Assert.assertTrue;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@RunWith(SpringRunner.class)
+@WithUserDetails("admin")
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = UserModelApplicationTesting.class)
+@AutoConfigureMockMvc
+public class UserControllerTestIntegration {
+
+ @Autowired
+ private WebApplicationContext webApplicationContext;
+
+ private MockMvc mockMvc;
+
+ @Before
+ public void setUp() throws Exception {
+ RestAssuredMockMvc.webAppContextSetup(webApplicationContext);
+ mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
+ .apply(SecurityMockMvcConfigurers.springSecurity()).build();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void whenMeasuredResponseTime() throws Exception {
+ long time = System.currentTimeMillis();
+ this.mockMvc.perform(get("/users/users")).andDo(print());
+ long responseTime = (System.currentTimeMillis() - time);
+
+ assertTrue((responseTime < 5000L));
+ }
+
+ @Test
+ public void getAllUsers() throws Exception {
+ this.mockMvc.perform(get("/users/users"))
+ .andDo(print())
+ .andExpect(status().isOk())
+ .andExpect(content().string(containsString("cinnamon")));
+ }
+
+
+ @Test
+ public void getUserLikeName() throws Exception {
+ this.mockMvc.perform(get("/users/user/name/like/{userName}", "kitty"))
+ .andDo(print())
+ .andExpect(status().isOk())
+ .andExpect(content().string(containsString("misskitty")));
+ }
+
+ @Test
+ public void getUserById() throws Exception {
+ this.mockMvc.perform(get("/users/user/{userid}", 4))
+ .andDo(print())
+ .andExpect(status().isOk())
+ .andExpect(content().string(containsString("admin")));
+ }
+
+ @Test
+ public void getUserByIdNotFound() throws Exception {
+ this.mockMvc.perform(get("/users/user/{userid}", 400))
+ .andDo(print())
+ .andExpect(status().is4xxClientError())
+ .andExpect(content().string(containsString("ResourceNotFoundException")));
+ }
+
+ @Test
+ public void getUserByName() throws Exception {
+ this.mockMvc.perform(get("/users/user/name/{userName}", "admin"))
+ .andDo(print())
+ .andExpect(status().isOk())
+ .andExpect(content().string(containsString("admin")));
+ }
+ @Test
+ public void getUserByNameNotFound() throws Exception {
+ this.mockMvc.perform(get("/users/user/name/{userName}", "nimda"))
+ .andDo(print())
+ .andExpect(status().is4xxClientError())
+ .andExpect(content().string(containsString("ResourceNotFoundException")));
+ }
+
+
+ @Test
+ public void givenPostAUser() throws Exception {
+ mockMvc.perform(MockMvcRequestBuilders.post("/users/user")
+ .content("{\"username\": \"Ginger\", \"password\": \"EATEATEAT\", \"primaryemail\": \"ginger@home.local\" }")
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
+ .andDo(print())
+ .andExpect(status().isCreated())
+ .andExpect(MockMvcResultMatchers.header()
+ .exists("location"));
+
+ }
+ @Test
+ public void givenPutAUser() throws Exception {
+ mockMvc.perform(MockMvcRequestBuilders.put("/users/user/11")
+ .content("{\"username\": \"stumps\", \"password\": \"EATEATEAT\", \"primaryemail\": \"stumps@home.local\" }")
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
+ .andDo(print())
+ .andExpect(status().isOk());
+ }
+
+ @Test
+ public void deleteUserById() throws Exception {
+ mockMvc.perform(MockMvcRequestBuilders.delete("/users/user/{id}", 13))
+ .andDo(print())
+ .andExpect(status().is2xxSuccessful());
+ }
+ @Test
+ public void deleteUserByIdNotFound() throws Exception {
+ mockMvc.perform(MockMvcRequestBuilders.delete("/users/user/{id}", 130))
+ .andDo(print())
+ .andExpect(status().is4xxClientError());
+ }
+
+ @Test
+ public void updateUser() throws Exception {
+ mockMvc.perform(MockMvcRequestBuilders.patch("/users/user/{userid}", 7)
+ .content("{\"password\": \"EATEATEAT\"}")
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
+ .andDo(print())
+ .andExpect(status().isOk());
+ }
+
+ @Test
+ public void getCurrentUserInfo() throws Exception {
+ this.mockMvc.perform(get("/users/getuserinfo"))
+ .andDo(print())
+ .andExpect(status().isOk())
+ .andExpect(content().string(containsString("admin")));
+ }
+}
\ No newline at end of file
diff --git a/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerTestNoDB.java b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerTestNoDB.java
new file mode 100644
index 0000000..53eedfc
--- /dev/null
+++ b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerTestNoDB.java
@@ -0,0 +1,291 @@
+package com.lambdaschool.usermodel.controllers;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.lambdaschool.usermodel.UserModelApplicationTesting;
+import com.lambdaschool.usermodel.models.Role;
+import com.lambdaschool.usermodel.models.User;
+import com.lambdaschool.usermodel.models.UserRoles;
+import com.lambdaschool.usermodel.models.Useremail;
+import com.lambdaschool.usermodel.services.UserService;
+import io.restassured.module.mockmvc.RestAssuredMockMvc;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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.security.test.context.support.WithMockUser;
+import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.MvcResult;
+import org.springframework.test.web.servlet.RequestBuilder;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@RunWith(SpringRunner.class)
+@WithMockUser(username = "admin", roles = {"USER", "ADMIN"})
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+ classes = UserModelApplicationTesting.class,
+ properties = {"command.line.runner.enabled=false"})
+@AutoConfigureMockMvc
+public class UserControllerTestNoDB {
+
+ @Autowired
+ private WebApplicationContext webApplicationContext;
+
+ private MockMvc mockMvc;
+
+ @MockBean
+ private UserService userService;
+
+ private List userList;
+
+ @Before
+ public void setUp() throws Exception {
+ userList = new ArrayList<>();
+
+ Role r1 = new Role("admin");
+ r1.setRoleid(1);
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+ Role r3 = new Role("data");
+ r3.setRoleid(3);
+
+ User u1 = new User("admin", "password", "admin@lambda.test");
+ u1.getRoles().add(new UserRoles(u1, r1));
+ u1.getRoles().add(new UserRoles(u1, r2));
+ u1.getRoles().add(new UserRoles(u1, r3));
+
+ u1.getUseremails().add(new Useremail(u1, "admin@test.test"));
+ u1.getUseremails().get(0).setUseremailid(10);
+ u1.getUseremails().add(new Useremail(u1, "admin@mymail.test"));
+ u1.getUseremails().get(1).setUseremailid(11);
+
+ u1.setUserid(101);
+ userList.add(u1);
+
+ ArrayList datas = new ArrayList<>();
+ User u2 = new User("cinnamon", "password", "cinnamon@lambda.test");
+ u2.getRoles().add(new UserRoles(u2, r2));
+ u2.getRoles().add(new UserRoles(u2, r3));
+
+ u2.getUseremails().add(new Useremail(u2, "cinnamon@test.test"));
+ u2.getUseremails().get(0).setUseremailid(20);
+ u2.getUseremails().add(new Useremail(u2, "cinnamon@ymail.test"));
+ u2.getUseremails().get(1).setUseremailid(21);
+ u2.getUseremails().add(new Useremail(u2, "cinnamon@email.test"));
+ u2.getUseremails().get(2).setUseremailid(22);
+
+ u2.setUserid(102);
+ userList.add(u2);
+
+ User u3 = new User("barn", "password", "barn@lambda.test");
+ u3.getRoles().add(new UserRoles(u3, r1));
+ u3.getUseremails().add(new Useremail(u3, "barn@test.test"));
+ u3.getUseremails().get(0).setUseremailid(30);
+
+ u3.setUserid(103);
+ userList.add(u3);
+
+ User u4 = new User("cat", "password", "cat@test.test");
+ u4.getRoles().add(new UserRoles(u4, r2));
+
+ u4.setUserid(104);
+ userList.add(u4);
+
+ User u5 = new User("dog", "password", "dog@test.test");
+ u5.getRoles().add(new UserRoles(u5, r2));
+
+ u5.setUserid(105);
+ userList.add(u5);
+
+ RestAssuredMockMvc.webAppContextSetup(webApplicationContext);
+
+ mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
+ .apply(SecurityMockMvcConfigurers.springSecurity())
+ .build();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void listAllUsers() throws Exception{
+ String apiUrl = "/users/users";
+
+ Mockito.when(userService.findAll()).thenReturn(userList);
+
+ RequestBuilder rb = MockMvcRequestBuilders.get(apiUrl).accept(MediaType.APPLICATION_JSON);
+
+ MvcResult r = mockMvc.perform(rb).andReturn();
+ String tr = r.getResponse().getContentAsString();
+
+ ObjectMapper mapper = new ObjectMapper();
+ String er = mapper.writeValueAsString(userList);
+
+ assertEquals("Rest API Returns List", er, tr);
+ }
+
+ @Test
+ public void getUserById() throws Exception {
+ String apiUrl = "/users/user/12";
+
+ Mockito.when(userService.findUserById(12)).thenReturn(userList.get(1));
+
+ RequestBuilder rb = MockMvcRequestBuilders.get(apiUrl).accept(MediaType.APPLICATION_JSON);
+
+ MvcResult r = mockMvc.perform(rb).andReturn();
+ String tr = r.getResponse().getContentAsString();
+
+ ObjectMapper mapper = new ObjectMapper();
+ String er = mapper.writeValueAsString(userList);
+
+ assertEquals("Rest API Returns List", er, tr);
+ }
+ @Test
+ public void getUserByIdNotFound() throws Exception {
+ String apiUrl = "/users/user/88";
+
+ Mockito.when(userService.findUserById(88)).thenReturn(null);
+
+ RequestBuilder rb = MockMvcRequestBuilders.get(apiUrl).accept(MediaType.APPLICATION_JSON);
+
+ MvcResult r = mockMvc.perform(rb).andReturn();
+ String tr = r.getResponse().getContentAsString();
+
+ ObjectMapper mapper = new ObjectMapper();
+ String er = mapper.writeValueAsString(userList);
+
+ assertEquals("Rest API Returns List", er, tr);
+ }
+
+ @Test
+ public void getUserByName() throws Exception {
+ String apiUrl = "/users/user/name/admin";
+
+ Mockito.when(userService.findByName("admin")).thenReturn(userList.get(0));
+
+ RequestBuilder rb = MockMvcRequestBuilders.get(apiUrl).accept(MediaType.APPLICATION_JSON);
+
+ MvcResult r = mockMvc.perform(rb).andReturn();
+ String tr = r.getResponse().getContentAsString();
+
+ ObjectMapper mapper = new ObjectMapper();
+ String er = mapper.writeValueAsString(userList);
+
+ assertEquals("Rest API Returns List", er, tr);
+ }
+
+// @Test
+// public void getUserLikeName() {
+// String apiUrl = "/users/user/name/admin";
+//
+// Mockito.when(userService.findByName("admin")).thenReturn(userList.get(0));
+//
+// RequestBuilder rb = MockMvcRequestBuilders.get(apiUrl).accept(MediaType.APPLICATION_JSON);
+//
+// MvcResult r = mockMvc.perform(rb).andReturn();
+// String tr = r.getResponse().getContentAsString();
+//
+// ObjectMapper mapper = new ObjectMapper();
+// String er = mapper.writeValueAsString(userList);
+//
+// assertEquals("Rest API Returns List", er, tr);
+// }
+
+ @Test
+ public void addNewUser() throws Exception {
+ String apiUrl = "/users/user";
+
+ Mockito.when(userService.save(any(User.class))).thenReturn(userList.get(0));
+
+ RequestBuilder rb = MockMvcRequestBuilders.get(apiUrl)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON)
+ .content("{\"username\": \"admin\", \"password\": \"password\", \"primaryemail\": \"admin@test.test\" }");
+
+ mockMvc.perform(rb)
+ .andExpect(status().isCreated())
+ .andDo(MockMvcResultHandlers.print());
+ }
+
+// @Test
+// public void updateFullUser() {
+// String apiUrl = "/users/user/name/admin";
+//
+// Mockito.when(userService.findByName("admin")).thenReturn(userList.get(0));
+//
+// RequestBuilder rb = MockMvcRequestBuilders.get(apiUrl).accept(MediaType.APPLICATION_JSON);
+//
+// MvcResult r = mockMvc.perform(rb).andReturn();
+// String tr = r.getResponse().getContentAsString();
+//
+// ObjectMapper mapper = new ObjectMapper();
+// String er = mapper.writeValueAsString(userList);
+//
+// assertEquals("Rest API Returns List", er, tr);
+// }
+
+ @Test
+ public void updateUser() throws Exception {
+ String apiUrl = "/users/user/{userid}";
+
+ Mockito.when(userService.update(any(User.class), any(Long.class)))
+ .thenReturn(userList.get(0));
+
+ RequestBuilder rb = MockMvcRequestBuilders.put(apiUrl, 100L)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON)
+ .content("{\"username\": \"adminupdated\", \"password\": \"password\", \"primaryemail\": \"admin@test.test\" }");
+
+ mockMvc.perform(rb)
+ .andExpect(status().is2xxSuccessful())
+ .andDo(MockMvcResultHandlers.print());
+ }
+
+ @Test
+ public void deleteUserById() throws Exception {
+ String apiUrl = "/users/user/{userid}";
+
+ RequestBuilder rb = MockMvcRequestBuilders.delete(apiUrl, "3")
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON);
+
+ mockMvc.perform(rb)
+ .andExpect(status().is2xxSuccessful())
+ .andDo(MockMvcResultHandlers.print());
+ }
+
+ @Test
+ public void getCurrentUserInfo() throws Exception {
+ String apiUrl = "/users/getuserinfo";
+
+ Mockito.when(userService.findByName(anyString())).thenReturn(userList.get(0));
+
+ RequestBuilder rb = MockMvcRequestBuilders.get(apiUrl).accept(MediaType.APPLICATION_JSON);
+
+ MvcResult r = mockMvc.perform(rb).andReturn();
+ String tr = r.getResponse().getContentAsString();
+
+ ObjectMapper mapper = new ObjectMapper();
+ String er = mapper.writeValueAsString(userList.get(0));
+
+ assertEquals("Rest API Returns List", er, tr);
+ }
+}
\ No newline at end of file
diff --git a/usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplTestWithDB.java b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplTestWithDB.java
new file mode 100644
index 0000000..86eb50d
--- /dev/null
+++ b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplTestWithDB.java
@@ -0,0 +1,128 @@
+package com.lambdaschool.usermodel.services;
+
+import com.lambdaschool.usermodel.UserModelApplicationTesting;
+import com.lambdaschool.usermodel.exceptions.ResourceNotFoundException;
+import com.lambdaschool.usermodel.models.Role;
+import com.lambdaschool.usermodel.models.User;
+import com.lambdaschool.usermodel.models.UserRoles;
+import com.lambdaschool.usermodel.models.Useremail;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.MethodSorters;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.anyString;
+
+
+
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = UserModelApplicationTesting.class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class UserServiceImplTestWithDB {
+
+ @Autowired
+ private UserService userService;
+
+ @MockBean
+ HelperFunctions helperFunctions;
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void findUserById() {
+ assertEquals("admin", userService.findUserById(4).getUsername());
+ }
+
+ @Test(expected = ResourceNotFoundException.class)
+ public void findUserByIdNotFound() {
+ assertEquals("admin", userService.findUserById(100).getUsername());
+ }
+
+ @Test
+ public void findByNameContaining() {
+ assertEquals(4, userService.findByNameContaining("a").size());
+ }
+
+ @Test
+ public void findAll() {
+ assertEquals(5, userService.findAll().size());
+ }
+
+ @Test
+ public void delete() {
+ userService.delete(13);
+ assertEquals(4, userService.findAll().size());
+ }
+ @Test(expected = ResourceNotFoundException.class)
+ public void deleteNotFound() {
+ userService.delete(100);
+ assertEquals(4, userService.findAll().size());
+ }
+
+ @Test
+ public void findByName() {
+ assertEquals("admin", userService.findByName("admin").getUsername());
+ }
+
+ @Test(expected = ResourceNotFoundException.class)
+ public void findByNameNotFound() {
+ assertEquals("admin", userService.findByName("namenotindb").getUsername());
+ }
+
+ @Test
+ public void save() {
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("test", "testpw", "test@email.com");
+ u2.getRoles().add(new UserRoles(u2, r2));
+ u2.getUseremails().add(new Useremail(u2, "test2@test2.com"));
+
+ User saveU2 = userService.save(u2);
+
+ assertEquals("test2@test2.com", saveU2.getUseremails().get(0).getUseremail());
+ }
+
+ @Test
+ public void update() {
+ Mockito.when(helperFunctions.isAuthorizedToMakeChange(anyString())).thenReturn(true);
+
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("testupdate", "testpw", "temail@temail.com");
+ u2.getRoles().add(new UserRoles(u2, r2));
+
+ u2.getUseremails().add(new Useremail(u2, "temail2@temail2.com"));
+ u2.getUseremails().add(new Useremail(u2, "temail3@temail3.com"));
+ u2.getUseremails().add(new Useremail(u2, "temail4@temail4.com"));
+
+ User updatedu2 = userService.update(u2, 7);
+
+ int checking = updatedu2.getUseremails().size() - 1;
+ assertEquals("temail4@temail4.com", updatedu2.getUseremails().get(checking).getUseremail());
+ }
+
+ @Test
+ public void deleteAll() {
+ userService.deleteAll();
+ assertEquals(0, userService.findAll().size());
+ }
+}
\ No newline at end of file
diff --git a/usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplUnitTestNoDB.java b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplUnitTestNoDB.java
new file mode 100644
index 0000000..e4a0bf4
--- /dev/null
+++ b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplUnitTestNoDB.java
@@ -0,0 +1,222 @@
+package com.lambdaschool.usermodel.services;
+
+import com.lambdaschool.usermodel.UserModelApplicationTesting;
+import com.lambdaschool.usermodel.exceptions.ResourceNotFoundException;
+import com.lambdaschool.usermodel.models.Role;
+import com.lambdaschool.usermodel.models.User;
+import com.lambdaschool.usermodel.models.UserRoles;
+import com.lambdaschool.usermodel.models.Useremail;
+import com.lambdaschool.usermodel.repository.RoleRepository;
+import com.lambdaschool.usermodel.repository.UserRepository;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.junit.Assert.*;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = UserModelApplicationTesting.class,
+ properties = {"command.line.runner.enable=false"})
+public class UserServiceImplUnitTestNoDB {
+
+ // Mocks -> fake data
+ // Stubs -> fake methods
+ // Java calls them both mocks usually
+ @Autowired
+ private UserService userService;
+
+ @MockBean
+ private UserRepository userrepos;
+
+ @MockBean
+ private RoleService roleService;
+
+ @MockBean
+ private HelperFunctions helperFunctions;
+
+ private List userList;
+
+ @MockBean
+ private UserRepository userRepository;
+
+ @MockBean
+ private RoleRepository roleRepository;
+
+ @Before
+ public void setUp() throws Exception {
+ userList = new ArrayList<>();
+
+ Role r1 = new Role("admin");
+ r1.setRoleid(1);
+ Role r2 = new Role("user");
+ r2.setRoleid(1);
+ Role r3 = new Role("data");
+ r3.setRoleid(1);
+
+ User u1 = new User("admin", "testpw", "admin@lambdaschool.test");
+ u1.getRoles().add(new UserRoles(u1, r1));
+ u1.getRoles().add(new UserRoles(u1, r2));
+ u1.getRoles().add(new UserRoles(u1, r3));
+ u1.getUseremails().add(new Useremail(u1, "admin@mymail.test"));
+ u1.getUseremails().get(1).setUseremailid(11);
+ u1.setUserid(101);
+ userList.add(u1);
+
+ ArrayList datas = new ArrayList<>();
+ User u2 = new User("cinnamon", "testpw", "cinnamon@lambdaschool.test");
+ u2.getRoles().add(new UserRoles(u2, r2));
+ u2.getRoles().add(new UserRoles(u2, r3));
+ u2.getUseremails().add(new Useremail(u2, "cinnamon@ymail.test"));
+ u2.getUseremails().get(0).setUseremailid(20);
+ u2.getUseremails().add(new Useremail(u2, "bunny@ymail.test"));
+ u2.getUseremails().get(1).setUseremailid(21);
+ u2.getUseremails().add(new Useremail(u2, "hops@ymail.test"));
+ u2.getUseremails().get(2).setUseremailid(22);
+
+ u2.setUserid(102);
+ userList.add(u2);
+
+ User u3 = new User("testingbarn", "testpw", "testingbarn@lambdaschool.test");
+ u3.getRoles().add(new UserRoles(u3, r1));
+ u3.getUseremails().add(new Useremail(u3, "barnbarn@email.test"));
+ u3.getUseremails().get(0).setUseremailid(30);
+
+ u3.setUserid(103);
+ userList.add(u3);
+
+ User u4 = new User("testingcat", "testpw", "testingcat@lambdaschool.test");
+ u4.getRoles().add(new UserRoles(u4, r2));
+
+ u4.setUserid(104);
+ userList.add(u4);
+
+ User u5 = new User("testingdog", "testpw", "testingdog@lambdaschool.test");
+ u5.getRoles().add(new UserRoles(u5, r2));
+
+ u5.setUserid(105);
+ userList.add(u5);
+
+ MockitoAnnotations.initMocks(this);
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void findUserById() {
+ Mockito.when(userrepos.findById(101L))
+ .thenReturn(Optional.of(userList.get(0)));
+
+ assertEquals("admin", userService.findUserById(101L).getUsername());
+ }
+ @Test(expected = ResourceNotFoundException.class)
+ public void findUserByIdNotFound() {
+ Mockito.when(userrepos.findById(101L))
+ .thenReturn(Optional.empty());
+
+ assertEquals("admin", userService.findUserById(101L).getUsername());
+ }
+
+ @Test
+ public void findByNameContaining() {
+ Mockito.when(userrepos.findByUsernameContainingIgnoreCase("a")).thenReturn(userList);
+
+ assertEquals(5, userService.findByNameContaining("a").size());
+ }
+
+ @Test
+ public void findAll() {
+ Mockito.when(userrepos.findAll()).thenReturn(userList);
+
+ assertEquals(5, userService.findAll().size());
+ }
+
+ @Test
+ public void delete() {
+ Mockito.when(userrepos.findById(103L)).thenReturn(Optional.of(userList.get(0)));
+
+ Mockito.doNothing().when(userrepos).deleteById(103L);
+
+ userService.delete(103L);
+ assertEquals(5, userList.size());
+ }
+ @Test(expected = ResourceNotFoundException.class)
+ public void deleteNotFound() {
+ Mockito.when(userrepos.findById(10L)).thenReturn(Optional.empty());
+
+ Mockito.doNothing().when(userrepos).deleteById(10L);
+
+ userService.delete(10L);
+ assertEquals(5, userList.size());
+ }
+
+ @Test
+ public void findByName() {
+ Mockito.when(userrepos.findByUsername("admin")).thenReturn(userList.get(0));
+
+ assertEquals("admin", userService.findByName("admin").getUsername());
+ }
+ @Test(expected = ResourceNotFoundException.class)
+ public void findByNameNotFound() {
+ Mockito.when(userrepos.findByUsername("gibberish")).thenReturn(null);
+
+ assertEquals("gibberish", userService.findByName("gibberish").getUsername());
+ }
+
+ @Test
+ public void save() {
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("user", "password", "user@user.test");
+ u2.getRoles().add(new UserRoles(u2, r2));
+ u2.getUseremails().add(new Useremail(u2, "user@ymail.test"));
+
+ Mockito.when(userrepos.save(any(User.class))).thenReturn(u2);
+ Mockito.when(roleService.findRoleById(2)).thenReturn(r2);
+
+ assertEquals("user", userService.save(u2).getUsername());
+ }
+
+ @Test
+ public void update() {
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("user", "password", "user@user.test");
+ u2.getRoles().add(new UserRoles(u2, r2));
+ u2.getUseremails().add(new Useremail(u2, "user@ymail.test"));
+ u2.getUseremails().add(new Useremail(u2, "bunny@email.test"));
+
+ Mockito.when(roleService.findRoleById(2)).thenReturn(r2);
+
+ Mockito.when(userrepos.findById(103L)).thenReturn(Optional.of(userList.get(2)));
+ Mockito.when(userrepos.save(any(User.class))).thenReturn(u2);
+
+ Mockito.when(helperFunctions.isAuthorizedToMakeChange(anyString())).thenReturn(true);
+
+ assertEquals("bunny@email.test", userService.update(u2, 103L).getUseremails().get(1).getUseremail());
+
+ }
+
+ @Test
+ public void deleteAll() {
+ Mockito.doNothing().when(userrepos).deleteAll();
+
+ userService.deleteAll();
+ assertEquals(5, userList.size());
+ }
+}
\ No newline at end of file
diff --git a/usermodel-initial/src/test/resources/application.properties b/usermodel-initial/src/test/resources/application.properties
new file mode 100644
index 0000000..92abaad
--- /dev/null
+++ b/usermodel-initial/src/test/resources/application.properties
@@ -0,0 +1,34 @@
+# Configurations useful for working with H2
+spring.h2.console.enabled=true
+spring.h2.console.path=/h2-console
+#
+# We set a port that is not frequently used
+server.port=${PORT:2019}
+#
+# Feature that determines what happens when no accessors are found for a type
+# (and there are no annotations to indicate it is meant to be serialized).
+spring.jackson.serialization.fail-on-empty-beans=false
+#
+# keeps a transaction inside of the same entity manager
+# This property register an EntityManager to the current thread,
+# so you will have the same EntityManager until the web request is finished.
+spring.jpa.open-in-view=true
+#
+# What do with the schema
+# drop n create table again, good for testing
+spring.jpa.hibernate.ddl-auto=create
+spring.datasource.initialization-mode=never
+#
+# Good for production!
+# spring.jpa.hibernate.ddl-auto=update
+# since we have our data in SeedData, do not also load it from data.sql
+# spring.datasource.initialization-mode=never
+#
+# Used to set the date format for JSON Output
+spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
+spring.jackson.time-zone=America/Los_Angeles
+#
+# Turns off Spring Boot automatic exception handling
+server.error.whitelabel.enabled=false
+spring.mvc.throw-exception-if-no-handler-found=true
+spring.resources.add-mappings=false