|
21 | 21 | use CodeIgniter\Test\ReflectionHelper; |
22 | 22 | use DateTime; |
23 | 23 | use DateTimeInterface; |
| 24 | +use DateTimeZone; |
24 | 25 | use JsonSerializable; |
25 | 26 | use PHPUnit\Framework\Attributes\DataProvider; |
26 | 27 | use PHPUnit\Framework\Attributes\Group; |
@@ -2169,4 +2170,32 @@ public function testSyncOriginalWithEnumValues(): void |
2169 | 2170 | $this->assertSame(ColorEnum::class, $colorData['__class']); |
2170 | 2171 | $this->assertSame('GREEN', $colorData['__enum']); |
2171 | 2172 | } |
| 2173 | + |
| 2174 | + public function testHasChangedWithDateTimeInterface(): void |
| 2175 | + { |
| 2176 | + $entity = new class () extends Entity { |
| 2177 | + protected $attributes = [ |
| 2178 | + 'created_at' => null, |
| 2179 | + ]; |
| 2180 | + }; |
| 2181 | + |
| 2182 | + // Test with Time object |
| 2183 | + $entity->created_at = Time::parse('2024-01-01 12:00:00', 'UTC'); |
| 2184 | + $entity->syncOriginal(); |
| 2185 | + |
| 2186 | + $this->assertFalse($entity->hasChanged('created_at')); |
| 2187 | + |
| 2188 | + $entity->created_at = Time::parse('2024-12-31 23:59:59', 'UTC'); |
| 2189 | + $this->assertTrue($entity->hasChanged('created_at')); |
| 2190 | + |
| 2191 | + $entity->syncOriginal(); |
| 2192 | + $entity->created_at = Time::parse('2024-12-31 23:59:59', 'UTC'); |
| 2193 | + $this->assertFalse($entity->hasChanged('created_at')); |
| 2194 | + |
| 2195 | + // Test timezone difference detection |
| 2196 | + $entity->created_at = new DateTime('2024-01-01 12:00:00', new DateTimeZone('UTC')); |
| 2197 | + $entity->syncOriginal(); |
| 2198 | + $entity->created_at = new DateTime('2024-01-01 12:00:00', new DateTimeZone('America/New_York')); |
| 2199 | + $this->assertTrue($entity->hasChanged('created_at')); |
| 2200 | + } |
2172 | 2201 | } |
0 commit comments