Completed
Push — master ( 5b92bc...3eff9f )
by Jeroen De
02:33
created

ParamDefinitionFactoryTest   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 131
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 3
dl 0
loc 131
rs 10
c 0
b 0
f 0

10 Methods

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