Passed
Pull Request — master (#451)
by Sergei
04:05 queued 01:34
created

testSetValidatorAndRawDataOnce()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 11
cc 1
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Validator\Tests;
6
7
use PHPUnit\Framework\TestCase;
8
use RuntimeException;
9
use Yiisoft\Validator\AttributeTranslator\ArrayAttributeTranslator;
10
use Yiisoft\Validator\AttributeTranslator\NullAttributeTranslator;
11
use Yiisoft\Validator\DataSet\ArrayDataSet;
12
use Yiisoft\Validator\ValidationContext;
13
use Yiisoft\Validator\Validator;
14
15
final class ValidationContextTest extends TestCase
16
{
17
    public function testGetDataSetWithoutDataSet(): void
18
    {
19
        $context = new ValidationContext();
20
21
        $this->expectException(RuntimeException::class);
22
        $this->expectErrorMessage('Data set in validation context is not set.');
23
        $context->getDataSet();
24
    }
25
26
    public function testConstructor(): void
27
    {
28
        $context = new ValidationContext(['key' => 42]);
29
30
        $this->assertSame(42, $context->getParameter('key'));
31
    }
32
33
    public function testDataSet(): void
34
    {
35
        $dataSet = new ArrayDataSet();
36
37
        $context = new ValidationContext();
38
        $context->setDataSet($dataSet);
39
40
        $this->assertSame($dataSet, $context->getDataSet());
41
    }
42
43
    public function testSetParameter(): void
44
    {
45
        $context = new ValidationContext();
46
        $context->setParameter('key', 42);
47
48
        $this->assertSame(42, $context->getParameter('key'));
49
    }
50
51
    public function testGetParameter(): void
52
    {
53
        $context = new ValidationContext(['key' => 42]);
54
55
        $this->assertSame(42, $context->getParameter('key'));
56
        $this->assertNull($context->getParameter('non-exists'));
57
        $this->assertSame(7, $context->getParameter('non-exists', 7));
58
    }
59
60
    public function testValidateWithoutValidator(): void
61
    {
62
        $context = new ValidationContext();
63
64
        $this->expectException(RuntimeException::class);
65
        $this->expectErrorMessage('Validator and raw data in validation context is not set.');
66
        $context->validate(42);
67
    }
68
69
    public function testGetRawDataWithoutRawData(): void
70
    {
71
        $context = new ValidationContext();
72
73
        $this->expectException(RuntimeException::class);
74
        $this->expectErrorMessage('Validator and raw data in validation context is not set.');
75
        $context->getRawData();
76
    }
77
78
    public function testSetContextDataOnce(): void
79
    {
80
        $validator = new Validator();
81
82
        $context = new ValidationContext();
83
84
        $context
85
            ->setContextDataOnce($validator, new NullAttributeTranslator(), 1)
86
            ->setContextDataOnce($validator, new NullAttributeTranslator(), 2);
87
88
        $this->assertSame(1, $context->getRawData());
89
    }
90
91
    public function dataTranslatedAttributeWithoutTranslator(): array
92
    {
93
        return [
94
            'null' => [null],
95
            'string' => ['test'],
96
        ];
97
    }
98
99
    /**
100
     * @dataProvider dataTranslatedAttributeWithoutTranslator
101
     */
102
    public function testTranslatedAttributeWithoutTranslator(?string $attribute): void
103
    {
104
        $context = new ValidationContext();
105
        $context->setAttribute($attribute);
106
107
        $this->assertSame($attribute, $context->getTranslatedAttribute());
108
    }
109
110
    public function testSetAttributeTranslator(): void
111
    {
112
        $translator = new ArrayAttributeTranslator(['name' => 'Имя']);
113
114
        $context = (new ValidationContext())
115
            ->setAttributeTranslator($translator)
116
            ->setAttribute('name');
117
118
        $this->assertSame('Имя', $context->getTranslatedAttribute());
119
    }
120
}
121