Skip to content

Commit 173e88b

Browse files
committed
Bringing more test coverage for attributes
1 parent 25eb6a5 commit 173e88b

File tree

4 files changed

+171
-0
lines changed

4 files changed

+171
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
namespace Nuxtifyts\PhpDto\Tests\Unit\Attributes;
4+
5+
use Nuxtifyts\PhpDto\Attributes\PropertyAttributes\ArrayOfBackedEnums;
6+
use Nuxtifyts\PhpDto\Tests\Dummies\Enums\YesNoEnum;
7+
use Nuxtifyts\PhpDto\Tests\Dummies\PersonData;
8+
use Nuxtifyts\PhpDto\Tests\Unit\UnitCase;
9+
use PHPUnit\Framework\Attributes\CoversClass;
10+
use PHPUnit\Framework\Attributes\Test;
11+
use InvalidArgumentException;
12+
13+
#[CoversClass(ArrayOfBackedEnums::class)]
14+
final class ArrayOfBackedEnumTest extends UnitCase
15+
{
16+
#[Test]
17+
public function will_not_allow_empty_backed_enum_classes_to_be_passed(): void
18+
{
19+
self::expectException(InvalidArgumentException::class);
20+
21+
new ArrayOfBackedEnums([]);
22+
}
23+
24+
#[Test]
25+
public function will_throw_an_exception_if_passed_class_is_not_backed_enum_class_or_interface(): void
26+
{
27+
self::expectException(InvalidArgumentException::class);
28+
29+
// @phpstan-ignore-next-line INTENTIONALLY PASSING A STRING TO TEST EXCEPTION
30+
new ArrayOfBackedEnums(PersonData::class);
31+
}
32+
33+
#[Test]
34+
public function wilL_throw_an_exception_if_class_does_not_even_exit(): void
35+
{
36+
self::expectException(InvalidArgumentException::class);
37+
38+
// @phpstan-ignore-next-line INTENTIONALLY PASSING A STRING TO TEST EXCEPTION
39+
new ArrayOfBackedEnums('NonExistentClass');
40+
}
41+
42+
#[Test]
43+
public function wiLL_throw_an_exception_if_a_non_backed_enum_class_is_passed(): void
44+
{
45+
self::expectException(InvalidArgumentException::class);
46+
47+
new ArrayOfBackedEnums([YesNoEnum::class]);
48+
}
49+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace Nuxtifyts\PhpDto\Tests\Unit\Attributes;
4+
5+
use Nuxtifyts\PhpDto\Attributes\PropertyAttributes\ArrayOfData;
6+
use Nuxtifyts\PhpDto\Tests\Dummies\Enums\YesNoEnum;
7+
use Nuxtifyts\PhpDto\Tests\Dummies\PersonData;
8+
use Nuxtifyts\PhpDto\Tests\Unit\UnitCase;
9+
use PHPUnit\Framework\Attributes\CoversClass;
10+
use PHPUnit\Framework\Attributes\Test;
11+
use InvalidArgumentException;
12+
13+
#[CoversClass(ArrayOfData::class)]
14+
final class ArrayOfDataTest extends UnitCase
15+
{
16+
#[Test]
17+
public function will_not_allow_empty_data_classes_to_be_passed(): void
18+
{
19+
self::expectException(InvalidArgumentException::class);
20+
21+
new ArrayOfData([]);
22+
}
23+
24+
#[Test]
25+
public function wilL_throw_an_exception_if_class_does_not_even_exit(): void
26+
{
27+
self::expectException(InvalidArgumentException::class);
28+
29+
// @phpstan-ignore-next-line INTENTIONALLY PASSING A STRING TO TEST EXCEPTION
30+
new ArrayOfData('NonExistentClass');
31+
}
32+
33+
#[Test]
34+
public function wiLL_throw_an_exception_if_a_non_data_class_is_passed(): void
35+
{
36+
self::expectException(InvalidArgumentException::class);
37+
38+
new ArrayOfData([YesNoEnum::class]);
39+
}
40+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace Nuxtifyts\PhpDto\Tests\Unit\Attributes;
4+
5+
use Nuxtifyts\PhpDto\Attributes\PropertyAttributes\ArrayOfDateTimes;
6+
use Nuxtifyts\PhpDto\Tests\Dummies\PersonData;
7+
use Nuxtifyts\PhpDto\Tests\Unit\UnitCase;
8+
use PHPUnit\Framework\Attributes\CoversClass;
9+
use PHPUnit\Framework\Attributes\Test;
10+
use InvalidArgumentException;
11+
12+
#[CoversClass(ArrayOfDateTimes::class)]
13+
final class ArrayOfDateTimesTest extends UnitCase
14+
{
15+
#[Test]
16+
public function will_not_allow_empty_date_time_classes_to_be_passed(): void
17+
{
18+
self::expectException(InvalidArgumentException::class);
19+
20+
new ArrayOfDateTimes([]);
21+
}
22+
23+
#[Test]
24+
public function will_throw_an_exception_if_passed_class_is_not_Datetime_class_or_interface(): void
25+
{
26+
self::expectException(InvalidArgumentException::class);
27+
28+
// @phpstan-ignore-next-line INTENTIONALLY PASSING A STRING TO TEST EXCEPTION
29+
new ArrayOfDateTimes(PersonData::class);
30+
}
31+
32+
#[Test]
33+
public function wilL_throw_an_exception_if_class_does_not_even_exit(): void
34+
{
35+
self::expectException(InvalidArgumentException::class);
36+
37+
// @phpstan-ignore-next-line INTENTIONALLY PASSING A STRING TO TEST EXCEPTION
38+
new ArrayOfDateTimes('NonExistentClass');
39+
}
40+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace Nuxtifyts\PhpDto\Tests\Unit\Attributes;
4+
5+
use Nuxtifyts\PhpDto\Attributes\PropertyAttributes\ArrayOfScalarTypes;
6+
use Nuxtifyts\PhpDto\Enums\Property\Type;
7+
use Nuxtifyts\PhpDto\Tests\Unit\UnitCase;
8+
use PHPUnit\Framework\Attributes\CoversClass;
9+
use PHPUnit\Framework\Attributes\Test;
10+
use InvalidArgumentException;
11+
12+
#[CoversClass(ArrayOfScalarTypes::class)]
13+
final class ArrayOfScalarTypeTest extends UnitCase
14+
{
15+
#[Test]
16+
public function will_default_to_all_scalar_types_if_no_type_is_specified(): void
17+
{
18+
$attribute = new ArrayOfScalarTypes();
19+
20+
self::assertEquals(Type::SCALAR_TYPES, $attribute->types);
21+
}
22+
23+
#[Test]
24+
public function will_accept_single_and_many_types(): void
25+
{
26+
$attribute = new ArrayOfScalarTypes(Type::INT);
27+
28+
self::assertEquals([Type::INT], $attribute->types);
29+
30+
$attribute = new ArrayOfScalarTypes([Type::INT, Type::FLOAT]);
31+
32+
self::assertEquals([Type::INT, Type::FLOAT], $attribute->types);
33+
}
34+
35+
#[Test]
36+
public function will_throw_invalid_argument_exception_if_invalid_type_is_passed(): void
37+
{
38+
self::expectException(InvalidArgumentException::class);
39+
40+
new ArrayOfScalarTypes(Type::DATA);
41+
}
42+
}

0 commit comments

Comments
 (0)