Skip to content
This repository was archived by the owner on Aug 22, 2023. It is now read-only.

Commit 91e57ab

Browse files
committed
Add more tests on Builder::orderBy
1 parent d11e69a commit 91e57ab

File tree

3 files changed

+83
-8
lines changed

3 files changed

+83
-8
lines changed

src/Query/Builder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ public function distinct($column = false)
513513

514514
/**
515515
* @inheritdoc
516-
* @param int|string $direction
516+
* @param int|string|array $direction
517517
*/
518518
public function orderBy($column, $direction = 'asc')
519519
{

tests/Query/BuilderTest.php

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Jenssegers\Mongodb\Tests\Query;
66

77
use DateTimeImmutable;
8+
use Illuminate\Tests\Database\DatabaseQueryBuilderTest;
89
use Jenssegers\Mongodb\Connection;
910
use Jenssegers\Mongodb\Query\Builder;
1011
use Jenssegers\Mongodb\Query\Processor;
@@ -63,6 +64,66 @@ public static function provideQueryBuilderToMql(): iterable
6364
fn (Builder $builder) => $builder->limit(10)->offset(5)->select('foo', 'bar'),
6465
];
6566

67+
/** @see DatabaseQueryBuilderTest::testOrderBys() */
68+
yield 'orderBy multiple columns' => [
69+
['find' => [[], ['sort' => ['email' => 1, 'age' => -1]]]],
70+
fn (Builder $builder) => $builder
71+
->orderBy('email')
72+
->orderBy('age', 'desc'),
73+
];
74+
75+
yield 'orders = null' => [
76+
['find' => [[], []]],
77+
function (Builder $builder) {
78+
$builder->orders = null;
79+
80+
return $builder;
81+
},
82+
];
83+
84+
yield 'orders = []' => [
85+
['find' => [[], []]],
86+
function (Builder $builder) {
87+
$builder->orders = [];
88+
89+
return $builder;
90+
},
91+
];
92+
93+
yield 'multiple orders with direction' => [
94+
['find' => [[], ['sort' => ['email' => -1, 'age' => 1]]]],
95+
fn (Builder $builder) => $builder
96+
->orderBy('email', -1)
97+
->orderBy('age', 1),
98+
];
99+
100+
yield 'orderByDesc' => [
101+
['find' => [[], ['sort' => ['email' => -1]]]],
102+
fn (Builder $builder) => $builder->orderByDesc('email'),
103+
];
104+
105+
/** @see DatabaseQueryBuilderTest::testReorder() */
106+
yield 'reorder reset' => [
107+
['find' => [[], []]],
108+
fn (Builder $builder) => $builder->orderBy('name')->reorder(),
109+
];
110+
111+
yield 'reorder column' => [
112+
['find' => [[], ['sort' => ['name' => -1]]]],
113+
fn (Builder $builder) => $builder->orderBy('name')->reorder('name', 'desc'),
114+
];
115+
116+
/** @link https://www.mongodb.com/docs/manual/reference/method/cursor.sort/#text-score-metadata-sort */
117+
yield 'orderBy array meta' => [
118+
['find' => [
119+
['$text' => ['$search' => 'operating']],
120+
['sort' => ['score' => ['$meta' => 'textScore']]],
121+
]],
122+
fn (Builder $builder) => $builder
123+
->where('$text', ['$search' => 'operating'])
124+
->orderBy('score', ['$meta' => 'textScore']),
125+
];
126+
66127
yield 'distinct' => [
67128
['distinct' => ['foo', [], []]],
68129
fn (Builder $builder) => $builder->distinct('foo'),
@@ -74,6 +135,27 @@ public static function provideQueryBuilderToMql(): iterable
74135
];
75136
}
76137

138+
/**
139+
* @dataProvider provideExceptions
140+
*/
141+
public function testException($class, $message, \Closure $build): void
142+
{
143+
$builder = self::getBuilder();
144+
145+
$this->expectException($class);
146+
$this->expectExceptionMessage($message);
147+
$build($builder);
148+
}
149+
150+
public static function provideExceptions(): iterable
151+
{
152+
yield 'orderBy invalid direction' => [
153+
\InvalidArgumentException::class,
154+
'Order direction must be "asc" or "desc"',
155+
fn (Builder $builder) => $builder->orderBy('_id', 'dasc'),
156+
];
157+
}
158+
77159
private static function getBuilder(): Builder
78160
{
79161
$connection = m::mock(Connection::class);

tests/QueryBuilderTest.php

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -863,11 +863,4 @@ public function testCursor()
863863
$this->assertEquals($data[$i]['name'], $result['name']);
864864
}
865865
}
866-
867-
public function testOrderByInvalidDirection()
868-
{
869-
$this->expectException(\InvalidArgumentException::class);
870-
$this->expectExceptionMessage('Order direction must be "asc" or "desc"');
871-
DB::collection('items')->orderBy('_id', 'dasc')->get();
872-
}
873866
}

0 commit comments

Comments
 (0)