Skip to content

Commit 9b8a3c0

Browse files
committed
Changed namespace & added filter tests
1 parent 33f7b88 commit 9b8a3c0

File tree

6 files changed

+108
-10
lines changed

6 files changed

+108
-10
lines changed

src/Endpoints/Database.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use Illuminate\Support\Collection;
66
use FiveamCode\LaravelNotionApi\Notion;
7-
use FiveamCode\LaravelNotionApi\Query\Filter;
7+
use FiveamCode\LaravelNotionApi\Query\Filters\Filter;
88
use FiveamCode\LaravelNotionApi\Query\Sorting;
99
use FiveamCode\LaravelNotionApi\Entities\Collections\PageCollection;
1010

@@ -68,7 +68,6 @@ public function query(): PageCollection
6868
if ($this->pageSize !== null)
6969
$postData['page_size'] = $this->pageSize;
7070

71-
7271
$response = $this
7372
->post(
7473
$this->url(Endpoint::DATABASES . "/{$this->databaseId}/query"),

src/Query/Filter/CompoundFilter.php renamed to src/Query/Filters/CompoundFilter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace FiveamCode\LaravelNotionApi\Query\Filter;
3+
namespace FiveamCode\LaravelNotionApi\Query\Filters;
44

55
use FiveamCode\LaravelNotionApi\Exceptions\HandlingException;
66
use FiveamCode\LaravelNotionApi\Query\QueryHelper;

src/Query/Filter/Filter.php renamed to src/Query/Filters/Filter.php

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?php
22

3-
namespace FiveamCode\LaravelNotionApi\Query\Filter;
3+
namespace FiveamCode\LaravelNotionApi\Query\Filters;
44

5-
use FiveamCode\LaravelNotionApi\Query\Filter\Operators;
5+
use FiveamCode\LaravelNotionApi\Query\Filters\Operators;
66
use FiveamCode\LaravelNotionApi\Query\QueryHelper;
77
use Illuminate\Support\Collection;
88
use FiveamCode\LaravelNotionApi\Exceptions\HandlingException;
@@ -50,7 +50,7 @@ public function __construct(
5050
}
5151

5252
/**
53-
* Returns a text filter instance.
53+
* Creates a number filter instance after checking validity.
5454
*
5555
* @see https://developers.notion.com/reference/post-database-query#text-filter-condition
5656
*
@@ -65,7 +65,18 @@ public static function textFilter(string $property, string $comparisonOperator,
6565
return new Filter($property, 'text', [$comparisonOperator => $value]);
6666
}
6767

68-
public static function numberFilter(string $property, string $comparisonOperator, float|int|double $number): Filter
68+
/**
69+
* Creates a number filter instance after checking validity.
70+
*
71+
* @see https://developers.notion.com/reference/post-database-query#number-filter-condition
72+
*
73+
* @param string $property
74+
* @param string $comparisonOperator
75+
* @param float|int $number
76+
* @return Filter
77+
* @throws HandlingException
78+
*/
79+
public static function numberFilter(string $property, string $comparisonOperator, float|int $number): Filter
6980
{
7081
self::isValidComparisonOperatorFor('number', $comparisonOperator);
7182
return new Filter($property, 'number', [$comparisonOperator => $number]);
@@ -112,6 +123,17 @@ public function toArray(): array
112123

113124
}
114125

126+
/**
127+
* Semantic wrapper for toArray()
128+
*
129+
* @return array
130+
* @throws HandlingException
131+
*/
132+
public function toQuery(): array
133+
{
134+
return $this->toArray();
135+
}
136+
115137

116138
/**
117139
* @param Collection $filter
@@ -124,14 +146,21 @@ public static function filterQuery(Collection $filter): array
124146
$queryFilter = new Collection();
125147

126148
$filter->each(function (Filter $filter) use ($queryFilter) {
127-
$queryFilter->add($filter->toArray());
149+
$queryFilter->add($filter->toQuery());
128150
});
129151

130152
return $queryFilter->toArray();
131153

132154
}
133155

134156

157+
/**
158+
* Checks if the given comparison operator is valid for the given filter type.
159+
*
160+
* @param $filterType
161+
* @param $operator
162+
* @throws HandlingException
163+
*/
135164
private static function isValidComparisonOperatorFor($filterType, $operator)
136165
{
137166
$validOperators = Operators::getValidComparisonOperators($filterType);

src/Query/Filter/Operators.php renamed to src/Query/Filters/Operators.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace FiveamCode\LaravelNotionApi\Query\Filter;
3+
namespace FiveamCode\LaravelNotionApi\Query\Filters;
44

55
use FiveamCode\LaravelNotionApi\Exceptions\HandlingException;
66

tests/EndpointDatabaseTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
namespace FiveamCode\LaravelNotionApi\Tests;
44

5+
use FiveamCode\LaravelNotionApi\Query\Filters\Filter;
56
use Notion;
67
use Illuminate\Support\Collection;
78
use Illuminate\Support\Facades\Http;
8-
use FiveamCode\LaravelNotionApi\Query\Filter;
99
use FiveamCode\LaravelNotionApi\Entities\Page;
1010
use FiveamCode\LaravelNotionApi\Query\Sorting;
1111
use FiveamCode\LaravelNotionApi\Endpoints\Database;

tests/FilterTest.php

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
3+
namespace FiveamCode\LaravelNotionApi\Tests;
4+
5+
use FiveamCode\LaravelNotionApi\Exceptions\HandlingException;
6+
use FiveamCode\LaravelNotionApi\Exceptions\NotionException;
7+
use FiveamCode\LaravelNotionApi\Query\Filters\Filter;
8+
use FiveamCode\LaravelNotionApi\Query\Filters\Operators;
9+
use Notion;
10+
use Illuminate\Support\Facades\Http;
11+
12+
/**
13+
* Class HandlingExceptionTest
14+
* @package FiveamCode\LaravelNotionApi\Tests
15+
*/
16+
class FilterTest extends NotionApiTest
17+
{
18+
19+
/** @test */
20+
public function it_creates_a_text_filter_with_the_given_data()
21+
{
22+
$filter = Filter::textFilter("Name", Operators::EQUALS, "Ada Lovelace");
23+
24+
$this->assertInstanceOf(Filter::class, $filter);
25+
$this->assertArrayHasKey("property", $filter->toQuery());
26+
$this->assertEquals("Name", $filter->toQuery()["property"]);
27+
$this->assertArrayHasKey("text", $filter->toQuery());
28+
$this->assertArrayHasKey("equals", $filter->toQuery()["text"]);
29+
$this->assertEquals("Ada Lovelace", $filter->toQuery()["text"]["equals"]);
30+
}
31+
32+
/** @test */
33+
public function it_creates_a_number_filter_with_the_given_data()
34+
{
35+
$filter = Filter::numberFilter("Awesomeness Level", Operators::GREATER_THAN_OR_EQUAL_TO, 9000);
36+
37+
$this->assertInstanceOf(Filter::class, $filter);
38+
$this->assertArrayHasKey("property", $filter->toQuery());
39+
$this->assertEquals("Awesomeness Level", $filter->toQuery()["property"]);
40+
$this->assertArrayHasKey("number", $filter->toQuery());
41+
$this->assertArrayHasKey("greater_than_or_equal_to", $filter->toQuery()["number"]);
42+
$this->assertEquals("9000", $filter->toQuery()["number"]["greater_than_or_equal_to"]);
43+
}
44+
45+
/** @test */
46+
public function it_throws_an_exception_for_an_invalid_comparison_operator()
47+
{
48+
$this->expectException(HandlingException::class);
49+
$this->expectExceptionMessage("Invalid comparison operator");
50+
$filter = Filter::numberFilter("Awesomeness Level", "non_existing_operator", 9000);
51+
}
52+
53+
/** @test */
54+
public function it_throws_an_exception_for_an_invalid_filter_definition() {
55+
$filter = new Filter("Test");
56+
57+
$this->expectException(HandlingException::class);
58+
$this->expectExceptionMessage("Invalid filter definition.");
59+
$filter->toArray();
60+
}
61+
62+
/** @test */
63+
public function it_throws_an_exception_for_an_invalid_filter_type() {
64+
$filter = new Filter("Test", "non_existing_filter_type");
65+
66+
// $this->expectException(HandlingException::class);
67+
// $this->expectExceptionMessage("Invalid filter definition.");
68+
$filter->toArray();
69+
}
70+
}

0 commit comments

Comments
 (0)