File tree Expand file tree Collapse file tree 3 files changed +91
-0
lines changed
Expand file tree Collapse file tree 3 files changed +91
-0
lines changed Original file line number Diff line number Diff line change 2323 "php" : " ^7.4" ,
2424 "ext-dom" : " *" ,
2525 "phpunit/phpunit" : " ^8.3" ,
26+ "symfony/property-access" : " ^4.0|^5.0" ,
27+ "symfony/serializer" : " ^4.0|^5.0" ,
2628 "symfony/yaml" : " ^4.0|^5.0"
2729 },
2830 "autoload" : {
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Spatie \Snapshots \Drivers ;
4+
5+ use PHPUnit \Framework \Assert ;
6+ use Spatie \Snapshots \Driver ;
7+ use Symfony \Component \Serializer \Encoder \JsonEncode ;
8+ use Symfony \Component \Serializer \Encoder \JsonEncoder ;
9+ use Symfony \Component \Serializer \Normalizer \DateTimeNormalizer ;
10+ use Symfony \Component \Serializer \Normalizer \ObjectNormalizer ;
11+ use Symfony \Component \Serializer \Serializer ;
12+
13+ class ObjectDriver implements Driver
14+ {
15+ public function serialize ($ data ): string
16+ {
17+ $ normalizers = [
18+ new DateTimeNormalizer (),
19+ new ObjectNormalizer (),
20+ ];
21+
22+ $ encoders = [
23+ new JsonEncoder (),
24+ ];
25+
26+ $ serializer = new Serializer ($ normalizers , $ encoders );
27+
28+ return $ serializer ->serialize ($ data , 'json ' , [
29+ JsonEncode::OPTIONS => JSON_PRETTY_PRINT ,
30+ ]);
31+ }
32+
33+ public function extension (): string
34+ {
35+ return 'json ' ;
36+ }
37+
38+ public function match ($ expected , $ actual )
39+ {
40+ Assert::assertJsonStringEqualsJsonString ($ expected , $ this ->serialize ($ actual ));
41+ }
42+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Spatie \Snapshots \Test \Unit \Drivers ;
4+
5+ use PHPUnit \Framework \TestCase ;
6+ use Spatie \Snapshots \Drivers \ObjectDriver ;
7+
8+ class ObjectDriverTest extends TestCase
9+ {
10+ /** @test */
11+ public function it_can_serialize_an_object ()
12+ {
13+ $ driver = new ObjectDriver ();
14+
15+ $ expected = <<<JSON
16+ {
17+ "name": "My name",
18+ "valid": true,
19+ "dateTime": "2020-01-01T15:00:00+01:00",
20+ "public": "public"
21+ }
22+ JSON ;
23+
24+ $ this ->assertEquals ($ expected , $ driver ->serialize (new Obj ()));
25+ }
26+ }
27+
28+ class Obj
29+ {
30+ private $ private = 'private ' ;
31+ public $ public = 'public ' ;
32+
33+ public function getName ()
34+ {
35+ return 'My name ' ;
36+ }
37+
38+ public function isValid ()
39+ {
40+ return true ;
41+ }
42+
43+ public function getDateTime ()
44+ {
45+ return new \DateTimeImmutable ('2020-01-01 15:00:00+01:00 ' );
46+ }
47+ }
You can’t perform that action at this time.
0 commit comments