// Path: src/main/java/io/github/proxyprint/kitchen/WebAppConfig.java
// @Configuration
// @EnableAutoConfiguration
// @ComponentScan
// @EnableCaching
// @EnableSwagger2
// @EnableAsync
// public class WebAppConfig extends SpringBootServletInitializer {
// 
//     private static final Class<WebAppConfig> APP_CLASS = WebAppConfig.class;
//         
//     @Override
//     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
//         return application.sources(APP_CLASS);
//     }
// 
//     public static void main(String[] args) throws IOException {
//         SpringApplication.run(APP_CLASS, args);
//     }
// 
//     @Bean
//     public EmbeddedServletContainerCustomizer containerCustomizer() {
//         return new EmbeddedServletContainerCustomizer() {
//             @Override
//             public void customize(ConfigurableEmbeddedServletContainer container) {
//                 Integer port;
//                 try {
//                     port = Integer.valueOf(System.getenv("PORT"));
//                 } catch (NumberFormatException ex) {
//                     port = 8080;
//                 }
//                 container.setPort(port);
//             }
//         };
//     }
// 
//     @Bean
//     public CorsFilter corsFilter() {
//         UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
//         CorsConfiguration config = new CorsConfiguration();
//         config.setAllowCredentials(true); // you USUALLY want this
//         config.addAllowedOrigin("*");
//         config.addAllowedHeader("*");
//         config.addAllowedMethod("GET");
//         config.addAllowedMethod("POST");
//         config.addAllowedMethod("DELETE");
//         config.addAllowedMethod("PUT");
//         source.registerCorsConfiguration("/**", config);
//         return new CorsFilter(source);
//     }
// 
//     @Bean
//     public Gson gson() {
//         return new GsonBuilder().setExclusionStrategies(new AnnotationExclusionStrategy()).create();
//     }
// 
//     @Bean
//     public Docket api() {
//         return new Docket(DocumentationType.SWAGGER_2)
//                 .select()
//                 .apis(RequestHandlerSelectors.any())
//                 .paths(PathSelectors.any())
//                 .build();
//     }
// 
//     @Bean
//     public NotificationManager notificationSubscriptions() {
//         return new NotificationManager();
//     }
// }
// 
// Path: src/main/java/io/github/proxyprint/kitchen/models/User.java
// @Entity
// @Table(name = "users")
// @Inheritance(strategy = InheritanceType.JOINED)
// public abstract class User implements Serializable {
// 
//     public static enum Roles {
//         ROLE_USER, ROLE_EMPLOYEE, ROLE_MANAGER, ROLE_ADMIN
//     }
// 
//     @Id
//     @GeneratedValue(strategy = GenerationType.IDENTITY)
//     protected long id;
//     @Column(name = "username", nullable = false, unique = true)
//     protected String username;
//     @JsonIgnore
//     @Column(name = "password", nullable = false)
//     protected String password;
//     @ElementCollection(fetch = FetchType.EAGER)
//     @CollectionTable(
//             name = "roles",
//             joinColumns = @JoinColumn(name = "user_id")
//     )
//     @Cascade(CascadeType.ALL)
//     protected Set<String> roles;
// 
//     public User() {
//         this.roles = new HashSet<>();
//     }
// 
//     public User(String username, String password) {
//         this.username = username;
//         this.password = password;
//         this.roles = new HashSet<>();
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public long getId() {
//         return id;
//     }
// 
//     public void setId(long id) {
//         this.id = id;
//     }
// 
//     public Collection<GrantedAuthority> getRoles() {
//         List<GrantedAuthority> authorities = new LinkedList<>();
//         for (String a : roles) {
//             authorities.add(new SimpleGrantedAuthority(a));
//         }
//         return authorities;
//     }
// 
//     public Set<String> getRolesSet() { return this.roles; }
// 
//     protected void addRole(String role) {
//         this.roles.add(role);
//     }
// 
//     @Override
//     public String toString() {
//         return "User{" + "id=" + id + ", username=" + username + ", password=" + password + ", roles=" + roles + '}';
//     }
// 
// }


import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import io.github.proxyprint.kitchen.WebAppConfig;
import io.github.proxyprint.kitchen.models.User;
import io.github.proxyprint.kitchen.models.repositories.UserDAO;
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.SpringApplicationConfiguration;
import org.springframework.boot.test.WebIntegrationTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
package controllers;


@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(WebAppConfig.class)
@WebIntegrationTest
public class ConsumerTests {

// Path: src/main/java/io/github/proxyprint/kitchen/WebAppConfig.java
// @Configuration
// @EnableAutoConfiguration
// @ComponentScan
// @EnableCaching
// @EnableSwagger2
// @EnableAsync
// public class WebAppConfig extends SpringBootServletInitializer {
// 
//     private static final Class<WebAppConfig> APP_CLASS = WebAppConfig.class;
//         
//     @Override
//     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
//         return application.sources(APP_CLASS);
//     }
// 
//     public static void main(String[] args) throws IOException {
//         SpringApplication.run(APP_CLASS, args);
//     }
// 
//     @Bean
//     public EmbeddedServletContainerCustomizer containerCustomizer() {
//         return new EmbeddedServletContainerCustomizer() {
//             @Override
//             public void customize(ConfigurableEmbeddedServletContainer container) {
//                 Integer port;
//                 try {
//                     port = Integer.valueOf(System.getenv("PORT"));
//                 } catch (NumberFormatException ex) {
//                     port = 8080;
//                 }
//                 container.setPort(port);
//             }
//         };
//     }
// 
//     @Bean
//     public CorsFilter corsFilter() {
//         UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
//         CorsConfiguration config = new CorsConfiguration();
//         config.setAllowCredentials(true); // you USUALLY want this
//         config.addAllowedOrigin("*");
//         config.addAllowedHeader("*");
//         config.addAllowedMethod("GET");
//         config.addAllowedMethod("POST");
//         config.addAllowedMethod("DELETE");
//         config.addAllowedMethod("PUT");
//         source.registerCorsConfiguration("/**", config);
//         return new CorsFilter(source);
//     }
// 
//     @Bean
//     public Gson gson() {
//         return new GsonBuilder().setExclusionStrategies(new AnnotationExclusionStrategy()).create();
//     }
// 
//     @Bean
//     public Docket api() {
//         return new Docket(DocumentationType.SWAGGER_2)
//                 .select()
//                 .apis(RequestHandlerSelectors.any())
//                 .paths(PathSelectors.any())
//                 .build();
//     }
// 
//     @Bean
//     public NotificationManager notificationSubscriptions() {
//         return new NotificationManager();
//     }
// }
// 
// Path: src/main/java/io/github/proxyprint/kitchen/models/User.java
// @Entity
// @Table(name = "users")
// @Inheritance(strategy = InheritanceType.JOINED)
// public abstract class User implements Serializable {
// 
//     public static enum Roles {
//         ROLE_USER, ROLE_EMPLOYEE, ROLE_MANAGER, ROLE_ADMIN
//     }
// 
//     @Id
//     @GeneratedValue(strategy = GenerationType.IDENTITY)
//     protected long id;
//     @Column(name = "username", nullable = false, unique = true)
//     protected String username;
//     @JsonIgnore
//     @Column(name = "password", nullable = false)
//     protected String password;
//     @ElementCollection(fetch = FetchType.EAGER)
//     @CollectionTable(
//             name = "roles",
//             joinColumns = @JoinColumn(name = "user_id")
//     )
//     @Cascade(CascadeType.ALL)
//     protected Set<String> roles;
// 
//     public User() {
//         this.roles = new HashSet<>();
//     }
// 
//     public User(String username, String password) {
//         this.username = username;
//         this.password = password;
//         this.roles = new HashSet<>();
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public long getId() {
//         return id;
//     }
// 
//     public void setId(long id) {
//         this.id = id;
//     }
// 
//     public Collection<GrantedAuthority> getRoles() {
//         List<GrantedAuthority> authorities = new LinkedList<>();
//         for (String a : roles) {
//             authorities.add(new SimpleGrantedAuthority(a));
//         }
//         return authorities;
//     }
// 
//     public Set<String> getRolesSet() { return this.roles; }
// 
//     protected void addRole(String role) {
//         this.roles.add(role);
//     }
// 
//     @Override
//     public String toString() {
//         return "User{" + "id=" + id + ", username=" + username + ", password=" + password + ", roles=" + roles + '}';
//     }
// 
// }


// Path: src/test/java/controllers/ConsumerTests.java
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import io.github.proxyprint.kitchen.WebAppConfig;
import io.github.proxyprint.kitchen.models.User;
import io.github.proxyprint.kitchen.models.repositories.UserDAO;
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.SpringApplicationConfiguration;
import org.springframework.boot.test.WebIntegrationTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

package controllers;


@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(WebAppConfig.class)
@WebIntegrationTest
public class ConsumerTests {

    @Autowired