Skip to content

Commit b1aa73a

Browse files
added tests for distance and not distance
1 parent ec1d2e0 commit b1aa73a

2 files changed

Lines changed: 54 additions & 0 deletions

File tree

src/Database/Validator/Query/Filter.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,8 @@ public function isValid($value): bool
263263
case Query::TYPE_NOT_DISTANCE:
264264
case Query::TYPE_DISTANCE_GREATER_THAN:
265265
case Query::TYPE_DISTANCE_LESS_THAN:
266+
case Query::TYPE_NOT_DISTANCE_GREATER_THAN:
267+
case Query::TYPE_NOT_DISTANCE_LESS_THAN:
266268
if (count($value->getValues()) !== 1 || !is_array($value->getValues()[0]) || count($value->getValues()[0]) !== 2) {
267269
$this->message = 'Distance query requires [[geometry, distance]] parameters';
268270
return false;

tests/e2e/Adapter/Scopes/SpatialTests.php

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,19 @@ public function testSpatialOneToMany(): void
453453
], Database::PERMISSION_READ);
454454
$this->assertCount(2, $notFarSmall);
455455

456+
// Equal-distance semantics: distance (<=) and notDistance (>), threshold exactly at 0
457+
$equalZero = $database->find($child, [
458+
Query::distance('coord', [[[10.0, 10.0], 0.0]])
459+
], Database::PERMISSION_READ);
460+
$this->assertNotEmpty($equalZero);
461+
$this->assertEquals('p1', $equalZero[0]->getId());
462+
463+
$notEqualZero = $database->find($child, [
464+
Query::notDistance('coord', [[[10.0, 10.0], 0.0]])
465+
], Database::PERMISSION_READ);
466+
$this->assertNotEmpty($notEqualZero);
467+
$this->assertEquals('p2', $notEqualZero[0]->getId());
468+
456469
$region = $database->getDocument($parent, 'r1');
457470
$this->assertArrayHasKey('places', $region);
458471
$this->assertEquals(2, \count($region['places']));
@@ -572,6 +585,19 @@ public function testSpatialManyToOne(): void
572585
], Database::PERMISSION_READ);
573586
$this->assertCount(2, $notFarSmall);
574587

588+
// Equal-distance semantics: distance (<=) and notDistance (>), threshold exactly at 0
589+
$equalZero = $database->find($child, [
590+
Query::distance('coord', [[[20.0, 20.0], 0.0]])
591+
], Database::PERMISSION_READ);
592+
$this->assertNotEmpty($equalZero);
593+
$this->assertEquals('s1', $equalZero[0]->getId());
594+
595+
$notEqualZero = $database->find($child, [
596+
Query::notDistance('coord', [[[20.0, 20.0], 0.0]])
597+
], Database::PERMISSION_READ);
598+
$this->assertNotEmpty($notEqualZero);
599+
$this->assertEquals('s2', $notEqualZero[0]->getId());
600+
575601
$city = $database->getDocument($parent, 'c1');
576602
$this->assertArrayHasKey('stops', $city);
577603
$this->assertEquals(2, \count($city['stops']));
@@ -691,6 +717,18 @@ public function testSpatialManyToMany(): void
691717
$this->assertNotEmpty($notFarSmall);
692718
$this->assertEquals('d1', $notFarSmall[0]->getId());
693719

720+
// Equal-distance semantics: distance (<=) and notDistance (>), threshold exactly at 0
721+
$equalZero = $database->find($a, [
722+
Query::distance('home', [[[30.0, 30.0], 0.0]])
723+
], Database::PERMISSION_READ);
724+
$this->assertNotEmpty($equalZero);
725+
$this->assertEquals('d1', $equalZero[0]->getId());
726+
727+
$notEqualZero = $database->find($a, [
728+
Query::notDistance('home', [[[30.0, 30.0], 0.0]])
729+
], Database::PERMISSION_READ);
730+
$this->assertEmpty($notEqualZero);
731+
694732
// Ensure relationship present
695733
$d1 = $database->getDocument($a, 'd1');
696734
$this->assertArrayHasKey('routes', $d1);
@@ -1291,6 +1329,20 @@ public function testComplexGeometricShapes(): void
12911329
], Database::PERMISSION_READ);
12921330
$this->assertCount(2, $notFarHuge);
12931331

1332+
// Equal-distance semantics for circle_center
1333+
// rect1 is exactly at [10,5], so distance 0
1334+
$equalZero = $database->find($collectionName, [
1335+
Query::distance('circle_center', [[[10, 5], 0.0]])
1336+
], Database::PERMISSION_READ);
1337+
$this->assertNotEmpty($equalZero);
1338+
$this->assertEquals('rect1', $equalZero[0]->getId());
1339+
1340+
$notEqualZero = $database->find($collectionName, [
1341+
Query::notDistance('circle_center', [[[10, 5], 0.0]])
1342+
], Database::PERMISSION_READ);
1343+
$this->assertNotEmpty($notEqualZero);
1344+
$this->assertEquals('rect2', $notEqualZero[0]->getId());
1345+
12941346
} finally {
12951347
$database->deleteCollection($collectionName);
12961348
}

0 commit comments

Comments
 (0)