1 package vid.automation.test.services;
3 import com.google.common.primitives.Ints;
4 import vid.automation.test.model.CategoryOption;
5 import vid.automation.test.model.CategoryOptionList;
6 import vid.automation.test.utils.DB_CONFIG;
7 import vid.automation.test.utils.ReadFile;
9 import java.sql.Connection;
10 import java.sql.DriverManager;
11 import java.sql.SQLException;
12 import java.sql.Statement;
13 import java.util.List;
15 import static org.hamcrest.CoreMatchers.everyItem;
16 import static org.hamcrest.MatcherAssert.assertThat;
17 import static org.hamcrest.Matchers.greaterThan;
20 * Created by itzikliderman on 08/09/2017.
22 public class CategoryParamsService {
23 private List<CategoryOption> categoryParams;
25 public CategoryParamsService() {
26 categoryParams = getCategoryParamsFromJson();
27 categoryParams.forEach(this::prepareCategoryParam);
30 List<CategoryOption> getCategoryParamsFromJson() {
31 CategoryOptionList categoryParamsObject = null;
32 categoryParamsObject = ReadFile.getJsonFile("categoryParams", CategoryOptionList.class);
33 return categoryParamsObject.categories;
36 private void prepareCategoryParam(CategoryOption categoryParam) {
38 Creates a category parameter option in the DB.
41 dropCategoryParam(categoryParam);
43 System.out.println("Preparing category parameter '" + categoryParam.categoryId + "': " + categoryParam.name);
44 System.out.println("Connecting database...");
46 try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
48 System.out.println("Database connected!");
50 ///////////////////////////////
51 // Add category param option
52 Statement stmt = connection.createStatement();
54 int id = getId(categoryParam.name);
55 stmt.addBatch("INSERT INTO `vid_category_parameter_option` (`CATEGORY_OPT_DB_ID`, `CATEGORY_OPT_APP_ID`, `NAME`, `CATEGORY_ID`) " +
56 "VALUES (" + id + ", '" + (categoryParam.appId != null ? categoryParam.appId : categoryParam.name) + "', '" + categoryParam.name + "', '" + categoryParam.categoryId + "') " +
57 "ON DUPLICATE KEY UPDATE NAME='"+categoryParam.name+"'");
59 int[] executeBatch = stmt.executeBatch();
60 assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0)));
62 } catch (SQLException e) {
63 throw new IllegalStateException("Cannot connect the database!", e);
68 private void dropCategoryParam(CategoryOption categoryParam) {
69 System.out.println("Dropping categoryParam '" + categoryParam.name + "'");
70 System.out.println("Connecting database...");
72 try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
74 System.out.println("Database connected!");
76 Statement stmt = connection.createStatement();
77 int id = getId(categoryParam.name);
78 stmt.addBatch("DELETE FROM `vid_category_parameter_option` WHERE `CATEGORY_OPT_DB_ID` = '" + id + "'");
79 int[] executeBatch = stmt.executeBatch();
81 } catch (SQLException e) {
82 throw new IllegalStateException("Cannot connect the database!", e);
86 private int getId(String id) {
87 return (Math.abs(id.hashCode()) % 100000) * 1000;