Skip to content

Commit 2904fbe

Browse files
committed
Fix docblock for embedsOne and add tests for public visibility
- Fix embedsOne docblock: "one-to-many" -> "one-to-one" - Add tests for direct call and resolveRelationUsing use case
1 parent e2a9204 commit 2904fbe

2 files changed

Lines changed: 44 additions & 1 deletion

File tree

src/Eloquent/EmbedsRelations.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public function embedsMany($related, $localKey = null, $foreignKey = null, $rela
5353
}
5454

5555
/**
56-
* Define an embedded one-to-many relationship.
56+
* Define an embedded one-to-one relationship.
5757
*
5858
* @param class-string $related
5959
* @param string|null $localKey

tests/EmbeddedRelationsTest.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
use MongoDB\Laravel\Tests\Models\Address;
1313
use MongoDB\Laravel\Tests\Models\User;
1414

15+
use MongoDB\Laravel\Relations\EmbedsMany;
16+
use MongoDB\Laravel\Relations\EmbedsOne;
17+
1518
use function array_merge;
1619

1720
class EmbeddedRelationsTest extends TestCase
@@ -972,4 +975,44 @@ public function testUnsetPropertyOnEmbed()
972975
$this->assertNull($user->addresses->get(0)->city);
973976
$this->assertSame('Kyoto', $user->addresses->get(1)->city);
974977
}
978+
979+
public function testEmbedsManyIsPublic()
980+
{
981+
$user = User::create(['name' => 'John Doe']);
982+
$relation = $user->embedsMany(Address::class, 'addresses', 'user_id', 'addresses');
983+
984+
$this->assertInstanceOf(EmbedsMany::class, $relation);
985+
}
986+
987+
public function testEmbedsOneIsPublic()
988+
{
989+
$user = User::create(['name' => 'John Doe']);
990+
$relation = $user->embedsOne(User::class, 'father', 'user_id', 'father');
991+
992+
$this->assertInstanceOf(EmbedsOne::class, $relation);
993+
}
994+
995+
public function testResolveRelationUsingEmbedsMany()
996+
{
997+
User::resolveRelationUsing('dynamicAddresses', fn ($model) => $model->embedsMany(Address::class, 'addresses', 'user_id', 'dynamicAddresses'));
998+
999+
$user = User::create(['name' => 'John Doe']);
1000+
$user->dynamicAddresses()->save(new Address(['city' => 'London']));
1001+
1002+
$user = User::find($user->id);
1003+
$this->assertCount(1, $user->dynamicAddresses);
1004+
$this->assertEquals('London', $user->dynamicAddresses->first()->city);
1005+
}
1006+
1007+
public function testResolveRelationUsingEmbedsOne()
1008+
{
1009+
User::resolveRelationUsing('dynamicFather', fn ($model) => $model->embedsOne(User::class, 'father', 'user_id', 'dynamicFather'));
1010+
1011+
$user = User::create(['name' => 'John Doe']);
1012+
$user->dynamicFather()->save(new User(['name' => 'Mark Doe']));
1013+
1014+
$user = User::find($user->id);
1015+
$this->assertNotNull($user->dynamicFather);
1016+
$this->assertEquals('Mark Doe', $user->dynamicFather->name);
1017+
}
9751018
}

0 commit comments

Comments
 (0)