Skip to content

Commit 2603b9c

Browse files
authored
PHPLIB-1353 Add tests on Set Expression Operators (mongodb#41)
1 parent 956f690 commit 2603b9c

17 files changed

+594
-16
lines changed

generator/config/expression/allElementsTrue.yaml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,15 @@ arguments:
1111
name: expression
1212
type:
1313
- resolvesToArray
14-
variadic: array
14+
tests:
15+
-
16+
name: 'Example'
17+
link: 'https://www.mongodb.com/docs/manual/reference/operator/aggregation/allElementsTrue/#example'
18+
pipeline:
19+
-
20+
$project:
21+
responses: 1
22+
isAllTrue:
23+
$allElementsTrue:
24+
- '$responses'
25+
_id: 0

generator/config/expression/anyElementTrue.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,15 @@ arguments:
1111
name: expression
1212
type:
1313
- resolvesToArray
14+
tests:
15+
-
16+
name: 'Example'
17+
link: 'https://www.mongodb.com/docs/manual/reference/operator/aggregation/anyElementTrue/#example'
18+
pipeline:
19+
-
20+
$project:
21+
responses: 1
22+
isAnyTrue:
23+
$anyElementTrue:
24+
- '$responses'
25+
_id: 0

generator/config/expression/setDifference.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,17 @@ arguments:
1919
- resolvesToArray
2020
description: |
2121
The arguments can be any valid expression as long as they each resolve to an array.
22+
tests:
23+
-
24+
name: 'Example'
25+
link: 'https://www.mongodb.com/docs/manual/reference/operator/aggregation/setDifference/#example'
26+
pipeline:
27+
-
28+
$project:
29+
flowerFieldA: 1
30+
flowerFieldB: 1
31+
inBOnly:
32+
$setDifference:
33+
- '$flowerFieldB'
34+
- '$flowerFieldA'
35+
_id: 0

generator/config/expression/setEquals.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,17 @@ arguments:
1212
type:
1313
- resolvesToArray
1414
variadic: array
15+
tests:
16+
-
17+
name: 'Example'
18+
link: 'https://www.mongodb.com/docs/manual/reference/operator/aggregation/setEquals/#example'
19+
pipeline:
20+
-
21+
$project:
22+
_id: 0
23+
cakes: 1
24+
cupcakes: 1
25+
sameFlavors:
26+
$setEquals:
27+
- '$cakes'
28+
- '$cupcakes'

generator/config/expression/setIntersection.yaml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,33 @@ arguments:
1212
type:
1313
- resolvesToArray
1414
variadic: array
15+
tests:
16+
-
17+
name: 'Elements Array Example'
18+
link: 'https://www.mongodb.com/docs/manual/reference/operator/aggregation/setIntersection/#elements-array-example'
19+
pipeline:
20+
-
21+
$project:
22+
flowerFieldA: 1
23+
flowerFieldB: 1
24+
commonToBoth:
25+
$setIntersection:
26+
- '$flowerFieldA'
27+
- '$flowerFieldB'
28+
_id: 0
29+
-
30+
name: 'Retrieve Documents for Roles Granted to the Current User'
31+
link: 'https://www.mongodb.com/docs/manual/reference/operator/aggregation/setIntersection/#retrieve-documents-for-roles-granted-to-the-current-user'
32+
pipeline:
33+
-
34+
$match:
35+
$expr:
36+
$not:
37+
# the example doesn't use an array inside $not, but the documentation say it is necessary
38+
-
39+
$eq:
40+
-
41+
$setIntersection:
42+
- '$allowedRoles'
43+
- '$$USER_ROLES.role'
44+
- []

generator/config/expression/setIsSubset.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,18 @@ arguments:
1515
name: expression2
1616
type:
1717
- resolvesToArray
18+
tests:
19+
-
20+
name: 'Example'
21+
link: 'https://www.mongodb.com/docs/manual/reference/operator/aggregation/setIsSubset/#example'
22+
pipeline:
23+
-
24+
$project:
25+
flowerFieldA: 1
26+
flowerFieldB: 1
27+
AisSubset:
28+
$setIsSubset:
29+
- '$flowerFieldA'
30+
- '$flowerFieldB'
31+
_id: 0
32+

generator/config/expression/setUnion.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,17 @@ arguments:
1212
type:
1313
- resolvesToArray
1414
variadic: array
15+
tests:
16+
-
17+
name: 'Example'
18+
link: 'https://www.mongodb.com/docs/manual/reference/operator/aggregation/setUnion/#example'
19+
pipeline:
20+
-
21+
$project:
22+
flowerFieldA: 1
23+
flowerFieldB: 1
24+
allValues:
25+
$setUnion:
26+
- '$flowerFieldA'
27+
- '$flowerFieldB'
28+
_id: 0

src/Builder/Expression/AllElementsTrueOperator.php

Lines changed: 7 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Builder/Expression/FactoryTrait.php

Lines changed: 3 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace MongoDB\Tests\Builder\Expression;
6+
7+
use MongoDB\Builder\Expression;
8+
use MongoDB\Builder\Pipeline;
9+
use MongoDB\Builder\Stage;
10+
use MongoDB\Tests\Builder\PipelineTestCase;
11+
12+
/**
13+
* Test $allElementsTrue expression
14+
*/
15+
class AllElementsTrueOperatorTest extends PipelineTestCase
16+
{
17+
public function testExample(): void
18+
{
19+
$pipeline = new Pipeline(
20+
Stage::project(
21+
responses: 1,
22+
isAllTrue: Expression::allElementsTrue(
23+
Expression::arrayFieldPath('responses'),
24+
),
25+
_id: 0,
26+
),
27+
);
28+
29+
$this->assertSamePipeline(Pipelines::AllElementsTrueExample, $pipeline);
30+
}
31+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace MongoDB\Tests\Builder\Expression;
6+
7+
use MongoDB\Builder\Expression;
8+
use MongoDB\Builder\Pipeline;
9+
use MongoDB\Builder\Stage;
10+
use MongoDB\Tests\Builder\PipelineTestCase;
11+
12+
/**
13+
* Test $anyElementTrue expression
14+
*/
15+
class AnyElementTrueOperatorTest extends PipelineTestCase
16+
{
17+
public function testExample(): void
18+
{
19+
$pipeline = new Pipeline(
20+
Stage::project(
21+
responses: 1,
22+
isAnyTrue: Expression::anyElementTrue(
23+
Expression::arrayFieldPath('responses'),
24+
),
25+
_id: 0,
26+
),
27+
);
28+
29+
$this->assertSamePipeline(Pipelines::AnyElementTrueExample, $pipeline);
30+
}
31+
}

0 commit comments

Comments
 (0)