Completed
Push — master ( f39c4d...b2e354 )
by Sam
03:35 queued 03:17
created

testValidationResultAddMethods()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 35
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 24
nc 1
nop 0
dl 0
loc 35
rs 8.8571
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\ORM\Tests;
4
5
use SilverStripe\ORM\ValidationResult;
6
use SilverStripe\ORM\ValidationException;
7
use SilverStripe\Dev\SapphireTest;
8
9
class ValidationExceptionTest extends SapphireTest
10
{
11
	/**
12
	 * Test that ValidationResult object can correctly populate a ValidationException
13
	 */
14
	public function testCreateFromValidationResult() {
15
		$result = new ValidationResult();
16
		$result->addError('Not a valid result');
17
18
		$exception = new ValidationException($result);
19
20
		$this->assertEquals(0, $exception->getCode());
21
		$this->assertEquals('Not a valid result', $exception->getMessage());
22
		$this->assertFalse($exception->getResult()->isValid());
23
		$this->assertContains([
24
		    'message' => 'Not a valid result',
25
            'messageCast' => ValidationResult::CAST_TEXT,
26
            'messageType' => ValidationResult::TYPE_ERROR,
27
            'fieldName' => null,
28
        ], $exception->getResult()->getMessages());
29
30
	}
31
32
	/**
33
	 * Test that ValidationResult object with multiple errors can correctly
34
	 * populate a ValidationException
35
	 */
36
	public function testCreateFromComplexValidationResult() {
37
		$result = new ValidationResult();
38
		$result
39
            ->addError('Invalid type')
40
            ->addError('Out of kiwis');
41
		$exception = new ValidationException($result);
42
43
		$this->assertEquals(0, $exception->getCode());
44
		$this->assertEquals('Invalid type', $exception->getMessage());
45
		$this->assertEquals(false, $exception->getResult()->isValid());
46
		$this->assertContains([
47
		    'message' => 'Invalid type',
48
            'messageCast' => ValidationResult::CAST_TEXT,
49
            'messageType' => ValidationResult::TYPE_ERROR,
50
            'fieldName' => null,
51
        ], $exception->getResult()->getMessages());
52
        $this->assertContains([
53
            'message' => 'Out of kiwis',
54
            'messageCast' => ValidationResult::CAST_TEXT,
55
            'messageType' => ValidationResult::TYPE_ERROR,
56
            'fieldName' => null,
57
        ], $exception->getResult()->getMessages());
58
	}
59
60
	/**
61
	 * Test that a ValidationException created with no contained ValidationResult
62
	 * will correctly populate itself with an inferred version
63
	 */
64
	public function testCreateFromMessage() {
65
		$exception = new ValidationException('Error inferred from message', E_USER_ERROR);
66
67
		$this->assertEquals(E_USER_ERROR, $exception->getCode());
68
		$this->assertEquals('Error inferred from message', $exception->getMessage());
69
		$this->assertFalse($exception->getResult()->isValid());
70
		$this->assertContains([
71
		    'message' => 'Error inferred from message',
72
            'messageCast' => ValidationResult::CAST_TEXT,
73
            'messageType' => ValidationResult::TYPE_ERROR,
74
            'fieldName' => null,
75
        ], $exception->getResult()->getMessages());
76
	}
77
78
	/**
79
	 * Test that ValidationException can be created with both a ValidationResult
80
	 * and a custom message
81
	 */
82
	public function testCreateWithComplexValidationResultAndMessage() {
83
		$result = new ValidationResult();
84
		$result->addError('A spork is not a knife')
85
				->addError('A knife is not a back scratcher');
86
		$exception = new ValidationException($result, E_USER_WARNING);
87
88
		$this->assertEquals(E_USER_WARNING, $exception->getCode());
89
		$this->assertEquals('A spork is not a knife', $exception->getMessage());
90
		$this->assertEquals(false, $exception->getResult()->isValid());
91
		$this->assertContains([
92
		    'message' => 'A spork is not a knife',
93
            'messageCast' => ValidationResult::CAST_TEXT,
94
            'messageType' => ValidationResult::TYPE_ERROR,
95
            'fieldName' => null,
96
        ], $exception->getResult()->getMessages());
97
        $this->assertContains([
98
            'message' => 'A knife is not a back scratcher',
99
            'messageCast' => ValidationResult::CAST_TEXT,
100
            'messageType' => ValidationResult::TYPE_ERROR,
101
            'fieldName' => null,
102
        ], $exception->getResult()->getMessages());
103
	}
104
105
	/**
106
	 * Test combining validation results together
107
	 */
108
	public function testCombineResults(){
109
		$result = new ValidationResult();
110
		$anotherresult = new ValidationResult();
111
		$yetanotherresult = new ValidationResult();
112
		$anotherresult->addError("Eat with your mouth closed", 'bad', "EATING101");
113
		$yetanotherresult->addError("You didn't wash your hands", 'bad', "BECLEAN", false);
114
115
		$this->assertTrue($result->isValid());
116
		$this->assertFalse($anotherresult->isValid());
117
		$this->assertFalse($yetanotherresult->isValid());
118
119
		$result->combineAnd($anotherresult)
120
				->combineAnd($yetanotherresult);
121
		$this->assertFalse($result->isValid());
122
		$this->assertEquals(
123
		    [
124
                'EATING101' => [
125
                    'message' => 'Eat with your mouth closed',
126
                    'messageType' => 'bad',
127
                    'messageCast' => ValidationResult::CAST_TEXT,
128
                    'fieldName' => null,
129
                ],
130
                'BECLEAN' => [
131
                    'message' => 'You didn\'t wash your hands',
132
                    'messageType' => 'bad',
133
                    'messageCast' => ValidationResult::CAST_HTML,
134
                    'fieldName' => null,
135
                ],
136
            ],
137
            $result->getMessages()
138
        );
139
	}
140
141
	/**
142
	 * Test that a ValidationException created with no contained ValidationResult
143
	 * will correctly populate itself with an inferred version
144
	 */
145
	public function testValidationResultAddMethods() {
146
		$result = new ValidationResult();
147
		$result->addMessage('A spork is not a knife', 'bad');
148
		$result->addError('A knife is not a back scratcher');
149
		$result->addFieldMessage('Title', 'Title is good', 'good');
150
		$result->addFieldError('Content', 'Content is bad', 'bad');
151
152
153
		$this->assertEquals([
154
		    [
155
		        'fieldName' => null,
156
		        'message' => 'A spork is not a knife',
157
				'messageType' => 'bad',
158
				'messageCast' => ValidationResult::CAST_TEXT,
159
            ],
160
            [
161
		        'fieldName' => null,
162
                'message' => 'A knife is not a back scratcher',
163
				'messageType' => 'error',
164
				'messageCast' => ValidationResult::CAST_TEXT,
165
            ],
166
			[
167
			    'fieldName' => 'Title',
168
				'message' => 'Title is good',
169
				'messageType' => 'good',
170
				'messageCast' => ValidationResult::CAST_TEXT,
171
			],
172
			[
173
			    'fieldName' => 'Content',
174
				'message' => 'Content is bad',
175
				'messageType' => 'bad',
176
				'messageCast' => ValidationResult::CAST_TEXT,
177
			]
178
		], $result->getMessages());
179
	}
180
181
}
182