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

Commit f77fb7d

Browse files
committed
PHPORM-35 Add various tests on Model _id
1 parent 3a46876 commit f77fb7d

File tree

4 files changed

+150
-2
lines changed

4 files changed

+150
-2
lines changed

tests/ModelTest.php

Lines changed: 101 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,14 @@
1616
use Jenssegers\Mongodb\Eloquent\Model;
1717
use Jenssegers\Mongodb\Tests\Models\Book;
1818
use Jenssegers\Mongodb\Tests\Models\Guarded;
19+
use Jenssegers\Mongodb\Tests\Models\IdIsBinaryUuid;
20+
use Jenssegers\Mongodb\Tests\Models\IdIsInt;
21+
use Jenssegers\Mongodb\Tests\Models\IdIsString;
1922
use Jenssegers\Mongodb\Tests\Models\Item;
2023
use Jenssegers\Mongodb\Tests\Models\MemberStatus;
2124
use Jenssegers\Mongodb\Tests\Models\Soft;
2225
use Jenssegers\Mongodb\Tests\Models\User;
26+
use MongoDB\BSON\Binary;
2327
use MongoDB\BSON\ObjectID;
2428
use MongoDB\BSON\UTCDateTime;
2529

@@ -325,11 +329,106 @@ public function testSoftDelete(): void
325329
$this->assertEquals(2, Soft::count());
326330
}
327331

328-
public function testPrimaryKey(): void
332+
/**
333+
* @dataProvider provideId
334+
*/
335+
public function testPrimaryKey(string $model, $id, string $type): void
329336
{
330-
$user = new User;
337+
$model::truncate();
338+
339+
$document = new $model;
340+
$this->assertEquals('_id', $document->getKeyName());
341+
342+
$document->_id = $id;
343+
$document->save();
344+
$this->assertSame($type, get_debug_type($document->_id));
345+
$this->assertEquals($id, $document->_id);
346+
$this->assertSame($type, get_debug_type($document->getKey()));
347+
$this->assertEquals($id, $document->getKey());
348+
349+
$check = $model::find($id);
350+
351+
$this->assertNotNull($check, 'Not found');
352+
$this->assertSame($type, get_debug_type($check->_id));
353+
$this->assertEquals($id, $check->_id);
354+
$this->assertSame($type, get_debug_type($check->getKey()));
355+
$this->assertEquals($id, $check->getKey());
356+
}
357+
358+
public static function provideId(): iterable
359+
{
360+
yield 'int' => [
361+
User::class,
362+
10,
363+
'int',
364+
];
365+
366+
yield 'cast as int' => [
367+
IdIsInt::class,
368+
10,
369+
'int',
370+
];
371+
372+
yield 'string' => [
373+
User::class,
374+
'user-10',
375+
'string',
376+
];
377+
378+
yield 'cast as string' => [
379+
IdIsString::class,
380+
'user-10',
381+
'string',
382+
];
383+
384+
yield 'ObjectID' => [
385+
User::class,
386+
new ObjectID(),
387+
'string',
388+
];
389+
390+
yield 'BinaryUuid' => [
391+
User::class,
392+
new Binary(hex2bin('0c103357380648c9a84b867dcb625cfb'), Binary::TYPE_UUID),
393+
'string',
394+
];
395+
396+
yield 'cast as BinaryUuid' => [
397+
IdIsBinaryUuid::class,
398+
new Binary(hex2bin('0c103357380648c9a84b867dcb625cfb'), Binary::TYPE_UUID),
399+
'string',
400+
];
401+
402+
yield 'UTCDateTime' => [
403+
User::class,
404+
new UTCDateTime(),
405+
UTCDateTime::class,
406+
];
407+
}
408+
409+
public function testPrimaryKeyBinaryUuid(): void
410+
{
411+
$user = new IdIsBinaryUuid;
331412
$this->assertEquals('_id', $user->getKeyName());
332413

414+
$uuid = new Binary(hex2bin('0c103357380648c9a84b867dcb625cfb'), Binary::TYPE_UUID);
415+
$idAsString = (string) $uuid;
416+
$user->_id = $uuid;
417+
$user->name = 'John Doe';
418+
$user->save();
419+
$this->assertIsString($user->getKey());
420+
$this->assertSame($idAsString, $user->getKey());
421+
422+
$check = IdIsBinaryUuid::find($uuid);
423+
$this->assertIsString($check->_id);
424+
$this->assertSame($idAsString, $check->_id);
425+
$this->assertIsString($check->getKey());
426+
$this->assertSame($idAsString, $check->getKey());
427+
$this->assertSame('John Doe', $check->name);
428+
}
429+
430+
public function testCustomPrimaryKey(): void
431+
{
333432
$book = new Book;
334433
$this->assertEquals('title', $book->getKeyName());
335434

tests/Models/IdIsBinaryUuid.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Jenssegers\Mongodb\Tests\Models;
6+
7+
use Jenssegers\Mongodb\Eloquent\Casts\BinaryUuid;
8+
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
9+
10+
class IdIsBinaryUuid extends Eloquent
11+
{
12+
protected $connection = 'mongodb';
13+
protected static $unguarded = true;
14+
protected $casts = [
15+
'_id' => BinaryUuid::class,
16+
];
17+
}

tests/Models/IdIsInt.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Jenssegers\Mongodb\Tests\Models;
6+
7+
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
8+
9+
class IdIsInt extends Eloquent
10+
{
11+
protected $connection = 'mongodb';
12+
protected static $unguarded = true;
13+
protected $casts = [
14+
'_id' => 'int',
15+
];
16+
}

tests/Models/IdIsString.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Jenssegers\Mongodb\Tests\Models;
6+
7+
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
8+
9+
class IdIsString extends Eloquent
10+
{
11+
protected $connection = 'mongodb';
12+
protected static $unguarded = true;
13+
protected $casts = [
14+
'_id' => 'string',
15+
];
16+
}

0 commit comments

Comments
 (0)