|
20 | 20 | use Keboola\StorageApiBranch\Factory\StorageClientPlainFactory; |
21 | 21 | use RuntimeException; |
22 | 22 | use Symfony\Component\Uid\Uuid; |
| 23 | +use Throwable; |
23 | 24 |
|
24 | 25 | class JobTest extends BaseTest |
25 | 26 | { |
@@ -1019,45 +1020,81 @@ public function testGetExecutionTokenDecryptedNoFeature(): void |
1019 | 1020 | self::assertSame('token', $executionToken); |
1020 | 1021 | } |
1021 | 1022 |
|
1022 | | - public static function provideDatetimeStrings(): iterable |
| 1023 | + public static function provideValidDatetimeStrings(): iterable |
1023 | 1024 | { |
1024 | 1025 | yield 'endTime - MySQL offset' => [ |
1025 | 1026 | 'datetimeString' => '2024-06-11T10:11:37+00:00', |
1026 | | - 'timeField' => 'endTime', |
| 1027 | + 'datetimeField' => 'endTime', |
1027 | 1028 | ]; |
1028 | 1029 | yield 'endTime - Elastic offset' => [ |
1029 | 1030 | 'datetimeString' => '2024-06-11T10:11:37.000Z', |
1030 | | - 'timeField' => 'endTime', |
| 1031 | + 'datetimeField' => 'endTime', |
1031 | 1032 | ]; |
1032 | 1033 | yield 'startTime - MySQL offset' => [ |
1033 | 1034 | 'datetimeString' => '2024-06-11T10:11:37+00:00', |
1034 | | - 'timeField' => 'startTime', |
| 1035 | + 'datetimeField' => 'startTime', |
1035 | 1036 | ]; |
1036 | 1037 | yield 'startTime - Elastic offset' => [ |
1037 | 1038 | 'datetimeString' => '2024-06-11T10:11:37.000Z', |
1038 | | - 'timeField' => 'startTime', |
| 1039 | + 'datetimeField' => 'startTime', |
1039 | 1040 | ]; |
1040 | 1041 | yield 'createdTime - MySQL offset' => [ |
1041 | 1042 | 'datetimeString' => '2024-06-11T10:11:37+00:00', |
1042 | | - 'timeField' => 'createdTime', |
| 1043 | + 'datetimeField' => 'createdTime', |
1043 | 1044 | ]; |
1044 | 1045 | yield 'createdTime - Elastic offset' => [ |
1045 | 1046 | 'datetimeString' => '2024-06-11T10:11:37.000Z', |
1046 | | - 'timeField' => 'createdTime', |
| 1047 | + 'datetimeField' => 'createdTime', |
1047 | 1048 | ]; |
1048 | 1049 | } |
1049 | 1050 |
|
1050 | | - /** @dataProvider provideDatetimeStrings */ |
1051 | | - public function testTimeGetters(string $datetimeString, string $timeField): void |
| 1051 | + /** @dataProvider provideValidDatetimeStrings */ |
| 1052 | + public function testDatetimeFields(string $datetimeString, string $datetimeField): void |
1052 | 1053 | { |
1053 | 1054 | $jobData = $this->jobData; |
1054 | | - $getterMethodName = 'get' . ucfirst($timeField); |
1055 | | - self::assertNull($this->getJob($jobData)->$getterMethodName()); |
| 1055 | + $fieldGetterName = 'get' . ucfirst($datetimeField); |
| 1056 | + self::assertNull($this->getJob($jobData)->$fieldGetterName()); |
1056 | 1057 |
|
1057 | | - $jobData[$timeField] = $datetimeString; |
| 1058 | + $jobData[$datetimeField] = $datetimeString; |
1058 | 1059 | $job = $this->getJob($jobData); |
1059 | 1060 |
|
1060 | | - self::assertEquals(new DateTimeImmutable('2024-06-11T10:11:37+00:00'), $job->$getterMethodName()); |
1061 | | - self::assertEquals('+00:00', $job->$getterMethodName()->getTimezone()->getName()); |
| 1061 | + self::assertEquals(new DateTimeImmutable('2024-06-11T10:11:37+00:00'), $job->$fieldGetterName()); |
| 1062 | + self::assertEquals('2024-06-11T10:11:37+00:00', $job->jsonSerialize()[$datetimeField]); |
| 1063 | + } |
| 1064 | + |
| 1065 | + public static function provideDatetimeFields(): iterable |
| 1066 | + { |
| 1067 | + yield 'endTime' => ['datetimeField' => 'endTime']; |
| 1068 | + yield 'startTime' => ['datetimeField' => 'startTime']; |
| 1069 | + yield 'createdTime' => ['datetimeField' => 'createdTime']; |
| 1070 | + } |
| 1071 | + |
| 1072 | + /** @dataProvider provideDatetimeFields */ |
| 1073 | + public function testDatetimeFieldsEmpty(string $datetimeField): void |
| 1074 | + { |
| 1075 | + $jobData = $this->jobData; |
| 1076 | + $fieldGetterName = 'get' . ucfirst($datetimeField); |
| 1077 | + self::assertNull($this->getJob($jobData)->$fieldGetterName()); |
| 1078 | + |
| 1079 | + $jobData[$datetimeField] = null; |
| 1080 | + $job = $this->getJob($jobData); |
| 1081 | + |
| 1082 | + self::assertNull($job->$fieldGetterName()); |
| 1083 | + self::assertNull($job->jsonSerialize()[$datetimeField]); |
| 1084 | + } |
| 1085 | + |
| 1086 | + /** @dataProvider provideDatetimeFields */ |
| 1087 | + public function testDatetimeFieldsException(string $datetimeField): void |
| 1088 | + { |
| 1089 | + $jobData = $this->jobData; |
| 1090 | + $fieldGetterName = 'get' . ucfirst($datetimeField); |
| 1091 | + self::assertNull($this->getJob($jobData)->$fieldGetterName()); |
| 1092 | + |
| 1093 | + $jobData[$datetimeField] = 'invalid datetime string'; |
| 1094 | + |
| 1095 | + self::expectException(Throwable::class); |
| 1096 | + self::expectExceptionMessage('Failed to parse time string'); |
| 1097 | + |
| 1098 | + $this->getJob($jobData); |
1062 | 1099 | } |
1063 | 1100 | } |
0 commit comments