testGetPersistentParametersWithMultipleProvidersInContext()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 26
rs 9.504
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Sonata Project package.
7
 *
8
 * (c) Thomas Rabaix <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Sonata\MediaBundle\Tests\Admin;
15
16
use PHPUnit\Framework\TestCase;
17
use Prophecy\Prophecy\ObjectProphecy;
18
use Sonata\AdminBundle\Model\ModelManagerInterface;
19
use Sonata\ClassificationBundle\Model\CategoryInterface;
20
use Sonata\ClassificationBundle\Model\ContextInterface;
21
use Sonata\MediaBundle\Entity\BaseMedia;
22
use Sonata\MediaBundle\Model\CategoryManagerInterface;
23
use Sonata\MediaBundle\Model\Media;
24
use Sonata\MediaBundle\Provider\MediaProviderInterface;
25
use Sonata\MediaBundle\Provider\Pool;
26
use Sonata\MediaBundle\Tests\Fixtures\EntityWithGetId;
27
use Symfony\Component\HttpFoundation\ParameterBag;
28
use Symfony\Component\HttpFoundation\Request;
29
30
class BaseMediaAdminTest extends TestCase
31
{
32
    private $pool;
33
34
    private $categoryManager;
35
36
    private $request;
37
38
    private $modelManager;
39
40
    /**
41
     * @var TestMediaAdmin
42
     */
43
    private $mediaAdmin;
44
45
    protected function setUp(): void
46
    {
47
        $this->pool = $this->prophesize(Pool::class);
48
        $this->categoryManager = $this->prophesize(CategoryManagerInterface::class);
49
        $this->request = $this->prophesize(Request::class);
50
        $this->modelManager = $this->prophesize(ModelManagerInterface::class);
51
52
        $this->mediaAdmin = new TestMediaAdmin(
53
            null,
54
            BaseMedia::class,
55
            'SonataMediaBundle:MediaAdmin',
56
            $this->pool->reveal(),
57
            $this->categoryManager->reveal()
58
        );
59
        $this->mediaAdmin->setRequest($this->request->reveal());
60
        $this->mediaAdmin->setModelManager($this->modelManager->reveal());
61
        $this->mediaAdmin->setUniqid('uniqid');
62
    }
63
64
    public function testGetNewInstance(): void
65
    {
66
        $media = $this->prophesize(Media::class);
67
        $category = $this->prophesize();
68
        $category->willExtend(EntityWithGetId::class);
69
        $category->willImplement(CategoryInterface::class);
70
        $context = $this->prophesize();
71
        $context->willExtend(EntityWithGetId::class);
72
        $context->willImplement(ContextInterface::class);
73
74
        $this->configureGetPersistentParameters();
75
        $this->configureGetProviderName($media);
76
        $this->modelManager->getModelInstance(BaseMedia::class)->willReturn($media->reveal());
77
        $this->categoryManager->find(1)->willReturn($category->reveal());
78
        $this->request->isMethod('POST')->willReturn(true);
79
        $this->request->get('context')->willReturn('context');
80
        $this->request->get('id')->willReturn(null);
81
        $category->getContext()->willReturn($context->reveal());
82
        $context->getId()->willReturn('context');
83
        $media->setContext('context')->shouldBeCalled();
84
        $media->setCategory($category->reveal())->shouldBeCalled();
85
86
        $this->assertSame($media->reveal(), $this->mediaAdmin->getNewInstance());
87
    }
88
89
    public function testGetPersistentParametersWithMultipleProvidersInContext(): void
90
    {
91
        $category = $this->prophesize();
92
        $category->willExtend(EntityWithGetId::class);
93
        $category->willImplement(CategoryInterface::class);
94
        $category->getId()->willReturn(1);
95
        $this->categoryManager->getRootCategory('context')->willReturn($category->reveal());
96
        $this->request->isMethod('POST')->willReturn(true);
97
        $this->request->get('filter')->willReturn([]);
98
        $this->request->get('context', 'default_context')->willReturn('context');
99
        $this->request->get('provider')->willReturn('providerName');
100
        $this->request->get('category')->willReturn(null);
101
        $this->request->get('hide_context')->willReturn(true);
102
        $provider = $this->prophesize(MediaProviderInterface::class);
103
        $this->pool->getDefaultContext()->willReturn('default_context');
104
        $this->pool->getProvidersByContext('context')->willReturn([$provider->reveal(), $provider->reveal()]);
105
        $this->assertSame(
106
            [
107
                'provider' => 'providerName',
108
                'context' => 'context',
109
                'category' => 1,
110
                'hide_context' => true,
111
            ],
112
            $this->mediaAdmin->getPersistentParameters()
113
        );
114
    }
115
116
    private function configureGetPersistentParameters(): void
117
    {
118
        $provider = $this->prophesize(MediaProviderInterface::class);
119
        $category = $this->prophesize();
120
        $category->willExtend(EntityWithGetId::class);
121
        $category->willImplement(CategoryInterface::class);
122
        $query = $this->prophesize(ParameterBag::class);
123
        $this->request->query = $query->reveal();
124
        $query->set('provider', null)->shouldBeCalled();
125
126
        $this->pool->getDefaultContext()->willReturn('default_context');
127
        $this->pool->getProvidersByContext('context')->willReturn([$provider->reveal()]);
128
        $this->categoryManager->getRootCategory('context')->willReturn($category->reveal());
129
        $this->request->get('filter')->willReturn([]);
130
        $this->request->get('provider')->willReturn(null);
131
        $this->request->get('category')->willReturn(null);
132
        $this->request->get('hide_context')->willReturn(true);
133
        $this->request->get('context', 'default_context')->willReturn('context');
134
        $category->getId()->willReturn(1);
135
    }
136
137
    private function configureGetProviderName(ObjectProphecy $media): void
138
    {
139
        $this->request->get('uniqid')->willReturn(['providerName' => 'providerName']);
140
        $media->setProviderName('providerName')->shouldBeCalled();
141
    }
142
}
143