diff --git a/src/Ranges/TimestampRange.php b/src/Ranges/TimestampRange.php index 7aadb49..01149dc 100644 --- a/src/Ranges/TimestampRange.php +++ b/src/Ranges/TimestampRange.php @@ -35,4 +35,18 @@ public function forSql(): string { return "'$this'::tsrange"; } + + /** + * @return string + */ + public function __toString() + { + return sprintf( + '%s%s,%s%s', + $this->fromBound, + $this->from ? "\"{$this->from}\"" : '', + $this->to ? "\"{$this->to}\"" : '', + $this->toBound + ); + } } diff --git a/tests/Feature/RangesCastingTest.php b/tests/Feature/RangesCastingTest.php index 8cbacb1..003ff3b 100644 --- a/tests/Feature/RangesCastingTest.php +++ b/tests/Feature/RangesCastingTest.php @@ -37,6 +37,28 @@ public function it_casts_timestamp_range_column(): void $this->assertEquals($to, $model->timestamp_range->to()->toDateTimeString()); } + /** @test */ + public function it_does_not_detect_changes_when_updating_with_same_timestamp_range(): void + { + $from = '2010-01-01 14:30:30'; + $to = '2010-01-01 15:30:30'; + $timestampRange = new TimestampRange($from, $to, '[', ']'); + $model = $this->createModel( + [ + 'timestamp_range' => $timestampRange, + ] + ); + + $model = $model->fresh(); + $model->update( + [ + 'timestamp_range' => $timestampRange, + ] + ); + + $this->assertEmpty($model->getChanges()); + } + /** @test */ public function it_casts_timestamptz_range_column(): void { diff --git a/tests/Unit/RangesSerializationTest.php b/tests/Unit/RangesSerializationTest.php index c686381..5a918cd 100644 --- a/tests/Unit/RangesSerializationTest.php +++ b/tests/Unit/RangesSerializationTest.php @@ -16,19 +16,19 @@ class RangesSerializationTest extends TestCase public function timestamp_range_serializes_correctly(): void { $range = new TimestampRange('2010-01-01 14:30:30', '2010-01-01 15:30:30', '[', ']'); - $this->assertEquals('[2010-01-01 14:30:30,2010-01-01 15:30:30]', (string) $range); + $this->assertEquals('["2010-01-01 14:30:30","2010-01-01 15:30:30"]', (string) $range); $range = new TimestampRange('2010-01-01 14:30:30', '2010-01-01 15:30:30', '(', ']'); - $this->assertEquals('(2010-01-01 14:30:30,2010-01-01 15:30:30]', (string) $range); + $this->assertEquals('("2010-01-01 14:30:30","2010-01-01 15:30:30"]', (string) $range); $range = new TimestampRange('2010-01-01 14:30:30', '2010-01-01 15:30:30', '(', ')'); - $this->assertEquals('(2010-01-01 14:30:30,2010-01-01 15:30:30)', (string) $range); + $this->assertEquals('("2010-01-01 14:30:30","2010-01-01 15:30:30")', (string) $range); $range = new TimestampRange(null, '2010-01-01 15:30:30', '[', ']'); - $this->assertEquals('[,2010-01-01 15:30:30]', (string) $range); + $this->assertEquals('[,"2010-01-01 15:30:30"]', (string) $range); $range = new TimestampRange('2010-01-01 14:30:30', null, '[', ']'); - $this->assertEquals('[2010-01-01 14:30:30,]', (string) $range); + $this->assertEquals('["2010-01-01 14:30:30",]', (string) $range); $range = new TimestampRange(null, null, '[', ']'); $this->assertEquals('[,]', (string) $range);