Completed
Push — master ( 4aacb3...540751 )
by Jeroen De
02:33
created

testRegisterType_parametersAreUsed()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 27
rs 9.488
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace ParamProcessor\Tests;
4
5
use ParamProcessor\ParamDefinition;
6
use ParamProcessor\ParamDefinitionFactory;
7
use PHPUnit\Framework\TestCase;
8
use ValueParsers\IntParser;
9
use ValueParsers\NullParser;
10
use ValueParsers\StringParser;
11
use ValueValidators\NullValidator;
12
use ValueValidators\RangeValidator;
13
14
/**
15
 * @covers \ParamProcessor\ParamDefinitionFactory
16
 *
17
 * @licence GNU GPL v2+
18
 * @author Jeroen De Dauw < [email protected] >
19
 */
20
class ParamDefinitionFactoryTest extends TestCase {
21
22
	public function testCanConstruct() {
23
		new ParamDefinitionFactory();
24
		$this->assertTrue( true );
25
	}
26
27
	public function testNewDefinitionFromArray() {
28
		$definition = ParamDefinitionFactory::newDefault()->newDefinitionFromArray(
29
			[
30
				'name' => 'some-list',
31
				'type' => 'integer',
32
				'message' => 'test-message',
33
				'islist' => true
34
			]
35
		);
36
37
		$this->assertSame( 'some-list', $definition->getName() );
38
		$this->assertSame( 'integer', $definition->getType() );
39
		$this->assertSame( 'test-message', $definition->getMessage() );
40
		$this->assertTrue( $definition->isList() );
41
		$this->assertTrue( $definition->isRequired() );
42
	}
43
44
	public function testNewDefinition() {
45
		$definition = ParamDefinitionFactory::newDefault()->newDefinition(
46
			'integer',
47
			'some-list',
48
			null,
49
			'test-message',
50
			true
51
		);
52
53
		$this->assertSame( 'some-list', $definition->getName() );
54
		$this->assertSame( 'integer', $definition->getType() );
55
		$this->assertSame( 'test-message', $definition->getMessage() );
56
		$this->assertTrue( $definition->isList() );
57
		$this->assertTrue( $definition->isRequired() );
58
	}
59
60
	public function testNewDefinitionFromArray_typeDefaultsToString() {
61
		$this->assertSame( 'string', $this->newBasicParamFromArray()->getType() );
62
	}
63
64
	private function newBasicParamFromArray(): ParamDefinition {
65
		return ParamDefinitionFactory::newDefault()->newDefinitionFromArray(
66
			[
67
				'name' => 'irrelevant',
68
				'message' => 'irrelevant'
69
			]
70
		);
71
	}
72
73
	public function testNewDefinitionFromArray_isListDefaultsToFalse() {
74
		$this->assertFalse( $this->newBasicParamFromArray()->isList() );
75
	}
76
77
	public function testNewDefinitionFromArray_isRequiredDefaultsToTrue() {
78
		$this->assertTrue( $this->newBasicParamFromArray()->isRequired() );
79
	}
80
81
	public function testNewDefinitionFromArray_optionsAreSet() {
82
		$arrayDefinition = [
83
			'name' => 'some-list',
84
			'type' => 'integer',
85
			'message' => 'test-message',
86
			'islist' => true
87
		];
88
89
		$definition = ParamDefinitionFactory::newDefault()->newDefinitionFromArray( $arrayDefinition );
90
91
		$this->assertSame( $arrayDefinition, $definition->getOptions() );
92
	}
93
94
	public function testRegisterType_defaultsAreSet() {
95
		$factory = ParamDefinitionFactory::newDefault();
96
97
		$factory->registerType(
98
			'kitten',
99
			[]
100
		);
101
102
		$this->assertSame(
103
			NullParser::class,
104
			$factory->getComponentForType( 'kitten', 'string-parser' )
105
		);
106
107
		$this->assertSame(
108
			NullParser::class,
109
			$factory->getComponentForType( 'kitten', 'typed-parser' )
110
		);
111
112
		$this->assertSame(
113
			NullValidator::class,
114
			$factory->getComponentForType( 'kitten', 'validator' )
115
		);
116
117
		$this->assertNull(
118
			$factory->getComponentForType( 'kitten', 'validation-callback' )
119
		);
120
	}
121
122
	public function testRegisterType_parametersAreUsed() {
123
		$factory = ParamDefinitionFactory::newDefault();
124
125
		$factory->registerType(
126
			'kitten',
127
			[
128
				'string-parser' => 'KittenParser',
129
				'validation-callback' => 'is_int',
130
				'validator' => 'KittenValidator',
131
			]
132
		);
133
134
		$this->assertSame(
135
			'KittenParser',
136
			$factory->getComponentForType( 'kitten', 'string-parser' )
137
		);
138
139
		$this->assertSame(
140
			'KittenValidator',
141
			$factory->getComponentForType( 'kitten', 'validator' )
142
		);
143
144
		$this->assertSame(
145
			'is_int',
146
			$factory->getComponentForType( 'kitten', 'validation-callback' )
147
		);
148
	}
149
150
}
151