Skip to content

Commit 5c44bbb

Browse files
Criado mais testes unitários nas classes existentes
1 parent 50cddd1 commit 5c44bbb

6 files changed

Lines changed: 814 additions & 16 deletions

File tree

src/DependencyInjection/TraitRuleArray.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@
44

55
trait TraitRuleArray
66
{
7+
private function setArrayError(string $field, ?string $message, string $defaultMessage): void
8+
{
9+
$this->errors[$field] = !empty($message) ? $message : $defaultMessage;
10+
}
11+
712
protected function validateArray(string $field = '', mixed $value = null, ?string $message = ''): void
813
{
914
if (!is_array($value)) {
10-
$this->errors[$field] = !empty($message) ? $message : "A variável $field não é um array!";
15+
$this->setArrayError($field, $message, "A variável $field não é um array!");
1116
}
1217
}
1318

@@ -18,11 +23,9 @@ protected function validateArrayValues(
1823
?string $message = '',
1924
): void {
2025
$ruleArray = explode('-', $rule);
21-
22-
if (!in_array(trim($value), $ruleArray)) {
23-
$this->errors[$field] = !empty($message)
24-
? $message
25-
: "O campo $field precisa conter uma das opções [" . str_replace('-', ',', $rule) . '] !';
26+
if (!in_array(trim($value), $ruleArray, true)) {
27+
$options = str_replace('-', ',', $rule);
28+
$this->setArrayError($field, $message, "O campo $field precisa conter uma das opções [$options] !");
2629
}
2730
}
2831
}

tests/ArrayTest.php

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,130 @@ public function testCheckExistsIndexArrayRecursive(): void
132132
self::assertTrue(Arrays::checkExistIndexArrayRecursive($array, 'subcategoria1'));
133133
self::assertFalse(Arrays::checkExistIndexArrayRecursive($array, 'mercado'));
134134
}
135+
136+
public function testCheckExistsIndexArrayRecursiveWithNull(): void
137+
{
138+
self::assertFalse(Arrays::checkExistIndexArrayRecursive(null, 'key'));
139+
self::assertFalse(Arrays::checkExistIndexArrayRecursive(['key' => 'value'], null));
140+
self::assertFalse(Arrays::checkExistIndexArrayRecursive(null, null));
141+
}
142+
143+
public function testSearchKeyReturnsCorrectPosition(): void
144+
{
145+
self::assertSame(0, Arrays::searchKey($this->simpleArray, 'primeiro'));
146+
self::assertSame(1, Arrays::searchKey($this->simpleArray, 'segundo'));
147+
}
148+
149+
public function testRenameKeyPreservesOrder(): void
150+
{
151+
$array = ['a' => 1, 'b' => 2, 'c' => 3];
152+
Arrays::renameKey($array, 'b', 'novo_b');
153+
$keys = array_keys($array);
154+
self::assertSame(['a', 'novo_b', 'c'], $keys);
155+
self::assertSame(2, $array['novo_b']);
156+
}
157+
158+
public function testCheckExistIndexByValueInNestedArray(): void
159+
{
160+
self::assertTrue(Arrays::checkExistIndexByValue($this->fruitArray, 'Maçã'));
161+
self::assertTrue(Arrays::checkExistIndexByValue($this->fruitArray, 'Acelga'));
162+
self::assertFalse(Arrays::checkExistIndexByValue($this->fruitArray, 'Banana'));
163+
}
164+
165+
public function testFindValueByKeyCaseInsensitive(): void
166+
{
167+
$result = Arrays::findValueByKey($this->fruitArray, 'FRUTA_1');
168+
self::assertNotEmpty($result);
169+
}
170+
171+
public function testFindValueByKeyNested(): void
172+
{
173+
$result = Arrays::findValueByKey($this->fruitArray, 'verdura_1');
174+
self::assertArrayHasKey('verduras', $result);
175+
}
176+
177+
public function testFindValueByKeyNotFound(): void
178+
{
179+
$result = Arrays::findValueByKey($this->fruitArray, 'nao_existe');
180+
self::assertEmpty($result);
181+
}
182+
183+
public function testFindIndexByValueWithInt(): void
184+
{
185+
$array = ['a' => 1, 'b' => 2, 'nested' => ['c' => 3]];
186+
$result = Arrays::findIndexByValue($array, 2);
187+
self::assertArrayHasKey('b', $result);
188+
self::assertSame(2, $result['b']);
189+
}
190+
191+
public function testFindIndexByValueWithBool(): void
192+
{
193+
$array = ['ativo' => true, 'inativo' => false];
194+
$result = Arrays::findIndexByValue($array, true);
195+
self::assertArrayHasKey('ativo', $result);
196+
}
197+
198+
public function testFindIndexByValueNested(): void
199+
{
200+
$array = ['nivel1' => ['nivel2' => ['chave' => 'valor_buscado']]];
201+
$result = Arrays::findIndexByValue($array, 'valor_buscado');
202+
self::assertNotEmpty($result);
203+
self::assertArrayHasKey('nivel1', $result);
204+
}
205+
206+
public function testFindIndexByValueNotFound(): void
207+
{
208+
$result = Arrays::findIndexByValue($this->fruitArray, 'nao_existe');
209+
self::assertEmpty($result);
210+
}
211+
212+
public function testConvertArrayToXmlWithAttrKey(): void
213+
{
214+
$array = [
215+
['@attr' => 'item', 'nome' => 'Produto 1'],
216+
['@attr' => 'item', 'nome' => 'Produto 2'],
217+
];
218+
$xml = new SimpleXMLElement('<root/>');
219+
Arrays::convertArrayToXml($array, $xml);
220+
$xmlString = $xml->asXML();
221+
self::assertIsString($xmlString);
222+
self::assertTrue($this->isValidXml($xmlString));
223+
self::assertStringContainsString('<item>', $xmlString);
224+
}
225+
226+
public function testConvertArrayToXmlWithSpecialChars(): void
227+
{
228+
$array = ['texto' => 'Valor com <tag> & "aspas"'];
229+
$xml = new SimpleXMLElement('<root/>');
230+
Arrays::convertArrayToXml($array, $xml);
231+
$xmlString = $xml->asXML();
232+
self::assertIsString($xmlString);
233+
self::assertTrue($this->isValidXml($xmlString));
234+
}
235+
236+
public function testConvertJsonIndexToArrayInvalidJson(): void
237+
{
238+
$array = ['campo' => 'texto normal não é json'];
239+
Arrays::convertJsonIndexToArray($array);
240+
self::assertSame('texto normal não é json', $array['campo']);
241+
}
242+
243+
public function testConvertJsonIndexToArrayEmptyString(): void
244+
{
245+
$array = ['campo' => ''];
246+
Arrays::convertJsonIndexToArray($array);
247+
self::assertSame('', $array['campo']);
248+
}
249+
250+
public function testConvertJsonIndexToArrayNestedJson(): void
251+
{
252+
$array = [
253+
'nivel1' => [
254+
'dados' => '{"chave": "valor"}',
255+
],
256+
];
257+
Arrays::convertJsonIndexToArray($array);
258+
self::assertIsArray($array['nivel1']['dados']);
259+
self::assertSame('valor', $array['nivel1']['dados']['chave']);
260+
}
135261
}

