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

Commit 66f19bf

Browse files
committed
Use assert for exception
1 parent 9ae2701 commit 66f19bf

File tree

2 files changed

+83
-28
lines changed

2 files changed

+83
-28
lines changed

src/Query/Builder.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -565,13 +565,8 @@ public function whereBetween($column, iterable $values, $boolean = 'and', $not =
565565
$values = $values->all();
566566
}
567567

568-
if (is_array($values)) {
569-
if (! array_is_list($values)) {
570-
throw new \InvalidArgumentException('Between $values must be a list with exactly two elements: [min, max]');
571-
}
572-
if (count($values) !== 2) {
573-
throw new \InvalidArgumentException('Between $values must have exactly two elements: [min, max]');
574-
}
568+
if (is_array($values) && (! array_is_list($values) || count($values) !== 2)) {
569+
throw new \InvalidArgumentException('Between $values must be a list with exactly two elements: [min, max]');
575570
}
576571

577572
$this->wheres[] = compact('column', 'type', 'boolean', 'values', 'not');

tests/Query/BuilderTest.php

Lines changed: 81 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -137,19 +137,22 @@ function (Builder $builder) {
137137
];
138138

139139
yield 'whereNotBetween array of numbers' => [
140-
['find' => [['$or' => [['id' => ['$lte' => 1]], ['id' => ['$gte' => 2]]]], []]],
140+
['find' => [
141+
['$or' => [
142+
['id' => ['$lte' => 1]],
143+
['id' => ['$gte' => 2]],
144+
]],
145+
[], // options
146+
]],
141147
fn (Builder $builder) => $builder->whereNotBetween('id', [1, 2]),
142148
];
143149

144-
$period = now()->toPeriod(now()->addDay());
145-
yield 'whereBetween CarbonPeriod' => [
146-
['find' => [['created_at' => ['$gte' => new UTCDateTime($period->start), '$lte' => new UTCDateTime($period->end)]], []]],
147-
fn (Builder $builder) => $builder->whereBetween('created_at', $period),
148-
];
149-
150150
$period = now()->toPeriod(now()->addMonth());
151-
yield 'custom long carbon period date' => [
152-
['find' => [['created_at' => ['$gte' => new UTCDateTime($period->start), '$lte' => new UTCDateTime($period->end)]], []]],
151+
yield 'whereBetween CarbonPeriod' => [
152+
['find' => [
153+
['created_at' => ['$gte' => new UTCDateTime($period->start), '$lte' => new UTCDateTime($period->end)]],
154+
[], // options
155+
]],
153156
fn (Builder $builder) => $builder->whereBetween('created_at', $period),
154157
];
155158

@@ -160,51 +163,105 @@ function (Builder $builder) {
160163

161164
/** @see DatabaseQueryBuilderTest::testOrWhereBetween() */
162165
yield 'whereBetween array numbers' => [
163-
['find' => [['$or' => [['id' => 1], ['id' => ['$gte' => 3, '$lte' => 5]]]], []]],
166+
['find' => [
167+
['$or' => [
168+
['id' => 1],
169+
['id' => ['$gte' => 3, '$lte' => 5]],
170+
]],
171+
[], // options
172+
]],
164173
fn (Builder $builder) => $builder
165174
->where('id', '=', 1)
166175
->orWhereBetween('id', [3, 5]),
167176
];
168177

169178
/** @link https://www.mongodb.com/docs/manual/reference/bson-type-comparison-order/#arrays */
170179
yield 'orWhereBetween nested array of numbers' => [
171-
['find' => [['$or' => [['id' => 1], ['id' => ['$gte' => [4], '$lte' => [6, 8]]]]], []]],
180+
['find' => [
181+
['$or' => [
182+
['id' => 1],
183+
['id' => ['$gte' => [4], '$lte' => [6, 8]]],
184+
]],
185+
[], // options
186+
]],
172187
fn (Builder $builder) => $builder
173188
->where('id', '=', 1)
174189
->orWhereBetween('id', [[4], [6, 8]]),
175190
];
176191

177192
yield 'orWhereBetween collection' => [
178-
['find' => [['$or' => [['id' => 1], ['id' => ['$gte' => 3, '$lte' => 4]]]], []]],
193+
['find' => [
194+
['$or' => [
195+
['id' => 1],
196+
['id' => ['$gte' => 3, '$lte' => 4]],
197+
]],
198+
[], // options
199+
]],
179200
fn (Builder $builder) => $builder
180201
->where('id', '=', 1)
181202
->orWhereBetween('id', collect([3, 4])),
182203
];
183204

184205
/** @see DatabaseQueryBuilderTest::testOrWhereNotBetween() */
185206
yield 'orWhereNotBetween array of numbers' => [
186-
['find' => [['$or' => [['id' => 1], ['$or' => [['id' => ['$lte' => 3]], ['id' => ['$gte' => 5]]]]]], []]],
207+
['find' => [
208+
['$or' => [
209+
['id' => 1],
210+
['$or' => [
211+
['id' => ['$lte' => 3]],
212+
['id' => ['$gte' => 5]],
213+
]],
214+
]],
215+
[], // options
216+
]],
187217
fn (Builder $builder) => $builder
188218
->where('id', '=', 1)
189219
->orWhereNotBetween('id', [3, 5]),
190220
];
191221

192222
yield 'orWhereNotBetween nested array of numbers' => [
193-
['find' => [['$or' => [['id' => 1], ['$or' => [['id' => ['$lte' => [2, 3]]], ['id' => ['$gte' => [5]]]]]]], []]],
223+
['find' => [
224+
['$or' => [
225+
['id' => 1],
226+
['$or' => [
227+
['id' => ['$lte' => [2, 3]]],
228+
['id' => ['$gte' => [5]]],
229+
]],
230+
]],
231+
[], // options
232+
]],
194233
fn (Builder $builder) => $builder
195234
->where('id', '=', 1)
196235
->orWhereNotBetween('id', [[2, 3], [5]]),
197236
];
198237

199238
yield 'orWhereNotBetween excessive nested array of numbers' => [
200-
['find' => [['$or' => [['id' => 1], ['$or' => [['id' => ['$lte' => [4]]], ['id' => ['$gte' => [6, 8]]]]]]], []]],
239+
['find' => [
240+
['$or' => [
241+
['id' => 1],
242+
['$or' => [
243+
['id' => ['$lte' => [4]]],
244+
['id' => ['$gte' => [6, 8]]],
245+
]],
246+
]],
247+
[], // options
248+
]],
201249
fn (Builder $builder) => $builder
202250
->where('id', '=', 1)
203251
->orWhereNotBetween('id', [[4], [6, 8]]),
204252
];
205253

206254
yield 'orWhereNotBetween collection' => [
207-
['find' => [['$or' => [['id' => 1], ['$or' => [['id' => ['$lte' => 3]], ['id' => ['$gte' => 4]]]]]], []]],
255+
['find' => [
256+
['$or' => [
257+
['id' => 1],
258+
['$or' => [
259+
['id' => ['$lte' => 3]],
260+
['id' => ['$gte' => 4]],
261+
]],
262+
]],
263+
[], // options
264+
]],
208265
fn (Builder $builder) => $builder
209266
->where('id', '=', 1)
210267
->orWhereNotBetween('id', collect([3, 4])),
@@ -216,7 +273,10 @@ function (Builder $builder) {
216273
];
217274

218275
yield 'groupBy' => [
219-
['aggregate' => [[['$group' => ['_id' => ['foo' => '$foo'], 'foo' => ['$last' => '$foo']]]], []]],
276+
['aggregate' => [
277+
[['$group' => ['_id' => ['foo' => '$foo'], 'foo' => ['$last' => '$foo']]]],
278+
[], // options
279+
]],
220280
fn (Builder $builder) => $builder->groupBy('foo'),
221281
];
222282
}
@@ -244,19 +304,19 @@ public static function provideExceptions(): iterable
244304
/** @see DatabaseQueryBuilderTest::testWhereBetweens */
245305
yield 'whereBetween array too short' => [
246306
\InvalidArgumentException::class,
247-
'Between $values must have exactly two elements: [min, max]',
307+
'Between $values must be a list with exactly two elements: [min, max]',
248308
fn (Builder $builder) => $builder->whereBetween('id', [1]),
249309
];
250310

251311
yield 'whereBetween array too long' => [
252312
\InvalidArgumentException::class,
253-
'Between $values must have exactly two elements: [min, max]',
313+
'Between $values must be a list with exactly two elements: [min, max]',
254314
fn (Builder $builder) => $builder->whereBetween('id', [1, 2, 3]),
255315
];
256316

257317
yield 'whereBetween collection too long' => [
258318
\InvalidArgumentException::class,
259-
'Between $values must have exactly two elements: [min, max]',
319+
'Between $values must be a list with exactly two elements: [min, max]',
260320
fn (Builder $builder) => $builder->whereBetween('id', new Collection([1, 2, 3])),
261321
];
262322

@@ -268,7 +328,7 @@ public static function provideExceptions(): iterable
268328

269329
yield 'whereBetween nested' => [
270330
\InvalidArgumentException::class,
271-
'Between $values must have exactly two elements: [min, max]',
331+
'Between $values must be a list with exactly two elements: [min, max]',
272332
fn (Builder $builder) => $builder->whereBetween('id', [[1, 2]]),
273333
];
274334
}

0 commit comments

Comments
 (0)