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

ValidationContextTest   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 104
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 43
c 1
b 0
f 0
dl 0
loc 104
rs 10
wmc 11

11 Methods

Rating   Name   Duplication   Size   Complexity  
A testSetAttributeTranslator() 0 9 1
A testConstructor() 0 5 1
A testGetDataSetWithoutDataSet() 0 7 1
A testGetParameter() 0 7 1
A testGetRawDataWithoutRawData() 0 7 1
A testSetContextDataOnce() 0 11 1
A testSetParameter() 0 6 1
A dataTranslatedAttributeWithoutTranslator() 0 5 1
A testTranslatedAttributeWithoutTranslator() 0 6 1
A testDataSet() 0 8 1
A testValidateWithoutValidator() 0 7 1
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