Skip to content

Commit 76ecc85

Browse files
committed
Finito, for now
1 parent 5882cec commit 76ecc85

1 file changed

Lines changed: 34 additions & 27 deletions

File tree

tests/RelationFilterTest.php

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* b) Logical Operators: -, NOT
1818
* f) Comparisons: affirmation, negation
1919
* a) Number of conditions: multiple
20-
* b) Logical Operators: AND, OR, NOT
20+
* b) Logical Operators: AND, OR, NOT(AND), NOT(OR)
2121
* c) Number of relations: single
2222
* d) Columns: same
2323
* e) Operators: same
@@ -40,6 +40,8 @@
4040
* Every test contains at least one proof of concept using a manually crafted SQL query. (Not necessarily the same way
4141
* the ORM constructs it) Such must not fail. If they do, the dataset has changed. The ORM query must return the same
4242
* results.
43+
*
44+
* @todo NOT(OR) cases are missing
4345
*/
4446
class RelationFilterTest extends TestCase
4547
{
@@ -128,7 +130,7 @@ public function testSingleNegativeCondition(Connection $db)
128130
/**
129131
* Search for offices where Donald doesn't work
130132
*
131-
* @equivalenceClass a:single, b:NOT, f:affirmation
133+
* @equivalenceClass a:single, b:NOT(AND), f:affirmation
132134
* @dataProvider databases
133135
*
134136
* @param Connection $db
@@ -173,7 +175,7 @@ public function testSingleAffirmativeConditionWithNotOperator(Connection $db)
173175
/**
174176
* Search for offices where Donald works
175177
*
176-
* @equivalenceClass a:single, b:NOT, f:negation
178+
* @equivalenceClass a:single, b:NOT(AND), f:negation
177179
* @dataProvider databases
178180
*
179181
* @param Connection $db
@@ -483,7 +485,7 @@ public function testAndChainTargetingASingleRelationColumnWithDifferentOperators
483485
/**
484486
* Search for offices where either Donald or Huey doesn't work
485487
*
486-
* @equivalenceClass a:multiple, b:NOT, c:single, d:same, e:same, f:affirmation
488+
* @equivalenceClass a:multiple, b:NOT(AND), c:single, d:same, e:same, f:affirmation
487489
* @dataProvider databases
488490
*
489491
* @param Connection $db
@@ -511,10 +513,10 @@ public function testNotChainTargetingASingleRelationColumnWithTheSameAffirmative
511513
$offices = Office::on($db)
512514
->columns(['office.city'])
513515
->orderBy('office.id')
514-
->filter(Filter::none(
516+
->filter(Filter::none(Filter::all(
515517
Filter::equal('employee.name', 'Donald'),
516518
Filter::equal('employee.name', 'Huey')
517-
));
519+
)));
518520
$results = iterator_to_array($offices);
519521
$sql = $this->getSql($offices);
520522

@@ -528,8 +530,10 @@ public function testNotChainTargetingASingleRelationColumnWithTheSameAffirmative
528530
/**
529531
* Search for offices where Donald and Huey work
530532
*
531-
* @equivalenceClass a:multiple, b:NOT, c:single, d:same, e:same, f:negation
533+
* @equivalenceClass a:multiple, b:NOT(AND), c:single, d:same, e:same, f:negation
532534
* @dataProvider databases
535+
* @todo Finds the exact opposite of {@see testAndChainTargetingASingleRelationColumnWithTheSameNegativeOperator}.
536+
* No wonder, actually. But monitoring doesn't behave the same way :'(
533537
*
534538
* @param Connection $db
535539
*/
@@ -558,10 +562,10 @@ public function testNotChainTargetingASingleRelationColumnWithTheSameNegativeOpe
558562
$offices = Office::on($db)
559563
->columns(['office.city'])
560564
->orderBy('office.id')
561-
->filter(Filter::none(
565+
->filter(Filter::none(Filter::all(
562566
Filter::unequal('employee.name', 'Donald'),
563567
Filter::unequal('employee.name', 'Huey')
564-
));
568+
)));
565569
$results = iterator_to_array($offices);
566570
$sql = $this->getSql($offices);
567571

@@ -574,7 +578,7 @@ public function testNotChainTargetingASingleRelationColumnWithTheSameNegativeOpe
574578
/**
575579
* Search for offices where either Donald doesn't work or Huey does
576580
*
577-
* @equivalenceClass a:multiple, b:NOT, c:single, d:same, e:different
581+
* @equivalenceClass a:multiple, b:NOT(AND), c:single, d:same, e:different
578582
* @dataProvider databases
579583
*
580584
* @param Connection $db
@@ -604,10 +608,10 @@ public function testNotChainTargetingASingleRelationColumnWithDifferentOperators
604608
$offices = Office::on($db)
605609
->columns(['office.city'])
606610
->orderBy('office.id')
607-
->filter(Filter::none(
611+
->filter(Filter::none(Filter::all(
608612
Filter::equal('employee.name', 'Donald'),
609613
Filter::unequal('employee.name', 'Huey')
610-
));
614+
)));
611615
$results = iterator_to_array($offices);
612616
$sql = $this->getSql($offices);
613617

@@ -786,8 +790,10 @@ public function testOrChainTargetingASingleRelationButDifferentColumnsWithTheSam
786790
/**
787791
* Search for offices where not just Huey works or only as a manager
788792
*
789-
* @equivalenceClass a:multiple, b:NOT, c:single, d:different, e:different
793+
* @equivalenceClass a:multiple, b:NOT(AND), c:single, d:different, e:different
790794
* @dataProvider databases
795+
* @todo Finds the exact opposite of {@see testAndChainTargetingASingleRelationButDifferentColumnsWithDifferentOperators}.
796+
* No wonder, actually. But monitoring doesn't behave the same way :'(
791797
*
792798
* @param Connection $db
793799
*/
@@ -814,10 +820,10 @@ public function testNotChainTargetingASingleRelationButDifferentColumnsWithDiffe
814820
$offices = Office::on($db)
815821
->columns(['office.city'])
816822
->orderBy('office.id')
817-
->filter(Filter::none(
823+
->filter(Filter::none(Filter::all(
818824
Filter::equal('employee.name', 'Huey'),
819825
Filter::unequal('employee.role', 'Manager')
820-
));
826+
)));
821827
$results = iterator_to_array($offices);
822828
$sql = $this->getSql($offices);
823829

@@ -832,8 +838,9 @@ public function testNotChainTargetingASingleRelationButDifferentColumnsWithDiffe
832838
/**
833839
* Search for offices where not just Donald works or not as manager
834840
*
835-
* @equivalenceClass a:multiple, b:NOT, c:single, d:different, e:same
841+
* @equivalenceClass a:multiple, b:NOT(AND), c:single, d:different, e:same
836842
* @dataProvider databases
843+
* @todo Finds Cuxhaven instead of Baghdad. Not wrong, actually. Why does monitoring behave differently?
837844
*
838845
* @param Connection $db
839846
*/
@@ -861,10 +868,10 @@ public function testNotChainTargetingASingleRelationButDifferentColumnsWithTheSa
861868
$offices = Office::on($db)
862869
->columns(['office.city'])
863870
->orderBy('office.id')
864-
->filter(Filter::none(
871+
->filter(Filter::none(Filter::all(
865872
Filter::equal('employee.name', 'Donald'),
866873
Filter::equal('employee.role', 'Manager')
867-
));
874+
)));
868875
$results = iterator_to_array($offices);
869876
$sql = $this->getSql($offices);
870877

@@ -1162,7 +1169,7 @@ public function testOrChainTargetingMultipleRelationsWithDifferentOperators(Conn
11621169
/**
11631170
* Search for offices where Donald doesn't work in the accounting department
11641171
*
1165-
* @equivalenceClass a:multiple, b:NOT, c:multiple, e:same, f:affirmation
1172+
* @equivalenceClass a:multiple, b:NOT(AND), c:multiple, e:same, f:affirmation
11661173
* @dataProvider databases
11671174
*
11681175
* @param Connection $db
@@ -1193,10 +1200,10 @@ public function testNotChainTargetingMultipleRelationsWithTheSameAffirmativeOper
11931200
$offices = Office::on($db)
11941201
->columns(['office.city'])
11951202
->orderBy('office.id')
1196-
->filter(Filter::none(
1203+
->filter(Filter::none(Filter::all(
11971204
Filter::equal('employee.name', 'Donald'),
11981205
Filter::equal('employee.department.name', 'Accounting')
1199-
));
1206+
)));
12001207
$results = iterator_to_array($offices);
12011208
$sql = $this->getSql($offices);
12021209

@@ -1212,7 +1219,7 @@ public function testNotChainTargetingMultipleRelationsWithTheSameAffirmativeOper
12121219
*
12131220
* Or for your convenience: Where Donald works
12141221
*
1215-
* @equivalenceClass a:multiple, b:NOT, c:multiple, e:same, f:negation
1222+
* @equivalenceClass a:multiple, b:NOT(AND), c:multiple, e:same, f:negation
12161223
* @dataProvider databases
12171224
* @todo Just take a look at the POC and wonder how that would ever be automatically generated.
12181225
* Especially if you consider adding another comparison into the mix. This is way too
@@ -1250,10 +1257,10 @@ public function testNotChainTargetingMultipleRelationsWithTheSameNegativeOperato
12501257
$offices = Office::on($db)
12511258
->columns(['office.city'])
12521259
->orderBy('office.id')
1253-
->filter(Filter::none(
1260+
->filter(Filter::none(Filter::all(
12541261
Filter::unequal('employee.name', 'Donald'),
12551262
Filter::unequal('employee.department.name', 'Accounting')
1256-
));
1263+
)));
12571264
$results = iterator_to_array($offices);
12581265
$sql = $this->getSql($offices);
12591266

@@ -1266,7 +1273,7 @@ public function testNotChainTargetingMultipleRelationsWithTheSameNegativeOperato
12661273
/**
12671274
* Search for offices where Donald doesn't work or in the accounting department
12681275
*
1269-
* @equivalenceClass a:multiple, b:NOT, c:multiple, e:different
1276+
* @equivalenceClass a:multiple, b:NOT(AND), c:multiple, e:different
12701277
* @dataProvider databases
12711278
*
12721279
* @param Connection $db
@@ -1298,10 +1305,10 @@ public function testNotChainTargetingMultipleRelationsWithDifferentOperators(Con
12981305
$offices = Office::on($db)
12991306
->columns(['office.city'])
13001307
->orderBy('office.id')
1301-
->filter(Filter::none(
1308+
->filter(Filter::none(Filter::all(
13021309
Filter::equal('employee.name', 'Donald'),
13031310
Filter::unequal('employee.department.name', 'Accounting')
1304-
));
1311+
)));
13051312
$results = iterator_to_array($offices);
13061313
$sql = $this->getSql($offices);
13071314

0 commit comments

Comments
 (0)