1 package org.example.customerdao;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertNotNull;
6 import static org.junit.Assert.assertNull;
7 import static org.junit.Assert.assertTrue;
8 import static org.junit.Assert.fail;
9 import static org.mockito.Mockito.when;
10
11 import java.io.File;
12 import java.util.List;
13
14 import org.apache.logging.log4j.Level;
15 import org.apache.logging.log4j.LogManager;
16 import org.apache.logging.log4j.core.config.Configurator;
17 import org.example.customer.Product;
18 import org.example.customer.Supplier;
19 import org.example.customer.utility.CustomerEntity;
20 import org.example.customerdao.testcategories.SmokeTest;
21 import org.example.customerdao.utility.NonDeleteableRecordException;
22 import org.example.dao.testUtils.jdbc.DBUnitJDBCUtility;
23 import org.example.websecurity.UserCredentials;
24 import org.junit.AfterClass;
25 import org.junit.BeforeClass;
26 import org.junit.Test;
27 import org.junit.experimental.categories.Category;
28 import org.mockito.Mockito;
29
30 public class ProductDAOFastTests
31 {
32 private static String configDir = "src" + File.separator
33 + "test" + File.separator + "resources" + File.separator + "data";
34
35 private static final String SCHEMA_FILE = configDir + File.separator + "Customer.sql";
36 private static final String DATA_FILE = configDir + File.separator + "fullDB.xml";
37
38 private static DBUnitJDBCUtility utility = null;
39
40 @BeforeClass
41 public static void setup()
42 {
43 Configurator.setLevel(LogManager.getLogger(Product.class).getName(), Level.WARN);
44
45 try
46 {
47 utility = new DBUnitJDBCUtility(SCHEMA_FILE, DATA_FILE);
48 }
49 catch (Exception e)
50 {
51 fail(e.getLocalizedMessage());
52 }
53 }
54
55 @AfterClass
56 public static void shutdown()
57 {
58 if (utility != null)
59 {
60 utility.shutdown();
61 }
62 }
63
64 @Test(expected = IllegalArgumentException.class)
65 public void testNullCredentialsFindAllProducts()
66 throws Exception
67 {
68 ProductDAO handler = new ProductDAOImpl();
69 handler.setReadOnlyDS(utility.getDataSource());
70
71 handler.findAllProducts(null);
72 }
73
74 @Test(expected = IllegalArgumentException.class)
75 public void testUnauthorizedFindAllProducts()
76 throws Exception
77 {
78 ProductDAO handler = new ProductDAOImpl();
79 handler.setReadOnlyDS(utility.getDataSource());
80
81 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
82 when(userCredentialsMock.hasRole("worker")).thenReturn(false);
83
84 handler.findAllProducts(userCredentialsMock);
85 }
86
87 @Category(SmokeTest.class)
88 @Test
89 public void testFindAllProducts()
90 throws Exception
91 {
92 ProductDAO handler = new ProductDAOImpl();
93 handler.setReadOnlyDS(utility.getDataSource());
94
95 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
96 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
97
98 List<Product> records = handler.findAllProducts(userCredentialsMock);
99 assertNotNull(records);
100 assertTrue(records.size() == 80);
101
102 }
103
104 @Test(expected = IllegalArgumentException.class)
105 public void testNullCredentialsFindAllActiveProducts()
106 throws Exception
107 {
108 ProductDAO handler = new ProductDAOImpl();
109 handler.setReadOnlyDS(utility.getDataSource());
110
111 handler.findAllActiveProducts(null);
112 }
113
114 @Test(expected = IllegalArgumentException.class)
115 public void testUnauthorizedFindAllActiveProducts()
116 throws Exception
117 {
118 ProductDAO handler = new ProductDAOImpl();
119 handler.setReadOnlyDS(utility.getDataSource());
120
121 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
122 when(userCredentialsMock.hasRole("worker")).thenReturn(false);
123
124 handler.findAllActiveProducts(userCredentialsMock);
125 }
126
127 @Category(SmokeTest.class)
128 @Test
129 public void testFindAllActiveProducts()
130 throws Exception
131 {
132 ProductDAO handler = new ProductDAOImpl();
133 handler.setReadOnlyDS(utility.getDataSource());
134
135 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
136 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
137
138 List<Product> records = handler.findAllActiveProducts(userCredentialsMock);
139 assertNotNull(records);
140 assertTrue(records.size() == 71);
141
142 }
143
144 @Test(expected = IllegalArgumentException.class)
145 public void testNullCredentialsFindProductById()
146 throws Exception
147 {
148 ProductDAO handler = new ProductDAOImpl();
149 handler.setReadOnlyDS(utility.getDataSource());
150
151 int id = 1;
152
153 handler.findProductById(null, id);
154 }
155
156 @Test(expected = IllegalArgumentException.class)
157 public void testUnauthorizedFindProductById()
158 throws Exception
159 {
160 ProductDAO handler = new ProductDAOImpl();
161 handler.setReadOnlyDS(utility.getDataSource());
162
163 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
164 when(userCredentialsMock.hasRole("worker")).thenReturn(false);
165
166 int id = 1;
167
168 handler.findProductById(userCredentialsMock, id);
169 }
170
171 @Category(SmokeTest.class)
172 @Test
173 public void testFindProductByValidId()
174 throws Exception
175 {
176 ProductDAO handler = new ProductDAOImpl();
177 handler.setReadOnlyDS(utility.getDataSource());
178
179 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
180 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
181 int id = 1;
182
183 Product record = handler.findProductById(userCredentialsMock, id);
184 assertNotNull(record);
185 String expected = "Chai";
186 String actual = record.getProductName();
187 assertEquals(expected, actual);
188 }
189
190 @Test
191 public void testFindProductByInvalidId()
192 throws Exception
193 {
194 ProductDAO handler = new ProductDAOImpl();
195 handler.setReadOnlyDS(utility.getDataSource());
196
197 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
198 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
199 int id = 101;
200
201 Product record = handler.findProductById(userCredentialsMock, id);
202 assertNull(record);
203 }
204
205 @Test(expected = IllegalArgumentException.class)
206 public void testNullCredentialsFindProductsBySupplier()
207 throws Exception
208 {
209 ProductDAO handler = new ProductDAOImpl();
210 handler.setReadOnlyDS(utility.getDataSource());
211
212 Supplier supplier = new Supplier();
213 supplier.setId(10);
214
215 handler.findProductsBySupplier(null, supplier);
216 }
217
218 @Test(expected = IllegalArgumentException.class)
219 public void testUnauthorizedFindProductsBySupplier()
220 throws Exception
221 {
222 ProductDAO handler = new ProductDAOImpl();
223 handler.setReadOnlyDS(utility.getDataSource());
224
225 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
226 when(userCredentialsMock.hasRole("worker")).thenReturn(false);
227
228 Supplier supplier = new Supplier();
229 supplier.setId(10);
230
231 handler.findProductsBySupplier(userCredentialsMock, supplier);
232 }
233
234 @Test
235 public void testFindProductsBySupplier()
236 throws Exception
237 {
238 ProductDAO handler = new ProductDAOImpl();
239 handler.setReadOnlyDS(utility.getDataSource());
240
241 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
242 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
243
244 Supplier supplier = new Supplier();
245 supplier.setId(10);
246
247 List<Product> records = handler.findProductsBySupplier(userCredentialsMock, supplier);
248 assertNotNull(records);
249 assertTrue(records.size() == 1);
250 assertTrue(records.get(0).getId() == 24);
251 }
252
253 @Test
254 public void testFindNoProductsBySupplier()
255 throws Exception
256 {
257 ProductDAO handler = new ProductDAOImpl();
258 handler.setReadOnlyDS(utility.getDataSource());
259
260 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
261 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
262
263 Supplier supplier = new Supplier();
264 supplier.setId(83);
265
266 List<Product> records = handler.findProductsBySupplier(userCredentialsMock, supplier);
267 assertNotNull(records);
268 assertTrue(records.size() == 0);
269 }
270
271 @Test(expected = IllegalArgumentException.class)
272 public void testNullCredentialsAddProduct()
273 throws Exception
274 {
275 ProductDAO handler = new ProductDAOImpl();
276 handler.setReadWriteDS(utility.getDataSource());
277
278 Product mockProduct = buildMockProduct();
279
280 handler.addProduct(null, mockProduct);
281 }
282
283 @Test(expected = IllegalArgumentException.class)
284 public void testUnauthorizedAddProduct()
285 throws Exception
286 {
287 ProductDAO handler = new ProductDAOImpl();
288 handler.setReadWriteDS(utility.getDataSource());
289
290 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
291 when(userCredentialsMock.hasRole("manager")).thenReturn(false);
292
293 Product mockProduct = buildMockProduct();
294
295 handler.addProduct(userCredentialsMock, mockProduct);
296 }
297
298 @Test(expected = IllegalArgumentException.class)
299 public void testNullAddProduct()
300 throws Exception
301 {
302 ProductDAO handler = new ProductDAOImpl();
303 handler.setReadWriteDS(utility.getDataSource());
304
305 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
306 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
307
308 handler.addProduct(userCredentialsMock, null);
309 }
310
311 @Test(expected = IllegalArgumentException.class)
312 public void testNullProductUpdateProduct()
313 throws Exception
314 {
315 ProductDAO handler = new ProductDAOImpl();
316 handler.setReadWriteDS(utility.getDataSource());
317
318 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
319 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
320
321 handler.updateProduct(userCredentialsMock, null);
322 }
323
324 @Test(expected = IllegalArgumentException.class)
325 public void testNullCredentialsUpdateProduct()
326 throws Exception
327 {
328 ProductDAO handler = new ProductDAOImpl();
329 handler.setReadWriteDS(utility.getDataSource());
330
331 Product mockProduct = buildMockProduct();
332
333 handler.updateProduct(null, mockProduct);
334 }
335
336 @Test(expected = IllegalArgumentException.class)
337 public void testUnauthorizedUpdateProduct()
338 throws Exception
339 {
340 ProductDAO handler = new ProductDAOImpl();
341 handler.setReadWriteDS(utility.getDataSource());
342
343 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
344 when(userCredentialsMock.hasRole("manager")).thenReturn(false);
345
346 Product mockProduct = buildMockProduct();
347
348 handler.updateProduct(userCredentialsMock, mockProduct);
349 }
350
351 @Test(expected = IllegalArgumentException.class)
352 public void testNullUpdateProduct()
353 throws Exception
354 {
355 ProductDAO handler = new ProductDAOImpl();
356 handler.setReadWriteDS(utility.getDataSource());
357
358 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
359 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
360
361 handler.updateProduct(userCredentialsMock, null);
362 }
363
364 @Test(expected = IllegalArgumentException.class)
365 public void testNullCredentialsIsDeleteableProduct()
366 throws Exception
367 {
368 ProductDAO handler = new ProductDAOImpl();
369 handler.setReadOnlyDS(utility.getDataSource());
370
371 Product mockProduct = buildMockProduct();
372
373 handler.isDeleteable(null, mockProduct);
374 }
375
376 @Test(expected = IllegalArgumentException.class)
377 public void testUnauthorizedIsDeleteableProduct()
378 throws Exception
379 {
380 ProductDAO handler = new ProductDAOImpl();
381 handler.setReadOnlyDS(utility.getDataSource());
382
383 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
384 when(userCredentialsMock.hasRole("worker")).thenReturn(false);
385
386 Product mockProduct = buildMockProduct();
387
388 handler.isDeleteable(userCredentialsMock, mockProduct);
389 }
390
391 @Test(expected = IllegalArgumentException.class)
392 public void testNullIsDeleteableProduct()
393 throws Exception
394 {
395 ProductDAO handler = new ProductDAOImpl();
396 handler.setReadOnlyDS(utility.getDataSource());
397
398 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
399 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
400
401 handler.isDeleteable(userCredentialsMock, null);
402 }
403
404 @Test
405 public void testIsDeleteableProduct()
406 throws Exception
407 {
408 ProductDAO handler = new ProductDAOImpl();
409 handler.setReadOnlyDS(utility.getDataSource());
410
411 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
412 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
413
414 Product mockProduct = buildMockProduct();
415
416 mockProduct.setId(17);
417
418 assertTrue(handler.isDeleteable(userCredentialsMock, mockProduct));
419 }
420
421 @Test
422 public void testIsNotDeleteableProduct()
423 throws Exception
424 {
425 ProductDAO handler = new ProductDAOImpl();
426 handler.setReadOnlyDS(utility.getDataSource());
427
428 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
429 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
430
431 Product mockProduct = buildMockProduct();
432
433 mockProduct.setId(12);
434
435 assertFalse(handler.isDeleteable(userCredentialsMock, mockProduct));
436 }
437
438 @Test(expected = IllegalArgumentException.class)
439 public void testNullCredentialsIsDeleteableId()
440 throws Exception
441 {
442 ProductDAO handler = new ProductDAOImpl();
443 handler.setReadOnlyDS(utility.getDataSource());
444
445 handler.isDeleteable(null, 21);
446 }
447
448 @Test(expected = IllegalArgumentException.class)
449 public void testUnauthorizedIsDeleteableId()
450 throws Exception
451 {
452 ProductDAO handler = new ProductDAOImpl();
453 handler.setReadOnlyDS(utility.getDataSource());
454
455 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
456 when(userCredentialsMock.hasRole("worker")).thenReturn(false);
457
458 handler.isDeleteable(userCredentialsMock, 21);
459 }
460
461 @Test(expected = IllegalArgumentException.class)
462 public void testNullIsDeleteableId()
463 throws Exception
464 {
465 ProductDAO handler = new ProductDAOImpl();
466 handler.setReadOnlyDS(utility.getDataSource());
467
468 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
469 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
470
471 handler.isDeleteable(userCredentialsMock, null);
472 }
473
474 @Test(expected = IllegalArgumentException.class)
475 public void testIsDeleteableId()
476 throws Exception
477 {
478 ProductDAO handler = new ProductDAOImpl();
479 handler.setReadOnlyDS(utility.getDataSource());
480
481 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
482 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
483
484
485 assertTrue(handler.isDeleteable(userCredentialsMock, 17));
486 }
487
488 @Test(expected = IllegalArgumentException.class)
489 public void testIsNotDeleteableId()
490 throws Exception
491 {
492 ProductDAO handler = new ProductDAOImpl();
493 handler.setReadOnlyDS(utility.getDataSource());
494
495 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
496 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
497
498 assertFalse(handler.isDeleteable(userCredentialsMock, 14));
499 }
500
501 @Test(expected = IllegalArgumentException.class)
502 public void testNullCredentialsDeleteProduct()
503 throws Exception
504 {
505 ProductDAO handler = new ProductDAOImpl();
506 handler.setReadOnlyDS(utility.getDataSource());
507
508 Product mockProduct = buildMockProduct();
509
510 handler.deleteEntity(null, mockProduct);
511 }
512
513 @Test(expected = IllegalArgumentException.class)
514 public void testUnauthorizedDeleteProduct()
515 throws Exception
516 {
517 ProductDAO handler = new ProductDAOImpl();
518 handler.setReadOnlyDS(utility.getDataSource());
519
520 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
521 when(userCredentialsMock.hasRole("manager")).thenReturn(false);
522
523 Product mockProduct = buildMockProduct();
524
525 handler.deleteEntity(userCredentialsMock, mockProduct);
526 }
527
528 @Test(expected = IllegalArgumentException.class)
529 public void testNullDeleteProduct()
530 throws Exception
531 {
532 ProductDAO handler = new ProductDAOImpl();
533 handler.setReadOnlyDS(utility.getDataSource());
534
535 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
536 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
537
538 handler.deleteEntity(userCredentialsMock, null);
539 }
540
541 @Test(expected = NonDeleteableRecordException.class)
542 public void testNotDeleteableProduct()
543 throws Exception
544 {
545 ProductDAO handler = new ProductDAOImpl();
546 handler.setReadWriteDS(utility.getDataSource());
547 handler.setReadOnlyDS(utility.getDataSource());
548
549 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
550 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
551 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
552
553 Product mockProduct = buildMockProduct();
554
555 mockProduct.setId(12);
556
557 handler.deleteEntity(userCredentialsMock, mockProduct);
558 }
559
560 @Test(expected = IllegalArgumentException.class)
561 public void testInvalidEntityDeleteableProduct()
562 throws Exception
563 {
564 ProductDAO handler = new ProductDAOImpl();
565 handler.setReadOnlyDS(utility.getDataSource());
566
567 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
568 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
569
570 CustomerEntity mockCustomerEntity = new CustomerEntity();
571
572 handler.deleteEntity(userCredentialsMock, mockCustomerEntity);
573 }
574
575 @Test(expected = IllegalArgumentException.class)
576 public void testInvalidEntityIsDeleteableCustomer()
577 throws Exception
578 {
579 ProductDAO handler = new ProductDAOImpl();
580 handler.setReadOnlyDS(utility.getDataSource());
581
582 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
583 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
584
585 CustomerEntity mockCustomerEntity = new CustomerEntity();
586
587 assertTrue(handler.isDeleteable(userCredentialsMock, mockCustomerEntity));
588 }
589
590 private Product buildMockProduct()
591 {
592 Product mockProduct = new Product();
593
594 mockProduct.setProductName("Salted Peanuts");
595 mockProduct.setSupplierId(7);
596 mockProduct.setUnitPrice(0.50);
597 mockProduct.setPackaging("1 kg pkg");
598 mockProduct.setDiscontinued(false);
599
600 return mockProduct;
601 }
602 }