Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial commit. #12

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Completes MVP.
eet349 committed May 3, 2021

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 558339f7d7543f3345daaa39cbf33d520dc2cdb6
6 changes: 6 additions & 0 deletions usermodel-initial/pom.xml
Original file line number Diff line number Diff line change
@@ -95,6 +95,12 @@
<version>2.3.6.RELEASE</version>
</dependency>
<!-- Security Dependencies End -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>spring-mock-mvc</artifactId>
<version>3.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@
/**
* Main class to start the application.
*/
@EnableJpaAuditing
//@EnableJpaAuditing
@SpringBootApplication
public class UserModelApplication
{
Original file line number Diff line number Diff line change
@@ -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\": \"[email protected]\" }")
.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\": \"[email protected]\" }")
.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")));
}
}
Original file line number Diff line number Diff line change
@@ -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<User> 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<UserRoles> 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);
}
}
Original file line number Diff line number Diff line change
@@ -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());
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,114 @@
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<User> 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<UserRoles> 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
@@ -25,33 +117,106 @@ 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());
}
}
34 changes: 34 additions & 0 deletions usermodel-initial/src/test/resources/application.properties
Original file line number Diff line number Diff line change
@@ -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