diff --git a/src/Mixins/Expectation.php b/src/Mixins/Expectation.php index 9145949b..e42fc96a 100644 --- a/src/Mixins/Expectation.php +++ b/src/Mixins/Expectation.php @@ -1128,4 +1128,17 @@ final class Expectation return $this; } + + /** + * Asserts that the value is between 2 specified values + * + * @return self + */ + public function toBeBetween(int|float|DateTimeInterface $lowestValue, int|float|DateTimeInterface $highestValue, string $message = ''): self + { + Assert::assertGreaterThanOrEqual($lowestValue, $this->value, $message); + Assert::assertLessThanOrEqual($highestValue, $this->value, $message); + + return $this; + } } diff --git a/tests/Features/Expect/toBeBetween.php b/tests/Features/Expect/toBeBetween.php new file mode 100644 index 00000000..d71526cb --- /dev/null +++ b/tests/Features/Expect/toBeBetween.php @@ -0,0 +1,43 @@ +toBeBetween(1, 3); +}); + +test('passes with float', function () { + expect(1.5)->toBeBetween(1.25, 1.75); +}); + +test('passes with float and int', function () { + expect(1.5)->toBeBetween(1, 2); +}); + +test('passes with DateTime', function () { + expect(new DateTime('2023-09-22'))->toBeBetween(new DateTime('2023-09-21'), new DateTime('2023-09-23')); +}); + +test('failure with int', function () { + expect(4)->toBeBetween(1, 3); +})->throws(ExpectationFailedException::class); + +test('failure with float', function () { + expect(2)->toBeBetween(1.5, 1.75); +})->throws(ExpectationFailedException::class); + +test('failure with float and int', function () { + expect(2.1)->toBeBetween(1, 2); +})->throws(ExpectationFailedException::class); + +test('failure with DateTime', function () { + expect(new DateTime('2023-09-20'))->toBeBetween(new DateTime('2023-09-21'), new DateTime('2023-09-23')); +})->throws(ExpectationFailedException::class); + +test('failures with custom message', function () { + expect(4)->toBeBetween(1, 3, 'oh no!'); +})->throws(ExpectationFailedException::class, 'oh no!'); + +test('not failures', function () { + expect(2)->not->toBeBetween(1, 3); +})->throws(ExpectationFailedException::class);