From 7bb99bf27319d05e582d833dc8b76d3e381baf37 Mon Sep 17 00:00:00 2001 From: Jason Corchado Date: Wed, 21 Apr 2021 20:11:27 -0400 Subject: [PATCH] initial push --- .../com/lambdaschool/usermodel/SeedData.java | 9 +- .../src/main/resources/application.properties | 2 +- .../com/lambdaschool/usermodel/SeedData.java | 174 ++++++++++++++++ .../controllers/UserControllerTestNoDB.java | 151 ++++++++++++++ .../services/UserServiceImplTestNoDB.java | 185 ++++++++++++++++++ 5 files changed, 519 insertions(+), 2 deletions(-) create mode 100644 usermodel-initial/src/test/java/com/lambdaschool/usermodel/SeedData.java create mode 100644 usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerTestNoDB.java create mode 100644 usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplTestNoDB.java 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..29d5241 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,7 +24,13 @@ * after the application context has been loaded. */ @Transactional -@Component +@ConditionalOnProperty( + prefix = "command.line.runner", + value = "enabled", + havingValue = "true", + matchIfMissing = true +) +//@Component public class SeedData implements CommandLineRunner { 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..29d5241 --- /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("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/UserControllerTestNoDB.java b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerTestNoDB.java new file mode 100644 index 0000000..ad0ea8b --- /dev/null +++ b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/controllers/UserControllerTestNoDB.java @@ -0,0 +1,151 @@ +package com.lambdaschool.usermodel.controllers; + +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 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.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import java.util.ArrayList; +import java.util.List; + + +import static org.junit.Assert.*; +@RunWith(SpringRunner.class) +@WebMvcTest(value = UserController.class) +public class UserControllerTestNoDB { + + @Autowired + private MockMvc mockMvc; + + @MockBean // don't want to call the service bc it wouldn't be a unit test - it would be implementation + private UserService userService; + + private List userList; + + @Before + public void setUp() throws Exception { + + userList = new ArrayList<>(); + + Role r1 = new Role("admin"); + Role r2 = new Role("user"); + Role r3 = new Role("data"); + + r1.setRoleid(1); + r2.setRoleid(2); + r3.setRoleid(3); + + User u1 = new User("admintest", + "password", + "admin@lambdaschool.local"); + u1.setUserid(15); + 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().get(0).setUseremailid(11); + u1.getUseremails() + .add(new Useremail(u1, + "admin@mymail.local")); + u1.getUseremails().get(1).setUseremailid(12); + + User u2 = new User("cinnamontest", + "1234567", + "cinnamon@lambdaschool.local"); + u2.setUserid(16); + 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().get(0).setUseremailid(13); + u2.getUseremails() + .add(new Useremail(u2, + "hops@mymail.local")); + u2.getUseremails().get(1).setUseremailid(14); + u2.getUseremails() + .add(new Useremail(u2, + "bunny@email.local")); + u2.getUseremails().get(2).setUseremailid(15); + + User u3 = new User("barnbarntest", + "ILuvM4th!", + "barnbarn@lambdaschool.local"); + u3.setUserid(17); + u3.getRoles().add(new UserRoles(u3, r2)); + u3.getUseremails() + .add(new Useremail(u3, + "barnbarn@email.local")); + u3.getUseremails().get(0).setUseremailid(16); + + User u4 = new User("puttattest", + "password", + "puttat@school.lambda"); + u4.setUserid(18); + u4.getRoles().add(new UserRoles(u4, r2)); + + User u5 = new User("misskittytest", + "password", + "misskitty@school.lambda"); + u5.setUserid(19); + u5.getRoles().add(new UserRoles(u5, r2)); + + userList.add(u1); + userList.add(u2); + userList.add(u3); + userList.add(u4); + userList.add(u5); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void listAllUsers() { + } + + @Test + public void getUserById() { + } + + @Test + public void getUserByName() { + } + + @Test + public void getUserLikeName() { + } + + @Test + public void addNewUser() { + } + + @Test + public void updateFullUser() { + } + + @Test + public void updateUser() { + } + + @Test + public void deleteUserById() { + } + + @Test + public void getCurrentUserInfo() { + } +} \ 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..0835ed6 --- /dev/null +++ b/usermodel-initial/src/test/java/com/lambdaschool/usermodel/services/UserServiceImplTestNoDB.java @@ -0,0 +1,185 @@ +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.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 junit.framework.TestCase.assertEquals; + + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = UserModelApplicationTesting.class, + properties = {"command.line.runner.enabled=false"}) +public class UserServiceImplTestNoDB { + + @Autowired + 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"); + Role r2 = new Role("user"); + Role r3 = new Role("data"); + + r1 = roleService.save(r1); + r2 = roleService.save(r2); + r3 = roleService.save(r3); + + User u1 = new User("admintest", + "password", + "admin@lambdaschool.local"); + u1.setUserid(1); + 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")); + userList.add(u1); + + User u2 = new User("cinnamontest", + "1234567", + "cinnamon@lambdaschool.local"); + u2.setUserid(2); + 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")); + userList.add(u2); + + User u3 = new User("barnbarntest", + "ILuvM4th!", + "barnbarn@lambdaschool.local"); + u3.setUserid(3); + u3.getRoles() + .add(new UserRoles(u3, + r2)); + u3.getUseremails() + .add(new Useremail(u3, + "barnbarn@email.local")); + userList.add(u3); + + MockitoAnnotations.initMocks(this); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void findUserById() { + Mockito.when(userrepos.findById(1L)) + .thenReturn(Optional.of(userList.get(0))); + assertEquals("admintest", + userService.findUserById(1) + .getUsername()); + } + + @Test + public void findByNameContaining() { + Mockito.when(userrepos.findByUsernameContainingIgnoreCase("admintest")) + .thenReturn(userList); + assertEquals(3, + userService.findByNameContaining("admintest") + .size()); + } + + @Test + public void findAll() { + Mockito.when(userrepos.findAll()) + .thenReturn(userList); + assertEquals(3, + userService.findAll() + .size()); + } + + @Test + public void delete() { + Mockito.when(userrepos.findById(1L)) + .thenReturn(Optional.of(userList.get(0))); + Mockito.doNothing() + .when(userrepos) + .deleteById(1L); + userService.delete(1); + assertEquals(3, + userList.size()); + } + + @Test + public void findByName() { + Mockito.when(userrepos.findByUsername("barnbarntest")) + .thenReturn(userList.get(0)); + assertEquals(1, + userService.findByName("barnbarntest") + .getUserid()); + } + + @Test + public void save() { + } + + @Test + public void update() { + } + + @Test + public void deleteAll() { + Mockito.when(userrepos.findAll()) + .thenReturn(userList); + Mockito.doNothing() + .when(userrepos) + .deleteAll(); + userService.deleteAll(); + assertEquals(3, userList.size()); + } +} \ No newline at end of file