ronaldkwandy

Untitled

Nov 6th, 2019
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.13 KB | None | 0 0
  1. package id.co.sofcograha.gajiidapi.testutils;
  2.  
  3. import static org.hamcrest.Matchers.is;
  4. import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
  5. import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
  6. import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
  7. import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
  8. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
  9. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
  10. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
  11.  
  12. import java.util.Map;
  13. import java.util.Properties;
  14.  
  15. import org.junit.After;
  16. import org.junit.AfterClass;
  17. import org.junit.Before;
  18. import org.junit.BeforeClass;
  19. import org.junit.runner.RunWith;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
  22. import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
  23. import org.springframework.boot.test.context.SpringBootTest;
  24. import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
  25. import org.springframework.http.MediaType;
  26. import org.springframework.security.core.context.SecurityContextHolder;
  27. import org.springframework.test.context.TestPropertySource;
  28. import org.springframework.test.context.junit4.SpringRunner;
  29. import org.springframework.test.web.servlet.MockMvc;
  30. import org.springframework.test.web.servlet.ResultActions;
  31. import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
  32.  
  33. import com.fasterxml.jackson.databind.ObjectMapper;
  34.  
  35. import id.co.sofcograha.gajiidapi.FunctionAccessListForTest;
  36. import id.co.sofcograha.gajiidapi.GajiIdApiApplicationTests;
  37. import id.co.sofcograha.gajiidapi.base.authentication.anonymous.AnonymousAuthentication;
  38. import id.co.sofcograha.gajiidapi.base.constants.BaseConstants;
  39. import id.co.sofcograha.gajiidapi.base.extendables.BaseEntity;
  40. import id.co.sofcograha.gajiidapi.base.extendables.BaseRepository;
  41. import id.co.sofcograha.gajiidapi.base.mst.company.entities.Company;
  42. import id.co.sofcograha.gajiidapi.base.mst.company.repositories.CompanyRepository;
  43. import id.co.sofcograha.gajiidapi.base.mst.companyfunctionaccess.entities.CompanyFunctionAccess;
  44. import id.co.sofcograha.gajiidapi.base.mst.companyfunctionaccess.repositories.CompanyFunctionAccessRepository;
  45. import id.co.sofcograha.gajiidapi.base.mst.customer.entities.Customer;
  46. import id.co.sofcograha.gajiidapi.base.mst.customer.repositories.CustomerRepository;
  47. import id.co.sofcograha.gajiidapi.base.mst.functionaccess.entities.FunctionAccess;
  48. import id.co.sofcograha.gajiidapi.base.mst.functionaccess.repositories.FunctionAccessRepository;
  49. import id.co.sofcograha.gajiidapi.base.mst.groupuser.entities.GroupUser;
  50. import id.co.sofcograha.gajiidapi.base.mst.groupuser.repositories.GroupUserRepository;
  51. import id.co.sofcograha.gajiidapi.base.mst.groupuserfunctionaccess.entities.GroupUserFunctionAccess;
  52. import id.co.sofcograha.gajiidapi.base.mst.groupuserfunctionaccess.repositories.GroupUserFunctionAccessRepository;
  53. import id.co.sofcograha.gajiidapi.base.mst.report.repositories.ReportRepository;
  54. import id.co.sofcograha.gajiidapi.base.mst.reportlog.repositories.ReportLogRepository;
  55. import id.co.sofcograha.gajiidapi.base.mst.systemconfig.repositories.SystemConfigRepository;
  56. import id.co.sofcograha.gajiidapi.base.mst.user.entities.User;
  57. import id.co.sofcograha.gajiidapi.base.mst.user.repositories.UserRepository;
  58. import id.co.sofcograha.gajiidapi.base.mst.usercompany.entities.UserCompany;
  59. import id.co.sofcograha.gajiidapi.base.mst.usercompany.repositories.UserCompanyRepository;
  60. import id.co.sofcograha.gajiidapi.base.mst.userfunctionaccess.entities.UserFunctionAccess;
  61. import id.co.sofcograha.gajiidapi.base.mst.userfunctionaccess.repositories.UserFunctionAccessRepository;
  62. import id.co.sofcograha.gajiidapi.base.mst.usergroupuser.entities.UserGroupUser;
  63. import id.co.sofcograha.gajiidapi.base.mst.usergroupuser.repositories.UserGroupUserRepository;
  64. import id.co.sofcograha.gajiidapi.base.utils.PasswordUtil;
  65. import id.co.sofcograha.gajiidapi.base.utils.TokenUtil;
  66. import id.co.sofcograha.gajiidapi.testutils.testcases.BaseControllerTestCases;
  67.  
  68. @RunWith(SpringRunner.class)
  69. @SpringBootTest(classes = GajiIdApiApplicationTests.class, webEnvironment = WebEnvironment.RANDOM_PORT)
  70. @AutoConfigureTestDatabase
  71. @AutoConfigureMockMvc
  72. @TestPropertySource(locations = "classpath:application-test.properties", inheritLocations = false)
  73. public abstract class BaseControllerIntegrationTest<E extends BaseEntity, R extends BaseRepository<E>>
  74.         implements BaseControllerTestCases {
  75.  
  76.     @Autowired
  77.     protected MockMvc mockMvc;
  78.  
  79.     @Autowired
  80.     private CustomerRepository customerRepo;
  81.  
  82.     @Autowired
  83.     private UserRepository userRepo;
  84.  
  85.     @Autowired
  86.     private CompanyRepository companyRepo;
  87.  
  88.     @Autowired
  89.     private GroupUserRepository groupUserRepo;
  90.  
  91.     @Autowired
  92.     private UserGroupUserRepository userGroupUserRepo;
  93.  
  94.     @Autowired
  95.     private UserCompanyRepository userCompanyRepo;
  96.  
  97.     @Autowired
  98.     private FunctionAccessRepository functionAccessRepo;
  99.  
  100.     @Autowired
  101.     private CompanyFunctionAccessRepository companyFunctionAccessRepo;
  102.  
  103.     @Autowired
  104.     private UserFunctionAccessRepository userFunctionAccessRepo;
  105.  
  106.     @Autowired
  107.     private GroupUserFunctionAccessRepository groupUserFunctionAccessRepo;
  108.    
  109.     @Autowired
  110.     private ReportLogRepository reportLogRepository;
  111.    
  112.     @Autowired
  113.     private ReportRepository reportRepository;
  114.  
  115.     @Autowired
  116.     private SystemConfigRepository systemConfigRepository;
  117.    
  118.     @Autowired
  119.     protected R repo;
  120.  
  121.     @Autowired
  122.     protected ObjectMapper objectMapper;
  123.  
  124.     private static String username = "tester";
  125.     private static String companycode = "public";
  126.     private static String groupUserCode = "group_tester";
  127.     private static String token = TokenUtil.generateTokenFromUsernameAndCompanyCode(username, companycode);
  128.  
  129.     protected Company companyLogin;
  130.     protected User userLogin;
  131.     protected GroupUser groupUserLogin;
  132.  
  133.     @BeforeClass
  134.     public static void setSystemPropertyBefore() {
  135.         Properties properties = System.getProperties();
  136.         properties.setProperty("spring.profiles.active", "test");
  137.     }
  138.  
  139.     @AfterClass
  140.     public static void setSystemPropertyAfter() {
  141.         System.clearProperty("spring.profiles.active");
  142.     }
  143.  
  144.     /**
  145.      * Basic setup for controller integration tests. Override this method to add
  146.      * additional setup code for tests. Don't forget to call super.before() when
  147.      * overriding.
  148.      */
  149.     @Before
  150.     public void before() {
  151.         SecurityContextHolder.getContext().setAuthentication(new AnonymousAuthentication());
  152.         companyLogin = addCompany(companycode);
  153.         userLogin = addUser(username, companyLogin);
  154.         groupUserLogin = addGroupUser(groupUserCode);
  155.         GroupUser groupUser = addGroupUser("EtcTest");
  156.         addUserGroupUser(userLogin, groupUserLogin);
  157.         addUserCompany(userLogin, companyLogin);
  158.         for (Object[] functionAccessObj : FunctionAccessListForTest.list) {
  159.             FunctionAccess functionAccess = addFunctionAccess((String) functionAccessObj[0],
  160.                     RandomDataGenerator.randomString(10));
  161.             addCompanyFunctionAccess(companyLogin, functionAccess);
  162.             addUserFunctionAccess(userLogin, functionAccess, (Boolean) functionAccessObj[1],
  163.                     (Boolean) functionAccessObj[2], (Boolean) functionAccessObj[3], (Boolean) functionAccessObj[4],
  164.                     (Boolean) functionAccessObj[5], (Boolean) functionAccessObj[6]);
  165.             addGroupUserFunctionAccess(groupUserLogin, functionAccess, (Boolean) functionAccessObj[1],
  166.                     (Boolean) functionAccessObj[2], (Boolean) functionAccessObj[3], (Boolean) functionAccessObj[4],
  167.                     (Boolean) functionAccessObj[5], (Boolean) functionAccessObj[6]);
  168.             addGroupUserFunctionAccess(groupUser, functionAccess, (Boolean) functionAccessObj[1],
  169.                     (Boolean) functionAccessObj[2], (Boolean) functionAccessObj[3], (Boolean) functionAccessObj[4],
  170.                     (Boolean) functionAccessObj[5], (Boolean) functionAccessObj[6]);
  171.         }
  172.     }
  173.  
  174.     /**
  175.      * Basic cleanup for controller integration tests. Override this method to add
  176.      * additional cleanup code for tests. Don't forget to call super.after() when
  177.      * overriding.
  178.      */
  179.     @After
  180.     public void after() {
  181.         repo.deleteAll();
  182.         cleanSystemTbl();
  183.     }
  184.  
  185.     public void afterForSystemTbl() {
  186.         cleanSystemTbl();
  187.         repo.deleteAll();
  188.     }
  189.    
  190.     private void cleanSystemTbl() {
  191.         companyFunctionAccessRepo.deleteAll();
  192.         groupUserFunctionAccessRepo.deleteAll();
  193.         reportLogRepository.deleteAll();
  194.         userCompanyRepo.deleteAll();
  195.         userFunctionAccessRepo.deleteAll();
  196.         userGroupUserRepo.deleteAll();
  197.         reportRepository.deleteAll();
  198.         systemConfigRepository.deleteAll();
  199.         groupUserRepo.deleteAll();
  200.         functionAccessRepo.deleteAll();
  201.         userRepo.deleteAll();
  202.         companyRepo.deleteAll();
  203.         customerRepo.deleteAll();
  204.     }
  205.  
  206.     /**
  207.      * Create basic Request Builder for GET method with token.
  208.      */
  209.     protected MockHttpServletRequestBuilder createGetRequestBuilder(String uri) {
  210.         return get(uri).header(BaseConstants.AUTHORIZATION_HEADER, token);
  211.     }
  212.  
  213.     protected MockHttpServletRequestBuilder createGetHeaderRequestBuilder(String uri, Map<String, String> variables) {
  214.  
  215.         MockHttpServletRequestBuilder requestBuilder = get(uri).header(BaseConstants.AUTHORIZATION_HEADER, token);
  216.         for (Map.Entry<String, String> entry : variables.entrySet()) {
  217.             requestBuilder = requestBuilder.header(entry.getKey(), entry.getValue());
  218.         }
  219.  
  220.         return requestBuilder;
  221.     }
  222.  
  223.     /**
  224.      * Create basic Request Builder for POST method with token.
  225.      */
  226.     protected MockHttpServletRequestBuilder createPostRequestBuilder(String uri) {
  227.         return post(uri).header(BaseConstants.AUTHORIZATION_HEADER, token);
  228.     }
  229.  
  230.     /**
  231.      * Create basic Request Builder for PUT method with token.
  232.      */
  233.     protected MockHttpServletRequestBuilder createPutRequestBuilder(String uri) {
  234.         return put(uri).header(BaseConstants.AUTHORIZATION_HEADER, token);
  235.     }
  236.  
  237.     /**
  238.      * Create basic Request Builder for DELETE method with token.
  239.      */
  240.     protected MockHttpServletRequestBuilder createDeleteRequestBuilder(String uri) {
  241.         return delete(uri).header(BaseConstants.AUTHORIZATION_HEADER, token);
  242.     }
  243.  
  244.     /**
  245.      * Call MockMvc perform with basic content expectation.
  246.      */
  247.     protected ResultActions performRequest(MockHttpServletRequestBuilder requestBuilder) throws Exception {
  248.         return mockMvc.perform(requestBuilder).andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8));
  249.     }
  250.  
  251.     /**
  252.      * Call MockMvc perform with basic content expectation and OK status.
  253.      */
  254.     protected ResultActions performRequestOK(MockHttpServletRequestBuilder requestBuilder) throws Exception {
  255.         return performRequest(requestBuilder).andExpect(status().isOk())
  256.                 .andExpect(jsonPath("$.status", is(BaseConstants.STATUS_OK)));
  257.     }
  258.  
  259.     /**
  260.      * Call MockMvc perform with basic content expectation and ERROR status.
  261.      */
  262.     protected ResultActions performRequestError(MockHttpServletRequestBuilder requestBuilder) throws Exception {
  263.         return performRequest(requestBuilder).andExpect(status().isBadRequest())
  264.                 .andExpect(jsonPath("$.status", is(BaseConstants.STATUS_ERROR))).andExpect(jsonPath("$.data").isEmpty())
  265.                 .andExpect(jsonPath("$.errors").isNotEmpty());
  266.     }
  267.  
  268.     private User addUser(String username, Company company) {
  269.         User user = new User();
  270.         user.setUserName(username);
  271.         user.setName(username);
  272.         user.setPassword(PasswordUtil.hashPassword(username));
  273.         user.setCompany(company);
  274.         user.setLocked(false);
  275.         user.setActive(true);
  276.  
  277.         return userRepo.saveAndFlush(user);
  278.     }
  279.  
  280.     private Customer addCustomer(String name) {
  281.         Customer customer = new Customer();
  282.         customer.setName(name);
  283.         customer.setActive(true);
  284.  
  285.         customer = customerRepo.saveAndFlush(customer);
  286.         return customer;
  287.     }
  288.  
  289.     private Company addCompany(String code) {
  290.         Company company = new Company();
  291.         company.setCode(code);
  292.         company.setName(code);
  293.         company.setCustomer(addCustomer(RandomDataGenerator.randomString(20)));
  294.         company.setAddress(RandomDataGenerator.randomString(99));
  295.         company.setCity(RandomDataGenerator.randomString(50));
  296.         company.setPhoneNumber(RandomDataGenerator.randomString(20));
  297.         company.setEmail(RandomDataGenerator.randomString(50));
  298.         company.setPicName(RandomDataGenerator.randomString(50));
  299.         company.setPicPosition(RandomDataGenerator.randomString(50));
  300.         company.setPicEmail(RandomDataGenerator.randomString(50));
  301.         company.setActiveStartMonth(RandomDataGenerator.randomDateBeforeToday());
  302.         company.setActiveEndMonth(RandomDataGenerator.randomDateAfterToday());
  303.         company.setActive(true);
  304.  
  305.         return companyRepo.saveAndFlush(company);
  306.     }
  307.  
  308.     private GroupUser addGroupUser(String name) {
  309.         GroupUser groupUser = new GroupUser();
  310.         groupUser.setName(name);
  311.         groupUser.setDescription(RandomDataGenerator.randomString(20));
  312.         groupUser.setActive(true);
  313.  
  314.         groupUser = groupUserRepo.saveAndFlush(groupUser);
  315.         return groupUser;
  316.     }
  317.  
  318.     private UserGroupUser addUserGroupUser(User user, GroupUser groupUser) {
  319.         UserGroupUser userGroupUser = new UserGroupUser();
  320.         userGroupUser.setUser(user);
  321.         userGroupUser.setGroupUser(groupUser);
  322.         userGroupUser.setActive(true);
  323.  
  324.         userGroupUser = userGroupUserRepo.saveAndFlush(userGroupUser);
  325.         return userGroupUser;
  326.     }
  327.  
  328.     private void addUserCompany(User user, Company company) {
  329.         UserCompany userCompany = new UserCompany();
  330.         userCompany.setUser(user);
  331.         userCompany.setCompany(company);
  332.         userCompany.setStartDate(RandomDataGenerator.randomDateBeforeToday());
  333.         userCompany.setEndDate(RandomDataGenerator.randomDateAfterToday());
  334.         userCompany.setSuperUser(false);
  335.  
  336.         userCompanyRepo.saveAndFlush(userCompany);
  337.     }
  338.  
  339.     private FunctionAccess addFunctionAccess(String code, String description) {
  340.         FunctionAccess functionAccess = new FunctionAccess();
  341.         functionAccess.setCode(code);
  342.         functionAccess.setDescription(description);
  343.         functionAccess.setActive(true);
  344.  
  345.         functionAccess = functionAccessRepo.saveAndFlush(functionAccess);
  346.         return functionAccess;
  347.     }
  348.  
  349.     private CompanyFunctionAccess addCompanyFunctionAccess(Company company, FunctionAccess functionAccess) {
  350.         CompanyFunctionAccess companyFunctionAccess = new CompanyFunctionAccess();
  351.         companyFunctionAccess.setCompany(company);
  352.         companyFunctionAccess.setFunctionAccess(functionAccess);
  353.  
  354.         companyFunctionAccess = companyFunctionAccessRepo.saveAndFlush(companyFunctionAccess);
  355.         return companyFunctionAccess;
  356.     }
  357.  
  358.     private UserFunctionAccess addUserFunctionAccess(User user, FunctionAccess functionAccess, Boolean allowRead,
  359.             Boolean allowAdd, Boolean allowEdit, Boolean allowDelete, Boolean allowConfirm,
  360.             Boolean allowCancelConfirm) {
  361.         UserFunctionAccess userFunctionAccess = new UserFunctionAccess();
  362.         userFunctionAccess.setUser(user);
  363.         userFunctionAccess.setFunctionAccess(functionAccess);
  364.         userFunctionAccess.setAllowRead(allowRead);
  365.         userFunctionAccess.setAllowAdd(allowAdd);
  366.         userFunctionAccess.setAllowEdit(allowEdit);
  367.         userFunctionAccess.setAllowDelete(allowDelete);
  368.         userFunctionAccess.setAllowConfirm(allowConfirm);
  369.         userFunctionAccess.setAllowCancelConfirm(allowCancelConfirm);
  370.         userFunctionAccess.setActive(true);
  371.  
  372.         userFunctionAccess = userFunctionAccessRepo.saveAndFlush(userFunctionAccess);
  373.         return userFunctionAccess;
  374.     }
  375.  
  376.     private GroupUserFunctionAccess addGroupUserFunctionAccess(GroupUser groupUser, FunctionAccess functionAccess,
  377.             Boolean allowRead, Boolean allowAdd, Boolean allowEdit, Boolean allowDelete, Boolean allowConfirm,
  378.             Boolean allowCancelConfirm) {
  379.         GroupUserFunctionAccess groupUserFunctionAccess = new GroupUserFunctionAccess();
  380.         groupUserFunctionAccess.setGroupUser(groupUser);
  381.         groupUserFunctionAccess.setFunctionAccess(functionAccess);
  382.         groupUserFunctionAccess.setAllowRead(allowRead);
  383.         groupUserFunctionAccess.setAllowAdd(allowAdd);
  384.         groupUserFunctionAccess.setAllowEdit(allowEdit);
  385.         groupUserFunctionAccess.setAllowDelete(allowDelete);
  386.         groupUserFunctionAccess.setAllowConfirm(allowConfirm);
  387.         groupUserFunctionAccess.setAllowCancelConfirm(allowCancelConfirm);
  388.         groupUserFunctionAccess.setActive(true);
  389.  
  390.         groupUserFunctionAccess = groupUserFunctionAccessRepo.saveAndFlush(groupUserFunctionAccess);
  391.         return groupUserFunctionAccess;
  392.     }
  393. }
Advertisement
Add Comment
Please, Sign In to add comment