ILIAS  release_8 Revision v8.24
ResultTest.php
Go to the documentation of this file.
1<?php
2
3declare(strict_types=1);
4
5/* Copyright (c) 2017 Stefan Hecken <stefan.hecken@concepts-and-training.de> Extended GPL, see docs/LICENSE */
6
7require_once("libs/composer/vendor/autoload.php");
8
9use ILIAS\Data;
10use PHPUnit\Framework\TestCase;
11
17class ResultTest extends TestCase
18{
19 private ?Data\Factory $f;
20
21 protected function setUp(): void
22 {
23 $this->f = new Data\Factory();
24 }
25
26 protected function tearDown(): void
27 {
28 $this->f = null;
29 }
30
31 public function testValue(): void
32 {
33 $result = $this->f->ok(3.154);
34 $this->assertEquals(3.154, $result->value());
35 }
36
37 public function testNoValue(): void
38 {
39 $result = $this->f->error("Something went wrong");
40
41 try {
42 $result->value();
43 $raised = false;
44 } catch (Exception $e) {
45 $raised = true;
46 }
47
48 $this->assertTrue($raised);
49 }
50
51 public function testIsOk(): void
52 {
53 $result = $this->f->ok(3.154);
54 $this->assertTrue($result->isOk());
55 $this->assertFalse($result->isError());
56 }
57
58 public function testError(): void
59 {
60 $result = $this->f->error("Something went wrong");
61 $this->assertEquals("Something went wrong", $result->error());
62 }
63
64 public function testNoError(): void
65 {
66 $result = $this->f->ok(3.154);
67
68 try {
69 $result->error();
70 $raised = false;
71 } catch (LogicException $e) {
72 $raised = true;
73 }
74
75 $this->assertTrue($raised);
76 }
77
78 public function testIsError(): void
79 {
80 $result = $this->f->error("Something went wrong");
81 $this->assertTrue($result->isError());
82 $this->assertFalse($result->isOk());
83 }
84
85 public function testValueOr(): void
86 {
87 $result = $this->f->ok(3.154);
88 $this->assertEquals(3.154, $result->valueOr(5));
89 }
90
91 public function testValueOrDefault(): void
92 {
93 $result = $this->f->error("Something went wrong");
94 $this->assertEquals(5, $result->valueOr(5));
95 }
96
97 public function testMapOk(): void
98 {
99 $result = $this->f->ok(3);
100 $multiplicator = 3;
101 $new_result = $result->map(function ($v) use ($multiplicator) {
102 return $v * $multiplicator;
103 });
104
105 $this->assertInstanceOf(Data\Result::class, $new_result);
106 $this->assertNotEquals($result, $new_result);
107 $this->assertEquals(9, $new_result->value());
108 }
109
110 public function testMapError(): void
111 {
112 $result = $this->f->error("Something went wrong");
113 $multiplicator = 3;
114 $new_result = $result->map(function ($v) use ($multiplicator) {
115 return $v * $multiplicator;
116 });
117
118 $this->assertEquals($result, $new_result);
119 }
120
121 public function testThenOk(): void
122 {
123 $result = $this->f->ok(3);
124 $multiplicator = 3;
125 $new_result = $result->then(function ($v) use ($multiplicator) {
126 return $this->f->ok(($v * $multiplicator));
127 });
128
129 $this->assertInstanceOf(Data\Result::class, $new_result);
130 $this->assertNotEquals($result, $new_result);
131 $this->assertEquals(9, $new_result->value());
132 }
133
134 public function testThenCallableNull(): void
135 {
136 $result = $this->f->ok(3);
137 $new_result = $result->then(function ($v) {
138 return null;
139 });
140
141 $this->assertInstanceOf(Data\Result::class, $new_result);
142 $this->assertEquals($result, $new_result);
143 }
144
145 public function testThenError(): void
146 {
147 $result = $this->f->error("Something went wrong");
148 $multiplicator = 3;
149 $new_result = $result->then(function ($v) use ($multiplicator) {
150 return $this->f->ok(($v * $multiplicator));
151 });
152
153 $this->assertInstanceOf(Data\Result::class, $new_result);
154 $this->assertEquals($result, $new_result);
155 }
156
157 public function testThenNoResult(): void
158 {
159 $result = $this->f->ok(3);
160
161 try {
162 $new_result = $result->then(function ($v) {
163 return 4;
164 });
165
166 $raised = false;
167 } catch (UnexpectedValueException $e) {
168 $raised = true;
169 }
170
171 $this->assertTrue($raised);
172 }
173
174 public function testExceptError(): void
175 {
176 $result = $this->f->error("Something went wrong");
177 $exception = "Something else went wrong";
178
179 $new_result = $result->except(function ($v) use ($exception) {
180 return $this->f->error($exception);
181 });
182
183 $this->assertInstanceOf(Data\Result::class, $new_result);
184 $this->assertNotEquals($result, $new_result);
185 $this->assertEquals("Something else went wrong", $new_result->error());
186 }
187
188 public function testExceptCallableNull(): void
189 {
190 $result = $this->f->error("Something went wrong");
191 $exception = "Something else went wrong";
192
193 $new_result = $result->except(function ($v) {
194 return null;
195 });
196
197 $this->assertInstanceOf(Data\Result::class, $new_result);
198 $this->assertEquals($result, $new_result);
199 }
200
201 public function testExceptOk(): void
202 {
203 $result = $this->f->ok(3);
204 $exception = "Something else went wrong";
205
206 $new_result = $result->except(function ($v) use ($exception) {
207 return $this->f->error($exception);
208 });
209
210 $this->assertInstanceOf(Data\Result::class, $new_result);
211 $this->assertEquals($result, $new_result);
212 }
213
214 public function testExceptNoResult(): void
215 {
216 $result = $this->f->error("Something went wrong");
217
218 try {
219 $new_result = $result->except(function ($v) {
220 return "New error text";
221 });
222
223 $raised = false;
224 } catch (UnexpectedValueException $e) {
225 $raised = true;
226 }
227
228 $this->assertTrue($raised);
229 }
230}
Builds data types.
Definition: Factory.php:21
Tests working with result object.
Definition: ResultTest.php:18
testThenNoResult()
Definition: ResultTest.php:157
testExceptNoResult()
Definition: ResultTest.php:214
testExceptCallableNull()
Definition: ResultTest.php:188
testValueOrDefault()
Definition: ResultTest.php:91
testThenCallableNull()
Definition: ResultTest.php:134
Data Factory $f
Definition: ResultTest.php:19