summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexKlimenkov <shurick.klimenkov@gmail.com>2016-03-22 15:54:02 +0300
committerAlexKlimenkov <shurick.klimenkov@gmail.com>2016-03-22 15:54:02 +0300
commit212fd89925d606aec583e83cdbeaeb5b78ff522e (patch)
tree7440145874812ae9cc06f7f46508a0c9071350c3
parent0bcea2320e4235e6cfc0bcf65b917e45845bd5fe (diff)
parentea6f9c81b2149a27a50cb0c217e1bf92f24aa05c (diff)
downloadscheduler-helper-php-212fd89925d606aec583e83cdbeaeb5b78ff522e.zip
scheduler-helper-php-212fd89925d606aec583e83cdbeaeb5b78ff522e.tar.gz
scheduler-helper-php-212fd89925d606aec583e83cdbeaeb5b78ff522e.tar.bz2
Merge pull request #19 from mperednya/helperTests
Fixes with getData/saveData methods, add unit tests
-rw-r--r--RecurringType.php54
-rwxr-xr-xSchedulerHelper.php6
-rw-r--r--readme.md13
-rw-r--r--tests/Data_deleteById/CommonEvents/source.json90
-rw-r--r--tests/Data_getData/DayRecurrings/source.json118
-rw-r--r--tests/Data_getData/DayRecurrings/target.json583
-rw-r--r--tests/Data_getData/MonthRecurrings/source.json38
-rw-r--r--tests/Data_getData/MonthRecurrings/target.json130
-rw-r--r--tests/Data_getData/WeekRecurrings/source.json74
-rw-r--r--tests/Data_getData/WeekRecurrings/target.json319
-rw-r--r--tests/Data_getData/YearRecurrings/source.json58
-rw-r--r--tests/Data_getData/YearRecurrings/target.json49
-rw-r--r--tests/Data_saveData/DayRecurrings/source.json24
-rw-r--r--tests/Data_saveData/DayRecurrings/target.json20
-rw-r--r--tests/Data_saveData/MonthRecurrings/source.json48
-rw-r--r--tests/Data_saveData/MonthRecurrings/target.json36
-rw-r--r--tests/Data_saveData/WeekRecurrings/source.json39
-rw-r--r--tests/Data_saveData/WeekRecurrings/target.json31
-rw-r--r--tests/Data_saveData/YearRecurrings/source.json50
-rw-r--r--tests/Data_saveData/YearRecurrings/target.json36
-rw-r--r--tests/Data_saveDataUpdate/DayRecurrings/source.json64
-rw-r--r--tests/Data_saveDataUpdate/DayRecurrings/target.json34
-rw-r--r--tests/Data_saveDataUpdate/MonthRecurrings/source.json86
-rw-r--r--tests/Data_saveDataUpdate/MonthRecurrings/target.json40
-rw-r--r--tests/Data_saveDataUpdate/WeekRecurrings/source.json68
-rw-r--r--tests/Data_saveDataUpdate/WeekRecurrings/target.json34
-rw-r--r--tests/Data_saveDataUpdate/YearRecurrings/source.json88
-rw-r--r--tests/Data_saveDataUpdate/YearRecurrings/target.json40
-rw-r--r--tests/Logger.php33
-rw-r--r--tests/SchedulerHelperTest.php193
-rw-r--r--tests/TestBaseHelper.php114
-rw-r--r--tests/TestConfig.php20
-rw-r--r--tests/TestDataHelper.php129
33 files changed, 2742 insertions, 17 deletions
diff --git a/RecurringType.php b/RecurringType.php
index 96b062b..9b88c44 100644
--- a/RecurringType.php
+++ b/RecurringType.php
@@ -32,6 +32,8 @@ class RecurringType {
private $_fields_values = array();
private $_recurring_start_date_stamp;
private $_recurring_end_date_stamp;
+
+ public static $start_on_monday = true;
public function __construct($recurringType, $recurringStartDateStamp, $recurringEndDateStamp)
{
@@ -112,9 +114,14 @@ class RecurringType {
case $dataFields[self::FLD_WEEK_DAYS_LIST]:
$weekDaysToRecurring = explode(",", $value);
$days = array();
+ $repeatVal = str_replace(" ", "", $dataArray[$dataFields[self::FLD_REC_TYPE]]);
+ if($repeatVal == "year"){
+ $daysOfWeek["sunday"] = 7;
+ }
+
foreach($weekDaysToRecurring as $day) {
$day = str_replace(" ", "", $day);
- if(!in_array($day, $daysOfWeek))
+ if(!isset($daysOfWeek[$day]))
throw new Exception("Field {$field} will contains data like 'monday,tuesday,wednesday'.");
array_push($days, $daysOfWeek[$day]);
@@ -246,21 +253,26 @@ class RecurringType {
return $recurringInterval;
//Correct start date interval if it smaller then recurring start date.
- if ($intervalStartDateStamp < $recurringStartDateStamp)
+ if ($intervalStartDateStamp < $recurringStartDateStamp) {
$intervalStartDateStamp = $recurringStartDateStamp;
+ $recurringInterval["start_date_stamp"] = $intervalStartDateStamp;
+ }
//Correct end date interval if it smaller then recurring end date.
- if ($intervalEndDateStamp > $recurringEndDateStamp)
+ if ($intervalEndDateStamp > $recurringEndDateStamp){
$intervalEndDateStamp = $recurringEndDateStamp;
+ $recurringInterval["end_date_stamp"] = $intervalEndDateStamp;
+ }
$type = $this->getRecurringTypeValue();
//If recurring type is "year" then exit, else add months.
if ($type == self::REC_TYPE_DAY || $type == self::REC_TYPE_WEEK) {
- $step = $this->_transpose_size[$type] * $this->getRecurringTypeStepValue();
- $day = 24 * 60 * 60;
- $delta = floor(($intervalStartDateStamp - $recurringStartDateStamp) / ($day * $step));
- if ($delta > 0)
+ if($recurringStartDateStamp < $intervalStartDateStamp) {
+ $step = $this->_transpose_size[$type] * $this->getRecurringTypeStepValue();
+ $day = 24 * 60 * 60;
+ $delta = floor(($intervalStartDateStamp - $recurringStartDateStamp) / ($day * $step)) || 1;
$recurringInterval["start_date_stamp"] = $recurringStartDateStamp + $delta * $step * $day;
+ }
}
else {
$differenceStartDates = SchedulerHelperDate::differenceBetweenDates($intervalStartDateStamp, $recurringStartDateStamp);
@@ -294,17 +306,21 @@ class RecurringType {
private function _getRecurringDayStep($dateStamp, $recurringWeekDay)
{
$weekDay = SchedulerHelperDate::getDayOfWeek($dateStamp);
+ if(self::$start_on_monday) {
+ $recurringWeekDay = $recurringWeekDay == 0 ? 7 : $recurringWeekDay;
+ }
$dayStep = $recurringWeekDay - $weekDay;
- $dayStep = ($dayStep < 0) ? (SchedulerHelperDate::DAYS_IN_WEEK - (-$dayStep)) : $dayStep;
return $dayStep;
}
/**
* Get recurring days for date.
* @param $dateStamp
+ * @param $start
+ * $param $end
* @return array
*/
- private function _getRecurringDays($dateStamp)
+ private function _getRecurringDays($dateStamp, $start = NULL, $end = NULL)
{
$recurringDays = array();
@@ -314,18 +330,24 @@ class RecurringType {
$daysCount = count($recurringWeekDays);
for($i = 0; $i < $daysCount; $i++) {
$dayStep = $this->_getRecurringDayStep($dateStamp, $recurringWeekDays[$i]);
- array_push($recurringDays, SchedulerHelperDate::addDays($dateStamp, $dayStep));
+ $stamp = SchedulerHelperDate::addDays($dateStamp, $dayStep);
+ if((!$start || $stamp >= $start) && (!$end|| $stamp < $end))
+ array_push($recurringDays, $stamp);
}
}
//Else if recurring type has day of week and step for it, then get this day.
elseif($this->getWeekDayValue() && $this->getWeekNumberValue()) {
$dayStep = $this->_getRecurringDayStep($dateStamp, $this->getWeekDayValue());
$dayStep += (SchedulerHelperDate::DAYS_IN_WEEK * ($this->getWeekNumberValue() - 1));
- array_push($recurringDays, SchedulerHelperDate::addDays($dateStamp, $dayStep));
+ $stamp = SchedulerHelperDate::addDays($dateStamp, $dayStep);
+ if((!$start || $stamp >= $start) && (!$end|| $stamp < $end))
+ array_push($recurringDays, $stamp);
}
//Else return recurring date without change.
- else
- array_push($recurringDays, $dateStamp);
+ else {
+ if((!$start || $dateStamp >= $start) && (!$end|| $dateStamp < $end))
+ array_push($recurringDays, $dateStamp);
+ }
return $recurringDays;
}
@@ -351,6 +373,8 @@ class RecurringType {
$intervalEndDateStamp = $correctedInterval["end_date_stamp"];
$currentRecurringStartDateStamp = $intervalStartDateStamp;
$recurringDates = array();
+ $recurringStartDateStamp = $this->_recurring_start_date_stamp;
+ $recurringEndDateStamp = $this->_recurring_end_date_stamp;
//Generate dates wile next recurring date belongs to interval.
$countRecurringCycles = 0;
@@ -362,7 +386,7 @@ class RecurringType {
)
) {
$countRecurringCycles++;
- $recurringDays = $this->_getRecurringDays($currentRecurringStartDateStamp);
+ $recurringDays = $this->_getRecurringDays($currentRecurringStartDateStamp, $recurringStartDateStamp, $recurringEndDateStamp);
$recurringDates = array_merge($recurringDates, $recurringDays);
switch($recType) {
@@ -407,7 +431,7 @@ class RecurringType {
$maxEndDateStamp = NULL;
foreach($recurringStartDatesStamps as $startDateStamp) {
- $endDateStamp = $startDateStamp + $eventLength;
+ $endDateStamp = $startDateStamp;
$maxEndDateStamp = ($endDateStamp > $maxEndDateStamp) ? $endDateStamp : $maxEndDateStamp;
}
diff --git a/SchedulerHelper.php b/SchedulerHelper.php
index ef1dcec..4fe93e0 100755
--- a/SchedulerHelper.php
+++ b/SchedulerHelper.php
@@ -32,7 +32,8 @@ abstract class DHelper extends SchedulerHelperConnector
public $config = array(
"debug" => true,
- "server_date" => false
+ "server_date" => false,
+ "start_on_monay" => true
);
protected $_mapped_fields = array();
@@ -365,6 +366,7 @@ class Helper extends DHelper implements IHelper
$startField = $this->getStartDateFieldName();
$endField = $this->getEndDateFieldName();
+ RecurringType::$start_on_monday = $this->config["start_on_monay"];
$recCount = count($recurringEvents);
for($i = 0; $i < $recCount; $i++) {
$eventData = $recurringEvents[$i];
@@ -396,7 +398,7 @@ class Helper extends DHelper implements IHelper
$fullEventData = $eventData["full_event_data"];
$recurringStartDateStamp = $this->getDateTimestamp($fullEventData[$startField]);
$recurringEndDateStamp = $this->getDateTimestamp($fullEventData[$endField]);
- if($recurringStartDateStamp <= $intervalEndDateStamp && $recurringEndDateStamp >= $intervalStartDateStamp) {
+ if($recurringStartDateStamp < $intervalEndDateStamp && $recurringEndDateStamp > $intervalStartDateStamp) {
array_push($resultData, $eventData["filtered_event_data"]);
}
}
diff --git a/readme.md b/readme.md
index 37f089b..2bbb877 100644
--- a/readme.md
+++ b/readme.md
@@ -118,6 +118,19 @@ To get data of the recurring events, use the method 'getData([$startDateStr], [$
//);
```
+#####Tests
+
+In order to run tests:
+
+1. Install PHPUnit following this instruction https://phpunit.de/manual/current/en/installation.html
+
+2. Configure DB settings in tests/TestConfig.php
+
+3. Enter repository folder and execute
+
+```
+ phpunit --bootstrap SchedulerHelper.php tests/SchedulerHelperTest
+```
### License
diff --git a/tests/Data_deleteById/CommonEvents/source.json b/tests/Data_deleteById/CommonEvents/source.json
new file mode 100644
index 0000000..619f738
--- /dev/null
+++ b/tests/Data_deleteById/CommonEvents/source.json
@@ -0,0 +1,90 @@
+{
+ "insert_data": [
+ {
+ "start_date": "2016-05-04 10:00:00",
+ "end_date": "2016-05-04 15:00:00",
+ "text": "Test event 1",
+ "id": "1",
+ "event_pid": "",
+ "event_length": "",
+ "rec_pattern": "",
+ "rec_type": "",
+ "!nativeeditor_status": ""
+ },
+ {
+ "start_date": "2016-05-10 00:00:00",
+ "end_date": "2016-05-18 00:00:00",
+ "text": "Test event 2",
+ "id": "2",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "day_2___",
+ "rec_type": "day_2___#4",
+ "!nativeeditor_status": ""
+ },
+ {
+ "start_date": "2016-05-03 22:40:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Event 3",
+ "id": "3",
+ "event_pid": "",
+ "event_length": "3600",
+ "rec_pattern": "week_2___0,2,6",
+ "rec_type": "week_2___0,2,6#no",
+ "!nativeeditor_status": ""
+ },
+ {
+ "start_date": "2016-05-02 00:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Event 4",
+ "id": "4",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "month_1___",
+ "rec_type": "month_1___#no",
+ "!nativeeditor_status": ""
+ },
+ {
+ "start_date": "2016-05-09 00:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Event 5",
+ "id": "5",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "month_1_5_4_",
+ "rec_type": "month_1_5_4_#no",
+ "!nativeeditor_status": ""
+ },
+ {
+ "start_date": "2016-03-08 00:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Event 6",
+ "id": "6",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "year_1___",
+ "rec_type": "year_1___#no",
+ "!nativeeditor_status": ""
+ }
+ ],
+ "data": [
+ {
+ "id": 1
+ },
+ {
+ "id": 2
+ },
+ {
+ "id": 3
+ },
+ {
+ "id": 4
+ },
+ {
+ "id": 5
+ },
+ {
+ "id": 6
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_getData/DayRecurrings/source.json b/tests/Data_getData/DayRecurrings/source.json
new file mode 100644
index 0000000..fd59358
--- /dev/null
+++ b/tests/Data_getData/DayRecurrings/source.json
@@ -0,0 +1,118 @@
+{
+ "settings": {
+ "start_date": "2016-03-01 00:00:00",
+ "end_date": "2016-03-31 24:00:00"
+ },
+ "data": [
+ {
+ "id": "1",
+ "start_date": "2016-03-02 10:05:00",
+ "end_date": "2016-03-05 10:05:00",
+ "text": "Daily Test 1",
+ "rec_type": "day_1___#3",
+ "event_pid": "0",
+ "event_length": "10500",
+ "rec_pattern": "day_1___"
+ },
+ {
+ "id": "2",
+ "start_date": "2016-03-07 00:00:00",
+ "end_date": "2016-05-26 00:00:00",
+ "text": "Daily Test 2 End after ",
+ "rec_type": "day_2___#40",
+ "event_pid": "0",
+ "event_length": "300",
+ "rec_pattern": "day_2___"
+ },
+ {
+ "id": "3",
+ "start_date": "2016-02-10 00:00:00",
+ "end_date": "2016-03-11 00:00:00",
+ "text": "Daily Test 3 start before",
+ "rec_type": "day_3___#10",
+ "event_pid": "0",
+ "event_length": "300",
+ "rec_pattern": "day_3___"
+ },
+ {
+ "id": "4",
+ "start_date": "2016-02-23 00:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Daily Test 4 (work)",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_pid": "0",
+ "event_length": "300",
+ "rec_pattern": "week_1___1,2,3,4,5"
+ },
+ {
+ "id": "5",
+ "start_date": "2016-03-03 01:10:00",
+ "end_date": "2016-03-31 00:00:00",
+ "text": "Daily Test 5 (end by)",
+ "rec_type": "day_6___#",
+ "event_pid": "",
+ "event_length": "51600",
+ "rec_pattern": "day_6___"
+ },
+ {
+ "id": "6",
+ "start_date": "2016-03-04 21:30:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Daily test 6",
+ "rec_type": "day_2___#no",
+ "event_pid": "",
+ "event_length": "2400",
+ "rec_pattern": "day_2___"
+ },
+ {
+ "id": "7",
+ "start_date": "2016-02-29 23:25:00",
+ "end_date": "2016-03-01 00:00:00",
+ "text": "Common event 1",
+ "rec_type": "",
+ "event_pid": "",
+ "event_length": "",
+ "rec_pattern": ""
+ },
+ {
+ "id": "8",
+ "start_date": "2016-03-10 13:30:00",
+ "end_date": "2016-03-10 17:00:00",
+ "text": "Common event 2",
+ "rec_type": "",
+ "event_pid": "",
+ "event_length": "",
+ "rec_pattern": ""
+ },
+ {
+ "id": "9",
+ "start_date": "2016-04-01 00:00:00",
+ "end_date": "2016-04-01 00:05:00",
+ "text": "Common event 3",
+ "rec_type": "",
+ "event_pid": "",
+ "event_length": "",
+ "rec_pattern": ""
+ },
+ {
+ "id": "10",
+ "start_date": "2016-03-01 00:00:00",
+ "end_date": "2016-03-01 04:35:00",
+ "text": "Common event 4",
+ "rec_type": "",
+ "event_pid": "",
+ "event_length": "",
+ "rec_pattern": ""
+ },
+ {
+ "id": "11",
+ "start_date": "2016-03-31 00:00:00",
+ "end_date": "2016-04-01 00:00:00",
+ "text": "Common End 6",
+ "rec_type": "",
+ "event_pid": "",
+ "event_length": "",
+ "rec_pattern": ""
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_getData/DayRecurrings/target.json b/tests/Data_getData/DayRecurrings/target.json
new file mode 100644
index 0000000..682c288
--- /dev/null
+++ b/tests/Data_getData/DayRecurrings/target.json
@@ -0,0 +1,583 @@
+{
+ "data": [
+ {
+ "start_date": "2016-03-02 10:05:00",
+ "end_date": "2016-03-02 13:00:00",
+ "event_pid": "0",
+ "text": "Daily Test 1",
+ "id": "1",
+ "rec_type": "day_1___#3",
+ "event_length": "10500"
+ },
+ {
+ "start_date": "2016-03-03 10:05:00",
+ "end_date": "2016-03-03 13:00:00",
+ "event_pid": "0",
+ "text": "Daily Test 1",
+ "id": "1",
+ "rec_type": "day_1___#3",
+ "event_length": "10500"
+ },
+ {
+ "start_date": "2016-03-04 10:05:00",
+ "end_date": "2016-03-04 13:00:00",
+ "event_pid": "0",
+ "text": "Daily Test 1",
+ "id": "1",
+ "rec_type": "day_1___#3",
+ "event_length": "10500"
+ },
+ {
+ "start_date": "2016-03-07 00:00:00",
+ "end_date": "2016-03-07 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-09 00:00:00",
+ "end_date": "2016-03-09 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-11 00:00:00",
+ "end_date": "2016-03-11 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-13 00:00:00",
+ "end_date": "2016-03-13 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-15 00:00:00",
+ "end_date": "2016-03-15 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-17 00:00:00",
+ "end_date": "2016-03-17 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-19 00:00:00",
+ "end_date": "2016-03-19 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-21 00:00:00",
+ "end_date": "2016-03-21 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-23 00:00:00",
+ "end_date": "2016-03-23 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-25 00:00:00",
+ "end_date": "2016-03-25 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-27 00:00:00",
+ "end_date": "2016-03-27 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-29 00:00:00",
+ "end_date": "2016-03-29 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-31 00:00:00",
+ "end_date": "2016-03-31 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 2 End after ",
+ "id": "2",
+ "rec_type": "day_2___#40",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-02 00:00:00",
+ "end_date": "2016-03-02 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 3 start before",
+ "id": "3",
+ "rec_type": "day_3___#10",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-05 00:00:00",
+ "end_date": "2016-03-05 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 3 start before",
+ "id": "3",
+ "rec_type": "day_3___#10",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-08 00:00:00",
+ "end_date": "2016-03-08 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 3 start before",
+ "id": "3",
+ "rec_type": "day_3___#10",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-01 00:00:00",
+ "end_date": "2016-03-01 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-02 00:00:00",
+ "end_date": "2016-03-02 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-03 00:00:00",
+ "end_date": "2016-03-03 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-04 00:00:00",
+ "end_date": "2016-03-04 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-07 00:00:00",
+ "end_date": "2016-03-07 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-08 00:00:00",
+ "end_date": "2016-03-08 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-09 00:00:00",
+ "end_date": "2016-03-09 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-10 00:00:00",
+ "end_date": "2016-03-10 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-11 00:00:00",
+ "end_date": "2016-03-11 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-14 00:00:00",
+ "end_date": "2016-03-14 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-15 00:00:00",
+ "end_date": "2016-03-15 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-16 00:00:00",
+ "end_date": "2016-03-16 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-17 00:00:00",
+ "end_date": "2016-03-17 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-18 00:00:00",
+ "end_date": "2016-03-18 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-21 00:00:00",
+ "end_date": "2016-03-21 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-22 00:00:00",
+ "end_date": "2016-03-22 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-23 00:00:00",
+ "end_date": "2016-03-23 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-24 00:00:00",
+ "end_date": "2016-03-24 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-25 00:00:00",
+ "end_date": "2016-03-25 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-28 00:00:00",
+ "end_date": "2016-03-28 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-29 00:00:00",
+ "end_date": "2016-03-29 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-30 00:00:00",
+ "end_date": "2016-03-30 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-31 00:00:00",
+ "end_date": "2016-03-31 00:05:00",
+ "event_pid": "0",
+ "text": "Daily Test 4 (work)",
+ "id": "4",
+ "rec_type": "week_1___1,2,3,4,5#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-03 01:10:00",
+ "end_date": "2016-03-03 15:30:00",
+ "event_pid": "0",
+ "text": "Daily Test 5 (end by)",
+ "id": "5",
+ "rec_type": "day_6___#",
+ "event_length": 51600
+ },
+ {
+ "start_date": "2016-03-09 01:10:00",
+ "end_date": "2016-03-09 15:30:00",
+ "event_pid": "0",
+ "text": "Daily Test 5 (end by)",
+ "id": "5",
+ "rec_type": "day_6___#",
+ "event_length": 51600
+ },
+ {
+ "start_date": "2016-03-15 01:10:00",
+ "end_date": "2016-03-15 15:30:00",
+ "event_pid": "0",
+ "text": "Daily Test 5 (end by)",
+ "id": "5",
+ "rec_type": "day_6___#",
+ "event_length": 51600
+ },
+ {
+ "start_date": "2016-03-21 01:10:00",
+ "end_date": "2016-03-21 15:30:00",
+ "event_pid": "0",
+ "text": "Daily Test 5 (end by)",
+ "id": "5",
+ "rec_type": "day_6___#",
+ "event_length": 51600
+ },
+ {
+ "start_date": "2016-03-27 01:10:00",
+ "end_date": "2016-03-27 15:30:00",
+ "event_pid": "0",
+ "text": "Daily Test 5 (end by)",
+ "id": "5",
+ "rec_type": "day_6___#",
+ "event_length": 51600
+ },
+ {
+ "start_date": "2016-03-04 21:30:00",
+ "end_date": "2016-03-04 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-06 21:30:00",
+ "end_date": "2016-03-06 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-08 21:30:00",
+ "end_date": "2016-03-08 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-10 21:30:00",
+ "end_date": "2016-03-10 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-12 21:30:00",
+ "end_date": "2016-03-12 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-14 21:30:00",
+ "end_date": "2016-03-14 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-16 21:30:00",
+ "end_date": "2016-03-16 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-18 21:30:00",
+ "end_date": "2016-03-18 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-20 21:30:00",
+ "end_date": "2016-03-20 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-22 21:30:00",
+ "end_date": "2016-03-22 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-24 21:30:00",
+ "end_date": "2016-03-24 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-26 21:30:00",
+ "end_date": "2016-03-26 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-28 21:30:00",
+ "end_date": "2016-03-28 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-30 21:30:00",
+ "end_date": "2016-03-30 22:10:00",
+ "event_pid": "0",
+ "text": "Daily test 6",
+ "id": "6",
+ "rec_type": "day_2___#no",
+ "event_length": 2400
+ },
+ {
+ "start_date": "2016-03-10 13:30:00",
+ "end_date": "2016-03-10 17:00:00",
+ "text": "Common event 2",
+ "id": "8",
+ "event_pid": "",
+ "event_length": "",
+ "rec_pattern": "",
+ "rec_type": ""
+ },
+ {
+ "start_date": "2016-03-01 00:00:00",
+ "end_date": "2016-03-01 04:35:00",
+ "text": "Common event 4",
+ "id": "10",
+ "event_pid": "",
+ "event_length": "",
+ "rec_pattern": "",
+ "rec_type": ""
+ },
+ {
+ "start_date": "2016-03-31 00:00:00",
+ "end_date": "2016-04-01 00:00:00",
+ "text": "Common End 6",
+ "id": "11",
+ "event_pid": "",
+ "event_length": "",
+ "rec_pattern": "",
+ "rec_type": ""
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_getData/MonthRecurrings/source.json b/tests/Data_getData/MonthRecurrings/source.json
new file mode 100644
index 0000000..3e4e8e0
--- /dev/null
+++ b/tests/Data_getData/MonthRecurrings/source.json
@@ -0,0 +1,38 @@
+{
+ "settings": {
+ "start_date": "2016-02-01 00:00:00",
+ "end_date": "2016-09-31 24:00:00"
+ },
+ "data": [
+ {
+ "id": "12",
+ "start_date": "2016-03-01 00:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Month event 1",
+ "rec_type": "month_1___#no",
+ "event_pid": "0",
+ "event_length": "11400",
+ "rec_pattern": "month_1___"
+ },
+ {
+ "id": "13",
+ "start_date": "2016-03-03 00:00:00",
+ "end_date": "2016-09-03 00:00:00",
+ "text": "Month Event 2",
+ "rec_type": "month_2___#3",
+ "event_pid": "0",
+ "event_length": "300",
+ "rec_pattern": "month_2___"
+ },
+ {
+ "id": "14",
+ "start_date": "2016-01-01 15:00:00",
+ "end_date": "2016-05-21 00:00:00",
+ "text": "Month event 3 before",
+ "rec_type": "month_1_5_4_#",
+ "event_pid": "0",
+ "event_length": "10800",
+ "rec_pattern": "month_1_5_4_"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_getData/MonthRecurrings/target.json b/tests/Data_getData/MonthRecurrings/target.json
new file mode 100644
index 0000000..3244f55
--- /dev/null
+++ b/tests/Data_getData/MonthRecurrings/target.json
@@ -0,0 +1,130 @@
+{
+ "data": [
+ {
+ "start_date": "2016-03-01 00:00:00",
+ "end_date": "2016-03-01 03:10:00",
+ "event_pid": "0",
+ "text": "Month event 1",
+ "id": "12",
+ "rec_type": "month_1___#no",
+ "event_length": "11400"
+ },
+ {
+ "start_date": "2016-04-01 00:00:00",
+ "end_date": "2016-04-01 03:10:00",
+ "event_pid": "0",
+ "text": "Month event 1",
+ "id": "12",
+ "rec_type": "month_1___#no",
+ "event_length": "11400"
+ },
+ {
+ "start_date": "2016-05-01 00:00:00",
+ "end_date": "2016-05-01 03:10:00",
+ "event_pid": "0",
+ "text": "Month event 1",
+ "id": "12",
+ "rec_type": "month_1___#no",
+ "event_length": "11400"
+ },
+ {
+ "start_date": "2016-06-01 00:00:00",
+ "end_date": "2016-06-01 03:10:00",
+ "event_pid": "0",
+ "text": "Month event 1",
+ "id": "12",
+ "rec_type": "month_1___#no",
+ "event_length": "11400"
+ },
+ {
+ "start_date": "2016-07-01 00:00:00",
+ "end_date": "2016-07-01 03:10:00",
+ "event_pid": "0",
+ "text": "Month event 1",
+ "id": "12",
+ "rec_type": "month_1___#no",
+ "event_length": "11400"
+ },
+ {
+ "start_date": "2016-08-01 00:00:00",
+ "end_date": "2016-08-01 03:10:00",
+ "event_pid": "0",
+ "text": "Month event 1",
+ "id": "12",
+ "rec_type": "month_1___#no",
+ "event_length": "11400"
+ },
+ {
+ "start_date": "2016-09-01 00:00:00",
+ "end_date": "2016-09-01 03:10:00",
+ "event_pid": "0",
+ "text": "Month event 1",
+ "id": "12",
+ "rec_type": "month_1___#no",
+ "event_length": "11400"
+ },
+ {
+ "start_date": "2016-10-01 00:00:00",
+ "end_date": "2016-10-01 03:10:00",
+ "event_pid": "0",
+ "text": "Month event 1",
+ "id": "12",
+ "rec_type": "month_1___#no",
+ "event_length": "11400"
+ },
+ {
+ "start_date": "2016-03-03 00:00:00",
+ "end_date": "2016-03-03 00:05:00",
+ "event_pid": "0",
+ "text": "Month Event 2",
+ "id": "13",
+ "rec_type": "month_2___#3",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-05-03 00:00:00",
+ "end_date": "2016-05-03 00:05:00",
+ "event_pid": "0",
+ "text": "Month Event 2",
+ "id": "13",
+ "rec_type": "month_2___#3",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-07-03 00:00:00",
+ "end_date": "2016-07-03 00:05:00",
+ "event_pid": "0",
+ "text": "Month Event 2",
+ "id": "13",
+ "rec_type": "month_2___#3",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-02-26 15:00:00",
+ "end_date": "2016-02-26 18:00:00",
+ "event_pid": "0",
+ "text": "Month event 3 before",
+ "id": "14",
+ "rec_type": "month_1_5_4_#",
+ "event_length": "10800"
+ },
+ {
+ "start_date": "2016-03-25 15:00:00",
+ "end_date": "2016-03-25 18:00:00",
+ "event_pid": "0",
+ "text": "Month event 3 before",
+ "id": "14",
+ "rec_type": "month_1_5_4_#",
+ "event_length": "10800"
+ },
+ {
+ "start_date": "2016-04-22 15:00:00",
+ "end_date": "2016-04-22 18:00:00",
+ "event_pid": "0",
+ "text": "Month event 3 before",
+ "id": "14",
+ "rec_type": "month_1_5_4_#",
+ "event_length": "10800"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_getData/WeekRecurrings/source.json b/tests/Data_getData/WeekRecurrings/source.json
new file mode 100644
index 0000000..3ad4afe
--- /dev/null
+++ b/tests/Data_getData/WeekRecurrings/source.json
@@ -0,0 +1,74 @@
+{
+ "settings": {
+ "start_date": "2016-03-01 00:00:00",
+ "end_date": "2016-03-31 24:00:00"
+ },
+ "data": [
+ {
+ "id": "1",
+ "start_date": "2016-02-01 10:00:00",
+ "end_date": "2016-04-16 10:00:00",
+ "text": "Week event 1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_pid": "0",
+ "event_length": "21900",
+ "rec_pattern": "week_2___0,1,2,3,4,5,6",
+ "!nativeeditor_status": ""
+ },
+ {
+ "id": "2",
+ "start_date": "2016-03-08 12:45:00",
+ "end_date": "2016-03-27 00:00:00",
+ "text": "Week event 2",
+ "rec_type": "week_2___2,5#",
+ "event_pid": "",
+ "event_length": "14400",
+ "rec_pattern": "week_2___2,5",
+ "!nativeeditor_status": ""
+ },
+ {
+ "id": "3",
+ "start_date": "2016-03-12 00:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Week Event 3",
+ "rec_type": "week_2___0,6#no",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "week_2___0,6",
+ "!nativeeditor_status": ""
+ },
+ {
+ "id": "4",
+ "start_date": "2016-02-22 10:00:00",
+ "end_date": "2016-03-27 10:00:00",
+ "text": "Week Event 4",
+ "rec_type": "week_2___0,1,5#8",
+ "event_pid": "",
+ "event_length": "18000",
+ "rec_pattern": "week_2___0,1,5",
+ "!nativeeditor_status": ""
+ },
+ {
+ "id": "5",
+ "start_date": "2016-03-23 00:00:00",
+ "end_date": "2016-04-27 00:00:00",
+ "text": "Week Event 5",
+ "rec_type": "week_1___3#",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "week_1___3",
+ "!nativeeditor_status": ""
+ },
+ {
+ "id": "6",
+ "start_date": "2016-03-28 00:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Week Event 6",
+ "rec_type": "week_1___1,2,4,5#no",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "week_1___1,2,4,5",
+ "!nativeeditor_status": ""
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_getData/WeekRecurrings/target.json b/tests/Data_getData/WeekRecurrings/target.json
new file mode 100644
index 0000000..3740f93
--- /dev/null
+++ b/tests/Data_getData/WeekRecurrings/target.json
@@ -0,0 +1,319 @@
+{
+ "data": [
+ {
+ "start_date": "2016-03-01 10:00:00",
+ "end_date": "2016-03-01 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-02 10:00:00",
+ "end_date": "2016-03-02 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-03 10:00:00",
+ "end_date": "2016-03-03 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-04 10:00:00",
+ "end_date": "2016-03-04 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-05 10:00:00",
+ "end_date": "2016-03-05 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-06 10:00:00",
+ "end_date": "2016-03-06 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-14 10:00:00",
+ "end_date": "2016-03-14 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-15 10:00:00",
+ "end_date": "2016-03-15 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-16 10:00:00",
+ "end_date": "2016-03-16 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-17 10:00:00",
+ "end_date": "2016-03-17 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-18 10:00:00",
+ "end_date": "2016-03-18 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-19 10:00:00",
+ "end_date": "2016-03-19 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-20 10:00:00",
+ "end_date": "2016-03-20 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-28 10:00:00",
+ "end_date": "2016-03-28 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-29 10:00:00",
+ "end_date": "2016-03-29 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-30 10:00:00",
+ "end_date": "2016-03-30 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-31 10:00:00",
+ "end_date": "2016-03-31 16:05:00",
+ "event_pid": "0",
+ "text": "Week event 1",
+ "id": "1",
+ "rec_type": "week_2___0,1,2,3,4,5,6#40",
+ "event_length": 21900
+ },
+ {
+ "start_date": "2016-03-08 12:45:00",
+ "end_date": "2016-03-08 16:45:00",
+ "event_pid": "0",
+ "text": "Week event 2",
+ "id": "2",
+ "rec_type": "week_2___2,5#",
+ "event_length": 14400
+ },
+ {
+ "start_date": "2016-03-11 12:45:00",
+ "end_date": "2016-03-11 16:45:00",
+ "event_pid": "0",
+ "text": "Week event 2",
+ "id": "2",
+ "rec_type": "week_2___2,5#",
+ "event_length": 14400
+ },
+ {
+ "start_date": "2016-03-22 12:45:00",
+ "end_date": "2016-03-22 16:45:00",
+ "event_pid": "0",
+ "text": "Week event 2",
+ "id": "2",
+ "rec_type": "week_2___2,5#",
+ "event_length": 14400
+ },
+ {
+ "start_date": "2016-03-25 12:45:00",
+ "end_date": "2016-03-25 16:45:00",
+ "event_pid": "0",
+ "text": "Week event 2",
+ "id": "2",
+ "rec_type": "week_2___2,5#",
+ "event_length": 14400
+ },
+ {
+ "start_date": "2016-03-12 00:00:00",
+ "end_date": "2016-03-12 00:05:00",
+ "event_pid": "0",
+ "text": "Week Event 3",
+ "id": "3",
+ "rec_type": "week_2___0,6#no",
+ "event_length": 300
+ },
+ {
+ "start_date": "2016-03-13 00:00:00",
+ "end_date": "2016-03-13 00:05:00",
+ "event_pid": "0",
+ "text": "Week Event 3",
+ "id": "3",
+ "rec_type": "week_2___0,6#no",
+ "event_length": 300
+ },
+ {
+ "start_date": "2016-03-26 00:00:00",
+ "end_date": "2016-03-26 00:05:00",
+ "event_pid": "0",
+ "text": "Week Event 3",
+ "id": "3",
+ "rec_type": "week_2___0,6#no",
+ "event_length": 300
+ },
+ {
+ "start_date": "2016-03-27 00:00:00",
+ "end_date": "2016-03-27 00:05:00",
+ "event_pid": "0",
+ "text": "Week Event 3",
+ "id": "3",
+ "rec_type": "week_2___0,6#no",
+ "event_length": 300
+ },
+ {
+ "start_date": "2016-03-07 10:00:00",
+ "end_date": "2016-03-07 15:00:00",
+ "event_pid": "0",
+ "text": "Week Event 4",
+ "id": "4",
+ "rec_type": "week_2___0,1,5#8",
+ "event_length": 18000
+ },
+ {
+ "start_date": "2016-03-11 10:00:00",
+ "end_date": "2016-03-11 15:00:00",
+ "event_pid": "0",
+ "text": "Week Event 4",
+ "id": "4",
+ "rec_type": "week_2___0,1,5#8",
+ "event_length": 18000
+ },
+ {
+ "start_date": "2016-03-13 10:00:00",
+ "end_date": "2016-03-13 15:00:00",
+ "event_pid": "0",
+ "text": "Week Event 4",
+ "id": "4",
+ "rec_type": "week_2___0,1,5#8",
+ "event_length": 18000
+ },
+ {
+ "start_date": "2016-03-21 10:00:00",
+ "end_date": "2016-03-21 15:00:00",
+ "event_pid": "0",
+ "text": "Week Event 4",
+ "id": "4",
+ "rec_type": "week_2___0,1,5#8",
+ "event_length": 18000
+ },
+ {
+ "start_date": "2016-03-25 10:00:00",
+ "end_date": "2016-03-25 15:00:00",
+ "event_pid": "0",
+ "text": "Week Event 4",
+ "id": "4",
+ "rec_type": "week_2___0,1,5#8",
+ "event_length": 18000
+ },
+ {
+ "start_date": "2016-03-23 00:00:00",
+ "end_date": "2016-03-23 00:05:00",
+ "event_pid": "0",
+ "text": "Week Event 5",
+ "id": "5",
+ "rec_type": "week_1___3#",
+ "event_length": 300
+ },
+ {
+ "start_date": "2016-03-30 00:00:00",
+ "end_date": "2016-03-30 00:05:00",
+ "event_pid": "0",
+ "text": "Week Event 5",
+ "id": "5",
+ "rec_type": "week_1___3#",
+ "event_length": 300
+ },
+ {
+ "start_date": "2016-03-28 00:00:00",
+ "end_date": "2016-03-28 00:05:00",
+ "event_pid": "0",
+ "text": "Week Event 6",
+ "id": "6",
+ "rec_type": "week_1___1,2,4,5#no",
+ "event_length": 300
+ },
+ {
+ "start_date": "2016-03-29 00:00:00",
+ "end_date": "2016-03-29 00:05:00",
+ "event_pid": "0",
+ "text": "Week Event 6",
+ "id": "6",
+ "rec_type": "week_1___1,2,4,5#no",
+ "event_length": 300
+ },
+ {
+ "start_date": "2016-03-31 00:00:00",
+ "end_date": "2016-03-31 00:05:00",
+ "event_pid": "0",
+ "text": "Week Event 6",
+ "id": "6",
+ "rec_type": "week_1___1,2,4,5#no",
+ "event_length": 300
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_getData/YearRecurrings/source.json b/tests/Data_getData/YearRecurrings/source.json
new file mode 100644
index 0000000..838696c
--- /dev/null
+++ b/tests/Data_getData/YearRecurrings/source.json
@@ -0,0 +1,58 @@
+{
+ "settings": {
+ "start_date": "2016-01-01 00:00:00",
+ "end_date": "2017-01-01 00:00:00"
+ },
+ "data": [
+ {
+ "id": "7",
+ "start_date": "2015-01-01 00:00:00",
+ "end_date": "2018-01-01 00:00:00",
+ "text": "Year Event 1",
+ "rec_type": "year_1___#3",
+ "event_pid": "0",
+ "event_length": "300",
+ "rec_pattern": "year_1___"
+ },
+ {
+ "id": "8",
+ "start_date": "2016-03-01 18:00:00",
+ "end_date": "2019-03-22 18:00:00",
+ "text": "Year Event 2",
+ "rec_type": "year_1_5_4_#3",
+ "event_pid": "0",
+ "event_length": "12000",
+ "rec_pattern": "year_1_5_4_"
+ },
+ {
+ "id": "9",
+ "start_date": "2016-05-01 00:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Year Event 3",
+ "rec_type": "year_1_1_1_#no",
+ "event_pid": "0",
+ "event_length": "300",
+ "rec_pattern": "year_1_1_1_"
+ },
+ {
+ "id": "10",
+ "start_date": "2015-02-10 00:00:00",
+ "end_date": "2020-04-22 00:00:00",
+ "text": "Year Event 4",
+ "rec_type": "year_1___#",
+ "event_pid": "0",
+ "event_length": "300",
+ "rec_pattern": "year_1___"
+ },
+ {
+ "id": "11",
+ "start_date": "2015-12-01 00:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Year Event 5",
+ "rec_type": "year_1_7_4_#no",
+ "event_pid": "0",
+ "event_length": "300",
+ "rec_pattern": "year_1_7_4_"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_getData/YearRecurrings/target.json b/tests/Data_getData/YearRecurrings/target.json
new file mode 100644
index 0000000..131ecd4
--- /dev/null
+++ b/tests/Data_getData/YearRecurrings/target.json
@@ -0,0 +1,49 @@
+{
+ "data": [
+ {
+ "start_date": "2016-01-01 00:00:00",
+ "end_date": "2016-01-01 00:05:00",
+ "event_pid": "0",
+ "text": "Year Event 1",
+ "id": "7",
+ "rec_type": "year_1___#3",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-03-25 18:00:00",
+ "end_date": "2016-03-25 21:20:00",
+ "event_pid": "0",
+ "text": "Year Event 2",
+ "id": "8",
+ "rec_type": "year_1_5_4_#3",
+ "event_length": "12000"
+ },
+ {
+ "start_date": "2016-05-02 00:00:00",
+ "end_date": "2016-05-02 00:05:00",
+ "event_pid": "0",
+ "text": "Year Event 3",
+ "id": "9",
+ "rec_type": "year_1_1_1_#no",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-02-10 00:00:00",
+ "end_date": "2016-02-10 00:05:00",
+ "event_pid": "0",
+ "text": "Year Event 4",
+ "id": "10",
+ "rec_type": "year_1___#",
+ "event_length": "300"
+ },
+ {
+ "start_date": "2016-12-25 00:00:00",
+ "end_date": "2016-12-25 00:05:00",
+ "event_pid": "0",
+ "text": "Year Event 5",
+ "id": "11",
+ "rec_type": "year_1_7_4_#no",
+ "event_length": 300
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveData/DayRecurrings/source.json b/tests/Data_saveData/DayRecurrings/source.json
new file mode 100644
index 0000000..e700251
--- /dev/null
+++ b/tests/Data_saveData/DayRecurrings/source.json
@@ -0,0 +1,24 @@
+{
+ "data": [
+ {
+ "recurring_type": {
+ "each": "day",
+ "step": 1,
+ "repeat": 10
+ },
+ "start_date": "2016-03-08 10:15:00",
+ "length": 600,
+ "text": "Test Event 1"
+ },
+ {
+ "recurring_type": {
+ "each": "day",
+ "step": 1,
+ "repeat": 5
+ },
+ "start_date": "2016-03-08 10:15:00",
+ "length": 300,
+ "text": "Test Event 2"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveData/DayRecurrings/target.json b/tests/Data_saveData/DayRecurrings/target.json
new file mode 100644
index 0000000..270240e
--- /dev/null
+++ b/tests/Data_saveData/DayRecurrings/target.json
@@ -0,0 +1,20 @@
+{
+ "data": [
+ {
+ "start_date": "2016-03-08 10:15:00",
+ "end_date": "2016-03-18 10:15:00",
+ "text": "Test Event 1",
+ "event_pid": "",
+ "event_length": "600",
+ "rec_type": "day_1___#10"
+ },
+ {
+ "start_date": "2016-03-08 10:15:00",
+ "end_date": "2016-03-13 10:15:00",
+ "text": "Test Event 2",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_type": "day_1___#5"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveData/MonthRecurrings/source.json b/tests/Data_saveData/MonthRecurrings/source.json
new file mode 100644
index 0000000..73f6e46
--- /dev/null
+++ b/tests/Data_saveData/MonthRecurrings/source.json
@@ -0,0 +1,48 @@
+{
+ "data": [
+ {
+ "recurring_type": {
+ "each": "month",
+ "step": 3
+ },
+ "start_date": "2016-03-13 12:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "length": 2100,
+ "text": "Test Month 1"
+ },
+ {
+ "recurring_type": {
+ "each": "month",
+ "repeat": 6,
+ "week_number": 4,
+ "days_of_week": "friday",
+ "step": 1
+ },
+ "start_date": "2016-03-01 15:00:00",
+ "length": 17700,
+ "text": "Test Month 2"
+ },
+ {
+ "recurring_type": {
+ "each": "month",
+ "step": 1,
+ "days_of_week": "wednesday",
+ "week_number": 1
+ },
+ "start_date": "2016-03-01 10:00:00",
+ "end_date": "2016-08-21 00:00:00",
+ "length": 26100,
+ "text": "Test Month 3"
+ },
+ {
+ "recurring_type": {
+ "each": "month",
+ "step": 1
+ },
+ "start_date": "2016-03-30 02:50:00",
+ "end_date": "9999-02-01 00:00:00",
+ "length": 18000,
+ "text": "Test Month 4"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveData/MonthRecurrings/target.json b/tests/Data_saveData/MonthRecurrings/target.json
new file mode 100644
index 0000000..7263a37
--- /dev/null
+++ b/tests/Data_saveData/MonthRecurrings/target.json
@@ -0,0 +1,36 @@
+{
+ "data": [
+ {
+ "start_date": "2016-03-13 12:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Month 1",
+ "event_pid": "",
+ "event_length": "2100",
+ "rec_type": "month_3___#no"
+ },
+ {
+ "start_date": "2016-03-01 15:00:00",
+ "end_date": "2016-09-23 15:00:00",
+ "text": "Test Month 2",
+ "event_pid": "",
+ "event_length": "17700",
+ "rec_type": "month_1_5_4_#6"
+ },
+ {
+ "start_date": "2016-03-01 10:00:00",
+ "end_date": "2016-08-21 00:00:00",
+ "text": "Test Month 3",
+ "event_pid": "",
+ "event_length": "26100",
+ "rec_type": "month_1_3_1_#"
+ },
+ {
+ "start_date": "2016-03-30 02:50:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Month 4",
+ "event_pid": "",
+ "event_length": "18000",
+ "rec_type": "month_1___#no"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveData/WeekRecurrings/source.json b/tests/Data_saveData/WeekRecurrings/source.json
new file mode 100644
index 0000000..524267b
--- /dev/null
+++ b/tests/Data_saveData/WeekRecurrings/source.json
@@ -0,0 +1,39 @@
+{
+ "data": [
+ {
+ "recurring_type": {
+ "each": "week",
+ "step": 2,
+ "days_of_week": "sunday,monday,tuesday,wednesday,thursday,friday,saturday"
+ },
+ "start_date": "2016-03-01 12:20:00",
+ "end_date": "9999-02-01 00:00:00",
+ "length": 300,
+ "text": "Test Week Event 1"
+ },
+ {
+ "recurring_type": {
+ "each": "week",
+ "repeat": 17,
+ "step": 1,
+ "days_of_week": "monday,wednesday,thursday,friday"
+
+ },
+ "start_date": "2016-03-02 20:00:00",
+ "end_date": "2016-03-31 00:00:00",
+ "length": 300,
+ "text": "Test Week Event 2"
+ },
+ {
+ "recurring_type": {
+ "each": "week",
+ "step": 3,
+ "days_of_week": "monday,wednesday"
+ },
+ "start_date": "2016-03-02 15:55:00",
+ "end_date": "2016-08-21 00:00:00",
+ "length": 600,
+ "text": "Test Week Event 3"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveData/WeekRecurrings/target.json b/tests/Data_saveData/WeekRecurrings/target.json
new file mode 100644
index 0000000..04e7599
--- /dev/null
+++ b/tests/Data_saveData/WeekRecurrings/target.json
@@ -0,0 +1,31 @@
+{
+ "data": [
+ {
+ "start_date": "2016-03-01 12:20:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Week Event 1",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "week_2___0,1,2,3,4,5,6",
+ "rec_type": "week_2___0,1,2,3,4,5,6#no"
+ },
+ {
+ "start_date": "2016-03-02 20:00:00",
+ "end_date": "2016-03-31 00:00:00",
+ "text": "Test Week Event 2",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "week_1___1,3,4,5",
+ "rec_type": "week_1___1,3,4,5#17"
+ },
+ {
+ "start_date": "2016-03-02 15:55:00",
+ "end_date": "2016-08-21 00:00:00",
+ "text": "Test Week Event 3",
+ "event_pid": "",
+ "event_length": "600",
+ "rec_pattern": "week_3___1,3",
+ "rec_type": "week_3___1,3#"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveData/YearRecurrings/source.json b/tests/Data_saveData/YearRecurrings/source.json
new file mode 100644
index 0000000..7a013ec
--- /dev/null
+++ b/tests/Data_saveData/YearRecurrings/source.json
@@ -0,0 +1,50 @@
+{
+ "data": [
+ {
+ "recurring_type": {
+ "each": "year",
+ "step": 1
+ },
+ "start_date": "2016-03-08 11:40:00",
+ "end_date": "9999-02-01 00:00:00",
+ "length": 6600,
+ "text": "Test Year 1"
+ },
+ {
+ "recurring_type": {
+ "each": "year",
+ "repeat": 4,
+ "week_number": 1,
+ "step": 1,
+ "days_of_week": "monday"
+ },
+ "start_date": "2016-03-01 10:35:00",
+ "length": 30000,
+ "text": "Test Year 2"
+ },
+ {
+ "recurring_type": {
+ "each": "year",
+ "step": 1,
+ "days_of_week": "sunday",
+ "week_number": 4
+ },
+ "start_date": "2016-12-01 22:00:00",
+ "end_date": "2019-04-21 00:00:00",
+ "length": 3900,
+ "text": "Test Year 3"
+ },
+ {
+ "recurring_type": {
+ "each": "year",
+ "step": 1,
+ "days_of_week": "tuesday",
+ "week_number": 1
+ },
+ "start_date": "2016-01-01 10:40:00",
+ "end_date": "9999-02-01 00:00:00",
+ "length": 47700,
+ "text": "Test Year 4"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveData/YearRecurrings/target.json b/tests/Data_saveData/YearRecurrings/target.json
new file mode 100644
index 0000000..ea3d780
--- /dev/null
+++ b/tests/Data_saveData/YearRecurrings/target.json
@@ -0,0 +1,36 @@
+{
+ "data": [
+ {
+ "start_date": "2016-03-08 11:40:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Year 1",
+ "event_pid": "",
+ "event_length": "6600",
+ "rec_type": "year_1___#no"
+ },
+ {
+ "start_date": "2016-03-01 10:35:00",
+ "end_date": "2020-03-02 10:35:00",
+ "text": "Test Year 2",
+ "event_pid": "",
+ "event_length": "30000",
+ "rec_type": "year_1_1_1_#4"
+ },
+ {
+ "start_date": "2016-12-01 22:00:00",
+ "end_date": "2019-04-21 00:00:00",
+ "text": "Test Year 3",
+ "event_pid": "",
+ "event_length": "3900",
+ "rec_type": "year_1_7_4_#"
+ },
+ {
+ "start_date": "2016-01-01 10:40:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Year 4",
+ "event_pid": "",
+ "event_length": "47700",
+ "rec_type": "year_1_2_1_#no"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveDataUpdate/DayRecurrings/source.json b/tests/Data_saveDataUpdate/DayRecurrings/source.json
new file mode 100644
index 0000000..304593e
--- /dev/null
+++ b/tests/Data_saveDataUpdate/DayRecurrings/source.json
@@ -0,0 +1,64 @@
+{
+ "insert_data": [
+ {
+ "id": "1",
+ "start_date": "2015-02-04 11:00:00",
+ "end_date": "2015-02-04 19:30:00",
+ "text": "Event X1",
+ "rec_type": "",
+ "event_length": ""
+ },
+ {
+ "id": "2",
+ "start_date": "2020-07-09 11:00:00",
+ "end_date": "2020-07-09 19:20:00",
+ "text": "Event X2",
+ "rec_type": "day_1___#3",
+ "event_length": "600"
+ },
+ {
+ "id": "3",
+ "start_date": "2014-04-09 18:00:00",
+ "end_date": "2014-04-09 19:25:00",
+ "text": "Event X3",
+ "rec_type": "",
+ "event_length": ""
+ }
+ ],
+ "data": [
+ {
+ "id": 1,
+ "recurring_type": {
+ "each": "day",
+ "step": 1
+ },
+ "start_date": "2016-03-08 11:35:00",
+ "end_date": "9999-02-01 00:00:00",
+ "length": 19200,
+ "text": "Test Event 1"
+ },
+ {
+ "id": 2,
+ "recurring_type": {
+ "each": "day",
+ "step": 2,
+ "repeat": 33
+ },
+ "start_date": "2016-03-03 00:00:00",
+ "length": 300,
+ "text": "Test Event 2"
+ },
+ {
+ "id": 3,
+ "recurring_type": {
+ "each": "week",
+ "step": 1,
+ "days_of_week": "monday,tuesday,wednesday,thursday,friday"
+ },
+ "start_date": "2016-03-01 00:00:00",
+ "end_date": "2016-08-21 00:00:00",
+ "length": 300,
+ "text": "Test Event 3"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveDataUpdate/DayRecurrings/target.json b/tests/Data_saveDataUpdate/DayRecurrings/target.json
new file mode 100644
index 0000000..fc46634
--- /dev/null
+++ b/tests/Data_saveDataUpdate/DayRecurrings/target.json
@@ -0,0 +1,34 @@
+{
+ "data": [
+ {
+ "start_date": "2016-03-08 11:35:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Event 1",
+ "id": "1",
+ "event_pid": "",
+ "event_length": "19200",
+ "rec_pattern": "day_1___",
+ "rec_type": "day_1___#no"
+ },
+ {
+ "start_date": "2016-03-03 00:00:00",
+ "end_date": "2016-05-08 00:00:00",
+ "text": "Test Event 2",
+ "id": "2",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "day_2___",
+ "rec_type": "day_2___#33"
+ },
+ {
+ "start_date": "2016-03-01 00:00:00",
+ "end_date": "2016-08-21 00:00:00",
+ "text": "Test Event 3",
+ "id": "3",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "week_1___1,2,3,4,5",
+ "rec_type": "week_1___1,2,3,4,5#"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveDataUpdate/MonthRecurrings/source.json b/tests/Data_saveDataUpdate/MonthRecurrings/source.json
new file mode 100644
index 0000000..17fafba
--- /dev/null
+++ b/tests/Data_saveDataUpdate/MonthRecurrings/source.json
@@ -0,0 +1,86 @@
+{
+ "insert_data": [
+ {
+ "id": "1",
+ "start_date": "2015-02-04 11:00:00",
+ "end_date": "2015-02-04 19:30:00",
+ "text": "Event X1",
+ "rec_type": "",
+ "event_length": ""
+ },
+ {
+ "id": "2",
+ "start_date": "2020-07-09 11:00:00",
+ "end_date": "2020-07-09 19:20:00",
+ "text": "Event X2",
+ "rec_type": "day_1___#3",
+ "event_length": "600"
+ },
+ {
+ "id": "3",
+ "start_date": "2014-04-09 18:00:00",
+ "end_date": "2014-04-09 19:25:00",
+ "text": "Event X3",
+ "rec_type": "",
+ "event_length": ""
+ },
+ {
+ "id": "4",
+ "start_date": "2014-04-20 18:00:00",
+ "end_date": "2014-05-30 19:25:00",
+ "text": "Event X4",
+ "rec_type": "",
+ "event_length": ""
+ }
+ ],
+ "data": [
+ {
+ "id": 1,
+ "recurring_type": {
+ "each": "month",
+ "step": 3
+ },
+ "start_date": "2016-03-13 12:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "length": 2100,
+ "text": "Test Month 1"
+ },
+ {
+ "id": 2,
+ "recurring_type": {
+ "each": "month",
+ "repeat": 6,
+ "week_number": 4,
+ "days_of_week": "friday",
+ "step": 1
+ },
+ "start_date": "2016-03-01 15:00:00",
+ "length": 17700,
+ "text": "Test Month 2"
+ },
+ {
+ "id": 3,
+ "recurring_type": {
+ "each": "month",
+ "step": 1,
+ "days_of_week": "wednesday",
+ "week_number": 1
+ },
+ "start_date": "2016-03-01 10:00:00",
+ "end_date": "2016-08-21 00:00:00",
+ "length": 26100,
+ "text": "Test Month 3"
+ },
+ {
+ "id": 4,
+ "recurring_type": {
+ "each": "month",
+ "step": 1
+ },
+ "start_date": "2016-03-30 02:50:00",
+ "end_date": "9999-02-01 00:00:00",
+ "length": 18000,
+ "text": "Test Month 4"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveDataUpdate/MonthRecurrings/target.json b/tests/Data_saveDataUpdate/MonthRecurrings/target.json
new file mode 100644
index 0000000..704a01e
--- /dev/null
+++ b/tests/Data_saveDataUpdate/MonthRecurrings/target.json
@@ -0,0 +1,40 @@
+{
+ "data": [
+ {
+ "start_date": "2016-03-13 12:00:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Month 1",
+ "id": "1",
+ "event_pid": "",
+ "event_length": "2100",
+ "rec_type": "month_3___#no"
+ },
+ {
+ "start_date": "2016-03-01 15:00:00",
+ "end_date": "2016-09-23 15:00:00",
+ "text": "Test Month 2",
+ "id": "2",
+ "event_pid": "",
+ "event_length": "17700",
+ "rec_type": "month_1_5_4_#6"
+ },
+ {
+ "start_date": "2016-03-01 10:00:00",
+ "end_date": "2016-08-21 00:00:00",
+ "text": "Test Month 3",
+ "id": "3",
+ "event_pid": "",
+ "event_length": "26100",
+ "rec_type": "month_1_3_1_#"
+ },
+ {
+ "start_date": "2016-03-30 02:50:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Month 4",
+ "id": "4",
+ "event_pid": "",
+ "event_length": "18000",
+ "rec_type": "month_1___#no"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveDataUpdate/WeekRecurrings/source.json b/tests/Data_saveDataUpdate/WeekRecurrings/source.json
new file mode 100644
index 0000000..dbce0bb
--- /dev/null
+++ b/tests/Data_saveDataUpdate/WeekRecurrings/source.json
@@ -0,0 +1,68 @@
+{
+ "insert_data": [
+ {
+ "id": "1",
+ "start_date": "2015-02-04 11:00:00",
+ "end_date": "2015-02-04 19:30:00",
+ "text": "Event X1",
+ "rec_type": "",
+ "event_length": ""
+ },
+ {
+ "id": "2",
+ "start_date": "2020-07-09 11:00:00",
+ "end_date": "2020-07-09 19:20:00",
+ "text": "Event X2",
+ "rec_type": "day_1___#3",
+ "event_length": "600"
+ },
+ {
+ "id": "3",
+ "start_date": "2014-04-09 18:00:00",
+ "end_date": "2014-04-09 19:25:00",
+ "text": "Event X3",
+ "rec_type": "",
+ "event_length": ""
+ }
+ ],
+ "data": [
+ {
+ "id": 1,
+ "recurring_type": {
+ "each": "week",
+ "step": 2,
+ "days_of_week": "sunday,monday,tuesday,wednesday,thursday,friday,saturday"
+ },
+ "start_date": "2016-03-01 12:20:00",
+ "end_date": "9999-02-01 00:00:00",
+ "length": 300,
+ "text": "Test Week Event 1"
+ },
+ {
+ "id": 2,
+ "recurring_type": {
+ "each": "week",
+ "repeat": 17,
+ "step": 1,
+ "days_of_week": "monday,wednesday,thursday,friday"
+
+ },
+ "start_date": "2016-03-02 20:00:00",
+ "end_date": "2016-03-31 00:00:00",
+ "length": 300,
+ "text": "Test Week Event 2"
+ },
+ {
+ "id": 3,
+ "recurring_type": {
+ "each": "week",
+ "step": 3,
+ "days_of_week": "monday,wednesday"
+ },
+ "start_date": "2016-03-02 15:55:00",
+ "end_date": "2016-08-21 00:00:00",
+ "length": 600,
+ "text": "Test Week Event 3"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveDataUpdate/WeekRecurrings/target.json b/tests/Data_saveDataUpdate/WeekRecurrings/target.json
new file mode 100644
index 0000000..731db63
--- /dev/null
+++ b/tests/Data_saveDataUpdate/WeekRecurrings/target.json
@@ -0,0 +1,34 @@
+{
+ "data": [
+ {
+ "start_date": "2016-03-01 12:20:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Week Event 1",
+ "id": "1",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "week_2___0,1,2,3,4,5,6",
+ "rec_type": "week_2___0,1,2,3,4,5,6#no"
+ },
+ {
+ "start_date": "2016-03-02 20:00:00",
+ "end_date": "2016-03-31 00:00:00",
+ "text": "Test Week Event 2",
+ "id": "2",
+ "event_pid": "",
+ "event_length": "300",
+ "rec_pattern": "week_1___1,3,4,5",
+ "rec_type": "week_1___1,3,4,5#17"
+ },
+ {
+ "start_date": "2016-03-02 15:55:00",
+ "end_date": "2016-08-21 00:00:00",
+ "text": "Test Week Event 3",
+ "id": "3",
+ "event_pid": "",
+ "event_length": "600",
+ "rec_pattern": "week_3___1,3",
+ "rec_type": "week_3___1,3#"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveDataUpdate/YearRecurrings/source.json b/tests/Data_saveDataUpdate/YearRecurrings/source.json
new file mode 100644
index 0000000..351e8b6
--- /dev/null
+++ b/tests/Data_saveDataUpdate/YearRecurrings/source.json
@@ -0,0 +1,88 @@
+{
+ "insert_data": [
+ {
+ "id": "1",
+ "start_date": "2015-02-04 11:00:00",
+ "end_date": "2015-02-04 19:30:00",
+ "text": "Event X1",
+ "rec_type": "",
+ "event_length": ""
+ },
+ {
+ "id": "2",
+ "start_date": "2020-07-09 11:00:00",
+ "end_date": "2020-07-09 19:20:00",
+ "text": "Event X2",
+ "rec_type": "day_1___#3",
+ "event_length": "600"
+ },
+ {
+ "id": "3",
+ "start_date": "2014-04-09 18:00:00",
+ "end_date": "2014-04-09 19:25:00",
+ "text": "Event X3",
+ "rec_type": "",
+ "event_length": ""
+ },
+ {
+ "id": "4",
+ "start_date": "2014-04-20 18:00:00",
+ "end_date": "2014-05-30 19:25:00",
+ "text": "Event X4",
+ "rec_type": "",
+ "event_length": ""
+ }
+ ],
+ "data": [
+ {
+ "id": 1,
+ "recurring_type": {
+ "each": "year",
+ "step": 1
+ },
+ "start_date": "2016-03-08 11:40:00",
+ "end_date": "9999-02-01 00:00:00",
+ "length": 6600,
+ "text": "Test Year 1"
+ },
+ {
+ "id": 2,
+ "recurring_type": {
+ "each": "year",
+ "repeat": 4,
+ "week_number": 1,
+ "step": 1,
+ "days_of_week": "monday"
+ },
+ "start_date": "2016-03-01 10:35:00",
+ "length": 30000,
+ "text": "Test Year 2"
+ },
+ {
+ "id": 3,
+ "recurring_type": {
+ "each": "year",
+ "step": 1,
+ "days_of_week": "sunday",
+ "week_number": 4
+ },
+ "start_date": "2016-12-01 22:00:00",
+ "end_date": "2019-04-21 00:00:00",
+ "length": 3900,
+ "text": "Test Year 3"
+ },
+ {
+ "id": 4,
+ "recurring_type": {
+ "each": "year",
+ "step": 1,
+ "days_of_week": "tuesday",
+ "week_number": 1
+ },
+ "start_date": "2016-01-01 10:40:00",
+ "end_date": "9999-02-01 00:00:00",
+ "length": 47700,
+ "text": "Test Year 4"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Data_saveDataUpdate/YearRecurrings/target.json b/tests/Data_saveDataUpdate/YearRecurrings/target.json
new file mode 100644
index 0000000..5b47acb
--- /dev/null
+++ b/tests/Data_saveDataUpdate/YearRecurrings/target.json
@@ -0,0 +1,40 @@
+{
+ "data": [
+ {
+ "start_date": "2016-03-08 11:40:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Year 1",
+ "id": "1",
+ "event_pid": "",
+ "event_length": "6600",
+ "rec_type": "year_1___#no"
+ },
+ {
+ "start_date": "2016-03-01 10:35:00",
+ "end_date": "2020-03-02 10:35:00",
+ "text": "Test Year 2",
+ "id": "2",
+ "event_pid": "",
+ "event_length": "30000",
+ "rec_type": "year_1_1_1_#4"
+ },
+ {
+ "start_date": "2016-12-01 22:00:00",
+ "end_date": "2019-04-21 00:00:00",
+ "text": "Test Year 3",
+ "id": "3",
+ "event_pid": "",
+ "event_length": "3900",
+ "rec_type": "year_1_7_4_#"
+ },
+ {
+ "start_date": "2016-01-01 10:40:00",
+ "end_date": "9999-02-01 00:00:00",
+ "text": "Test Year 4",
+ "id": "4",
+ "event_pid": "",
+ "event_length": "47700",
+ "rec_type": "year_1_2_1_#no"
+ }
+ ]
+} \ No newline at end of file
diff --git a/tests/Logger.php b/tests/Logger.php
new file mode 100644
index 0000000..115b624
--- /dev/null
+++ b/tests/Logger.php
@@ -0,0 +1,33 @@
+<?php
+
+class Logger
+{
+ private $_stepNumber = 0;
+
+ public function logStart($name = NULL)
+ {
+ $this->_stepNumber = 0;
+ print "Test started. $name\n";
+ }
+
+ public function logStep(){
+ print "Step ".(++$this->_stepNumber)."\n";
+ }
+
+ public function logEnd($name = NULL){
+ $this->_stepNumber = 0;
+ print "Test finished. $name\n";
+ }
+
+ public function info($msg){
+ print "INFO: $msg\n";
+ }
+
+ public function warning($msg){
+ print "WARNING: $msg\n";
+ }
+
+ public function error($msg){
+ print "ERROR: $msg\n";
+ }
+} \ No newline at end of file
diff --git a/tests/SchedulerHelperTest.php b/tests/SchedulerHelperTest.php
new file mode 100644
index 0000000..9b13998
--- /dev/null
+++ b/tests/SchedulerHelperTest.php
@@ -0,0 +1,193 @@
+<?php
+require_once "Logger.php";
+require_once "TestBaseHelper.php";
+require_once "TestDataHelper.php";
+require_once "TestConfig.php";
+use DHTMLX_Scheduler\Helper;
+
+
+class SchedulerHelperTest extends \PHPUnit_Framework_TestCase
+{
+ private $_baseHelper;
+ private $_logger;
+
+ private function getHelper(){
+ $schedHelper = new Helper(
+ array(
+ "dbsm" => TestConfig::DBSM,
+ "host" => TestConfig::HOST,
+ "db_name" => TestConfig::DB_NAME,
+ "user" => TestConfig::USER,
+ "password" => TestConfig::PASSWORD,
+ "table_name" => TestConfig::TEMP_TABLE_NAME
+ )
+ );
+ $schedHelper->setFieldsNames(array(
+ $schedHelper::FLD_ID => "id",
+ ));
+
+ return $schedHelper;
+ }
+
+ public function __construct()
+ {
+ $this->_logger = new Logger();
+
+ $this->_baseHelper = new TestBaseHelper(array(
+ "dbsm" => TestConfig::DBSM,
+ "host" => TestConfig::HOST,
+ "db_name" => TestConfig::DB_NAME,
+ "user" => TestConfig::USER,
+ "password" => TestConfig::PASSWORD,
+ "table_name" => TestConfig::TEMP_TABLE_NAME,
+ "fields" => TestConfig::$fields
+ ));
+ }
+
+ public function __destruct()
+ {
+ $this->_baseHelper->dropTable();
+ }
+
+ public function testGetData()
+ {
+ $testName = "getData";
+
+ $this->_logger->logStart($testName);
+ $schedHelper = $this->getHelper();
+
+ $dataHelp = new TestDataHelper($testName);
+ $dataPacks = $dataHelp->getTestDataList();
+
+ if($dataPacks) {
+ for ($i = 0; $i < count($dataPacks); $i++) {
+ $this->_logger->logStep($testName);
+ $this->_logger->info("$dataPacks[$i] bunch processing....");
+ $source = $dataHelp->getTestSourceData($dataPacks[$i]);
+ $target = $dataHelp->getTestTargetData($dataPacks[$i]);
+
+ if(!$source || !$target){
+ $this->_logger->warning("There is no data. Bunch is skipped");
+ continue;
+ }
+
+ $this->_baseHelper->resetTable();
+ $this->_baseHelper->insertDataFromJSON($source['data']);
+
+ $helperData = $schedHelper->getData($source["settings"]["start_date"], $source["settings"]["end_date"]);
+ $dataHelp->writeObjectToFile($helperData, "_helperData.txt", $dataPacks[$i]);
+ $this->assertTrue($dataHelp->compareDataBunches($helperData, $target["data"], TestConfig::$fields),
+ "Helper and Scheduler data has difference");
+ }
+ }
+
+ $this->_logger->logEnd($testName);
+ }
+
+ public function testSaveData_Insert(){
+ $testName = "saveData";
+ $this->_logger->logStart($testName);
+ $schedHelper = $this->getHelper();
+
+ $dataHelp = new TestDataHelper($testName);
+ $dataPacks = $dataHelp->getTestDataList();
+ if($dataPacks) {
+ for ($i = 0; $i < count($dataPacks); $i++) {
+ $this->_logger->logStep($testName);
+ $this->_logger->info("$dataPacks[$i] bunch processing....");
+ $source = $dataHelp->getTestSourceData($dataPacks[$i]);
+ $target = $dataHelp->getTestTargetData($dataPacks[$i]);
+
+
+ if(!$source || !$target){
+ $this->_logger->warning("There is no data. Bunch is skipped");
+ continue;
+ }
+
+ $this->_baseHelper->resetTable();
+ $sourceData = $dataHelp->prepateDataForHelper($source["data"], $schedHelper);
+ $dataHelp->saveDataWithHelper($sourceData, $schedHelper);
+
+ $dataFromBase = $this->_baseHelper->getDataFromBase();
+
+ $dataHelp->writeObjectToFile($dataFromBase, "_dataFromBase.txt", $dataPacks[$i]);
+ $this->assertTrue($dataHelp->compareDataBunches($target["data"], $dataFromBase, TestConfig::$fields),
+ "Helper and Scheduler data has difference");
+ }
+ }
+
+ $this->_logger->logEnd($testName);
+ }
+
+ public function testSaveData_Update(){
+ $testName = "saveDataUpdate";
+ $this->_logger->logStart($testName);
+ $schedHelper = $this->getHelper();
+
+ $dataHelp = new TestDataHelper($testName);
+ $dataPacks = $dataHelp->getTestDataList();
+ if($dataPacks) {
+ for ($i = 0; $i < count($dataPacks); $i++) {
+ $this->_logger->logStep($testName);
+ $this->_logger->info("$dataPacks[$i] bunch processing....");
+ $source = $dataHelp->getTestSourceData($dataPacks[$i]);
+ $target = $dataHelp->getTestTargetData($dataPacks[$i]);
+
+
+ if(!$source || !$target){
+ $this->_logger->warning("There is no data. Bunch is skipped");
+ continue;
+ }
+
+ $this->_baseHelper->resetTable();
+
+ $this->_baseHelper->insertDataFromJSON($source["insert_data"]);
+ $sourceData = $dataHelp->prepateDataForHelper($source["data"], $schedHelper);
+ $dataHelp->saveDataWithHelper($sourceData, $schedHelper);
+
+ $dataFromBase = $this->_baseHelper->getDataFromBase();
+
+ $dataHelp->writeObjectToFile($dataFromBase, "_dataFromBase.txt", $dataPacks[$i]);
+ $this->assertTrue($dataHelp->compareDataBunches($target["data"], $dataFromBase, TestConfig::$fields),
+ "Helper and Scheduler data has difference");
+ }
+ }
+
+ $this->_logger->logEnd($testName);
+ }
+
+ public function testdeleteById(){
+ $testName = "deleteById";
+ $this->_logger->logStart($testName);
+ $schedHelper = $this->getHelper();
+
+ $dataHelp = new TestDataHelper($testName);
+ $dataPacks = $dataHelp->getTestDataList();
+ if($dataPacks) {
+ for ($i = 0; $i < count($dataPacks); $i++) {
+ $this->_logger->logStep($testName);
+ $this->_logger->info("$dataPacks[$i] bunch processing....");
+ $source = $dataHelp->getTestSourceData($dataPacks[$i]);
+
+
+ if(!$source){
+ $this->_logger->warning("There is no data. Bunch is skipped");
+ continue;
+ }
+
+ $this->_baseHelper->resetTable();
+
+ $this->_baseHelper->insertDataFromJSON($source["insert_data"]);
+
+ foreach($source["data"] as $event){
+ $schedHelper->deleteById($event["id"]);
+ $dataFromBase = $this->_baseHelper->getDataFromBase($event["id"]);
+ $this->assertTrue(count($dataFromBase) === 0,
+ "Event wasn't removed");
+ }
+ }
+ }
+
+ $this->_logger->logEnd($testName);
+ }
+} \ No newline at end of file
diff --git a/tests/TestBaseHelper.php b/tests/TestBaseHelper.php
new file mode 100644
index 0000000..5372d92
--- /dev/null
+++ b/tests/TestBaseHelper.php
@@ -0,0 +1,114 @@
+<?php
+
+class TestBaseHelper
+{
+ private $_dbsm, $_host, $_db_name, $_user, $_password, $_table_name;
+ private $_PDO = null;
+
+ private $_fields;
+
+ public function __construct($configs = array())
+ {
+ $this->_dbsm = isset($configs["dbsm"]) ? $configs["dbsm"] : "mysql";
+ $this->_host = isset($configs["host"]) ? $configs["host"] : "localhost";
+ $this->_db_name = $configs["db_name"];
+ $this->_user = $configs["user"];
+ $this->_password = $configs["password"];
+ $this->_table_name = $configs["table_name"];
+ $this->_fields = $configs["fields"];
+ }
+
+ private function getConnection()
+ {
+ $PDO_options = array(
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
+ );
+
+ $dsn = $this->_dbsm . ":host=" . $this->_host . ";dbname=" . $this->_db_name;
+ $this->_PDO = ($this->_PDO) ? $this->_PDO : new PDO($dsn, $this->_user, $this->_password,$PDO_options);
+ return $this->_PDO;
+ }
+
+ private function closeConnection()
+ {
+ unset($this->_PDO);
+ $this->_PDO = null;
+ }
+
+ public function dropTable()
+ {
+ $conn = $this->getConnection();
+ $conn->prepare("DROP TABLE IF EXISTS `$this->_table_name`;")->execute();
+ $this->closeConnection();
+ }
+
+ public function resetTable()
+ {
+ $this->dropTable();
+ $conn = $this->getConnection();
+ $sql = "CREATE TABLE `$this->_table_name`(";
+ $f = $this->_fields;
+ $fieldsCount = count($f);
+ $elNumb = 1;
+
+ foreach($f as $name=>$type) {
+ $sql .= "`$name` $type";
+ if ($elNumb++ != $fieldsCount)
+ $sql .= ",";
+ }
+ $sql .= ");";
+
+ $conn->prepare($sql)->execute();
+ $this->closeConnection();
+ }
+
+ public function insertDataFromJSON($data){
+ $f = $this->_fields;
+ $fieldsCount = count($f);
+
+ $sql = "INSERT INTO `$this->_table_name`(";
+
+ $elNumb = 1;
+ foreach($f as $name=>$type) {
+ $sql .= "`$name`";
+ if ($elNumb++ != $fieldsCount)
+ $sql .= ",";
+ }
+
+ $sql.= ") VALUES ";
+
+ $evsCount = count($data);
+ for($i = 0; $i < $evsCount; $i++) {
+ $sql .= "(";
+ $event = $data[$i];
+ $elNumb = 1;
+ foreach($f as $name=>$type) {
+ $sql .= isset($event[$name]) && !is_null($event[$name]) ? "'".$event[$name]."'":"NULL";
+
+ if ($elNumb++ != $fieldsCount)
+ $sql .= ",";
+ }
+ $sql.=")";
+ if($i + 1 != $evsCount)
+ $sql.=",";
+ }
+ $sql .= ";";
+
+ $conn = $this->getConnection();
+ $conn->prepare($sql)->execute();
+ $this->closeConnection();
+ }
+
+ public function getDataFromBase($id = NULL){
+ $sql = "SELECT * FROM $this->_table_name";
+ if(!is_null($id)){
+ $sql .= " WHERE id=$id";
+ }
+ $conn = $this->getConnection()->prepare($sql);
+ $conn->execute();
+ $data = $conn->fetchAll();
+ $this->closeConnection();
+ return $data;
+ }
+} \ No newline at end of file
diff --git a/tests/TestConfig.php b/tests/TestConfig.php
new file mode 100644
index 0000000..1a15f09
--- /dev/null
+++ b/tests/TestConfig.php
@@ -0,0 +1,20 @@
+<?php
+
+class TestConfig
+{
+ const DBSM = "mysql";
+ const HOST = "localhost";
+ const USER = "root";
+ const PASSWORD = "root";
+ const DB_NAME = "scheduler";
+ const TEMP_TABLE_NAME = "temp_table_20160315";
+ public static $fields = array(
+ "id" => "INT(11) DEFAULT NULL",
+ "start_date" => "DATETIME NOT NULL",
+ "end_date" => "DATETIME NOT NULL",
+ "text" => "VARCHAR(255) NOT NULL",
+ "rec_type" => "VARCHAR(50) DEFAULT NULL",
+ "event_length" => " BIGINT(20) DEFAULT NULL",
+ "event_pid" => "INT(11) DEFAULT NULL"
+ );
+} \ No newline at end of file
diff --git a/tests/TestDataHelper.php b/tests/TestDataHelper.php
new file mode 100644
index 0000000..99acc1c
--- /dev/null
+++ b/tests/TestDataHelper.php
@@ -0,0 +1,129 @@
+<?php
+require_once "TestConfig.php";
+
+class TestDataHelper
+{
+ const DATA_FOLDER_PREFIX = "Data_";
+ const SOURCE_NAME = "source.json";
+ const TARGET_NAME = "target.json";
+
+ private $_dataFolder;
+
+ private function getJSONDataFromFile($name, $type)
+ {
+ $file = dirname(__FILE__) . "/" . $this->_dataFolder . "/" . $name . "/" . $type;
+ if (!file_exists($file)) return null;
+
+ return json_decode(file_get_contents($file),true);
+ }
+
+ private function correctNoEndRecType($type){
+ $noPos = strpos($type, "#no");
+ if($noPos){
+ $type = substr_replace($type, "", $noPos + 1);
+ }
+ return $type;
+ }
+
+ public function __construct($testName)
+ {
+ $this->_dataFolder = self::DATA_FOLDER_PREFIX . $testName;
+ }
+
+ public function getTestDataList()
+ {
+ $dir = dirname(__FILE__) . "/" . $this->_dataFolder;
+ if (!file_exists($dir)) return null;
+ $folderItems = scandir($dir);
+ $folders = array();
+ foreach ($folderItems as $item) {
+ if ($item === '.' || $item === '..') continue;
+ if (is_dir($dir . "/" . $item))
+ array_push($folders, $item);
+ }
+ return $folders;
+ }
+
+ public function getTestSourceData($name)
+ {
+ return $this->getJSONDataFromFile($name, self::SOURCE_NAME);
+ }
+
+ public function getTestTargetData($name)
+ {
+ return $this->getJSONDataFromFile($name, self::TARGET_NAME);
+ }
+
+ public function compareDataObjects($helperObj, $schedObj, $fields)
+ {
+ foreach($fields as $key=>$value) {
+ $hVal = isset($helperObj[$key]) ? $helperObj[$key] : "";
+ $sVal = isset($schedObj[$key]) ? $schedObj[$key] : "";
+ if ($key == "rec_type") {
+ $sVal = $this->correctNoEndRecType($sVal);
+ $hVal = $this->correctNoEndRecType($hVal);
+ } elseif ($key == "event_length" || $key == "event_pid") {
+ $sVal = $sVal == 0 ? "" : $sVal;
+ $hVal = $hVal == 0 ? "" : $hVal;
+ }
+ if ($hVal != $sVal) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public function compareDataBunches($helperData, $schedData, $fields)
+ {
+ $helpLength = count($helperData);
+ $schedLength = count($schedData);
+
+ if($helpLength != $schedLength) return false;
+
+ for($i = 0; $i < $helpLength; $i++){
+ $objHasSame = false;
+ for($j = 0; $j < $schedLength; $j++){
+ if($this->compareDataObjects($helperData[$i], $schedData[$j], $fields)) {
+ array_splice($schedData, $j, 1);
+ $schedLength = count($schedData);
+ $objHasSame = true;
+ break;
+ }
+ }
+ if(!$objHasSame){
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public function writeObjectToFile($obj, $name, $bunch="")
+ {
+ ob_start();
+ var_dump($obj);
+ $output = ob_get_clean();
+ if ($bunch)
+ $bunch = "/$bunch";
+ $file = dirname(__FILE__) . "/" . $this->_dataFolder . $bunch . "/" . $name;
+ file_put_contents($file, $output);
+ }
+
+ public function prepateDataForHelper($data, $helper)
+ {
+ foreach ($data as &$event) {
+ if (!isset($event["end_date"]) && isset($event["recurring_type"]) && isset($event["length"])) {
+ $event["end_date"] = $helper->getRecurringEndDateStr($event["recurring_type"], $event["start_date"], $event["length"]);
+ }
+ }
+
+ return $data;
+ }
+
+ public function saveDataWithHelper($data, $helper)
+ {
+ foreach($data as $event){
+ $helper->saveData($event);
+ }
+ }
+} \ No newline at end of file