Passed
Pull Request — master (#1)
by Kevin
02:03
created

FactoryTest::many_to_many_relationship()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 10
nc 1
nop 0
dl 0
loc 16
rs 9.9332
c 1
b 0
f 1
1
<?php
2
3
namespace Zenstruck\Foundry\Tests\Functional;
4
5
use Zenstruck\Foundry\Tests\Fixtures\Entity\Category;
6
use Zenstruck\Foundry\Tests\Fixtures\Entity\Post;
7
use Zenstruck\Foundry\Tests\Fixtures\Entity\Tag;
8
use Zenstruck\Foundry\Tests\FunctionalTestCase;
9
use function Zenstruck\Foundry\create;
10
use function Zenstruck\Foundry\factory;
11
12
/**
13
 * @author Kevin Bond <[email protected]>
14
 */
15
final class FactoryTest extends FunctionalTestCase
16
{
17
    /**
18
     * @test
19
     */
20
    public function many_to_one_relationship(): void
21
    {
22
        $categoryFactory = factory(Category::class, ['name' => 'foo']);
23
        $category = create(Category::class, ['name' => 'bar']);
24
        $postA = create(Post::class, ['title' => 'title', 'body' => 'body', 'category' => $categoryFactory]);
25
        $postB = create(Post::class, ['title' => 'title', 'body' => 'body', 'category' => $category]);
26
27
        $this->assertSame('foo', $postA->getCategory()->getName());
28
        $this->assertSame('bar', $postB->getCategory()->getName());
29
    }
30
31
    /**
32
     * @test
33
     */
34
    public function one_to_many_relationship(): void
35
    {
36
        $category = create(Category::class, [
37
            'name' => 'bar',
38
            'posts' => [
39
                factory(Post::class, ['title' => 'Post A', 'body' => 'body']),
40
                create(Post::class, ['title' => 'Post B', 'body' => 'body']),
41
            ],
42
        ]);
43
44
        $posts = \array_map(fn($post) => $post->getTitle(), $category->getPosts()->toArray());
45
46
        $this->assertCount(2, $posts);
47
        $this->assertContains('Post A', $posts);
48
        $this->assertContains('Post B', $posts);
49
    }
50
51
    /**
52
     * @test
53
     */
54
    public function many_to_many_relationship(): void
55
    {
56
        $post = create(Post::class, [
57
            'title' => 'title',
58
            'body' => 'body',
59
            'tags' => [
60
                factory(Tag::class, ['name' => 'Tag A']),
61
                create(Tag::class, ['name' => 'Tag B']),
62
            ],
63
        ]);
64
65
        $tags = \array_map(fn($tag) => $tag->getName(), $post->getTags()->toArray());
66
67
        $this->assertCount(2, $tags);
68
        $this->assertContains('Tag A', $tags);
69
        $this->assertContains('Tag B', $tags);
70
    }
71
72
    /**
73
     * @test
74
     */
75
    public function many_to_many_reverse_relationship(): void
76
    {
77
        $tag = create(Tag::class, [
78
            'name' => 'bar',
79
            'posts' => [
80
                factory(Post::class, ['title' => 'Post A', 'body' => 'body']),
81
                create(Post::class, ['title' => 'Post B', 'body' => 'body']),
82
            ],
83
        ]);
84
85
        $posts = \array_map(fn($post) => $post->getTitle(), $tag->getPosts()->toArray());
86
87
        $this->assertCount(2, $posts);
88
        $this->assertContains('Post A', $posts);
89
        $this->assertContains('Post B', $posts);
90
    }
91
}
92