Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/Query/Filters/Operators.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ class Operators
const NEXT_MONTH = 'next_month';
const NEXT_YEAR = 'next_year';

CONST AND = 'and';
CONST OR = 'or';
const AND = 'and';
const OR = 'or';

// TODO: Formula filter condition

Expand Down
52 changes: 23 additions & 29 deletions tests/FilterBagTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,22 +55,21 @@
$filterBag->addFilterBag($nameFilterBag);
});


it('creates a filter bag with the AND operator and two conditions', function () {
$filterBag = new FilterBag(Operators::AND);

# Filter for all entries that are
# (Known for == UNIVAC && Known for == ENIAC)
// Filter for all entries that are
// (Known for == UNIVAC && Known for == ENIAC)

$filterBag->addFilter(
Filter::rawFilter("Known for", [
"multi_select" => ["contains" => "UNIVAC"],
Filter::rawFilter('Known for', [
'multi_select' => ['contains' => 'UNIVAC'],
])
);

$filterBag->addFilter(
Filter::rawFilter("Known for", [
"multi_select" => ["contains" => "ENIAC"],
Filter::rawFilter('Known for', [
'multi_select' => ['contains' => 'ENIAC'],
])
);

Expand Down Expand Up @@ -98,15 +97,13 @@
it('creates a filter bag with the OR operator and three conditions', function () {
$filterBag = new FilterBag(Operators::OR);


# Filter for all entries that have
# (Name == Grace || Name == Jean || Name == Ada)
// Filter for all entries that have
// (Name == Grace || Name == Jean || Name == Ada)

$filterBag
->addFilter(Filter::textFilter("Name", Operators::CONTAINS, "Grace"))
->addFilter(Filter::textFilter("Name", Operators::CONTAINS, "Jean"))
->addFilter(Filter::textFilter("Name", Operators::CONTAINS, "Ada"));

->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Grace'))
->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Jean'))
->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Ada'));

$filterBagQuery = $filterBag->toQuery();

Expand All @@ -121,34 +118,32 @@
$this->assertArrayHasKey('contains', $filterQuery['text']);
$this->assertEquals('Grace', $filterQuery['text']['contains']);


// check value of second filter compound
$filterQuery = $filterBagQuery[Operators::OR][1];
$this->assertEquals('Jean', $filterQuery['text']['contains']);

// check value of third filter compound
$filterQuery = $filterBagQuery[Operators::OR][2];
$this->assertEquals('Ada', $filterQuery['text']['contains']);

});

it('creates a filter bag with with the AND operator and a nested OR condition', function() {
it('creates a filter bag with with the AND operator and a nested OR condition', function () {

# Filter for all entries that are
# (KnownFor == Univac && (Name == Grace || Name == Jean))
// Filter for all entries that are
// (KnownFor == Univac && (Name == Grace || Name == Jean))

$filterBag = new FilterBag(Operators::AND);

$filterBag->addFilter(
Filter::rawFilter("Known for", [
"multi_select" => ["contains" => "UNIVAC"],
Filter::rawFilter('Known for', [
'multi_select' => ['contains' => 'UNIVAC'],
])
);

$nameFilterBag = new FilterBag(Operators::OR);
$nameFilterBag
->addFilter(Filter::textFilter("Name", Operators::CONTAINS, "Grace"))
->addFilter(Filter::textFilter("Name", Operators::CONTAINS, "Jean"));
->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Grace'))
->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Jean'));

$filterBag->addFilterBag($nameFilterBag);

Expand Down Expand Up @@ -190,23 +185,22 @@
$this->assertEquals('Jean', $filterQuery['text']['contains']);
});

it('throws an exception for nesting too many filter bags', function() {

it('throws an exception for nesting too many filter bags', function () {
$this->expectException(HandlingException::class);
$this->expectExceptionMessage('The maximum nesting level of compound filters must not exceed 2.');

$filterBag = new FilterBag(Operators::AND);

$filterBag->addFilter(
Filter::rawFilter("Known for", [
"multi_select" => ["contains" => "UNIVAC"],
Filter::rawFilter('Known for', [
'multi_select' => ['contains' => 'UNIVAC'],
])
);

$nameFilterBag = new FilterBag(Operators::OR);
$nameFilterBag
->addFilter(Filter::textFilter("Name", Operators::CONTAINS, "Grace"))
->addFilter(Filter::textFilter("Name", Operators::CONTAINS, "Jean"));
->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Grace'))
->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Jean'));

$anotherBag = new FilterBag();
$nameFilterBag->addFilterBag($anotherBag);
Expand Down
3 changes: 1 addition & 2 deletions tests/FilterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

use FiveamCode\LaravelNotionApi\Exceptions\HandlingException;
use FiveamCode\LaravelNotionApi\Query\Filters\Filter;
use FiveamCode\LaravelNotionApi\Query\Filters\FilterBag;
use FiveamCode\LaravelNotionApi\Query\Filters\Operators;

it('creates a text filter with the given data', function () {
Expand Down Expand Up @@ -39,4 +38,4 @@
$this->expectException(HandlingException::class);
$this->expectExceptionMessage('Invalid filter definition.');
$filter->toArray();
});
});