<?php
declare(strict_types=1);
use Fuse\Fuse;
beforeEach(function () {
$options = [
'includeScore' => true,
'useExtendedSearch' => true,
'keys' => ['title', 'author.firstName', 'author.lastName', 'author.age'],
];
$list1 = [
[
'title' => 'Old Man\'s War',
'author' => [
'firstName' => 'John',
'lastName' => 'Scalzi',
'age' => '61',
],
],
];
$list2 = array_merge($list1, [
[
'title' => 'Old Man\'s War',
'author' => [
'firstName' => 'John',
'lastName' => 'Scalzi',
'age' => '62',
],
],
]);
test()->fuse1 = new Fuse($list1, $options);
test()->fuse2 = new Fuse($list2, $options);
});
it('searches with nested and/or conditions', function () {
$result = test()->fuse1->search([
'$and' => [
[
'title' => 'old',
],
[
'$or' => [
[
'author.firstName' => 'j',
],
[
'author.lastName' => 'Sa',
],
],
],
[
'$or' => [
[
'author.age' => '\'62',
],
],
],
],
]);
expect($result)->toHaveCount(0);
});
it('searches with deep nested and/or conditions', function () {
$result = test()->fuse1->search([
'$and' => [
[
'title' => 'old',
],
[
'$or' => [
[
'author.firstName' => 'jon',
],
[
'author.lastName' => 'Sazi',
],
],
],
[
'$or' => [
[
'author.age' => '\'62',
],
[
'$and' => [
[
'title' => 'old',
],
[
'author.age' => '\'61',
],
],
],
],
],
],
]);
expect($result)->toHaveCount(1);
expect($result[0])->toHaveKey('score');
expect($result[0]['score'])->toBeGreaterThan(0);
});
it('searches with deep nested and/or conditions 2', function () {
$result = test()->fuse2->search([
'$and' => [
[
'title' => 'old',
],
[
'$and' => [
[
'author.firstName' => 'jon',
],
[
'author.lastName' => 'Sazi',
],
],
],
[
'$or' => [
[
'author.age' => '\'62',
],
[
'$and' => [
[
'title' => 'old',
],
[
'author.age' => '\'62',
],
],
],
],
],
],
]);
expect($result)->toHaveCount(1);
expect($result[0])->toHaveKey('score');
expect($result[0]['score'])->toBeGreaterThan(0);
});
|