diff --git a/usermodel-initial/src/main/java/com/lambdaschool/usermodel/services/UserServiceImpl.java b/usermodel-initial/src/main/java/com/lambdaschool/usermodel/services/UserServiceImpl.java
index 3b450cf..fa0c9a6 100755
--- a/usermodel-initial/src/main/java/com/lambdaschool/usermodel/services/UserServiceImpl.java
+++ b/usermodel-initial/src/main/java/com/lambdaschool/usermodel/services/UserServiceImpl.java
@@ -13,23 +13,14 @@
import java.util.ArrayList;
import java.util.List;
-/**
- * Implements UserService Interface
- */
@Transactional
@Service(value = "userService")
public class UserServiceImpl
implements UserService
{
- /**
- * Connects this service to the User table.
- */
@Autowired
private UserRepository userrepos;
- /**
- * Connects this service to the Role table
- */
@Autowired
private RoleService roleService;
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 100755
index 0000000..50d2caa
--- /dev/null
+++ b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/SeedData.java
@@ -0,0 +1,167 @@
+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.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
+@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("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("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("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("puttat",
+ "password",
+ "puttat@school.lambda");
+ u4.getRoles()
+ .add(new UserRoles(u4,
+ r2));
+ userService.save(u4);
+
+ User u5 = new User("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/UserControllerIntegrationTest.java b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerIntegrationTest.java
new file mode 100644
index 0000000..f74f261
--- /dev/null
+++ b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerIntegrationTest.java
@@ -0,0 +1,189 @@
+package com.lambdaschool.usermodel.controllers;
+
+import com.lambdaschool.usermodel.UserModelApplication;
+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.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)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+ classes = UserModelApplication.class)
+@AutoConfigureMockMvc
+public class UserControllerIntegrationTest
+{
+ @Autowired
+ private WebApplicationContext webApplicationContext;
+
+ private MockMvc mockMvc;
+
+
+ @Before
+ public void setUp() throws Exception
+ {
+ RestAssuredMockMvc.webAppContextSetup(webApplicationContext);
+
+ mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
+ .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("timestamp",
+ (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}",
+ 100))
+ .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}",
+ "rabbit"))
+ .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}",
+ 100))
+ .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());
+ }
+}
diff --git a/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerUnitNoDBTest.java b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerUnitNoDBTest.java
new file mode 100644
index 0000000..ab9a118
--- /dev/null
+++ b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerUnitNoDBTest.java
@@ -0,0 +1,398 @@
+package com.lambdaschool.usermodel.controllers;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.lambdaschool.usermodel.UserModelApplication;
+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.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.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+/**************************************************************************************************
+ ********************* REMEMBER TO TURN OFF SEEDDATA (both in test and main) *********************
+ **************************************************************************************************/
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+ classes = UserModelApplication.class)
+@AutoConfigureMockMvc
+public class UserControllerUnitNoDBTest
+{
+ @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);
+
+ // admin, data, user
+ User u1 = new User("admin",
+ "ILuvM4th!",
+ "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@email.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);
+
+ // data, user
+ ArrayList datas = new ArrayList<>();
+ User u2 = new User("cinnamon",
+ "1234567",
+ "cinnamon@lambdaschool.test");
+ u1.getRoles()
+ .add(new UserRoles(u2,
+ r2));
+ u1.getRoles()
+ .add(new UserRoles(u2,
+ r3));
+
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "cinnamon@mymail.test"));
+ u2.getUseremails()
+ .get(0)
+ .setUseremailid(20);
+
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "hops@mymail.test"));
+ u2.getUseremails()
+ .get(1)
+ .setUseremailid(21);
+
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "bunny@email.test"));
+ u2.getUseremails()
+ .get(2)
+ .setUseremailid(22);
+
+ u2.setUserid(102);
+ userList.add(u2);
+
+ // user
+ User u3 = new User("testingbarn",
+ "ILuvM4th!",
+ "testingbarn@school.lambda");
+ 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",
+ "password",
+ "testingcat@school.lambda");
+ u4.getRoles()
+ .add(new UserRoles(u4,
+ r2));
+
+ u4.setUserid(104);
+ userList.add(u4);
+
+ User u5 = new User("testingdog",
+ "password",
+ "testingdog@school.lambda");
+ u4.getRoles()
+ .add(new UserRoles(u5,
+ r2));
+
+ u5.setUserid(105);
+ userList.add(u5);
+
+ RestAssuredMockMvc.webAppContextSetup(webApplicationContext);
+
+ mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
+ .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);
+
+ // the following actually performs a real controller call
+ MvcResult r = mockMvc.perform(rb)
+ .andReturn(); // this could throw an exception
+ String tr = r.getResponse()
+ .getContentAsString();
+
+ ObjectMapper mapper = new ObjectMapper();
+ String er = mapper.writeValueAsString(userList);
+
+ System.out.println("Expect: " + er);
+ System.out.println("Actual: " + tr);
+
+ assertEquals("Rest API Returns List",
+ er,
+ tr);
+ }
+
+ @Test
+ public void listUsersNameContaining() throws
+ Exception
+ {
+ String apiUrl = "/users/user/name/like/cin";
+
+ Mockito.when(userService.findByNameContaining(any(String.class)))
+ .thenReturn(userList);
+
+ RequestBuilder rb = MockMvcRequestBuilders.get(apiUrl)
+ .accept(MediaType.APPLICATION_JSON);
+
+ // the following actually performs a real controller call
+ MvcResult r = mockMvc.perform(rb)
+ .andReturn(); // this could throw an exception
+ String tr = r.getResponse()
+ .getContentAsString();
+
+ ObjectMapper mapper = new ObjectMapper();
+ String er = mapper.writeValueAsString(userList);
+
+ System.out.println("Expect: " + er);
+ System.out.println("Actual: " + tr);
+
+ 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(); // this could throw an exception
+ String tr = r.getResponse()
+ .getContentAsString();
+
+ ObjectMapper mapper = new ObjectMapper();
+ String er = mapper.writeValueAsString(userList.get(1));
+
+ System.out.println("Expect: " + er);
+ System.out.println("Actual: " + tr);
+
+ assertEquals("Rest API Returns List",
+ er,
+ tr);
+ }
+
+ @Test
+ public void getUserByIdNotFound() throws
+ Exception
+ {
+ String apiUrl = "/users/user/77";
+
+ Mockito.when(userService.findUserById(77))
+ .thenReturn(null);
+
+ RequestBuilder rb = MockMvcRequestBuilders.get(apiUrl)
+ .accept(MediaType.APPLICATION_JSON);
+ MvcResult r = mockMvc.perform(rb)
+ .andReturn(); // this could throw an exception
+ String tr = r.getResponse()
+ .getContentAsString();
+
+ String er = "";
+
+ System.out.println("Expect: " + er);
+ System.out.println("Actual: " + tr);
+
+ assertEquals("Rest API Returns List",
+ er,
+ tr);
+ }
+
+ @Test
+ public void getUserByName() throws
+ Exception
+ {
+ String apiUrl = "/users/user/name/testing";
+
+ Mockito.when(userService.findByName("testing"))
+ .thenReturn(userList.get(0));
+
+ RequestBuilder rb = MockMvcRequestBuilders.get(apiUrl)
+ .accept(MediaType.APPLICATION_JSON);
+ MvcResult r = mockMvc.perform(rb)
+ .andReturn(); // this could throw an exception
+ String tr = r.getResponse()
+ .getContentAsString();
+
+ ObjectMapper mapper = new ObjectMapper();
+ String er = mapper.writeValueAsString(userList.get(0));
+
+ System.out.println("Expect: " + er);
+ System.out.println("Actual: " + tr);
+
+ 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.post(apiUrl)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON)
+ .content("{\"username\": \"tiger\", \"password\": \"ILuvM4th!\", \"primaryemail\" : \"tiger@home.local\"}");
+
+ mockMvc.perform(rb)
+ .andExpect(status().isCreated())
+ .andDo(MockMvcResultHandlers.print());
+ }
+
+ @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\": \"tigerUpdated\", \"password\": \"EATEATEAT\", \"primaryemail\" : \"ginger@home.local\"}");
+
+ mockMvc.perform(rb)
+ .andExpect(status().is2xxSuccessful())
+ .andDo(MockMvcResultHandlers.print());
+ }
+
+ @Test
+ public void updateUserPatch() throws
+ Exception
+ {
+ String apiUrl = "/users/user/{userid}";
+
+ Mockito.when(userService.update(any(User.class),
+ any(Long.class)))
+ .thenReturn(userList.get(0));
+
+ RequestBuilder rb = MockMvcRequestBuilders.patch(apiUrl,
+ 100L)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON)
+ .content("{\"username\": \"tigerUpdated\", \"password\": \"EATEATEAT\", \"primaryemail\" : \"ginger@home.local\"}");
+
+ 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());
+ }
+}
\ No newline at end of file
diff --git a/usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplTestNoDB.java b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplTestNoDB.java
new file mode 100644
index 0000000..8c53969
--- /dev/null
+++ b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplTestNoDB.java
@@ -0,0 +1,412 @@
+package com.lambdaschool.usermodel.services;
+
+import com.lambdaschool.usermodel.UserModelApplication;
+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.UserRepository;
+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 junit.framework.TestCase.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+
+/**************************************************************************************************
+ ********************* REMEMBER TO TURN OFF SEEDDATA (both in test and main) *********************
+ **************************************************************************************************/
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = UserModelApplication.class)
+public class UserServiceImplNoDBTest
+{
+ @Autowired
+ private UserService userService;
+
+ @MockBean
+ private UserRepository userrepos;
+
+ @MockBean
+ private RoleService roleService;
+
+ 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);
+
+ // admin, data, user
+ User u1 = new User("admin",
+ "ILuvM4th!",
+ "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@email.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);
+
+ // data, user
+ ArrayList datas = new ArrayList<>();
+ User u2 = new User("cinnamon",
+ "1234567",
+ "cinnamon@lambdaschool.test");
+ u1.getRoles()
+ .add(new UserRoles(u2,
+ r2));
+ u1.getRoles()
+ .add(new UserRoles(u2,
+ r3));
+
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "cinnamon@mymail.test"));
+ u2.getUseremails()
+ .get(0)
+ .setUseremailid(20);
+
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "hops@mymail.test"));
+ u2.getUseremails()
+ .get(1)
+ .setUseremailid(21);
+
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "bunny@email.test"));
+ u2.getUseremails()
+ .get(2)
+ .setUseremailid(22);
+
+ u2.setUserid(102);
+ userList.add(u2);
+
+ // user
+ User u3 = new User("testingbarn",
+ "ILuvM4th!",
+ "testingbarn@school.lambda");
+ 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",
+ "password",
+ "testingcat@school.lambda");
+ u4.getRoles()
+ .add(new UserRoles(u4,
+ r2));
+
+ u4.setUserid(104);
+ userList.add(u4);
+
+ User u5 = new User("testingdog",
+ "password",
+ "testingdog@school.lambda");
+ u4.getRoles()
+ .add(new UserRoles(u5,
+ r2));
+
+ u5.setUserid(105);
+ userList.add(u5);
+
+ MockitoAnnotations.initMocks(this);
+ }
+
+ @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(10L))
+ .thenReturn(Optional.empty());
+
+ assertEquals("admin",
+ userService.findUserById(10L)
+ .getUsername());
+ }
+
+ @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 notFoundDelete()
+ {
+ Mockito.when(userrepos.findById(10L))
+ .thenReturn(Optional.empty());
+
+ Mockito.doNothing()
+ .when(userrepos)
+ .deleteById(10L);
+
+ userService.delete(10L);
+ assertEquals(5,
+ userList.size());
+ }
+
+ @Test
+ public void findByUsername()
+ {
+ Mockito.when(userrepos.findByUsername("admin"))
+ .thenReturn(userList.get(0));
+
+ assertEquals("admin",
+ userService.findByName("admin")
+ .getUsername());
+ }
+
+ @Test(expected = ResourceNotFoundException.class)
+ public void findByUsernameNotfound()
+ {
+ Mockito.when(userrepos.findByUsername("nonsense"))
+ .thenReturn(null);
+
+ assertEquals("nonsense",
+ userService.findByName("nonsense")
+ .getUsername());
+ }
+
+ @Test
+ public void findByNameContaining()
+ {
+ Mockito.when(userrepos.findByUsernameContainingIgnoreCase("a"))
+ .thenReturn(userList);
+
+ assertEquals(5,
+ userService.findByNameContaining("a")
+ .size());
+ }
+
+ @Test
+ public void save()
+ {
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("tiger",
+ "ILuvMath!",
+ "tiger@school.lambda");
+ u2.getRoles()
+ .add(new UserRoles(u2,
+ r2));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "tiger@tiger.local"));
+
+ Mockito.when(userrepos.save(any(User.class)))
+ .thenReturn(u2);
+
+ Mockito.when(roleService.findRoleById(2))
+ .thenReturn(r2);
+
+ assertEquals("tiger",
+ userService.save(u2)
+ .getUsername());
+ }
+
+ @Test
+ public void savePut()
+ {
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("tiger",
+ "ILuvMath!",
+ "tiger@school.lambda");
+ u2.getRoles()
+ .add(new UserRoles(u2,
+ r2));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "tiger@tiger.local"));
+ u2.setUserid(103L);
+
+ Mockito.when(roleService.findRoleById(2))
+ .thenReturn(r2);
+
+ Mockito.when(userrepos.findById(103L))
+ .thenReturn(Optional.of(u2));
+
+ Mockito.when(userrepos.save(any(User.class)))
+ .thenReturn(u2);
+
+ assertEquals(103L,
+ userService.save(u2)
+ .getUserid());
+ }
+
+ @Test
+ public void update()
+ {
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("cinnamon",
+ "password",
+ "cinnamon@school.lambda");
+ u2.getRoles()
+ .add(new UserRoles(u2,
+ r2));
+
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "cinnamon@mymail.thump"));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "hops@mymail.thump"));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "bunny@email.thump"));
+
+ 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);
+
+ assertEquals("bunny@email.thump",
+ userService.update(u2,
+ 103L)
+ .getUseremails()
+ .get(2)
+ .getUseremail());
+ }
+
+ @Test(expected = ResourceNotFoundException.class)
+ public void updateNotFound()
+ {
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("cinnamon",
+ "password",
+ "cinnamon@school.lambda");
+ u2.getRoles()
+ .add(new UserRoles(u2,
+ r2));
+
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "cinnamon@mymail.thump"));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "hops@mymail.thump"));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "bunny@email.thump"));
+
+ Mockito.when(roleService.findRoleById(2))
+ .thenReturn(r2);
+
+ Mockito.when(userrepos.findById(103L))
+ .thenReturn(Optional.empty());
+
+ Mockito.when(userrepos.save(any(User.class)))
+ .thenReturn(u2);
+
+ assertEquals("bunny@email.thump",
+ userService.update(u2,
+ 103L)
+ .getUseremails()
+ .get(2)
+ .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/java/com/lambdaschool/usermodel/services/UserServiceImplWithDBTest.java b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplWithDBTest.java
new file mode 100644
index 0000000..46032fe
--- /dev/null
+++ b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplWithDBTest.java
@@ -0,0 +1,267 @@
+package com.lambdaschool.usermodel.services;
+
+import com.lambdaschool.usermodel.UserModelApplication;
+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.MockitoAnnotations;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static junit.framework.TestCase.assertEquals;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = UserModelApplication.class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class UserServiceImplWithDBTest
+{
+ @Autowired
+ private UserService userService;
+
+ @Before
+ public void setUp() throws Exception
+ {
+ MockitoAnnotations.initMocks(this);
+ }
+
+ @After
+ public void tearDown() throws Exception
+ {
+ }
+
+ @Test
+ public void B_findUserById()
+ {
+ assertEquals("admin",
+ userService.findUserById(4)
+ .getUsername());
+ }
+
+ @Test(expected = ResourceNotFoundException.class)
+ public void BA_findUserByIdNotFound()
+ {
+ assertEquals("admin",
+ userService.findUserById(10)
+ .getUsername());
+ }
+
+ @Test
+ public void C_findAll()
+ {
+ assertEquals(5,
+ userService.findAll()
+ .size());
+ }
+
+ @Test
+ public void D_delete()
+ {
+ userService.delete(13);
+ assertEquals(4,
+ userService.findAll()
+ .size());
+ }
+
+ @Test(expected = ResourceNotFoundException.class)
+ public void DA_notFoundDelete()
+ {
+ userService.delete(100);
+ assertEquals(4,
+ userService.findAll()
+ .size());
+ }
+
+ @Test
+ public void E_findByUsername()
+ {
+ assertEquals("admin",
+ userService.findByName("admin")
+ .getUsername());
+ }
+
+ @Test(expected = ResourceNotFoundException.class)
+ public void AA_findByUsernameNotfound()
+ {
+ assertEquals("admin",
+ userService.findByName("turtle")
+ .getUsername());
+ }
+
+ @Test
+ public void AB_findByNameContaining()
+ {
+ assertEquals(4,
+ userService.findByNameContaining("a")
+ .size());
+ }
+
+ @Test
+ public void F_save()
+ {
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("tiger",
+ "ILuvMath!",
+ "tiger@school.lambda");
+ u2.getRoles()
+ .add(new UserRoles(u2,
+ r2));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "tiger@tiger.local"));
+
+ User saveU2 = userService.save(u2);
+
+ System.out.println("*** DATA ***");
+ System.out.println(saveU2);
+ System.out.println("*** DATA ***");
+
+ assertEquals("tiger@tiger.local",
+ saveU2.getUseremails()
+ .get(0)
+ .getUseremail());
+ }
+
+ @Test(expected = ResourceNotFoundException.class)
+ public void FA_saveputnotfound()
+ {
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("tiger",
+ "ILuvMath!",
+ "tiger@school.lambda");
+ u2.getRoles()
+ .add(new UserRoles(u2,
+ r2));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "tiger@tiger.local"));
+ u2.setUserid(777);
+
+ User saveU2 = userService.save(u2);
+
+ System.out.println("*** DATA ***");
+ System.out.println(saveU2);
+ System.out.println("*** DATA ***");
+
+ assertEquals("tiger@tiger.local",
+ saveU2.getUseremails()
+ .get(0)
+ .getUseremail());
+ }
+
+ @Test
+ public void FA_saveputfound()
+ {
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("mojo",
+ "ILuvMath!",
+ "mojo@school.lambda");
+ u2.getRoles()
+ .add(new UserRoles(u2,
+ r2));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "mojo@corgi.local"));
+ u2.setUserid(4);
+
+ User saveU2 = userService.save(u2);
+
+ System.out.println("*** DATA ***");
+ System.out.println(saveU2);
+ System.out.println("*** DATA ***");
+
+ assertEquals("mojo@corgi.local",
+ saveU2.getUseremails()
+ .get(0)
+ .getUseremail());
+ }
+
+ @Test
+ public void G_update()
+ {
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("cinnamon",
+ "password",
+ "cinnamon@school.lambda");
+ u2.getRoles()
+ .add(new UserRoles(u2,
+ r2));
+
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "cinnamon@mymail.thump"));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "hops@mymail.thump"));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "bunny@email.thump"));
+
+ User updatedu2 = userService.update(u2,
+ 7);
+
+ System.out.println("*** DATA ***");
+ System.out.println(updatedu2);
+ System.out.println("*** DATA ***");
+
+ int checking = updatedu2.getUseremails()
+ .size() - 1;
+ assertEquals("bunny@email.thump",
+ updatedu2.getUseremails()
+ .get(checking)
+ .getUseremail());
+ }
+
+ @Test(expected = ResourceNotFoundException.class)
+ public void GB_updateNotCurrentUserNorAdmin()
+ {
+ Role r2 = new Role("user");
+ r2.setRoleid(2);
+
+ User u2 = new User("cinnamon",
+ "password",
+ "cinnamon@school.lambda");
+ u2.getRoles()
+ .add(new UserRoles(u2,
+ r2));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "cinnamon@mymail.thump"));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "hops@mymail.thump"));
+ u2.getUseremails()
+ .add(new Useremail(u2,
+ "bunny@email.thump"));
+
+ User updatedu2 = userService.update(u2,
+ 8);
+
+ System.out.println("*** DATA ***");
+ System.out.println(updatedu2);
+ System.out.println("*** DATA ***");
+
+ int checking = updatedu2.getUseremails()
+ .size() - 1;
+ assertEquals("bunny@email.thump",
+ updatedu2.getUseremails()
+ .get(checking)
+ .getUseremail());
+ }
+}
\ No newline at end of file