vid-automation selenium tests
[vid.git] / vid-automation / src / main / java / vid / automation / test / services / CategoryParamsService.java
1 package vid.automation.test.services;
2
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;
8
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;
14
15 import static org.hamcrest.CoreMatchers.everyItem;
16 import static org.hamcrest.MatcherAssert.assertThat;
17 import static org.hamcrest.Matchers.greaterThan;
18
19 /**
20  * Created by itzikliderman on 08/09/2017.
21  */
22 public class CategoryParamsService {
23     private List<CategoryOption> categoryParams;
24
25     public CategoryParamsService() {
26         categoryParams = getCategoryParamsFromJson();
27         categoryParams.forEach(this::prepareCategoryParam);
28     }
29
30     List<CategoryOption> getCategoryParamsFromJson() {
31         CategoryOptionList categoryParamsObject = null;
32         categoryParamsObject = ReadFile.getJsonFile("categoryParams", CategoryOptionList.class);
33         return categoryParamsObject.categories;
34     }
35
36     private void prepareCategoryParam(CategoryOption categoryParam) {
37         /*
38         Creates a category parameter option in the DB.
39          */
40
41         dropCategoryParam(categoryParam);
42
43         System.out.println("Preparing category parameter '" + categoryParam.categoryId + "': " + categoryParam.name);
44         System.out.println("Connecting database...");
45
46         try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
47
48             System.out.println("Database connected!");
49
50             ///////////////////////////////
51             // Add category param option
52             Statement stmt = connection.createStatement();
53
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+"'");
58
59             int[] executeBatch = stmt.executeBatch();
60             assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0)));
61
62         } catch (SQLException e) {
63             throw new IllegalStateException("Cannot connect the database!", e);
64         }
65
66     }
67
68     private void dropCategoryParam(CategoryOption categoryParam) {
69         System.out.println("Dropping categoryParam '" + categoryParam.name + "'");
70         System.out.println("Connecting database...");
71
72         try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
73
74             System.out.println("Database connected!");
75
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();
80
81         } catch (SQLException e) {
82             throw new IllegalStateException("Cannot connect the database!", e);
83         }
84     }
85
86     private int getId(String id) {
87         return (Math.abs(id.hashCode()) % 100000) * 1000;
88     }
89
90 }