Odyssey
schedNextIntervalTest.php
1 <?php
2 
3 use PHPUnit\Framework\TestCase;
4 
5 class schedNextIntervalTest extends TestCase
6 {
7  function setUp()
8  {
9  $bankingLibrary= "/var/www/html/banking/library";
10  require_once("$bankingLibrary/hcuTransferScheduled.i");
11  }
12 
13  function test_FirstDayOfMonth() {
14  $frequency = "FirstDayOfMonth";
15  $frequencyTrigger = TxNextInterval("09/07/2016", $frequency, 0);
16  $this->assertEquals($frequencyTrigger, "10/01/2016");
17 
18  $frequencyTrigger = TxNextInterval("09/07/2016", $frequency, 3);
19  $this->assertEquals($frequencyTrigger, "01/01/2017");
20 
21  $frequencyTrigger = TxNextInterval("09/07/2016", $frequency, 13);
22  $this->assertEquals($frequencyTrigger, "11/01/2017");
23 
24  $frequencyTrigger = TxNextInterval("02/29/2016", $frequency, 0);
25  $this->assertEquals($frequencyTrigger, "03/01/2016");
26 
27  $frequencyTrigger = TxNextInterval("02/29/2016", $frequency, 4);
28  $this->assertEquals($frequencyTrigger, "07/01/2016");
29 
30  $frequencyTrigger = TxNextInterval("02/29/2016", $frequency, 8);
31  $this->assertEquals($frequencyTrigger, "11/01/2016");
32 
33  $frequencyTrigger = TxNextInterval("02/01/2018", $frequency, 23);
34  $this->assertEquals($frequencyTrigger, "01/01/2020");
35 
36  $frequencyTrigger = TxNextInterval("11/01/2019", $frequency, 1);
37  $this->assertEquals($frequencyTrigger, "12/01/2019");
38  }
39 
40  function test_LastDayOfMonth() {
41  $frequency = "LastDayOfMonth";
42  $frequencyTrigger = TxNextInterval("09/07/2016", $frequency, 2);
43  $this->assertEquals($frequencyTrigger, "11/30/2016");
44 
45  $frequencyTrigger = TxNextInterval("2/23/2016", $frequency, 0);
46  $this->assertEquals($frequencyTrigger, "02/29/2016");
47  $this->assertNotEquals($frequencyTrigger, "02/28/2016");
48 
49  $frequencyTrigger = TxNextInterval("2/23/2017", $frequency, 0);
50  $this->assertEquals($frequencyTrigger, "02/28/2017");
51  $this->assertNotEquals($frequencyTrigger, "02/29/2017");
52 
53  $frequencyTrigger = TxNextInterval("1/23/2016", $frequency, 1);
54  $this->assertEquals($frequencyTrigger, "02/29/2016");
55  $this->assertNotEquals($frequencyTrigger, "02/28/2016");
56 
57  $frequencyTrigger = TxNextInterval("11/23/2016", $frequency, 3);
58  $this->assertEquals($frequencyTrigger, "02/28/2017");
59  $this->assertNotEquals($frequencyTrigger, "02/29/2017");
60 
61  $frequencyTrigger = TxNextInterval("2/23/2016", $frequency, 12);
62  $this->assertEquals($frequencyTrigger, "02/28/2017");
63  }
64 
65  function test_FirstFifteenth() {
66  $frequency = "FirstFifteenth";
67  $frequencyTrigger = TxNextInterval("01/01/2017", $frequency, 0);
68  $this->assertEquals($frequencyTrigger, "01/01/2017");
69 
70  $frequencyTrigger = TxNextInterval("02/06/2017", $frequency, 0);
71  $this->assertEquals($frequencyTrigger, "02/15/2017");
72 
73  $frequencyTrigger = TxNextInterval("03/16/2017", $frequency, 0);
74  $this->assertEquals($frequencyTrigger, "04/01/2017");
75 
76  $frequencyTrigger = TxNextInterval("01/01/2017", $frequency, 3);
77  $this->assertEquals($frequencyTrigger, "02/15/2017");
78 
79  $frequencyTrigger = TxNextInterval("02/06/2017", $frequency, 10);
80  $this->assertEquals($frequencyTrigger, "07/15/2017");
81 
82  $frequencyTrigger = TxNextInterval("11/18/2017", $frequency, 7);
83  $this->assertEquals($frequencyTrigger, "03/15/2018");
84  }
85 
86  function test_FifteenthLast() {
87  $frequency = "FifteenthLast";
88  $frequencyTrigger = TxNextInterval("01/01/2017", $frequency, 0);
89  $this->assertEquals($frequencyTrigger, "01/15/2017");
90 
91  $frequencyTrigger = TxNextInterval("02/16/2017", $frequency, 0);
92  $this->assertEquals($frequencyTrigger, "02/28/2017");
93 
94  $frequencyTrigger = TxNextInterval("02/16/2016", $frequency, 0);
95  $this->assertEquals($frequencyTrigger, "02/29/2016");
96  $this->assertNotEquals($frequencyTrigger, "02/28/2016");
97 
98  $frequencyTrigger = TxNextInterval("02/23/2016", $frequency, 24);
99  $this->assertEquals($frequencyTrigger, "02/28/2017");
100  $this->assertNotEquals($frequencyTrigger, "02/29/2017");
101 
102  $frequencyTrigger = TxNextInterval("02/06/2017", $frequency, 10);
103  $this->assertEquals($frequencyTrigger, "07/15/2017");
104 
105  $frequencyTrigger = TxNextInterval("11/18/2017", $frequency, 7);
106  $this->assertEquals($frequencyTrigger, "03/15/2018");
107  }
108 
109  function test_Weekly() {
110  $frequency = "Weekly";
111  $frequencyTrigger = TxNextInterval("01/01/2017", $frequency, 0);
112  $this->assertEquals($frequencyTrigger, "01/01/2017");
113 
114  $frequencyTrigger = TxNextInterval("01/01/2017", $frequency, 1);
115  $this->assertEquals($frequencyTrigger, "01/08/2017");
116 
117  $frequencyTrigger = TxNextInterval("04/29/2016", $frequency, 3);
118  $this->assertEquals($frequencyTrigger, "05/20/2016");
119 
120  $frequencyTrigger = TxNextInterval("12/21/2015", $frequency, 10);
121  $this->assertEquals($frequencyTrigger, "02/29/2016");
122  $this->assertNotEquals($frequencyTrigger, "02/28/2016");
123 
124  $frequencyTrigger = TxNextInterval("11/05/2016", $frequency, 5);
125  $this->assertEquals($frequencyTrigger, "12/10/2016");
126  }
127 
128  function test_BiWeekly() {
129  $frequency = "BiWeekly";
130  $frequencyTrigger = TxNextInterval("01/01/2017", $frequency, 0);
131  $this->assertEquals($frequencyTrigger, "01/01/2017");
132 
133  $frequencyTrigger = TxNextInterval("01/01/2017", $frequency, 1);
134  $this->assertEquals($frequencyTrigger, "01/15/2017");
135 
136  $frequencyTrigger = TxNextInterval("04/29/2016", $frequency, 3);
137  $this->assertEquals($frequencyTrigger, "06/10/2016");
138 
139  $frequencyTrigger = TxNextInterval("12/21/2015", $frequency, 5);
140  $this->assertEquals($frequencyTrigger, "02/29/2016");
141  $this->assertNotEquals($frequencyTrigger, "02/28/2016");
142 
143  $frequencyTrigger = TxNextInterval("11/05/2016", $frequency, 8);
144  $this->assertEquals($frequencyTrigger, "02/25/2017");
145  }
146 
147  function test_WeekDayOfMonth() {
148  $frequency = "WeekDayOfMonth";
149  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 0);
150  $this->assertEquals($frequencyTrigger, "01/01/2016");
151 
152  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 1);
153  $this->assertEquals($frequencyTrigger, "02/05/2016");
154  $this->assertNotEquals($frequencyTrigger, "03/04/2016");
155 
156  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 2);
157  $this->assertEquals($frequencyTrigger, "03/04/2016");
158 
159  $frequencyTrigger = TxNextInterval("01/30/2016", $frequency, 0);
160  $this->assertEquals($frequencyTrigger, "01/30/2016");
161 
162  $frequencyTrigger = TxNextInterval("01/30/2016", $frequency, 1);
163  $this->assertEquals($frequencyTrigger, "02/27/2016");
164  $this->assertNotEquals($frequencyTrigger, "03/26/2016");
165 
166  $frequencyTrigger = TxNextInterval("01/30/2016", $frequency, 2);
167  $this->assertEquals($frequencyTrigger, "03/26/2016");
168 
169  $frequencyTrigger = TxNextInterval("09/30/2016", $frequency, 5);
170  $this->assertEquals($frequencyTrigger, "02/24/2017");
171  $this->assertNotEquals($frequencyTrigger, "03/31/2017");
172  }
173 
174  function test_Monthly() {
175  $frequency = "Monthly";
176  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 0);
177  $this->assertEquals($frequencyTrigger, "01/01/2016");
178 
179  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 3);
180  $this->assertEquals($frequencyTrigger, "04/01/2016");
181 
182  $frequencyTrigger = TxNextInterval("11/30/2015", $frequency, 3);
183  $this->assertEquals($frequencyTrigger, "02/29/2016");
184  $this->assertNotEquals($frequencyTrigger, "02/28/2016");
185 
186  $frequencyTrigger = TxNextInterval("11/30/2015", $frequency, 15);
187  $this->assertEquals($frequencyTrigger, "02/28/2017");
188  $this->assertNotEquals($frequencyTrigger, "02/29/2017");
189 
190  $frequencyTrigger = TxNextInterval("03/31/2016", $frequency, 1);
191  $this->assertEquals($frequencyTrigger, "04/30/2016");
192 
193  $frequencyTrigger = TxNextInterval("03/31/2016", $frequency, 12);
194  $this->assertEquals($frequencyTrigger, "03/31/2017");
195  }
196 
197  function test_Every2months() {
198  $frequency = "Every2Months";
199  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 0);
200  $this->assertEquals($frequencyTrigger, "01/01/2016");
201 
202  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 3);
203  $this->assertEquals($frequencyTrigger, "07/01/2016");
204 
205  $frequencyTrigger = TxNextInterval("12/30/2015", $frequency, 1);
206  $this->assertEquals($frequencyTrigger, "02/29/2016");
207  $this->assertNotEquals($frequencyTrigger, "02/28/2016");
208 
209  $frequencyTrigger = TxNextInterval("12/30/2015", $frequency, 7);
210  $this->assertEquals($frequencyTrigger, "02/28/2017");
211  $this->assertNotEquals($frequencyTrigger, "02/29/2017");
212 
213  $frequencyTrigger = TxNextInterval("03/31/2016", $frequency, 1);
214  $this->assertEquals($frequencyTrigger, "05/31/2016");
215 
216  $frequencyTrigger = TxNextInterval("03/31/2016", $frequency, 6);
217  $this->assertEquals($frequencyTrigger, "03/31/2017");
218  }
219 
220  function test_Quarterly() {
221  $frequency = "Quarterly";
222  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 0);
223  $this->assertEquals($frequencyTrigger, "01/01/2016");
224 
225  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 3);
226  $this->assertEquals($frequencyTrigger, "10/01/2016");
227 
228  $frequencyTrigger = TxNextInterval("11/30/2015", $frequency, 1);
229  $this->assertEquals($frequencyTrigger, "02/29/2016");
230  $this->assertNotEquals($frequencyTrigger, "02/28/2016");
231 
232  $frequencyTrigger = TxNextInterval("11/30/2015", $frequency, 5);
233  $this->assertEquals($frequencyTrigger, "02/28/2017");
234  $this->assertNotEquals($frequencyTrigger, "02/29/2017");
235 
236  $frequencyTrigger = TxNextInterval("03/31/2016", $frequency, 1);
237  $this->assertEquals($frequencyTrigger, "06/30/2016");
238 
239  $frequencyTrigger = TxNextInterval("03/31/2016", $frequency, 12);
240  $this->assertEquals($frequencyTrigger, "03/31/2019");
241  }
242 
243  function test_SemiAnnually() {
244  $frequency = "SemiAnnually";
245  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 0);
246  $this->assertEquals($frequencyTrigger, "01/01/2016");
247 
248  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 3);
249  $this->assertEquals($frequencyTrigger, "07/01/2017");
250 
251  $frequencyTrigger = TxNextInterval("08/30/2015", $frequency, 1);
252  $this->assertEquals($frequencyTrigger, "02/29/2016");
253  $this->assertNotEquals($frequencyTrigger, "02/28/2016");
254 
255  $frequencyTrigger = TxNextInterval("08/30/2015", $frequency, 3);
256  $this->assertEquals($frequencyTrigger, "02/28/2017");
257  $this->assertNotEquals($frequencyTrigger, "02/29/2017");
258 
259  $frequencyTrigger = TxNextInterval("03/31/2016", $frequency, 8);
260  $this->assertEquals($frequencyTrigger, "03/31/2020");
261 
262  $frequencyTrigger = TxNextInterval("03/31/2016", $frequency, 11);
263  $this->assertEquals($frequencyTrigger, "09/30/2021");
264  }
265 
266  function test_Annually() {
267  $frequency = "Annually";
268  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 0);
269  $this->assertEquals($frequencyTrigger, "01/01/2016");
270 
271  $frequencyTrigger = TxNextInterval("02/29/2016", $frequency, 1);
272  $this->assertEquals($frequencyTrigger, "02/28/2017");
273 
274  $frequencyTrigger = TxNextInterval("02/29/2016", $frequency, 3);
275  $this->assertEquals($frequencyTrigger, "02/28/2019");
276 
277  $frequencyTrigger = TxNextInterval("02/29/2016", $frequency, 4);
278  $this->assertEquals($frequencyTrigger, "02/29/2020");
279 
280  $frequencyTrigger = TxNextInterval("09/23/2017", $frequency, 4);
281  $this->assertEquals($frequencyTrigger, "09/23/2021");
282 
283  $frequencyTrigger = TxNextInterval("12/15/2015", $frequency, 14);
284  $this->assertEquals($frequencyTrigger, "12/15/2029");
285  }
286 
287  function test_OneTime() {
288  $frequency = "OneTime";
289  $frequencyTrigger = TxNextInterval("01/01/2016", $frequency, 0);
290  $this->assertEquals($frequencyTrigger, "01/01/2016");
291 
292  $frequencyTrigger = TxNextInterval("02/29/2016", $frequency, 1);
293  $this->assertEquals($frequencyTrigger, "03/01/2016");
294 
295  $frequencyTrigger = TxNextInterval("02/29/2016", $frequency, 3);
296  $this->assertEquals($frequencyTrigger, "03/01/2016");
297 
298  }
299 
300  function test_NextInterval()
301  {
302  $frequencyAry = array(
303  "OneTime",
304  "FirstDayOfMonth",
305  "LastDayOfMonth",
306  "FirstFifteenth",
307  "FifteenthLast",
308  "Weekly",
309  "BiWeekly",
310  "WeekDayOfMonth",
311  "Monthly",
312  "Every2Months",
313  "Quarterly",
314  "SemiAnnually",
315  "Annually"
316  );
317 
318  $frequencyData = array(
319  "OneTime"=>array(
320  "input"=>"01/01/2017",
321  "expected"=>array("01/01/2017", "01/02/2017", "01/02/2017", "01/02/2017", "01/02/2017", "01/02/2017")
322  ),
323  "FirstDayOfMonth"=>array(
324  "input"=>"01/04/2017",
325  "expected"=>array("02/01/2017", "03/01/2017", "04/01/2017", "05/01/2017", "06/01/2017", "07/01/2017")
326  ),
327  "LastDayOfMonth"=>array(
328  "input"=>"01/10/2016",
329  "expected"=>array("01/31/2016", "02/29/2016", "03/31/2016", "04/30/2016", "05/31/2016", "06/30/2016")
330  ),
331  "FirstFifteenth"=>array(
332  "input"=>"01/10/2017",
333  "expected"=>array("01/15/2017", "02/01/2017", "02/15/2017", "03/01/2017", "03/15/2017", "04/01/2017")
334  ),
335  "FifteenthLast"=>array(
336  "input"=>"01/10/2017",
337  "expected"=>array("01/15/2017", "01/31/2017", "02/15/2017", "02/28/2017", "03/15/2017", "03/31/2017")
338  ),
339  "Weekly"=>array(
340  "input"=>"01/10/2017",
341  "expected"=>array("01/10/2017", "01/17/2017", "01/24/2017", "01/31/2017", "02/07/2017", "02/14/2017")
342  ),
343  "BiWeekly"=>array(
344  "input"=>"01/10/2017",
345  "expected"=>array("01/10/2017", "01/24/2017", "02/07/2017", "02/21/2017", "03/07/2017", "03/21/2017")
346  ),
347  "WeekDayOfMonth"=>array(
348  "input"=>"01/10/2017",
349  "expected"=>array("01/10/2017", "02/14/2017", "03/14/2017", "04/11/2017", "05/09/2017", "06/13/2017")
350  ),
351  "Monthly"=>array(
352  "input"=>"01/10/2017",
353  "expected"=>array("01/10/2017", "02/10/2017", "03/10/2017", "04/10/2017", "05/10/2017", "06/10/2017")
354  ),
355  "Every2Months"=>array(
356  "input"=>"01/10/2017",
357  "expected"=>array("01/10/2017", "03/10/2017", "05/10/2017", "07/10/2017", "09/10/2017", "11/10/2017")
358  ),
359  "Quarterly"=>array(
360  "input"=>"01/10/2017",
361  "expected"=>array("01/10/2017", "04/10/2017", "07/10/2017", "10/10/2017", "01/10/2018", "04/10/2018")
362  ),
363  "SemiAnnually"=>array(
364  "input"=>"01/10/2017",
365  "expected"=>array("01/10/2017", "07/10/2017", "01/10/2018", "07/10/2018", "01/10/2019", "07/10/2019")
366  ),
367  "Annually"=>array(
368  "input"=>"01/10/2017",
369  "expected"=>array("01/10/2017", "01/10/2018", "01/10/2019", "01/10/2020", "01/10/2021", "01/10/2022")
370  )
371  );
372 
373  /* iterate frequencies */
374  foreach ($frequencyAry as $frequency) {
375 
376  /* iterate intervals */
377  $frequencyInput = $frequencyData[$frequency]['input'];
378  $frequencyDates = $frequencyData[$frequency]['expected'];
379  $frequencyCount = 0;
380 
381  foreach ($frequencyDates as $date) {
382  $nextDate = TxNextInterval($frequencyInput, $frequency, $frequencyCount);
383  $this->assertEquals($nextDate, $date);
384 
385  $frequencyCount ++;
386  }
387  }
388  }
389 }