diff --git a/lib/Core/Extension/Core/ValueComparator/BirthdayValueComparator.php b/lib/Core/Extension/Core/ValueComparator/BirthdayValueComparator.php index 5b394f95..c252bf05 100644 --- a/lib/Core/Extension/Core/ValueComparator/BirthdayValueComparator.php +++ b/lib/Core/Extension/Core/ValueComparator/BirthdayValueComparator.php @@ -43,7 +43,7 @@ public function isLower(mixed $lower, mixed $higher, array $options): bool return false; } - return $higher < $lower; + return $lower < $higher; } /** @@ -56,6 +56,11 @@ public function isEqual(mixed $value, mixed $nextValue, array $options): bool return false; } - return $value == $nextValue; + if ($value instanceof \DateTimeImmutable) { + $value = $value->getTimestamp(); + $nextValue = $nextValue->getTimestamp(); + } + + return $value === $nextValue; } } diff --git a/lib/Core/Tests/Extension/Core/ValueComparison/BirthdayValueComparatorTest.php b/lib/Core/Tests/Extension/Core/ValueComparison/BirthdayValueComparatorTest.php new file mode 100644 index 00000000..164f56ca --- /dev/null +++ b/lib/Core/Tests/Extension/Core/ValueComparison/BirthdayValueComparatorTest.php @@ -0,0 +1,75 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Extension\Core\ValueComparison; + +use PHPUnit\Framework\TestCase; +use Rollerworks\Component\Search\Extension\Core\ValueComparator\BirthdayValueComparator; + +/** + * @internal + */ +final class BirthdayValueComparatorTest extends TestCase +{ + private BirthdayValueComparator $comparison; + + protected function setUp(): void + { + $this->comparison = new BirthdayValueComparator(); + } + + /** + * @test + */ + public function value_equals(): void + { + self::assertTrue($this->comparison->isEqual(new \DateTimeImmutable('2013-09-21 12:46:00'), new \DateTimeImmutable('2013-09-21 12:46:00'), [])); + self::assertTrue($this->comparison->isEqual(1, 1, [])); + } + + /** + * @test + */ + public function value_not_equals(): void + { + self::assertFalse($this->comparison->isEqual(1, 2, [])); + self::assertFalse($this->comparison->isEqual(new \DateTimeImmutable('2013-09-21 12:46:00'), new \DateTimeImmutable('2013-09-22 12:46:00'), [])); + self::assertFalse($this->comparison->isEqual(new \DateTimeImmutable('2013-09-21 12:46:00'), 0, [])); + } + + /** + * @test + */ + public function first_value_is_higher(): void + { + self::assertTrue($this->comparison->isHigher(5, 1, [])); + self::assertTrue($this->comparison->isHigher(new \DateTimeImmutable('2013-09-23 12:46:00'), new \DateTimeImmutable('2013-09-21 12:46:00'), [])); + + // Difference types cannot be compared + self::assertFalse($this->comparison->isHigher(new \DateTimeImmutable('2013-09-23 12:46:00'), 1, [])); + self::assertFalse($this->comparison->isHigher(1, new \DateTimeImmutable('2013-09-23 12:46:00'), [])); + } + + /** + * @test + */ + public function it_returns_true_when_first_value_is_lower(): void + { + self::assertTrue($this->comparison->isLower(2, 5, [])); + self::assertTrue($this->comparison->isLower(new \DateTimeImmutable('2013-09-21 12:46:00'), new \DateTimeImmutable('2013-09-23 12:46:00'), [])); + + // Difference types cannot be compared + self::assertFalse($this->comparison->isLower(new \DateTimeImmutable('2013-09-23 12:46:00'), 1, [])); + self::assertFalse($this->comparison->isLower(1, new \DateTimeImmutable('2013-09-23 12:46:00'), [])); + } +} diff --git a/lib/Core/Tests/Extension/Core/ValueComparison/DateTimeIntervalValueComparatorTest.php b/lib/Core/Tests/Extension/Core/ValueComparison/DateTimeIntervalValueComparatorTest.php new file mode 100644 index 00000000..8f2c1931 --- /dev/null +++ b/lib/Core/Tests/Extension/Core/ValueComparison/DateTimeIntervalValueComparatorTest.php @@ -0,0 +1,74 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Extension\Core\ValueComparison; + +use Carbon\CarbonInterval; +use PHPUnit\Framework\TestCase; +use Rollerworks\Component\Search\Extension\Core\ValueComparator\DateTimeIntervalValueComparator; + +/** + * @internal + */ +final class DateTimeIntervalValueComparatorTest extends TestCase +{ + private DateTimeIntervalValueComparator $comparison; + + protected function setUp(): void + { + $this->comparison = new DateTimeIntervalValueComparator(); + } + + /** + * @test + */ + public function true_when_equal(): void + { + self::assertTrue($this->comparison->isEqual(CarbonInterval::fromString('32m'), CarbonInterval::fromString('32m'), [])); + self::assertTrue($this->comparison->isEqual(CarbonInterval::fromString('1w 3d 4h 32m 23s'), CarbonInterval::fromString('1w 3d 4h 32m 23s'), [])); + self::assertTrue($this->comparison->isEqual(new \DateTimeImmutable('2013-09-22 12:46:00'), new \DateTimeImmutable('2013-09-22 12:46:00'), [])); + } + + /** + * @test + */ + public function false_when_not_equal(): void + { + self::assertFalse($this->comparison->isEqual(CarbonInterval::fromString('2w'), CarbonInterval::fromString('1w'), [])); + self::assertFalse($this->comparison->isEqual(new \DateTimeImmutable('2013-09-21 12:46:00'), new \DateTimeImmutable('2013-09-22 12:46:00'), [])); + self::assertFalse($this->comparison->isEqual(new \DateTimeImmutable('2013-09-21 12:46:00'), new \DateTimeImmutable('2013-09-21 12:40:00'), [])); + + // Difference types cannot be compared + self::assertFalse($this->comparison->isEqual(CarbonInterval::fromString('2w'), new \DateTimeImmutable('2013-09-21 12:40:00'), [])); + } + + /** + * @test + */ + public function first_higher(): void + { + self::assertTrue($this->comparison->isHigher(new \DateTimeImmutable('2013-09-23 12:46:00'), new \DateTimeImmutable('2013-09-21 12:46:00'), [])); + self::assertTrue($this->comparison->isHigher(CarbonInterval::fromString('35m'), new \DateTimeImmutable('2013-09-21 12:46:00'), [])); + self::assertTrue($this->comparison->isHigher(CarbonInterval::fromString('35m'), CarbonInterval::fromString('32m'), [])); + } + + /** + * @test + */ + public function is_lower(): void + { + self::assertTrue($this->comparison->isLower(new \DateTimeImmutable('2013-09-21 12:46:00'), new \DateTimeImmutable('2013-09-23 12:46:00'), [])); + self::assertTrue($this->comparison->isLower(new \DateTimeImmutable('2013-09-21 12:46:00'), CarbonInterval::fromString('30m'), [])); + self::assertTrue($this->comparison->isLower(CarbonInterval::fromString('30m'), CarbonInterval::fromString('32m'), [])); + } +} diff --git a/lib/Core/Tests/Extension/Core/ValueComparison/MoneyValueComparisonTest.php b/lib/Core/Tests/Extension/Core/ValueComparison/MoneyValueComparisonTest.php index 98730210..d6f94fca 100644 --- a/lib/Core/Tests/Extension/Core/ValueComparison/MoneyValueComparisonTest.php +++ b/lib/Core/Tests/Extension/Core/ValueComparison/MoneyValueComparisonTest.php @@ -13,7 +13,6 @@ namespace Rollerworks\Component\Search\Tests\Extension\Core\ValueComparison; -use Money\Currency; use Money\Money; use PHPUnit\Framework\TestCase; use Rollerworks\Component\Search\Extension\Core\Model\MoneyValue;