/**
  *
  */
 public function setUp()
 {
     $this->serializer = new JsonApiSerializer(new JsonApiTransformer(new Mapper(HelperMapping::complex())));
     $this->resource = new CreateResource($this->serializer);
     $this->data = ['type' => 'post', 'attributes' => ['title' => 'My first blog post', 'content' => 'Ever heard of Lorem Ipsum?', 'author' => 1, 'comments' => []]];
     $this->callable = function (array $data, array $values, ErrorBag $errorBag) {
         $user = new User(new UserId(1), 'Post Author');
         $id = !empty($data['id']) ? $data['id'] : 1;
         return new Post(new PostId($id), $values['title'], $values['content'], $user, []);
     };
 }
 /**
  *
  */
 public function setUp()
 {
     $this->serializer = new JsonApiSerializer(new JsonApiTransformer(new Mapper(HelperMapping::complex())));
     $this->fields = new Fields();
     $this->included = new Included();
     $this->resource = new GetResource($this->serializer, $this->fields, $this->included);
     $this->findOneCallable = function () {
         $user = new User(new UserId(1), 'Post Author');
         return new Post(new PostId(10), 'Old title', 'Old content', $user, []);
     };
 }
 /**
  *
  */
 public function setUp()
 {
     $this->serializer = new JsonApiSerializer(new JsonApiTransformer(new Mapper(HelperMapping::complex())));
     $this->resource = new DeleteResource($this->serializer);
     $this->findOneCallable = function () {
         $user = new User(new UserId(1), 'Post Author');
         return new Post(new PostId(10), 'Old title', 'Old content', $user, []);
     };
     $this->deleteCallable = function () {
     };
 }
 /**
  *
  */
 public function setUp()
 {
     $this->included = new Included();
     $this->included->add('post.user_comment');
     //will cause error
     $this->fields = new Fields();
     $this->fields->addField('post', 'title');
     $this->fields->addField('blog', 'post');
     //will cause error
     $mappings = HelperMapping::complex();
     $this->serializer = new JsonApiSerializer(new JsonApiTransformer(new Mapper($mappings)));
 }
 /**
  *
  */
 public function setUp()
 {
     $this->serializer = new JsonApiSerializer(new JsonApiTransformer(new Mapper(HelperMapping::complex())));
     $this->resource = new PutResource($this->serializer);
     $this->data = ['type' => 'post', 'id' => 10, 'attributes' => ['title' => 'My first blog post', 'content' => 'Ever heard of Lorem Ipsum?', 'author' => 1, 'comments' => []]];
     $this->findOneCallable = function () {
         $user = new User(new UserId(1), 'Post Author');
         return new Post(new PostId(10), 'Old title', 'Old Content', $user, []);
     };
     $this->updateCallable = function (Post $post, array $values, ErrorBag $errorBag) {
         $post->setTitle($values['title']);
         $post->setContent($values['content']);
         return $post;
     };
 }
 /**
  *
  */
 public function setUp()
 {
     $this->serializer = new JsonApiSerializer(new JsonApiTransformer(new Mapper(HelperMapping::complex())));
     $this->page = new Page(1, null, null, null, 10);
     $this->fields = new Fields();
     $this->sorting = new Sorting();
     $this->included = new Included();
     $this->resource = new ListResource($this->serializer, $this->page, $this->fields, $this->sorting, $this->included, $this->filters);
     $this->totalAmountCallable = function () {
         return 2015;
     };
     $this->resultsCallable = function () {
         $results = [];
         for ($i = 1; $i <= 10; ++$i) {
             $results[] = HelperFactory::complexPost();
         }
         return $results;
     };
 }
 public function setUp()
 {
     $this->errorBag = new ErrorBag([]);
     $this->serializer = new JsonApiSerializer(new JsonApiTransformer(new Mapper(HelperMapping::complex())));
 }
    /**
     *
     */
    public function testItWillSerializeToJsonApiAComplexObjectAndFilterFields()
    {
        $mappings = HelperMapping::complex();
        $mapper = new Mapper($mappings);
        $expected = <<<JSON
{
   "data":{
      "type":"post",
      "id":"9",
      "attributes":{
         "title":"Hello World"
      },
      "links":{
         "self":{
            "href":"http://example.com/posts/9"
         },
         "comments":{
            "href":"http://example.com/posts/9/comments"
         }
      }
   },
   "links":{
      "self":{
         "href":"http://example.com/posts/9"
      },
      "first":{
         "href":"http://example.com/posts/1"
      },
      "next":{
         "href":"http://example.com/posts/10"
      },
      "comments":{
         "href":"http://example.com/posts/9/comments"
      }
   },
   "meta":{
      "author":{
         "name":"Nil Portugués Calderó",
         "email":"*****@*****.**"
      },
      "is_devel":true
   },
   "jsonapi":{
      "version":"1.0"
   }
}
JSON;
        $post = HelperFactory::complexPost();
        $transformer = new JsonApiTransformer($mapper);
        $transformer->setMeta(['author' => ['name' => 'Nil Portugués Calderó', 'email' => '*****@*****.**']]);
        $transformer->addMeta('is_devel', true);
        $transformer->setSelfUrl('http://example.com/posts/9');
        $transformer->setFirstUrl('http://example.com/posts/1');
        $transformer->setNextUrl('http://example.com/posts/10');
        $fields = new Fields();
        $fields->addField('post', 'title');
        $this->assertEquals(\json_decode($expected, true), \json_decode((new JsonApiSerializer($transformer))->serialize($post, $fields), true));
    }