Add new types Array, Boolean, Record, Math

Signed-off-by: davidarendsen <davidarendsen@hey.com>
This commit is contained in:
davidarendsen 2022-08-16 14:46:06 +00:00
commit 057a2d625e
10 changed files with 137 additions and 29 deletions

View file

@ -5,13 +5,14 @@ declare(strict_types=1);
namespace Tests\Functions;
use Arendsen\FluxQueryBuilder\Functions\Reduce;
use Arendsen\FluxQueryBuilder\Type\Math;
use PHPUnit\Framework\TestCase;
final class ReduceFunctionTest extends TestCase
{
public function testSimpleReduce()
{
$expression = new Reduce(['sum' => 'r._value + accumulator.sum'], ['sum' => 0]);
$expression = new Reduce(['sum' => new Math('r._value + accumulator.sum')], ['sum' => 0]);
$query = '|> reduce(fn: (r, accumulator) => ({sum: r._value + accumulator.sum}), identity: {sum: 0}) ';

View file

@ -9,6 +9,7 @@ use Exception;
use Arendsen\FluxQueryBuilder\Expression\KeyValue;
use PHPUnit\Framework\TestCase;
use Arendsen\FluxQueryBuilder\QueryBuilder;
use Arendsen\FluxQueryBuilder\Type\Math;
final class QueryBuilderTest extends TestCase
{
@ -102,7 +103,7 @@ final class QueryBuilderTest extends TestCase
->addFilter(KeyValue::setEqualTo('_field', 'username'))
->addMap('r with name: r.user')
->addGroup(['_field', 'ip'])
->addReduce(['count' => 'accumulator.count + 1'], ['count' => 0])
->addReduce(['count' => new Math('accumulator.count + 1')], ['count' => 0])
->addFilter(KeyValue::setGreaterOrEqualTo('count', 1)->andGreaterOrEqualTo('count2', 2));
$expectedQuery = 'from(bucket: "test_bucket") |> range(start: time(v: 2022-08-12T17:31:00Z)) ' .

View file

@ -31,6 +31,34 @@ final class FactoryTypeTest extends TestCase
'value',
'"value"',
],
'Integer' => [
12345,
'12345'
],
'Boolean True' => [
true,
'true'
],
'Boolean False' => [
false,
'false'
],
'Array' => [
['hello', 'world'],
'"hello", "world"'
],
'Dictionary' => [
['hello' => 'world', 'foo' => 'bar'],
'hello: "world", foo: "bar"'
],
'Array Multidimensional' => [
['hello' => ['test', 'foo']],
'hello: ["test", "foo"]'
],
'Array Multidimensional 2' => [
['hello' => ['test' => 'bar', 'foo' => 'hi']],
'hello: [test: "bar", foo: "hi"]'
],
];
}
}