1 package org.example.customerdao;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.fail;
5 import static org.mockito.Mockito.when;
6
7 import java.io.File;
8
9 import org.apache.logging.log4j.Level;
10 import org.apache.logging.log4j.LogManager;
11 import org.apache.logging.log4j.core.config.Configurator;
12 import org.dbunit.Assertion;
13 import org.dbunit.dataset.ITable;
14 import org.example.customer.Product;
15 import org.example.customerdao.testcategories.SmokeTest;
16 import org.example.dao.testUtils.jdbc.DBUnitJDBCUtility;
17 import org.example.websecurity.UserCredentials;
18 import org.junit.After;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.junit.experimental.categories.Category;
22 import org.mockito.Mockito;
23
24 public class ProductDAOSlowTests
25 {
26 private static String configDir = "src" + File.separator
27 + "test" + File.separator + "resources" + File.separator + "data";
28
29 private static final String SCHEMA_FILE = configDir + File.separator + "Customer.sql";
30 private static final String DATA_FILE = configDir + File.separator + "fullDB.xml";
31 private static final String Product_ADD_FILE = configDir + File.separator + "addProduct.xml";
32 private static final String Product_UPDATE_FILE = configDir + File.separator + "updateProduct.xml";
33 private static final String Product_DELETE_FILE = configDir + File.separator + "deleteProduct.xml";
34
35 private static DBUnitJDBCUtility utility = null;
36
37 @Before
38 public void setup()
39 {
40 Configurator.setLevel(LogManager.getLogger(Product.class).getName(), Level.WARN);
41
42 try
43 {
44 utility = new DBUnitJDBCUtility(SCHEMA_FILE, DATA_FILE);
45 }
46 catch (Exception e)
47 {
48 fail(e.getLocalizedMessage());
49 }
50 }
51
52 @After
53 public void shutdown()
54 {
55 if (utility != null)
56 {
57 utility.shutdown();
58 }
59 }
60
61 @Category(SmokeTest.class)
62 @Test(timeout = 3000)
63 public void testAddProduct()
64 throws Exception
65 {
66 ProductDAO handler = new ProductDAOImpl();
67 handler.setReadWriteDS(utility.getDataSource());
68
69 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
70 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
71
72 Product mockProduct = buildMockProduct();
73
74 int expected = 81;
75 int actual = handler.addProduct(userCredentialsMock, mockProduct);
76 assertEquals(expected, actual);
77
78 try
79 {
80
81 ITable actualTable = utility.getTableFromDatabase("Product");
82 ITable expectedTable = utility.getTableFromFile(Product_ADD_FILE, "Product");
83
84
85
86 Assertion.assertEquals(expectedTable, actualTable);
87 }
88 catch (Exception e1)
89 {
90 fail(e1.getLocalizedMessage());
91 }
92 }
93
94 @Test(timeout = 1000)
95 public void testUpdateProduct()
96 throws Exception
97 {
98 ProductDAO handler = new ProductDAOImpl();
99 handler.setReadWriteDS(utility.getDataSource());
100 handler.setReadOnlyDS(utility.getDataSource());
101
102 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
103 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
104 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
105
106 Product mockProduct14 = handler.findProductById(userCredentialsMock, 14);
107 mockProduct14.setProductName("Firm Tofu");
108
109 handler.updateProduct(userCredentialsMock, mockProduct14);
110
111 Product mockProduct55 = handler.findProductById(userCredentialsMock, 55);
112 mockProduct55.setDiscontinued(true);
113
114 handler.updateProduct(userCredentialsMock, mockProduct55);
115
116 Product mockProduct71 = handler.findProductById(userCredentialsMock, 71);
117 mockProduct71.setUnitPrice(23.75);
118
119 handler.updateProduct(userCredentialsMock, mockProduct71);
120
121 try
122 {
123
124 ITable actualTable = utility.getTableFromDatabase("Product");
125 ITable expectedTable = utility.getTableFromFile(Product_UPDATE_FILE, "Product");
126
127
128
129 Assertion.assertEquals(expectedTable, actualTable);
130 }
131 catch (Exception e1)
132 {
133 fail(e1.getLocalizedMessage());
134 }
135 }
136
137 @Test(timeout = 1000)
138 public void testDeleteProduct()
139 throws Exception
140 {
141 ProductDAO handler = new ProductDAOImpl();
142 handler.setReadWriteDS(utility.getDataSource());
143 handler.setReadOnlyDS(utility.getDataSource());
144
145 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
146 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
147 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
148
149 Product mockProduct = buildMockProduct();
150
151 mockProduct.setId(17);
152
153 handler.deleteEntity(userCredentialsMock, mockProduct);
154
155 try
156 {
157
158 ITable actualTable = utility.getTableFromDatabase("Product");
159 ITable expectedTable = utility.getTableFromFile(Product_DELETE_FILE, "Product");
160
161
162
163 Assertion.assertEquals(expectedTable, actualTable);
164 }
165 catch (Exception e1)
166 {
167 fail(e1.getLocalizedMessage());
168 }
169 }
170
171 private Product buildMockProduct()
172 {
173 Product mockProduct = new Product();
174
175 mockProduct.setProductName("Salted Peanuts");
176 mockProduct.setSupplierId(7);
177 mockProduct.setUnitPrice(0.50);
178 mockProduct.setPackaging("1 kg pkg");
179 mockProduct.setDiscontinued(false);
180
181 return mockProduct;
182 }
183 }