From d758761f05365a035c67b50e38174be529e6b158 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Sun, 12 Nov 2023 12:43:29 -0500 Subject: [PATCH] finalize the serializing example --- t/example.t | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 86 insertions(+), 2 deletions(-) diff --git a/t/example.t b/t/example.t index 0332e6b..1bebd67 100644 --- a/t/example.t +++ b/t/example.t @@ -64,6 +64,7 @@ $registry->add_type( relationships => { 'tags' => { type => 'tag' }, 'comments' => { type => 'comment' }, + photos => { type => 'photo' }, author => { type => "people", links => sub ( $data, @ ) { @@ -80,16 +81,24 @@ $registry->add_type( ); $registry->add_type('tag'); +$registry->add_type('photo'); $registry->add_type( 'comment', { id => '_id', allowed_attributes => ['body'] } ); $registry->add_type( 'people', - { links => sub ( $data, @ ) { '/peoples/' . $data->{id} } + { links => sub ( $data, @ ) { +{ self => '/peoples/' . $data->{id} } } } ); my $output = $registry->serialize( 'article', $data, { count => 2 } ); +like $output->{data}[0]{relationships}{author}, + { links => { + "self" => "/articles/1/relationships/author", + "related" => "/articles/1/author" + } + }; + like $output->{data}[0]{relationships}{author}, { links => { "self" => "/articles/1/relationships/author", @@ -113,6 +122,16 @@ like $output => { "created" => "2015-05-22T14:56:29.000Z" }, "relationships" => { + "author" => { + "data" => { + "type" => "people", + "id" => "1" + }, + "links" => { + "self" => "/articles/1/relationships/author", + "related" => "/articles/1/author" + } + }, "tags" => { "data" => [ { "type" => "tag", @@ -123,9 +142,74 @@ like $output => { } ] }, - } + "photos" => { + "data" => [ + { "type" => "photo", + "id" => "ed70cf44-9a34-4878-84e6-0c0e4a450cfe" + }, + { "type" => "photo", + "id" => "24ba3666-a593-498c-9f5d-55a4ee08c72e" + }, + { "type" => "photo", + "id" => "f386492d-df61-4573-b4e3-54f6f5d08acf" + } + ] + }, + "comments" => { + "data" => [ + { "type" => "comment", + "id" => "1" + }, + { "type" => "comment", + "id" => "2" + }, + { "type" => "comment", + "id" => "3" + } + ] + } + }, + "links" => { "self" => "/articles/1" } } ], }; +is $output->{included}, bag { + item($_) + for ( + { "type" => "people", + "id" => "1", + "attributes" => { + "firstName" => "Kaley", + "lastName" => "Maggio", + "email" => "Kaley-Maggio\@example.com", + "age" => "80", + "gender" => "male" + }, + "links" => { "self" => "/peoples/1" }, + }, + { "type" => "comment", + "id" => "1", + "attributes" => { "body" => "First !" } + }, + { "type" => "comment", + "id" => "2", + "attributes" => { "body" => "I Like !" } + }, + { "type" => "comment", + "id" => "3", + "attributes" => { "body" => "Awesome" } + } + ); +}; + +subtest 'comments only have the body attribute' => sub { + for + my $comment ( grep { $_->{type} eq 'comment' } $output->{included}->@* ) + { + my @attr = keys $comment->{attributes}->%*; + is( \@attr => ['body'], "only the body for comments" ); + } +}; + done_testing;