Completed
Push — master ( ef46bd...45441d )
by Jeroen De
02:58
created

testNewDefinitionsFromArrays_nameFieldTakesPriorityOverKey()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

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