forked from laravel/framework
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathValidationFactoryTest.php
More file actions
executable file
·109 lines (93 loc) · 4.23 KB
/
ValidationFactoryTest.php
File metadata and controls
executable file
·109 lines (93 loc) · 4.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php
namespace Illuminate\Tests\Validation;
use Illuminate\Contracts\Translation\Translator as TranslatorInterface;
use Illuminate\Validation\Factory;
use Illuminate\Validation\PresenceVerifierInterface;
use Illuminate\Validation\Validator;
use Mockery as m;
use PHPUnit\Framework\TestCase;
class ValidationFactoryTest extends TestCase
{
protected function tearDown(): void
{
m::close();
}
public function testMakeMethodCreatesValidValidator()
{
$translator = m::mock(TranslatorInterface::class);
$factory = new Factory($translator);
$validator = $factory->make(['foo' => 'bar'], ['baz' => 'boom']);
$this->assertEquals($translator, $validator->getTranslator());
$this->assertEquals(['foo' => 'bar'], $validator->getData());
$this->assertEquals(['baz' => ['boom']], $validator->getRules());
$presence = m::mock(PresenceVerifierInterface::class);
$noop1 = function () {
//
};
$noop2 = function () {
//
};
$noop3 = function () {
//
};
$factory->extend('foo', $noop1);
$factory->extendImplicit('implicit', $noop2);
$factory->extendDependent('dependent', $noop3);
$factory->replacer('replacer', $noop3);
$factory->setPresenceVerifier($presence);
$validator = $factory->make([], []);
$this->assertEquals(['foo' => $noop1, 'implicit' => $noop2, 'dependent' => $noop3], $validator->extensions);
$this->assertEquals(['replacer' => $noop3], $validator->replacers);
$this->assertEquals($presence, $validator->getPresenceVerifier());
$presence = m::mock(PresenceVerifierInterface::class);
$factory->extend('foo', $noop1, 'foo!');
$factory->extendImplicit('implicit', $noop2, 'implicit!');
$factory->extendImplicit('dependent', $noop3, 'dependent!');
$factory->setPresenceVerifier($presence);
$validator = $factory->make([], []);
$this->assertEquals(['foo' => $noop1, 'implicit' => $noop2, 'dependent' => $noop3], $validator->extensions);
$this->assertEquals(['foo' => 'foo!', 'implicit' => 'implicit!', 'dependent' => 'dependent!'], $validator->fallbackMessages);
$this->assertEquals($presence, $validator->getPresenceVerifier());
}
public function testValidateCallsValidateOnTheValidator()
{
$validator = m::mock(Validator::class);
$translator = m::mock(TranslatorInterface::class);
$factory = m::mock(Factory::class.'[make]', [$translator]);
$factory->shouldReceive('make')->once()
->with(['foo' => 'bar', 'baz' => 'boom'], ['foo' => 'required'], [], [])
->andReturn($validator);
$validator->shouldReceive('validate')->once()->andReturn(['foo' => 'bar']);
$validated = $factory->validate(
['foo' => 'bar', 'baz' => 'boom'],
['foo' => 'required']
);
$this->assertEquals($validated, ['foo' => 'bar']);
}
public function testCustomResolverIsCalled()
{
unset($_SERVER['__validator.factory']);
$translator = m::mock(TranslatorInterface::class);
$factory = new Factory($translator);
$factory->resolver(function ($translator, $data, $rules) {
$_SERVER['__validator.factory'] = true;
return new Validator($translator, $data, $rules);
});
$validator = $factory->make(['foo' => 'bar'], ['baz' => 'boom']);
$this->assertTrue($_SERVER['__validator.factory']);
$this->assertEquals($translator, $validator->getTranslator());
$this->assertEquals(['foo' => 'bar'], $validator->getData());
$this->assertEquals(['baz' => ['boom']], $validator->getRules());
unset($_SERVER['__validator.factory']);
}
public function testValidateMethodCanBeCalledPublicly()
{
$translator = m::mock(TranslatorInterface::class);
$factory = new Factory($translator);
$factory->extend('foo', function ($attribute, $value, $parameters, $validator) {
return $validator->validateArray($attribute, $value);
});
$validator = $factory->make(['bar' => ['baz']], ['bar' => 'foo']);
$this->assertTrue($validator->passes());
}
}