44
55namespace Edudobay \DoctrineSerializable \Tests ;
66
7+ use Edudobay \DoctrineSerializable \Examples \SerializerFactory ;
78use Edudobay \DoctrineSerializable \Psr6CacheClassMetadataFactory ;
89use Edudobay \DoctrineSerializable \ReflectionClassMetadataFactory ;
10+ use Edudobay \DoctrineSerializable \SerializationHandler ;
911use PHPUnit \Framework \TestCase ;
1012use Symfony \Component \Cache \Adapter \ArrayAdapter ;
13+ use Symfony \Component \Cache \Adapter \FilesystemAdapter ;
1114
1215class Psr6CacheClassMetadataFactoryTest extends TestCase
1316{
14-
1517 public function test_cache_passes_through ()
1618 {
1719 $ factorySpy = new ClassMetadataFactorySpy (new ReflectionClassMetadataFactory ());
18- // TODO: Reflection objects cannot be cached. Can we cache anything useful?
1920 $ factory = new Psr6CacheClassMetadataFactory (new ArrayAdapter (storeSerialized: false ), $ factorySpy );
2021
2122 $ metadata = $ factory ->getClassMetadata (Entities \EntityOne::class);
@@ -29,4 +30,47 @@ public function test_cache_passes_through()
2930 $ factory ->getClassMetadata (Entities \EntityOne::class);
3031 self ::assertSame (1 , $ factorySpy ->timesCalled );
3132 }
33+
34+ public function pre_test_store_serialized_metadata ()
35+ {
36+ $ cache = new FilesystemAdapter (directory: __DIR__ . '/cache ' );
37+ $ factorySpy = new ClassMetadataFactorySpy (new ReflectionClassMetadataFactory ());
38+ $ factory = new Psr6CacheClassMetadataFactory ($ cache , $ factorySpy );
39+
40+ $ metadata = $ factory ->getClassMetadata (Entities \EntityThree::class);
41+
42+ $ this ->fail ('This is not a test — it just prepares the cache. ' );
43+ }
44+
45+ public function test_get_serialized_metadata ()
46+ {
47+ $ cache = new FilesystemAdapter (directory: __DIR__ . '/cache ' );
48+ $ factorySpy = new ClassMetadataFactorySpy (new ReflectionClassMetadataFactory ());
49+ $ factory = new Psr6CacheClassMetadataFactory ($ cache , $ factorySpy );
50+
51+ $ metadata = $ factory ->getClassMetadata (Entities \EntityThree::class);
52+
53+ self ::assertSame (0 , $ factorySpy ->timesCalled );
54+ }
55+
56+ public function test_can_serialize_to_private_backing_property (): void
57+ {
58+ $ cache = new FilesystemAdapter (directory: __DIR__ . '/cache ' );
59+ $ factorySpy = new ClassMetadataFactorySpy (new ReflectionClassMetadataFactory ());
60+ $ factory = new Psr6CacheClassMetadataFactory ($ cache , $ factorySpy );
61+
62+ $ handler = new SerializationHandler (SerializerFactory::serializer (), $ factory );
63+
64+ $ user = new Entities \User ('ruth@example.com ' , 'Ruth Davis ' );
65+ $ e = new Entities \EntityThree (user: $ user );
66+ $ handler ->serialize ($ e );
67+
68+ $ e ->user = new Entities \User ('dummy@user.com ' , 'Should Be Overwritten ' );
69+ $ handler ->deserialize ($ e );
70+
71+ self ::assertSame ('Ruth Davis ' , $ e ->user ->fullName );
72+
73+ self ::assertSame (0 , $ factorySpy ->timesCalled );
74+ }
75+
3276}
0 commit comments