Skip to content

Commit ff58a07

Browse files
committed
Add and fix tests
1 parent 27e1a38 commit ff58a07

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
@@ -117,6 +117,7 @@ class Builder extends BaseBuilder
117117
* @var array
118118
*/
119119
protected $conversion = [
120+
'=' => 'eq',
120121
'!=' => 'ne',
121122
'<>' => 'ne',
122123
'<' => 'lt',
@@ -1085,7 +1086,7 @@ protected function compileWhereBasic(array $where): array
10851086
$operator = $operator === 'regex' ? '=' : 'not';
10861087
}
10871088

1088-
if (! isset($operator) || $operator == '=') {
1089+
if (! isset($operator) || $operator === '=' || $operator === 'eq') {
10891090
$query = [$column => $value];
10901091
} else {
10911092
$query = [$column => ['$'.$operator => $value]];
@@ -1195,39 +1196,27 @@ protected function compileWhereDate(array $where): array
11951196
$startOfDay = new UTCDateTime(Carbon::parse($value)->startOfDay());
11961197
$endOfDay = new UTCDateTime(Carbon::parse($value)->endOfDay());
11971198

1198-
$operator = $this->conversion[$operator];
1199-
12001199
return match($operator) {
1201-
'=' => [
1200+
'eq', '=' => [
12021201
$column => [
12031202
'$gte' => $startOfDay,
12041203
'$lte' => $endOfDay,
12051204
],
12061205
],
1207-
'$ne' => [
1206+
'ne' => [
12081207
$column => [
12091208
'$gt' => $endOfDay,
12101209
'$lt' => $startOfDay,
12111210
],
12121211
],
1213-
'$lt' => [
1214-
$column => [
1215-
'$lt' => $startOfDay,
1216-
],
1217-
],
1218-
'$gt' => [
1219-
$column => [
1220-
'$gt' => $endOfDay,
1221-
],
1222-
],
1223-
'$lte' => [
1212+
'lt', 'gte' => [
12241213
$column => [
1225-
'$lte' => $endOfDay,
1214+
'$'.$operator => $startOfDay,
12261215
],
12271216
],
1228-
'$gte' => [
1217+
'gt', 'lte' => [
12291218
$column => [
1230-
'$gte' => $startOfDay,
1219+
'$'.$operator => $endOfDay,
12311220
],
12321221
],
12331222
};
@@ -1241,14 +1230,13 @@ protected function compileWhereMonth(array $where): array
12411230
{
12421231
extract($where);
12431232

1244-
$operator = $operator === '=' ? '$eq' : $this->conversion[$operator];
1245-
$value = str_starts_with($value, '0') ? intval(str_replace('0', '', $value)) : $value;
1233+
$value = (int) ltrim($value, '0');
12461234

12471235
return [
12481236
'$expr' => [
1249-
$operator => [
1237+
'$'.$operator => [
12501238
[
1251-
'$month' => '$'.$column
1239+
'$month' => '$'.$column,
12521240
],
12531241
$value,
12541242
],
@@ -1264,14 +1252,13 @@ protected function compileWhereDay(array $where): array
12641252
{
12651253
extract($where);
12661254

1267-
$operator = $operator === '=' ? '$eq' : $this->conversion[$operator];
1268-
$value = str_starts_with($value, '0') ? intval(str_replace('0', '', $value)) : $value;
1255+
$value = (int) ltrim($value, '0');
12691256

12701257
return [
12711258
'$expr' => [
1272-
$operator => [
1259+
'$'.$operator => [
12731260
[
1274-
'$dayOfMonth' => '$'.$column
1261+
'$dayOfMonth' => '$'.$column,
12751262
],
12761263
$value,
12771264
],
@@ -1287,15 +1274,15 @@ protected function compileWhereYear(array $where): array
12871274
{
12881275
extract($where);
12891276

1290-
$operator = $operator === '=' ? '$eq' : $this->conversion[$operator];
1277+
$value = (int) $value;
12911278

12921279
return [
12931280
'$expr' => [
1294-
$operator => [
1281+
'$'.$operator => [
12951282
[
1296-
'$year' => '$'.$column
1283+
'$year' => '$'.$column,
12971284
],
1298-
$value
1285+
$value,
12991286
],
13001287
],
13011288
];

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
@@ -645,6 +645,110 @@ function (Builder $builder) {
645645
fn (Builder $builder) => $builder->where('name', 'not regex', '/^acme$/si'),
646646
];
647647

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