Code Duplication    Length = 125-125 lines in 2 locations

test/Serializer/JsonApiSerializerTest.php 2 locations

@@ 1943-2067 (lines=125) @@
1940
        $this->assertSame($expectedJson, $scope->toJson());
1941
    }
1942
1943
    public function testSerializingCollectionResourceWithPaginatorWithOmittedUnavailablePreviousLink()
1944
    {
1945
        $baseUrl = 'http://example.com';
1946
1947
        $this->manager->setSerializer(new JsonApiSerializer($baseUrl));
1948
1949
        $total = 10;
1950
        $count = 2;
1951
        $perPage = 2;
1952
        $currentPage = 1;
1953
        $lastPage = 5;
1954
        $currentUrl = 'http://example.com/books/?page=1';
1955
        $nextUrl = 'http://example.com/books/?page=2';
1956
        $lastUrl = 'http://example.com/books/?page=5';
1957
1958
        $paginator = Mockery::mock('League\Fractal\Pagination\PaginatorInterface');
1959
        $paginator->shouldReceive('getCurrentPage')->andReturn($currentPage);
1960
        $paginator->shouldReceive('getLastPage')->andReturn($lastPage);
1961
        $paginator->shouldReceive('getTotal')->andReturn($total);
1962
        $paginator->shouldReceive('getCount')->andReturn($count);
1963
        $paginator->shouldReceive('getPerPage')->andReturn($perPage);
1964
        $paginator->shouldReceive('getUrl')->with(1)->andReturn($currentUrl);
1965
        $paginator->shouldReceive('getUrl')->with(2)->andReturn($nextUrl);
1966
        $paginator->shouldReceive('getUrl')->with(5)->andReturn($lastUrl);
1967
1968
        $booksData = [
1969
            [
1970
                'id' => 1,
1971
                'title' => 'Foo',
1972
                'year' => '1991',
1973
                '_author' => [
1974
                    'id' => 1,
1975
                    'name' => 'Dave',
1976
                ],
1977
            ],
1978
            [
1979
                'id' => 2,
1980
                'title' => 'Bar',
1981
                'year' => '1997',
1982
                '_author' => [
1983
                    'id' => 2,
1984
                    'name' => 'Bob',
1985
                ],
1986
            ],
1987
        ];
1988
1989
        $resource = new Collection($booksData, new JsonApiBookTransformer(), 'books');
1990
        $resource->setPaginator($paginator);
1991
        $scope = new Scope($this->manager, $resource);
1992
1993
        $expected = [
1994
            'data' => [
1995
                [
1996
                    'type' => 'books',
1997
                    'id' => '1',
1998
                    'attributes' => [
1999
                        'title' => 'Foo',
2000
                        'year' => 1991,
2001
                    ],
2002
                    'links' => [
2003
                        'self' => 'http://example.com/books/1',
2004
                    ],
2005
                    'relationships' => [
2006
                        'author' => [
2007
                            'links' => [
2008
                                'self' => 'http://example.com/books/1/relationships/author',
2009
                                'related' => 'http://example.com/books/1/author',
2010
                            ],
2011
                        ],
2012
                        'co-author' => [
2013
                            'links' => [
2014
                                'self' => 'http://example.com/books/1/relationships/co-author',
2015
                                'related' => 'http://example.com/books/1/co-author'
2016
                            ],
2017
                        ],
2018
                    ],
2019
                ],
2020
                [
2021
                    'type' => 'books',
2022
                    'id' => '2',
2023
                    'attributes' => [
2024
                        'title' => 'Bar',
2025
                        'year' => 1997,
2026
                    ],
2027
                    'links' => [
2028
                        'self' => 'http://example.com/books/2',
2029
                    ],
2030
                    'relationships' => [
2031
                        'author' => [
2032
                            'links' => [
2033
                                'self' => 'http://example.com/books/2/relationships/author',
2034
                                'related' => 'http://example.com/books/2/author',
2035
                            ],
2036
                        ],
2037
                        'co-author' => [
2038
                            'links' => [
2039
                                'self' => 'http://example.com/books/2/relationships/co-author',
2040
                                'related' => 'http://example.com/books/2/co-author'
2041
                            ],
2042
                        ],
2043
                    ],
2044
                ],
2045
            ],
2046
            'meta' => [
2047
                'pagination' => [
2048
                    'total' =>  10,
2049
                    'count' => 2,
2050
                    'per_page' => 2,
2051
                    'current_page' => 1,
2052
                    'total_pages' => 5
2053
                ]
2054
            ],
2055
            'links' => [
2056
                'self' => 'http://example.com/books/?page=1',
2057
                'first' => 'http://example.com/books/?page=1',
2058
                'next' => 'http://example.com/books/?page=2',
2059
                'last' => 'http://example.com/books/?page=5'
2060
            ]
2061
        ];
2062
2063
        $this->assertSame($expected, $scope->toArray());
2064
2065
        $expectedJson = '{"data":[{"type":"books","id":"1","attributes":{"title":"Foo","year":1991},"links":{"self":"http:\/\/example.com\/books\/1"},"relationships":{"author":{"links":{"self":"http:\/\/example.com\/books\/1\/relationships\/author","related":"http:\/\/example.com\/books\/1\/author"}},"co-author":{"links":{"self":"http:\/\/example.com\/books\/1\/relationships\/co-author","related":"http:\/\/example.com\/books\/1\/co-author"}}}},{"type":"books","id":"2","attributes":{"title":"Bar","year":1997},"links":{"self":"http:\/\/example.com\/books\/2"},"relationships":{"author":{"links":{"self":"http:\/\/example.com\/books\/2\/relationships\/author","related":"http:\/\/example.com\/books\/2\/author"}},"co-author":{"links":{"self":"http:\/\/example.com\/books\/2\/relationships\/co-author","related":"http:\/\/example.com\/books\/2\/co-author"}}}}],"meta":{"pagination":{"total":10,"count":2,"per_page":2,"current_page":1,"total_pages":5}},"links":{"self":"http:\/\/example.com\/books\/?page=1","first":"http:\/\/example.com\/books\/?page=1","next":"http:\/\/example.com\/books\/?page=2","last":"http:\/\/example.com\/books\/?page=5"}}';
2066
        $this->assertSame($expectedJson, $scope->toJson());
2067
    }
