Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
6 changes: 6 additions & 0 deletions usermodel-initial/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
/**
* Main class to start the application.
*/
@EnableJpaAuditing
//@EnableJpaAuditing
@SpringBootApplication
public class UserModelApplication
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*/
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCorsFilter
public abstract class SimpleCorsFilter
implements Filter
{
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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.
* <p>
* 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);
}
}
}
}
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\": \"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")));
}
}
Loading