Odyssey
cuNotifyTest.php
1 <?php
2 /**
3  * FILE: cuNotifyTest
4  * Tests the internal functions of cu_notify.data. (Full tests cannot be run due to database and AWS interface.)
5  */
6 
7 use PHPUnit\Framework\TestCase;
8 
9 class cuNotifyTest extends TestCase {
10  function setUp() {
11  $sharedLibrary = "/var/www/html/shared/library";
12  $admIncludes = "/var/www/html/admcom/includes";
13  require_once("$sharedLibrary/hcuFunctions.i");
14  require_once("$admIncludes/cu_notify.data");
15  }
16 
17  // ------------------------------------------------
18  // These functions are broken up from UpdateVerifiedEmailList
19  // -------------------------------------------------
20 
21  function test_ModifyVerifiedEmailListWithUsedEmails() {
22 
23  // Invalid inputs.
24  $usedEmailList = array();
25  $verifiedEmailList = null; // Invalid. Needs to be an array.
26  $deletedEmails = array();
27  $results = _ModifyVerifiedEmailListWithUsedEmails ($usedEmailList, $verifiedEmailList, $deletedEmails);
28  $this->assertEquals($results["error"], "Inputs are not valid.");
29 
30  // Invalid used email list.
31  $usedEmailList = array(array("noemail" => true, "used" => true)); // Invalid. There is no "email" attribute.
32  $verifiedEmailList = array();
33  $deletedEmails = array();
34  $results = _ModifyVerifiedEmailListWithUsedEmails ($usedEmailList, $verifiedEmailList, $deletedEmails);
35  $this->assertEquals($results["error"], "UsedEmailList is not valid.");
36 
37  // Invalid email
38  $usedEmailList = array(array("email" => "invalidemail", "used" => true)); // Invalid. Email is invalid.
39  $verifiedEmailList = array();
40  $deletedEmails = array();
41  $results = _ModifyVerifiedEmailListWithUsedEmails ($usedEmailList, $verifiedEmailList, $deletedEmails);
42  $this->assertEquals($results["error"], "One or more emails are not valid.");
43 
44  // Used flag is updated.
45  $usedEmailList = array("email1@homecu.net" => array("email" => "email1@homecu.net", "used" => true));
46  $verifiedEmailList = array("email1@homecu.net" => array("email" => "email1@homecu.net", "used" => false),
47  "email2@homecu.net" => array("email" => "email2@homecu.net", "used" => false));
48  $deletedEmails = array();
49  $results = _ModifyVerifiedEmailListWithUsedEmails ($usedEmailList, $verifiedEmailList, $deletedEmails);
50  $this->assertEquals($results["status"], "000");
51  $this->assertEquals($results["data"]["verifiedEmailList"]["email1@homecu.net"]["used"], true); // First email changes.
52  $this->assertEquals($results["data"]["verifiedEmailList"]["email2@homecu.net"]["used"], false); // Second email doesn't change.
53 
54  // Trying to delete an email in use.
55  $usedEmailList = array("email1@homecu.net" => array("email" => "email1@homecu.net", "used" => true)); // Invalid. Email is invalid.
56  $verifiedEmailList = array();
57  $deletedEmails = array("email1@homecu.net" => true);
58  $results = _ModifyVerifiedEmailListWithUsedEmails ($usedEmailList, $verifiedEmailList, $deletedEmails);
59  $this->assertEquals($results["error"], "Cannot delete an email in use.");
60  }
61 
62  function test_GetInfoForEmailList() {
63  // Updated and deleted emails are empty.
64  $deletedEmails = array();
65  $unverifiedEmails = array();
66  $results = _GetInfoForEmailList($deletedEmails, $unverifiedEmails);
67  $this->assertEquals($results["status"], "000");
68  $this->assertEquals(count($results["data"]["info"]), 1);
69  $this->assertEquals($results["data"]["info"][0], "Email list saved successfully.");
70 
71  $deletedEmails = array("test1@homecu.net" => "test1@homecu.net", "test2@homecu.net" => "test2@homecu.net");
72  $unverifiedEmails = array("test3@homecu.net" => "test3@homecu.net");
73  $results = _GetInfoForEmailList($deletedEmails, $unverifiedEmails);
74  $this->assertEquals($results["status"], "000");
75  $this->assertEquals($results["data"]["info"], array("Email list saved successfully.", "&nbsp;", "Verification emails were sent to:", "test3@homecu.net",
76  "&nbsp;", "The following emails were removed:", "test1@homecu.net", "test2@homecu.net"));
77  }
78 
79  function test_TransformKendoEmailList() {
80  $emailList = "Invalid.";
81  $results = _TransformKendoEmailList($emailList);
82  $this->assertEquals($results["status"], 1);
83  $this->assertEquals($results["error"], "Email list is not valid.");
84 
85  $emailList = HCU_JsonEncode(array(array("email" => "is there", "but status" => "is not")));
86  $results = _TransformKendoEmailList($emailList);
87  $this->assertEquals($results["status"], 2);
88  $this->assertEquals($results["error"], "Email list is not valid.");
89 
90  $emailList = HCU_JsonEncode(array(array("email" => "is there", "status" => "is not in list")));
91  $results = _TransformKendoEmailList($emailList);
92  $this->assertEquals($results["status"], 3);
93  $this->assertEquals($results["error"], "Email list is not valid.");
94 
95  $emailList = HCU_JsonEncode(array(array("email" => "is not valid", "status" => "Success")));
96  $results = _TransformKendoEmailList($emailList);
97  $this->assertEquals($results["status"], 4);
98  $this->assertEquals($results["error"], "Email list is not valid.");
99 
100  $emailList = HCU_JsonEncode(array(array("email" => "test1@homecu.net", "status" => "Success"), array("email" => "test2@homecu.net", "status" => ""),
101  array("email" => "test3@homecu.net", "status" => "Pending"), array("email" => "test4@homecu.net", "status" => "Success", "deleted" => true),
102  array("email" => "test5@homecu.net", "status" => "Pending", "deleted" => false),
103  array("email" => "test6@homecu.net", "status" => "", "deleted" => true, "itsNew" => true),
104  array("email" => "TEst5@homecu.net", "status" => "Success"), array("email" => "TeSt6@homecu.net", "status" => "Pending", "itsNew" => true)));
105  $results = _TransformKendoEmailList($emailList);
106  $this->assertEquals($results["status"], "000");
107  $this->assertEquals(count($results["data"]["allEmails"]), 8);
108  $this->assertEquals(count($results["data"]["unverifiedEmails"]), 1);
109  $this->assertEquals($results["data"]["unverifiedEmails"]["test2@homecu.net"], "test2@homecu.net");
110  $this->assertEquals(count($results["data"]["deletedEmails"]), 1);
111  $this->assertEquals($results["data"]["deletedEmails"]["test4@homecu.net"], "test4@homecu.net");
112  $this->assertEquals(count($results["data"]["verifiedEmailList"]), 5);
113  $this->assertEquals($results["data"]["verifiedEmailList"]["test2@homecu.net"]["status"], "Pending");
114  $this->assertEquals(count($results["data"]["databaseEmailList"]), 5);
115  $this->assertEquals($results["data"]["databaseEmailList"]["test1@homecu.net"]["verified"], true);
116  $this->assertEquals($results["data"]["databaseEmailList"]["test3@homecu.net"]["verified"], false);
117  }
118 
119  // ------------------------------------------------
120  // These functions are broken up from ReadVerifiedEmailList
121  // -------------------------------------------------
122 
123  function test_TransformEmailsNoSES() {
124  $dataFromNotifies = array(array("role" => "role", "email" => "test1@homecu.net"));
125  $dataFromTemplate = array(array("email" => "teST1@homecu.net"), array("email" => "test3@homecu.net"));
126 
127  $expectedResults = array(
128  "test1@homecu.net" => array("email" => "test1@homecu.net", "status" => "", "used" => true, "isDirty" => true),
129  "test3@homecu.net" => array("email" => "test3@homecu.net", "status" => "", "used" => true, "isDirty" => true)
130  );
131 
132  $results = _TransformEmailsNoSES($dataFromNotifies, $dataFromTemplate);
133  $this->assertEquals($results["status"], "000");
134  $this->assertEquals($results["data"]["verifiedEmailList"], $expectedResults);
135  }
136 
137  function test_TransformEmailStatuses() {
138  $emailStatuses = array("homecutester2@gmail.com" => array("VerificationStatus" => "Pending"),
139  "homecutester1@gmail.com" => array("VerificationStatus" => "Success"),
140  "homecutester3@gmail.com" => array("VerificationStatus" => "Failed"));
141  $verifiedEmailList = array("homecutester2@gmail.com" => array("email" => "homecutester2@gmail.com", "status" => ""),
142  "homecutester1@gmail.com" => array("email" => "homecutester1@gmail.com"),
143  "homecutester3@gmail.com" => array("email" => "homecutester3@gmail.com"),
144  "homecutester4@gmail.com" => array("email" => "homecutester4@gmail.com", "status" => "Pending"));
145  $databaseEmailList = array("homecutester2@gmail.com" => array("email" => "homecutester2@gmail.com", "verified" => false),
146  "homecutester1@gmail.com" => array("email" => "homecutester1@gmail.com", "verified" => false),
147  "homecutester3@gmail.com" => array("email" => "homecutester3@gmail.com", "verified" => false),
148  "homecutester4@gmail.com" => array("email" => "homecutester4@gmail.com", "verified" => false));
149 
150  $expectedVerifiedEmailList = array("homecutester2@gmail.com" => array("email" => "homecutester2@gmail.com", "status" => "Pending"),
151  "homecutester1@gmail.com" => array("email" => "homecutester1@gmail.com", "status" => "Success", "resend" => false),
152  "homecutester3@gmail.com" => array("email" => "homecutester3@gmail.com", "status" => "Failed"),
153  "homecutester4@gmail.com" => array("email" => "homecutester4@gmail.com", "status" => "Pending"));
154  $expectedDatabaseEmailList = array("homecutester2@gmail.com" => array("email" => "homecutester2@gmail.com", "verified" => false),
155  "homecutester1@gmail.com" => array("email" => "homecutester1@gmail.com", "verified" => true),
156  "homecutester3@gmail.com" => array("email" => "homecutester3@gmail.com", "verified" => false),
157  "homecutester4@gmail.com" => array("email" => "homecutester4@gmail.com", "verified" => false));
158 
159  $results = _TransformEmailStatuses($emailStatuses, $verifiedEmailList, $databaseEmailList);
160  $this->assertEquals($results["status"], "000");
161  $this->assertEquals($results["data"]["verifiedEmailList"], $expectedVerifiedEmailList);
162  $this->assertEquals($results["data"]["databaseEmailList"], $expectedDatabaseEmailList);
163  $this->assertEquals($results["data"]["updateDatabase"], true);
164  }
165 
166  function test_TransformDatabaseEmailList() {
167  $emailList = HCU_JsonEncode(array(array("email" => "homecutesteR1@homecu.net", "verified" => false), array("email" => "homecutesTer2@", "verified" => true)));
168 
169  $results = _TransformDatabaseEmailList($emailList);
170  $this->assertEquals($results["error"], "Email list is not valid.");
171 
172  $emailList = HCU_JsonEncode(array(array("email" => "homecuteSTer1@homecu.net", "verified" => false),
173  array("email" => "homecutesTer2@homecu.net", "verified" => true)));
174 
175  $expectedVerifiedEmailList = array("homecutester1@homecu.net" => array("email" => "homecutester1@homecu.net", "status" => "", "used" => false, "resend" => true),
176  "homecutester2@homecu.net" => array("email" => "homecutester2@homecu.net", "status" => "Success", "used" => false,
177  "resend" => false));
178  $expectedDatabaseEmailList = array("homecutester1@homecu.net" => array("email" => "homecutester1@homecu.net", "verified" => false),
179  "homecutester2@homecu.net" => array("email" => "homecutester2@homecu.net", "verified" => true));
180  $results = _TransformDatabaseEmailList($emailList);
181  $this->assertEquals($results["status"], "000");
182  $this->assertEquals($results["data"]["verifiedEmailList"], $expectedVerifiedEmailList);
183  $this->assertEquals($results["data"]["databaseEmailList"], $expectedDatabaseEmailList);
184  $this->assertEquals(count($results["data"]["unverifiedEmails"]), 1);
185  $this->assertEquals($results["data"]["unverifiedEmails"]["homecutester1@homecu.net"], "homecutester1@homecu.net");
186  $this->assertEquals(count($results["data"]["allEmails"]), 2);
187  }
188 
189  function test_ValidateAWSStatusReturn() {
190  $response = "";
191  $results = _ValidateAWSStatusReturn($response);
192  $this->assertEquals($results["status"], 11);
193  $this->assertEquals($results["error"], "Invalid response from script.");
194 
195  $response = HCU_JsonEncode(array());
196  $results = _ValidateAWSStatusReturn($response);
197  $this->assertEquals($results["status"], 3);
198  $this->assertEquals($results["error"], "Invalid response from script.");
199 
200  $response = HCU_JsonEncode(array("status" => "08"));
201  $results = _ValidateAWSStatusReturn($response);
202  $this->assertEquals($results["status"], 5);
203  $this->assertEquals($results["error"], "Invalid response from script.");
204 
205  $response = HCU_JsonEncode(array("status" => "08", "error" => "There's an error somewhere.", "response" => array()));
206  $results = _ValidateAWSStatusReturn($response);
207  $this->assertEquals($results["status"], 4);
208  $this->assertEquals($results["error"], "There's an error somewhere.");
209 
210  $response = HCU_JsonEncode(array("status" => "000", "error" => "", "response" => array()));
211  $results = _ValidateAWSStatusReturn($response);
212  $this->assertEquals($results["status"], 6);
213  $this->assertEquals($results["error"], "Invalid response from script.");
214 
215  $response = HCU_JsonEncode(array("status" => "000", "error" => "",
216  "response" => array("VerificationAttributes" => "Anything. It is handled by the next small function.")));
217  $results = _ValidateAWSStatusReturn($response);
218  $this->assertEquals($results["status"], "000"); // Finally!
219  $this->assertEquals($results["data"]["emailStatuses"], "Anything. It is handled by the next small function.");
220  }
221 
222  // ------------------------------------------------
223  // These functions are broken up from CheckIfEmailIsUsed
224  // -------------------------------------------------
225 
226  function test_TransformUsedEmailList() {
227  $usedEmailData = array(array("email" => " teST1@homecu.net ", "used" => "t"), array("email" => " tEst2@homecu.net", "used" => "f"));
228  $expectedUsedEmailData = array("test1@homecu.net" => array("email" => "test1@homecu.net", "used" => true),
229  "test2@homecu.net" => array("email" => "test2@homecu.net", "used" => false));
230  $results = _TransformUsedEmailList($usedEmailData);
231  $this->assertEquals($results["status"], "000");
232  $this->assertEquals($results["data"]["usedEmailList"], $expectedUsedEmailData);
233  }
234 
235  function test_GetInvalidRoles() {
236  $roles = array("Role1" => array("hidden" => true),
237  "Role2" => array("hidden" => false, "single" => true),
238  "Role3" => array(),
239  "Role4" => array("single" => true),
240  "Role5" => array("single" => false));
241  $expectedInvalidRoles = array("Role1", "Role3", "Role5");
242  $results = _GetInvalidRoles($roles);
243  $this->assertEquals($results["status"], "000");
244  $this->assertEquals($results["data"]["invalidRoles"], $expectedInvalidRoles);
245  }
246 
247  // ------------------------------------------------
248  // This function is broken up from ReadEmailNotify
249  // -------------------------------------------------
250 
251  function test_TransformReadEmailNotify() {
252  $roles = array(
253  "achnotify" => array("desc" => "A"),
254  "required" => array("desc" => "B", "clear" => false),
255  "another" => array("desc" => "C", "single" => true),
256  "hidden" => array("desc" => "D", "hidden" => true)
257  );
258  $roleData = array(
259  array("role" => "nomatch", "email" => " "),
260  array("role" => "achnotify", "email" => " "),
261  array("role" => "required", "email" => "test1@homecu.net"),
262  array("role" => "another", "email" => "test2@homecu.net"),
263  array("role" => "hidden", "email" => "test3@homecu.net")
264  );
265  $featureList = array("data" => array("ACHCOL"));
266  $expectedResults = array(
267  array("roleId" => "achnotify", "roleText" => "A", "required" => false, "single" => false, "email" => ""),
268  array("roleId" => "required", "roleText" => "B", "required" => true, "single" => false, "email" => "test1@homecu.net"),
269  array("roleId" => "another", "roleText" => "C", "required" => true, "single" => true, "email" => "test2@homecu.net")
270  );
271  $results = _TransformReadEmailNotify($roles, $roleData, $featureList);
272  $this->assertEquals($results["status"], "000");
273  $this->assertEquals($results["data"]["records"], $expectedResults);
274 
275  $featureList = array("data" => array());
276  $results = _TransformReadEmailNotify($roles, $roleData, $featureList);
277  $this->assertEquals($results["status"], "000");
278  $this->assertEquals(count($results["data"]["records"]), 2); // Now the "achnotify" role is not in the list.
279  }
280 
281  // ------------------------------------------------
282  // These functions are broken up from UpdateEmailNotify
283  // -------------------------------------------------
284 
285  function test_TransformRoleForUpdate() {
286  $roles = array(
287  "cannot be cleared" => array("clear" => false, "desc" => "A"),
288  "Email cannot be cleared" => array(),
289  "one address" => array("single" => true),
290  );
291 
292  $role = "doesn't exist";
293  $email = "";
294  $results = _TransformRoleForUpdate($role, $roles, $email);
295  $this->assertEquals($results["status"], 1);
296  $this->assertEquals($results["error"], "role record not found.");
297 
298  $role = "cannot be cleared";
299  $results = _TransformRoleForUpdate($role, $roles, $email);
300  $this->assertEquals($results["status"], 2);
301  $this->assertEquals($results["error"], "Email cannot be cleared.");
302 
303  $role = "Email cannot be cleared";
304  $email = "invalid email";
305  $results = _TransformRoleForUpdate($role, $roles, $email);
306  $this->assertEquals($results["status"], 3);
307  $this->assertEquals($results["error"], "One of the emails is invalid.");
308 
309  $email = " ; ; ;";
310  $results = _TransformRoleForUpdate($role, $roles, $email);
311  $this->assertEquals($results["status"], 4);
312  $this->assertEquals($results["error"], "Email cannot be cleared.");
313 
314  $email = "test1@homecu.net; test2@homecu.net;;;;";
315  $role = "one address";
316  $results = _TransformRoleForUpdate($role, $roles, $email);
317  $this->assertEquals($results["status"], 5);
318  $this->assertEquals($results["error"], "Only one address is allowed.");
319 
320  $role = "cannot be cleared";
321  $expectedResults = array("roleId" => "cannot be cleared", "roleText" => "A", "email" => "test1@homecu.net;test2@homecu.net",
322  "required" => true, "recordExists" => "Y");
323  $results = _TransformRoleForUpdate($role, $roles, $email);
324  $this->assertEquals($results["status"], "000");
325  $this->assertEquals($results["data"]["returnRecord"], $expectedResults);
326  }
327 
328  function test_CreateUpdateTableForUpdateAudit() {
329  // From the CU email notification screen, update.
330  $Cu = "MYCU";
331  $role = "role";
332  $email = "email1@homecu.net";
333  $recordExists = true;
334  $userEmail = "email2@homecu.net";
335  $specialEmailUpdate = false;
336  $results = _CreateUpdateTableForUpdateAudit($Cu, $role, $email, $recordExists, $userEmail, $specialEmailUpdate);
337  $this->assertEquals($results["status"], "000");
338  $this->assertEquals($results["data"]["updateTable"], array("cuadmnotify" => array(array("cu" => "MYCU", "role" => "role",
339  "email" => "email1@homecu.net", "_action" => "update"))));
340  $this->assertEquals($results["data"]["shortLabel"], "UPD_NOTI");
341  $this->assertEquals($results["data"]["longLabel"], "Update Notification Emails");
342 
343  // From the welcome screen, update.
344  $specialEmailUpdate = true;
345  $results = _CreateUpdateTableForUpdateAudit($Cu, $role, $email, $recordExists, $userEmail, $specialEmailUpdate);
346  $this->assertEquals($results["status"], "000");
347  $this->assertEquals($results["data"]["shortLabel"], "UPD_SNOTI");
348  $this->assertEquals($results["data"]["longLabel"], "Update Special Email Notification");
349 
350  // From the welcome screen, add.
351  $recordExists = false;
352  $results = _CreateUpdateTableForUpdateAudit($Cu, $role, $email, $recordExists, $userEmail, $specialEmailUpdate);
353  $this->assertEquals($results["status"], "000");
354  $this->assertEquals($results["data"]["shortLabel"], "ADD_SNOTI");
355  $this->assertEquals($results["data"]["longLabel"], "Add Special Email Notification");
356 
357  // From the CU email notification screen, add.
358  $specialEmailUpdate = false;
359  $results = _CreateUpdateTableForUpdateAudit($Cu, $role, $email, $recordExists, $userEmail, $specialEmailUpdate);
360  $this->assertEquals($results["status"], "000");
361  $this->assertEquals($results["data"]["shortLabel"], "ADD_NOTI");
362  $this->assertEquals($results["data"]["longLabel"], "Add Notification Emails");
363  }
364 }