tests/CompareTest.php

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,110 @@ public function testCompareStringFrom(): void
9393
'Erro ao executar a função compareStringFrom!',
9494
);
9595
}
96+
97+
public function testDaysDifferenceBetweenDataAmericanFormat(): void
98+
{
99+
self::assertEquals('+10', Compare::daysDifferenceBetweenData('2020-10-01', '2020-10-11'));
100+
self::assertEquals('-5', Compare::daysDifferenceBetweenData('2020-10-10', '2020-10-05'));
101+
}
102+
103+
public function testDaysDifferenceBetweenDataSameDay(): void
104+
{
105+
self::assertEquals('+0', Compare::daysDifferenceBetweenData('15/10/2020', '15/10/2020'));
106+
}
107+
108+
public function testStartDateLessThanEndEmptyStrings(): void
109+
{
110+
self::assertFalse(Compare::startDateLessThanEnd('', '24/10/2020'));
111+
self::assertFalse(Compare::startDateLessThanEnd('27/11/2020', ''));
112+
self::assertFalse(Compare::startDateLessThanEnd('', ''));
113+
}
114+
115+
public function testStartHourLessThanEndEqual(): void
116+
{
117+
self::assertNull(Compare::startHourLessThanEnd('10:00:00', '10:00:00', 'Erro'));
118+
}
119+
120+
public function testStartHourLessThanEndEmptySecondHour(): void
121+
{
122+
$msgVazio = 'Um ou mais campos horas não foram preenchidos!';
123+
self::assertEquals($msgVazio, Compare::startHourLessThanEnd('10:00:00', '', $msgVazio));
124+
}
125+
126+
public function testCalculateAgeInYearsAmericanFormat(): void
127+
{
128+
$age = Compare::calculateAgeInYears('1989-04-17');
129+
self::assertSame(36, $age);
130+
}
131+
132+
public function testDifferenceBetweenHoursZero(): void
133+
{
134+
self::assertEquals('00:00:00', Compare::differenceBetweenHours('10:00:00', '10:00:00'));
135+
}
136+
137+
public function testDifferenceBetweenHoursPositive(): void
138+
{
139+
self::assertEquals('02:30:00', Compare::differenceBetweenHours('08:00:00', '10:30:00'));
140+
}
141+
142+
public function testCheckDataEqualitySameCaseSensitive(): void
143+
{
144+
self::assertTrue(Compare::checkDataEquality('Teste', 'Teste'));
145+
self::assertTrue(Compare::checkDataEquality('', ''));
146+
}
147+
148+
public function testContainsAtBeginning(): void
149+
{
150+
self::assertTrue(Compare::contains('Açafrão', 'Aça'));
151+
}
152+
153+
public function testContainsAtEnd(): void
154+
{
155+
self::assertTrue(Compare::contains('Açafrão', 'rão'));
156+
}
157+
158+
public function testContainsEmptySearch(): void
159+
{
160+
self::assertTrue(Compare::contains('Açafrão', ''));
161+
}
162+
163+
public function testContainsEmptyValue(): void
164+
{
165+
self::assertFalse(Compare::contains('', 'teste'));
166+
}
167+
168+
public function testCompareStringFromExactMatch(): void
169+
{
170+
self::assertTrue(Compare::compareStringFrom('sistema', 'sistema', 0, 7));
171+
}
172+
173+
public function testCompareStringFromMiddlePosition(): void
174+
{
175+
self::assertTrue(Compare::compareStringFrom('teste', 'um_teste_aqui', 3, 5));
176+
}
177+
178+
public function testCompareStringFromNoMatch(): void
179+
{
180+
self::assertFalse(Compare::compareStringFrom('xyz', 'abcdef', 0, 3));
181+
}
182+
183+
public function testBeginUrlWithExactMatch(): void
184+
{
185+
self::assertTrue(Compare::beginUrlWith('/teste', '/teste'));
186+
}
187+
188+
public function testBeginUrlWithCaseInsensitive(): void
189+
{
190+
self::assertTrue(Compare::beginUrlWith('/TESTE', '/teste/variavel'));
191+
}
192+
193+
public function testFinishUrlWithExactMatch(): void
194+
{
195+
self::assertTrue(Compare::finishUrlWith('/teste', '/teste'));
196+
}
197+
198+
public function testFinishUrlWithCaseInsensitive(): void
199+
{
200+
self::assertTrue(Compare::finishUrlWith('/TESTE', 'sistema/teste'));
201+
}
96202
}

0 commit comments

Comments
 (0)