4
4
5
5
use DateTimeImmutable ;
6
6
use DateTimeInterface ;
7
+ use Nuxtifyts \PhpDto \Attributes \Property \CipherTarget ;
7
8
use Nuxtifyts \PhpDto \Attributes \Property \Computed ;
8
9
use Nuxtifyts \PhpDto \Data ;
10
+ use Nuxtifyts \PhpDto \Exceptions \DataCreationException ;
9
11
use Nuxtifyts \PhpDto \Exceptions \DeserializeException ;
10
12
use Nuxtifyts \PhpDto \Exceptions \SerializeException ;
11
13
use Nuxtifyts \PhpDto \Pipelines \DeserializePipeline \DeserializePipeline ;
21
23
use Nuxtifyts \PhpDto \Tests \Dummies \ComputedPropertiesData ;
22
24
use Nuxtifyts \PhpDto \Tests \Dummies \CoordinatesData ;
23
25
use Nuxtifyts \PhpDto \Tests \Dummies \CountryData ;
26
+ use Nuxtifyts \PhpDto \Tests \Dummies \DataCiphers \UselessDataCipher ;
24
27
use Nuxtifyts \PhpDto \Tests \Dummies \Enums \YesNoBackedEnum ;
25
28
use Nuxtifyts \PhpDto \Tests \Dummies \FallbackResolvers \DummyPointsFallbackResolver ;
26
29
use Nuxtifyts \PhpDto \Tests \Dummies \InvitationData ;
54
57
#[CoversClass(DateTimeSerializer::class)]
55
58
#[CoversClass(DataSerializer::class)]
56
59
#[CoversClass(BackedEnumSerializer::class)]
60
+ #[CoversClass(DataCreationException::class)]
57
61
#[UsesClass(PersonData::class)]
58
62
#[UsesClass(UnionTypedData::class)]
59
63
#[UsesClass(YesOrNoData::class)]
70
74
#[UsesClass(PointGroupData::class)]
71
75
#[UsesClass(PointData::class)]
72
76
#[UsesClass(DummyPointsFallbackResolver::class)]
77
+ #[UsesClass(UselessDataCipher::class)]
73
78
final class BaseDataTest extends UnitCase
74
79
{
75
80
/**
@@ -591,6 +596,29 @@ public static function will_perform_serialization_and_deserialization_data_provi
591
596
];
592
597
}
593
598
599
+ #[Test]
600
+ public function will_throw_an_exception_when_property_serialization_fails (): void
601
+ {
602
+ $ object = new readonly class ('secret ' ) extends Data {
603
+ public function __construct (
604
+ #[CipherTarget(UselessDataCipher::class)]
605
+ public string $ secret
606
+ ) {
607
+ }
608
+ };
609
+
610
+ self ::expectException (SerializeException::class);
611
+ $ object ->jsonSerialize ();
612
+ }
613
+
614
+ #[Test]
615
+ public function will_throw_an_exception_when_invalid_data_is_passed_to_create_function (): void
616
+ {
617
+ self ::expectException (DataCreationException::class);
618
+
619
+ PointData::create ('{"x: 1, "y": 2} ' );
620
+ }
621
+
594
622
/**
595
623
* @throws Throwable
596
624
*/
@@ -606,6 +634,12 @@ public function will_be_able_to_create_an_instance_using_create(): void
606
634
self ::assertEquals (1 , $ point ->x );
607
635
self ::assertEquals (2 , $ point ->y );
608
636
637
+ $ point = PointData::create ('{"x": 3, "y": 4} ' );
638
+
639
+ self ::assertInstanceOf (PointData::class, $ point );
640
+ self ::assertEquals (3 , $ point ->x );
641
+ self ::assertEquals (4 , $ point ->y );
642
+
609
643
// Make sure we skip deciphering the key
610
644
$ pointGroup = PointGroupData::create (
611
645
key: 'random-key '
0 commit comments