MediaTypeTest::getTestedInstance()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
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\Form\Type;
15
16
use Sonata\MediaBundle\Form\Type\MediaType;
17
use Sonata\MediaBundle\Provider\Pool;
18
use Symfony\Component\Form\Forms;
19
use Symfony\Component\Form\FormTypeInterface;
20
use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
21
use Symfony\Component\OptionsResolver\Exception\MissingOptionsException;
22
23
/**
24
 * @author Virgile Vivier <[email protected]>
25
 * @author Christian Gripp <[email protected]>
26
 */
27
class MediaTypeTest extends AbstractTypeTest
28
{
29
    protected $mediaPool;
30
31
    /**
32
     * @var MediaType
33
     */
34
    protected $mediaType;
35
36
    protected function setUp(): void
37
    {
38
        parent::setUp();
39
40
        $this->mediaPool = $this->createMock(Pool::class);
41
        $this->mediaType = new MediaType($this->mediaPool, 'testClass');
42
43
        $this->factory = Forms::createFormFactoryBuilder()
44
            ->addType($this->mediaType)
45
            ->addExtensions($this->getExtensions())
46
            ->getFormFactory();
47
    }
48
49
    public function testMissingFormOptions(): void
50
    {
51
        $this->mediaPool->method('getProviderList')->willReturn([
52
            'provider_a' => 'provider_a',
53
            'provider_b' => 'provider_b',
54
        ]);
55
        $this->mediaPool->method('getContexts')->willReturn([
56
            'video' => [],
57
            'pic' => [],
58
        ]);
59
60
        $this->expectException(MissingOptionsException::class);
61
        $this->expectExceptionMessage(
62
            'The required options "context", "provider" are missing.'
63
        );
64
65
        $this->factory->create($this->getFormType(), null);
66
    }
67
68
    public function testMissingFormContextOption(): void
69
    {
70
        $this->mediaPool->method('getProviderList')->willReturn([
71
            'provider_a' => 'provider_a',
72
            'provider_b' => 'provider_b',
73
        ]);
74
        $this->mediaPool->method('getContexts')->willReturn([
75
            'video' => [],
76
            'pic' => [],
77
        ]);
78
79
        $this->expectException(MissingOptionsException::class);
80
81
        $this->factory->create($this->getFormType(), null, [
82
            'provider' => 'provider_a',
83
        ]);
84
    }
85
86
    public function testMissingFormProviderOption(): void
87
    {
88
        $this->mediaPool->method('getProviderList')->willReturn([
89
            'provider_a' => 'provider_a',
90
            'provider_b' => 'provider_b',
91
        ]);
92
        $this->mediaPool->method('getContexts')->willReturn([
93
            'video' => [],
94
            'pic' => [],
95
        ]);
96
97
        $this->expectException(MissingOptionsException::class);
98
99
        $this->factory->create($this->getFormType(), null, [
100
            'context' => 'pic',
101
        ]);
102
    }
103
104
    public function testInvalidFormProviderOption(): void
105
    {
106
        $this->mediaPool->method('getProviderList')->willReturn([
107
            'provider_a' => 'provider_a',
108
            'provider_b' => 'provider_b',
109
        ]);
110
        $this->mediaPool->method('getContexts')->willReturn([
111
            'video' => [],
112
            'pic' => [],
113
        ]);
114
115
        $this->expectException(InvalidOptionsException::class);
116
        $this->expectExceptionMessage(
117
            'The option "provider" with value "provider_c" is invalid. Accepted values are: "provider_a", "provider_b".'
118
        );
119
120
        $this->factory->create($this->getFormType(), null, [
121
            'provider' => 'provider_c',
122
            'context' => 'pic',
123
        ]);
124
    }
125
126
    public function testInvalidFormContextOption(): void
127
    {
128
        $this->mediaPool->method('getProviderList')->willReturn([
129
            'provider_a' => 'provider_a',
130
            'provider_b' => 'provider_b',
131
        ]);
132
        $this->mediaPool->method('getContexts')->willReturn([
133
            'video' => [],
134
            'pic' => [],
135
        ]);
136
137
        $this->expectException(InvalidOptionsException::class);
138
        $this->expectExceptionMessage(
139
            'The option "context" with value "photo" is invalid. Accepted values are: "video", "pic".'
140
        );
141
142
        $this->factory->create($this->getFormType(), null, [
143
            'provider' => 'provider_b',
144
            'context' => 'photo',
145
        ]);
146
    }
147
148
    protected function getTestedInstance(): FormTypeInterface
149
    {
150
        return new MediaType($this->mediaPool, 'testclass');
151
    }
152
153
    private function getFormType(): string
154
    {
155
        return MediaType::class;
156
    }
157
}
158