Completed
Push — ezp_30797 ( c9135e...a01256 )
by
unknown
19:32
created

AbstractViewTest::getAlwaysAvailableParams()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
declare(strict_types=1);
8
9
namespace eZ\Publish\Core\MVC\Symfony\View\Tests;
10
11
use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
12
use eZ\Publish\Core\MVC\Symfony\View\View;
13
use InvalidArgumentException;
14
use PHPUnit\Framework\TestCase;
15
16
abstract class AbstractViewTest extends TestCase
17
{
18
    abstract protected function createViewUnderTest($template = null, array $parameters = [], $viewType = 'full'): View;
19
20
    /**
21
     * Returns parameters that are always returned by this view.
22
     *
23
     * @return array
24
     */
25
    protected function getAlwaysAvailableParams(): array
26
    {
27
        return [];
28
    }
29
30
    /**
31
     * @covers \eZ\Publish\Core\MVC\Symfony\View\View::setParameters
32
     * @covers \eZ\Publish\Core\MVC\Symfony\View\View::getParameters
33
     */
34
    public function testGetSetParameters(): void
35
    {
36
        $params = [
37
            'bar' => 'baz',
38
            'fruit' => 'apple',
39
        ];
40
41
        $view = $this->createViewUnderTest('foo');
42
        $view->setParameters($params);
43
44
        self::assertSame($this->getAlwaysAvailableParams() + $params, $view->getParameters());
45
    }
46
47
    /**
48
     * @covers \eZ\Publish\Core\MVC\Symfony\View\View::setParameters
49
     * @covers \eZ\Publish\Core\MVC\Symfony\View\View::getParameters
50
     */
51
    public function testAddParameters(): void
52
    {
53
        $params = ['bar' => 'baz', 'fruit' => 'apple'];
54
        $view = $this->createViewUnderTest('foo', $params);
55
56
        $additionalParams = ['truc' => 'muche', 'laurel' => 'hardy'];
57
        $view->addParameters($additionalParams);
58
59
        $this->assertSame($this->getAlwaysAvailableParams() + $params + $additionalParams, $view->getParameters());
60
    }
61
62
    /**
63
     * @covers \eZ\Publish\Core\MVC\Symfony\View\View::setParameters
64
     * @covers \eZ\Publish\Core\MVC\Symfony\View\View::getParameters
65
     */
66
    public function testHasParameter(): View
67
    {
68
        $view = $this->createViewUnderTest(__METHOD__, ['foo' => 'bar']);
69
70
        $this->assertTrue($view->hasParameter('foo'));
71
        $this->assertFalse($view->hasParameter('nonExistent'));
72
73
        return $view;
74
    }
75
76
    /**
77
     * @depends testHasParameter
78
     * @covers  \eZ\Publish\Core\MVC\Symfony\View\View::setParameters
79
     * @covers  \eZ\Publish\Core\MVC\Symfony\View\View::getParameters
80
     *
81
     * @param \eZ\Publish\Core\MVC\Symfony\View\View $view
82
     *
83
     * @return \eZ\Publish\Core\MVC\Symfony\View\View
84
     */
85
    public function testGetParameter(View $view): View
86
    {
87
        $this->assertSame('bar', $view->getParameter('foo'));
88
89
        return $view;
90
    }
91
92
    /**
93
     * @depends testGetParameter
94
     *
95
     * @covers \eZ\Publish\Core\MVC\Symfony\View\View::setParameters
96
     * @covers \eZ\Publish\Core\MVC\Symfony\View\View::getParameters
97
     */
98
    public function testGetParameterFail(View $view): void
99
    {
100
        $this->expectException(InvalidArgumentException::class);
101
102
        $view->getParameter('nonExistent');
103
    }
104
105
    /**
106
     * @dataProvider goodTemplateIdentifierProvider
107
     *
108
     * @param string|callable $templateIdentifier
109
     */
110
    public function testSetTemplateIdentifier($templateIdentifier): void
111
    {
112
        $contentView = $this->createViewUnderTest();
113
        $contentView->setTemplateIdentifier($templateIdentifier);
114
115
        $this->assertSame($templateIdentifier, $contentView->getTemplateIdentifier());
116
    }
117
118
    public function goodTemplateIdentifierProvider(): array
119
    {
120
        return [
121
            ['foo:bar:baz.html.twig'],
122
            [
123
                function () {
124
                    return 'foo';
125
                },
126
            ],
127
        ];
128
    }
129
130
    /**
131
     * @dataProvider badTemplateIdentifierProvider
132
     *
133
     * @param mixed $badTemplateIdentifier
134
     */
135
    public function testSetTemplateIdentifierWrongType($badTemplateIdentifier): void
136
    {
137
        $this->expectException(InvalidArgumentType::class);
138
139
        $contentView = $this->createViewUnderTest();
140
        $contentView->setTemplateIdentifier($badTemplateIdentifier);
141
    }
142
143 View Code Duplication
    public function badTemplateIdentifierProvider(): array
144
    {
145
        return [
146
            [123],
147
            [true],
148
            [new \stdClass()],
149
            [['foo', 'bar']],
150
        ];
151
    }
152
}
153