2068
2069
    public function testSerializingCollectionResourceWithPaginatorWithOmittedUnavailableNextLink()
2070
    {
@@ 2069-2193 (lines=125) @@
2066
        $this->assertSame($expectedJson, $scope->toJson());
2067
    }
2068
2069
    public function testSerializingCollectionResourceWithPaginatorWithOmittedUnavailableNextLink()
2070
    {
2071
        $baseUrl = 'http://example.com';
2072
2073
        $this->manager->setSerializer(new JsonApiSerializer($baseUrl));
2074
2075
        $total = 10;
2076
        $count = 2;
2077
        $perPage = 2;
2078
        $currentPage = 5;
2079
        $lastPage = 5;
2080
        $firstUrl = 'http://example.com/books/?page=1';
2081
        $previousUrl = 'http://example.com/books/?page=4';
2082
        $lastUrl = 'http://example.com/books/?page=5';
2083
2084
        $paginator = Mockery::mock('League\Fractal\Pagination\PaginatorInterface');
2085
        $paginator->shouldReceive('getCurrentPage')->andReturn($currentPage);
2086
        $paginator->shouldReceive('getLastPage')->andReturn($lastPage);
2087
        $paginator->shouldReceive('getTotal')->andReturn($total);
2088
        $paginator->shouldReceive('getCount')->andReturn($count);
2089
        $paginator->shouldReceive('getPerPage')->andReturn($perPage);
2090
        $paginator->shouldReceive('getUrl')->with(1)->andReturn($firstUrl);
2091
        $paginator->shouldReceive('getUrl')->with(4)->andReturn($previousUrl);
2092
        $paginator->shouldReceive('getUrl')->with(5)->andReturn($lastUrl);
2093
2094
        $booksData = [
2095
            [
2096
                'id' => 1,
2097
                'title' => 'Foo',
2098
                'year' => '1991',
2099
                '_author' => [
2100
                    'id' => 1,
2101
                    'name' => 'Dave',
2102
                ],
2103
            ],
2104
            [
2105
                'id' => 2,
2106
                'title' => 'Bar',
2107
                'year' => '1997',
2108
                '_author' => [
2109
                    'id' => 2,
2110
                    'name' => 'Bob',
2111
                ],
2112
            ],
2113
        ];
2114
2115
        $resource = new Collection($booksData, new JsonApiBookTransformer(), 'books');
2116
        $resource->setPaginator($paginator);
2117
        $scope = new Scope($this->manager, $resource);
2118
2119
        $expected = [
2120
            'data' => [
2121
                [
2122
                    'type' => 'books',
2123
                    'id' => '1',
2124
                    'attributes' => [
2125
                        'title' => 'Foo',
2126
                        'year' => 1991,
2127
                    ],
2128
                    'links' => [
2129
                        'self' => 'http://example.com/books/1',
2130
                    ],
2131
                    'relationships' => [
2132
                        'author' => [
2133
                            'links' => [
2134
                                'self' => 'http://example.com/books/1/relationships/author',
2135
                                'related' => 'http://example.com/books/1/author',
2136
                            ],
2137
                        ],
2138
                        'co-author' => [
2139
                            'links' => [
2140
                                'self' => 'http://example.com/books/1/relationships/co-author',
2141
                                'related' => 'http://example.com/books/1/co-author'
2142
                            ],
2143
                        ],
2144
                    ],
2145
                ],
2146
                [
2147
                    'type' => 'books',
2148
                    'id' => '2',
2149
                    'attributes' => [
2150
                        'title' => 'Bar',
2151
                        'year' => 1997,
2152
                    ],
2153
                    'links' => [
2154
                        'self' => 'http://example.com/books/2',
2155
                    ],
2156
                    'relationships' => [
2157
                        'author' => [
2158
                            'links' => [
2159
                                'self' => 'http://example.com/books/2/relationships/author',
2160
                                'related' => 'http://example.com/books/2/author',
2161
                            ],
2162
                        ],
2163
                        'co-author' => [
2164
                            'links' => [
2165
                                'self' => 'http://example.com/books/2/relationships/co-author',
2166
                                'related' => 'http://example.com/books/2/co-author'
2167
                            ],
2168
                        ],
2169
                    ],
2170
                ],
2171
            ],
2172
            'meta' => [
2173
                'pagination' => [
2174
                    'total' =>  10,
2175
                    'count' => 2,
2176
                    'per_page' => 2,
2177
                    'current_page' => 5,
2178
                    'total_pages' => 5
2179
                ]
2180
            ],
2181
            'links' => [
2182
                'self' => 'http://example.com/books/?page=5',
2183
                'first' => 'http://example.com/books/?page=1',
2184
                'prev' => 'http://example.com/books/?page=4',
2185
                'last' => 'http://example.com/books/?page=5'
2186
            ]
2187
        ];
2188
2189
        $this->assertSame($expected, $scope->toArray());
2190
2191
        $expectedJson = '{"data":[{"type":"books","id":"1","attributes":{"title":"Foo","year":1991},"links":{"self":"http:\/\/example.com\/books\/1"},"relationships":{"author":{"links":{"self":"http:\/\/example.com\/books\/1\/relationships\/author","related":"http:\/\/example.com\/books\/1\/author"}},"co-author":{"links":{"self":"http:\/\/example.com\/books\/1\/relationships\/co-author","related":"http:\/\/example.com\/books\/1\/co-author"}}}},{"type":"books","id":"2","attributes":{"title":"Bar","year":1997},"links":{"self":"http:\/\/example.com\/books\/2"},"relationships":{"author":{"links":{"self":"http:\/\/example.com\/books\/2\/relationships\/author","related":"http:\/\/example.com\/books\/2\/author"}},"co-author":{"links":{"self":"http:\/\/example.com\/books\/2\/relationships\/co-author","related":"http:\/\/example.com\/books\/2\/co-author"}}}}],"meta":{"pagination":{"total":10,"count":2,"per_page":2,"current_page":5,"total_pages":5}},"links":{"self":"http:\/\/example.com\/books\/?page=5","first":"http:\/\/example.com\/books\/?page=1","prev":"http:\/\/example.com\/books\/?page=4","last":"http:\/\/example.com\/books\/?page=5"}}';
2192
        $this->assertSame($expectedJson, $scope->toJson());
2193
    }
2194
2195
    public function testCustomLinkMerge()
2196
    {