From fbc61dbbe96620f64906d557a93fe85f06d5f8d6 Mon Sep 17 00:00:00 2001 From: Awilum Date: Mon, 11 Jul 2022 13:45:00 +0300 Subject: [PATCH] feat(expressions): add `date` expression function --- .../Entries/Expressions/MathExpression.php | 35 +++++++++++++++++++ .../Expressions/MathExpressionTest.php | 33 +++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/flextype/core/Entries/Expressions/MathExpression.php create mode 100644 tests/src/flextype/core/Entries/Expressions/MathExpressionTest.php diff --git a/src/flextype/core/Entries/Expressions/MathExpression.php b/src/flextype/core/Entries/Expressions/MathExpression.php new file mode 100644 index 00000000..a169b772 --- /dev/null +++ b/src/flextype/core/Entries/Expressions/MathExpression.php @@ -0,0 +1,35 @@ + '\ceil($num)', static fn (array $arguments, int|float $num): float => \ceil($num)), + new ExpressionFunction('floor', static fn (int|float $num): float => '\floor($num)', static fn (array $arguments, int|float $num): float => \floor($num)), + new ExpressionFunction('min', static fn (mixed ...$values): mixed => '\min($values)', static fn (array $arguments, mixed ...$values): mixed => \min($values)), + new ExpressionFunction('max', static fn (mixed ...$values): mixed => '\max($values)', static fn (array $arguments, mixed ...$values): mixed => \max($values)), + ]; + } +} diff --git a/tests/src/flextype/core/Entries/Expressions/MathExpressionTest.php b/tests/src/flextype/core/Entries/Expressions/MathExpressionTest.php new file mode 100644 index 00000000..cf847d55 --- /dev/null +++ b/tests/src/flextype/core/Entries/Expressions/MathExpressionTest.php @@ -0,0 +1,33 @@ +directory(FLEXTYPE_PATH_PROJECT . '/entries')->create(); +}); + +afterEach(function (): void { + filesystem()->directory(FLEXTYPE_PATH_PROJECT . '/entries')->delete(); +}); + +test('ceil expression', function () { + entries()->create('ceil', ['test' => '[[ ceil(42.1) ]]']); + expect(entries()->fetch('ceil')['test'])->toBe('43'); +}); + +test('floor expression', function () { + entries()->create('floor', ['test' => '[[ floor(4.3) ]]']); + expect(entries()->fetch('floor')['test'])->toBe('4'); +}); + +test('min expression', function () { + entries()->create('min', ['test' => '[[ min(2, 3, 1, 6, 7) ]]']); + expect(entries()->fetch('min')['test'])->toBe('1'); +}); + +test('max expression', function () { + entries()->create('max', ['test' => '[[ max(2, 3, 1, 6, 7) ]]']); + expect(entries()->fetch('max')['test'])->toBe('7'); +}); \ No newline at end of file