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.Customer;
15 import org.example.customer.utility.Location;
16 import org.example.customer.utility.Phone;
17 import org.example.customerdao.testcategories.SmokeTest;
18 import org.example.dao.testUtils.jdbc.DBUnitJDBCUtility;
19 import org.example.websecurity.UserCredentials;
20 import org.junit.After;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.junit.experimental.categories.Category;
24 import org.mockito.Mockito;
25
26 public class CustomerDAOSlowTests
27 {
28 private static String configDir = "src" + File.separator
29 + "test" + File.separator + "resources" + File.separator + "data";
30
31 private static final String SCHEMA_FILE = configDir + File.separator + "Customer.sql";
32 private static final String DATA_FILE = configDir + File.separator + "fullDB.xml";
33 private static final String CUSTOMER_ADD_FILE = configDir + File.separator + "addCustomer.xml";
34 private static final String CUSTOMER_UPDATE_FILE = configDir + File.separator + "updateCustomer.xml";
35 private static final String CUSTOMER_DELETE_FILE = configDir + File.separator + "deleteCustomer.xml";
36
37 private static DBUnitJDBCUtility utility = null;
38
39 @Before
40 public void setup()
41 {
42 Configurator.setLevel(LogManager.getLogger(Customer.class).getName(), Level.WARN);
43
44 try
45 {
46 utility = new DBUnitJDBCUtility(SCHEMA_FILE, DATA_FILE);
47 }
48 catch (Exception e)
49 {
50 fail(e.getLocalizedMessage());
51 }
52 }
53
54 @After
55 public void shutdown()
56 {
57 if (utility != null)
58 {
59 utility.shutdown();
60 }
61 }
62
63 @Category(SmokeTest.class)
64 @Test(timeout = 3000)
65 public void testAddCustomer()
66 throws Exception
67 {
68 CustomerDAO handler = new CustomerDAOImpl();
69 handler.setReadWriteDS(utility.getDataSource());
70
71 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
72 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
73
74 Customer mockCustomer = buildMockCustomer();
75
76 int expected = 92;
77 int actual = handler.addCustomer(userCredentialsMock, mockCustomer);
78 assertEquals(expected, actual);
79
80 try
81 {
82
83 ITable actualTable = utility.getTableFromDatabase("CUSTOMER");
84 ITable expectedTable = utility.getTableFromFile(CUSTOMER_ADD_FILE, "CUSTOMER");
85
86
87
88 Assertion.assertEquals(expectedTable, actualTable);
89 }
90 catch (Exception e1)
91 {
92 fail(e1.getLocalizedMessage());
93 }
94 }
95
96 @Test(timeout = 1000)
97 public void testUpdateCustomer()
98 throws Exception
99 {
100 CustomerDAO handler = new CustomerDAOImpl();
101 handler.setReadWriteDS(utility.getDataSource());
102 handler.setReadOnlyDS(utility.getDataSource());
103
104 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
105 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
106 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
107
108 Customer mockCustomer68 = handler.findCustomerById(userCredentialsMock, 68);
109 mockCustomer68.setFirstName("Penny");
110 mockCustomer68.setLastName("Miller");
111
112 handler.updateCustomer(userCredentialsMock, mockCustomer68);
113
114 Customer mockCustomer8 = handler.findCustomerById(userCredentialsMock, 8);
115 mockCustomer8.getLocation().setCity("Barcelona");
116
117 handler.updateCustomer(userCredentialsMock, mockCustomer8);
118
119 Customer mockCustomer25 = handler.findCustomerById(userCredentialsMock, 25);
120 mockCustomer25.setPhone(null);
121
122 handler.updateCustomer(userCredentialsMock, mockCustomer25);
123
124 try
125 {
126
127 ITable actualTable = utility.getTableFromDatabase("CUSTOMER");
128 ITable expectedTable = utility.getTableFromFile(CUSTOMER_UPDATE_FILE, "CUSTOMER");
129
130
131
132 Assertion.assertEquals(expectedTable, actualTable);
133 }
134 catch (Exception e1)
135 {
136 fail(e1.getLocalizedMessage());
137 }
138 }
139
140 @Test(timeout = 1000)
141 public void testDeleteCustomer()
142 throws Exception
143 {
144 CustomerDAO handler = new CustomerDAOImpl();
145 handler.setReadWriteDS(utility.getDataSource());
146 handler.setReadOnlyDS(utility.getDataSource());
147
148 UserCredentials userCredentialsMock = Mockito.mock(UserCredentials.class);
149 when(userCredentialsMock.hasRole("worker")).thenReturn(true);
150 when(userCredentialsMock.hasRole("manager")).thenReturn(true);
151
152 Customer mockCustomer = buildMockCustomer();
153
154 mockCustomer.setId(71);
155
156 handler.deleteEntity(userCredentialsMock, mockCustomer);
157
158 try
159 {
160
161 ITable actualTable = utility.getTableFromDatabase("CUSTOMER");
162 ITable expectedTable = utility.getTableFromFile(CUSTOMER_DELETE_FILE, "CUSTOMER");
163
164
165
166 Assertion.assertEquals(expectedTable, actualTable);
167 }
168 catch (Exception e1)
169 {
170 fail(e1.getLocalizedMessage());
171 }
172 }
173
174 private Customer buildMockCustomer()
175 {
176 Customer mockCustomer = new Customer();
177
178 mockCustomer.setFirstName("Robert");
179 mockCustomer.setLastName("Service");
180 Location mockLocation = new Location();
181 mockLocation.setCity("Dawson City");
182 mockLocation.setCountry("Canada");
183 mockCustomer.setLocation(mockLocation);
184 Phone mockPhone = new Phone();
185 mockPhone.setNumber("(867)993-5566");
186 mockCustomer.setPhone(mockPhone);
187
188 return mockCustomer;
189 }
190 }