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 import java.time.LocalDate;
9 import java.util.ArrayList;
10 import java.util.List;
11
12 import org.apache.logging.log4j.Level;
13 import org.apache.logging.log4j.LogManager;
14 import org.apache.logging.log4j.core.config.Configurator;
15 import org.dbunit.Assertion;
16 import org.dbunit.dataset.ITable;
17 import org.example.customer.Order;
18 import org.example.customer.OrderItem;
19 import org.example.customerdao.testcategories.SmokeTest;
20 import org.example.dao.testUtils.jdbc.DBUnitJDBCUtility;
21 import org.example.websecurity.UserCredentials;
22 import org.junit.After;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.junit.experimental.categories.Category;
26 import org.mockito.Mockito;
27
28 public class OrderDAOSlowTests
29 {
30 private static String configDir = "src" + File.separator
31 + "test" + File.separator + "resources" + File.separator + "data";
32
33 private static final String SCHEMA_FILE = configDir + File.separator + "Customer.sql";
34 private static final String DATA_FILE = configDir + File.separator + "fullDB.xml";
35 private static final String Order_ADD_FILE = configDir + File.separator + "addOrder.xml";
36 private static final String Order_UPDATE_FILE = configDir + File.separator + "updateOrder.xml";
37 private static final String Order_DELETE_FILE = configDir + File.separator + "deleteOrder.xml";
38
39 private static DBUnitJDBCUtility utility = null;
40
41 @Before
42 public void setup()
43 {
44 Configurator.setLevel(LogManager.getLogger(Order.class).getName(), Level.WARN);
45
46 try
47 {
48 utility = new DBUnitJDBCUtility(SCHEMA_FILE, DATA_FILE);
49 }
50 catch (Exception e)
51 {
52 fail(e.getLocalizedMessage());
53 }
54 }
55
56 @After
57 public void shutdown()
58 {
59 if (utility != null)
60 {
61 utility.shutdown();
62 }
63 }
64
65 @Category(SmokeTest.class)
66 @Test(timeout = 3000)
67 public void testAddOrder()
68 throws Exception
69 {
70 OrderDAO handler = new OrderDAOImpl();
71 handler.setReadWriteDS(utility.getDataSource());
72
73 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
74 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
75
76 Order mockOrder = buildMockOrder();
77
78 int expected = 831;
79 int actual = handler.addOrder(userCredentialsMock, mockOrder);
80 assertEquals(expected, actual);
81
82 try
83 {
84
85 ITable actualTable = utility.getTableFromDatabase("Orders");
86 ITable expectedTable = utility.getTableFromFile(Order_ADD_FILE, "Orders");
87
88
89
90 Assertion.assertEquals(expectedTable, actualTable);
91 }
92 catch (Exception e1)
93 {
94 fail(e1.getLocalizedMessage());
95 }
96 }
97
98 @Test(timeout = 1000)
99 public void testUpdateOrder()
100 throws Exception
101 {
102 OrderDAO handler = new OrderDAOImpl();
103 handler.setReadWriteDS(utility.getDataSource());
104 handler.setReadOnlyDS(utility.getDataSource());
105
106 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
107 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
108 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
109
110 Order mockOrder140 = handler.findOrderById(userCredentialsMock, 140);
111
112
113
114
115
116
117
118 mockOrder140.setTotalAmount(1097.40);
119
120
121
122
123
124
125
126
127
128 List<OrderItem> mockOrder140items = mockOrder140.getOrderItems();
129 OrderItem mockOrderItem = new OrderItem();
130 mockOrderItem.setOrderId(140);
131 mockOrderItem.setProductId(17);
132 mockOrderItem.setUnitPrice(39.00);
133 mockOrderItem.setQuantity(1);
134 mockOrder140items.add(mockOrderItem);
135
136 handler.updateOrder(userCredentialsMock, mockOrder140);
137
138 try
139 {
140
141 ITable actualTable = utility.getTableFromDatabase("Orders");
142 ITable expectedTable = utility.getTableFromFile(Order_UPDATE_FILE, "Orders");
143
144
145
146 Assertion.assertEquals(expectedTable, actualTable);
147 }
148 catch (Exception e1)
149 {
150 fail(e1.getLocalizedMessage());
151 }
152 }
153
154 @Test(timeout = 3000)
155 public void testDeleteOrder()
156 throws Exception
157 {
158 OrderDAO handler = new OrderDAOImpl();
159 handler.setReadWriteDS(utility.getDataSource());
160 handler.setReadOnlyDS(utility.getDataSource());
161
162 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
163 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
164
165 Order mockOrder = buildMockOrder();
166 mockOrder.setId(117);
167
168 handler.deleteEntity(userCredentialsMock, mockOrder);
169
170 try
171 {
172
173 ITable actualTable = utility.getTableFromDatabase("Orders");
174 ITable expectedTable = utility.getTableFromFile(Order_DELETE_FILE, "Orders");
175
176
177
178 Assertion.assertEquals(expectedTable, actualTable);
179 }
180 catch (Exception e1)
181 {
182 fail(e1.getLocalizedMessage());
183 }
184 }
185
186 private Order buildMockOrder()
187 {
188
189
190 Order mockOrder = new Order();
191
192 mockOrder.setOrderDate(LocalDate.of(2020, 2, 17));
193 mockOrder.setCustomerId(12);
194 mockOrder.setTotalAmount(266.00);
195 mockOrder.setOrderNumber("632901");
196 List<OrderItem> mockOrderItems = buildOrderItems();
197 mockOrder.setOrderItems(mockOrderItems);
198
199 return mockOrder;
200 }
201
202
203 private List<OrderItem> buildOrderItems()
204 {
205
206
207
208
209 List<OrderItem> data = new ArrayList<OrderItem>();
210
211 OrderItem mockOrderItem1 = new OrderItem();
212 mockOrderItem1.setOrderId(831);
213 mockOrderItem1.setProductId(3);
214 mockOrderItem1.setUnitPrice(10.00);
215 mockOrderItem1.setQuantity(2);
216 data.add(mockOrderItem1);
217
218 OrderItem mockOrderItem2 = new OrderItem();
219 mockOrderItem2.setOrderId(831);
220 mockOrderItem2.setProductId(52);
221 mockOrderItem2.setUnitPrice(7.00);
222 mockOrderItem2.setQuantity(12);
223 data.add(mockOrderItem2);
224
225 OrderItem mockOrderItem3 = new OrderItem();
226 mockOrderItem3.setOrderId(831);
227 mockOrderItem3.setProductId(762);
228 mockOrderItem3.setUnitPrice(18.00);
229 mockOrderItem3.setQuantity(9);
230 data.add(mockOrderItem3);
231
232 return data;
233 }
234 }