Skip to content

Commit 560984e

Browse files
committed
Add and fix tests
1 parent e33764e commit 560984e

File tree

4 files changed

+164
-44
lines changed

4 files changed

+164
-44
lines changed

src/Query/Builder.php

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ class Builder extends BaseBuilder
116116
* @var array
117117
*/
118118
protected $conversion = [
119+
'=' => 'eq',
119120
'!=' => 'ne',
120121
'<>' => 'ne',
121122
'<' => 'lt',
@@ -1076,7 +1077,7 @@ protected function compileWhereBasic(array $where): array
10761077
$operator = $operator === 'regex' ? '=' : 'not';
10771078
}
10781079

1079-
if (! isset($operator) || $operator == '=') {
1080+
if (! isset($operator) || $operator === '=' || $operator === 'eq') {
10801081
$query = [$column => $value];
10811082
} else {
10821083
$query = [$column => ['$'.$operator => $value]];
@@ -1186,39 +1187,27 @@ protected function compileWhereDate(array $where): array
11861187
$startOfDay = new UTCDateTime(Carbon::parse($value)->startOfDay());
11871188
$endOfDay = new UTCDateTime(Carbon::parse($value)->endOfDay());
11881189

1189-
$operator = $this->conversion[$operator];
1190-
11911190
return match($operator) {
1192-
'=' => [
1191+
'eq', '=' => [
11931192
$column => [
11941193
'$gte' => $startOfDay,
11951194
'$lte' => $endOfDay,
11961195
],
11971196
],
1198-
'$ne' => [
1197+
'ne' => [
11991198
$column => [
12001199
'$gt' => $endOfDay,
12011200
'$lt' => $startOfDay,
12021201
],
12031202
],
1204-
'$lt' => [
1205-
$column => [
1206-
'$lt' => $startOfDay,
1207-
],
1208-
],
1209-
'$gt' => [
1210-
$column => [
1211-
'$gt' => $endOfDay,
1212-
],
1213-
],
1214-
'$lte' => [
1203+
'lt', 'gte' => [
12151204
$column => [
1216-
'$lte' => $endOfDay,
1205+
'$'.$operator => $startOfDay,
12171206
],
12181207
],
1219-
'$gte' => [
1208+
'gt', 'lte' => [
12201209
$column => [
1221-
'$gte' => $startOfDay,
1210+
'$'.$operator => $endOfDay,
12221211
],
12231212
],
12241213
};
@@ -1232,14 +1221,13 @@ protected function compileWhereMonth(array $where): array
12321221
{
12331222
extract($where);
12341223

1235-
$operator = $operator === '=' ? '$eq' : $this->conversion[$operator];
1236-
$value = str_starts_with($value, '0') ? intval(str_replace('0', '', $value)) : $value;
1224+
$value = (int) ltrim($value, '0');
12371225

12381226
return [
12391227
'$expr' => [
1240-
$operator => [
1228+
'$'.$operator => [
12411229
[
1242-
'$month' => '$'.$column
1230+
'$month' => '$'.$column,
12431231
],
12441232
$value,
12451233
],
@@ -1255,14 +1243,13 @@ protected function compileWhereDay(array $where): array
12551243
{
12561244
extract($where);
12571245

1258-
$operator = $operator === '=' ? '$eq' : $this->conversion[$operator];
1259-
$value = str_starts_with($value, '0') ? intval(str_replace('0', '', $value)) : $value;
1246+
$value = (int) ltrim($value, '0');
12601247

12611248
return [
12621249
'$expr' => [
1263-
$operator => [
1250+
'$'.$operator => [
12641251
[
1265-
'$dayOfMonth' => '$'.$column
1252+
'$dayOfMonth' => '$'.$column,
12661253
],
12671254
$value,
12681255
],
@@ -1278,15 +1265,15 @@ protected function compileWhereYear(array $where): array
12781265
{
12791266
extract($where);
12801267

1281-
$operator = $operator === '=' ? '$eq' : $this->conversion[$operator];
1268+
$value = (int) $value;
12821269

12831270
return [
12841271
'$expr' => [
1285-
$operator => [
1272+
'$'.$operator => [
12861273
[
1287-
'$year' => '$'.$column
1274+
'$year' => '$'.$column,
12881275
],
1289-
$value
1276+
$value,
12901277
],
12911278
],
12921279
];

tests/Models/Birthday.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,8 @@ class Birthday extends Eloquent
1818
protected $connection = 'mongodb';
1919
protected $collection = 'birthday';
2020
protected $fillable = ['name', 'birthday', 'time'];
21+
22+
protected $casts = [
23+
'birthday' => 'datetime',
24+
];
2125
}

tests/Query/BuilderTest.php

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,110 @@ function (Builder $builder) {
646646
fn (Builder $builder) => $builder->where('name', 'not regex', '/^acme$/si'),
647647
];
648648

649+
yield 'where date' => [
650+
['find' => [['created_at' => [
651+
'$gte' => new UTCDateTime(new DateTimeImmutable('2018-09-30 00:00:00.000 +00:00')),
652+
'$lte' => new UTCDateTime(new DateTimeImmutable('2018-09-30 23:59:59.999 +00:00')),
653+
]], []]],
654+
fn (Builder $builder) => $builder->whereDate('created_at', '2018-09-30'),
655+
];
656+
657+
yield 'where date DateTimeImmutable' => [
658+
['find' => [['created_at' => [
659+
'$gte' => new UTCDateTime(new DateTimeImmutable('2018-09-30 00:00:00.000 +00:00')),
660+
'$lte' => new UTCDateTime(new DateTimeImmutable('2018-09-30 23:59:59.999 +00:00')),
661+
]], []]],
662+
fn (Builder $builder) => $builder->whereDate('created_at', '=', new DateTimeImmutable('2018-09-30 15:00:00 +02:00')),
663+
];
664+
665+
yield 'where date <' => [
666+
['find' => [['created_at' => [
667+
'$lt' => new UTCDateTime(new DateTimeImmutable('2018-09-30 00:00:00.000 +00:00')),
668+
]], []]],
669+
fn (Builder $builder) => $builder->whereDate('created_at', '<', '2018-09-30'),
670+
];
671+
672+
yield 'where date >=' => [
673+
['find' => [['created_at' => [
674+
'$gte' => new UTCDateTime(new DateTimeImmutable('2018-09-30 00:00:00.000 +00:00')),
675+
]], []]],
676+
fn (Builder $builder) => $builder->whereDate('created_at', '>=', '2018-09-30'),
677+
];
678+
679+
yield 'where date >' => [
680+
['find' => [['created_at' => [
681+
'$gt' => new UTCDateTime(new DateTimeImmutable('2018-09-30 23:59:59.999 +00:00')),
682+
]], []]],
683+
fn (Builder $builder) => $builder->whereDate('created_at', '>', '2018-09-30'),
684+
];
685+
686+
yield 'where date <=' => [
687+
['find' => [['created_at' => [
688+
'$lte' => new UTCDateTime(new DateTimeImmutable('2018-09-30 23:59:59.999 +00:00')),
689+
]], []]],
690+
fn (Builder $builder) => $builder->whereDate('created_at', '<=', '2018-09-30'),
691+
];
692+
693+
yield 'where day' => [
694+
['find' => [['$expr' => [
695+
'$eq' => [
696+
['$dayOfMonth' => '$created_at'],
697+
5,
698+
],
699+
]], []]],
700+
fn (Builder $builder) => $builder->whereDay('created_at', 5),
701+
];
702+
703+
yield 'where day > string' => [
704+
['find' => [['$expr' => [
705+
'$gt' => [
706+
['$dayOfMonth' => '$created_at'],
707+
5,
708+
],
709+
]], []]],
710+
fn (Builder $builder) => $builder->whereDay('created_at', '>', '05'),
711+
];
712+
713+
yield 'where month' => [
714+
['find' => [['$expr' => [
715+
'$eq' => [
716+
['$month' => '$created_at'],
717+
10,
718+
],
719+
]], []]],
720+
fn (Builder $builder) => $builder->whereMonth('created_at', 10),
721+
];
722+
723+
yield 'where month > string' => [
724+
['find' => [['$expr' => [
725+
'$gt' => [
726+
['$month' => '$created_at'],
727+
5,
728+
],
729+
]], []]],
730+
fn (Builder $builder) => $builder->whereMonth('created_at', '>', '05'),
731+
];
732+
733+
yield 'where year' => [
734+
['find' => [['$expr' => [
735+
'$eq' => [
736+
['$year' => '$created_at'],
737+
2023,
738+
],
739+
]], []]],
740+
fn (Builder $builder) => $builder->whereYear('created_at', 2023),
741+
];
742+
743+
yield 'where year > string' => [
744+
['find' => [['$expr' => [
745+
'$gt' => [
746+
['$year' => '$created_at'],
747+
2023,
748+
],
749+
]], []]],
750+
fn (Builder $builder) => $builder->whereYear('created_at', '>', '2023'),
751+
];
752+
649753
/** @see DatabaseQueryBuilderTest::testBasicSelectDistinct */
650754
yield 'distinct' => [
651755
['distinct' => ['foo', [], []]],

tests/QueryTest.php

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Jenssegers\Mongodb\Tests;
66

7+
use DateTimeImmutable;
78
use Jenssegers\Mongodb\Tests\Models\Birthday;
89
use Jenssegers\Mongodb\Tests\Models\Scoped;
910
use Jenssegers\Mongodb\Tests\Models\User;
@@ -24,12 +25,12 @@ public function setUp(): void
2425
User::create(['name' => 'Tommy Toe', 'age' => 33, 'title' => 'user']);
2526
User::create(['name' => 'Yvonne Yoe', 'age' => 35, 'title' => 'admin']);
2627
User::create(['name' => 'Error', 'age' => null, 'title' => null]);
27-
Birthday::create(['name' => 'Mark Moe', 'birthday' => '2020-04-10', 'day' => '10', 'month' => '04', 'year' => '2020', 'time' => '10:53:11']);
28-
Birthday::create(['name' => 'Jane Doe', 'birthday' => '2021-05-12', 'day' => '12', 'month' => '05', 'year' => '2021', 'time' => '10:53:12']);
29-
Birthday::create(['name' => 'Harry Hoe', 'birthday' => '2021-05-11', 'day' => '11', 'month' => '05', 'year' => '2021', 'time' => '10:53:13']);
30-
Birthday::create(['name' => 'Robert Doe', 'birthday' => '2021-05-12', 'day' => '12', 'month' => '05', 'year' => '2021', 'time' => '10:53:14']);
31-
Birthday::create(['name' => 'Mark Moe', 'birthday' => '2021-05-12', 'day' => '12', 'month' => '05', 'year' => '2021', 'time' => '10:53:15']);
32-
Birthday::create(['name' => 'Mark Moe', 'birthday' => '2022-05-12', 'day' => '12', 'month' => '05', 'year' => '2022', 'time' => '10:53:16']);
28+
Birthday::create(['name' => 'Mark Moe', 'birthday' => new DateTimeImmutable('2020-04-10 10:53:11'), 'time' => '10:53:11']);
29+
Birthday::create(['name' => 'Jane Doe', 'birthday' => new DateTimeImmutable('2021-05-12 10:53:12'), 'time' => '10:53:12']);
30+
Birthday::create(['name' => 'Harry Hoe', 'birthday' => new DateTimeImmutable('2021-05-11 10:53:13'), 'time' => '10:53:13']);
31+
Birthday::create(['name' => 'Robert Doe', 'birthday' => new DateTimeImmutable('2021-05-12 10:53:14'), 'time' => '10:53:14']);
32+
Birthday::create(['name' => 'Mark Moe', 'birthday' => new DateTimeImmutable('2021-05-12 10:53:15'), 'time' => '10:53:15']);
33+
Birthday::create(['name' => 'Mark Moe', 'birthday' => new DateTimeImmutable('2022-05-12 10:53:16'), 'time' => '10:53:16']);
3334
}
3435

3536
public function tearDown(): void
@@ -204,36 +205,60 @@ public function testWhereDate(): void
204205

205206
$birthdayCount = Birthday::whereDate('birthday', '2021-05-11')->get();
206207
$this->assertCount(1, $birthdayCount);
208+
209+
$birthdayCount = Birthday::whereDate('birthday', '>', '2021-05-11')->get();
210+
$this->assertCount(4, $birthdayCount);
211+
212+
$birthdayCount = Birthday::whereDate('birthday', '>=', '2021-05-11')->get();
213+
$this->assertCount(5, $birthdayCount);
214+
215+
$birthdayCount = Birthday::whereDate('birthday', '<', '2021-05-11')->get();
216+
$this->assertCount(1, $birthdayCount);
217+
218+
$birthdayCount = Birthday::whereDate('birthday', '<=', '2021-05-11')->get();
219+
$this->assertCount(2, $birthdayCount);
207220
}
208221

209222
public function testWhereDay(): void
210223
{
211-
$day = Birthday::whereDay('day', '12')->get();
224+
$day = Birthday::whereDay('birthday', '12')->get();
212225
$this->assertCount(4, $day);
213226

214-
$day = Birthday::whereDay('day', '11')->get();
227+
$day = Birthday::whereDay('birthday', '11')->get();
215228
$this->assertCount(1, $day);
216229
}
217230

218231
public function testWhereMonth(): void
219232
{
220-
$month = Birthday::whereMonth('month', '04')->get();
233+
$month = Birthday::whereMonth('birthday', '04')->get();
221234
$this->assertCount(1, $month);
222235

223-
$month = Birthday::whereMonth('month', '05')->get();
236+
$month = Birthday::whereMonth('birthday', '05')->get();
224237
$this->assertCount(5, $month);
238+
239+
$month = Birthday::whereMonth('birthday', '>=', '5')->get();
240+
$this->assertCount(5, $month);
241+
242+
$month = Birthday::whereMonth('birthday', '<', '10')->get();
243+
$this->assertCount(6, $month);
244+
245+
$month = Birthday::whereMonth('birthday', '<>', '5')->get();
246+
$this->assertCount(1, $month);
225247
}
226248

227249
public function testWhereYear(): void
228250
{
229-
$year = Birthday::whereYear('year', '2021')->get();
251+
$year = Birthday::whereYear('birthday', '2021')->get();
230252
$this->assertCount(4, $year);
231253

232-
$year = Birthday::whereYear('year', '2022')->get();
254+
$year = Birthday::whereYear('birthday', '2022')->get();
233255
$this->assertCount(1, $year);
234256

235-
$year = Birthday::whereYear('year', '<', '2021')->get();
257+
$year = Birthday::whereYear('birthday', '<', '2021')->get();
236258
$this->assertCount(1, $year);
259+
260+
$year = Birthday::whereYear('birthday', '<>', '2021')->get();
261+
$this->assertCount(2, $year);
237262
}
238263

239264
public function testWhereTime(): void

0 commit comments

Comments
 (0)