def test_invalid_sort(self):
        qs = SimpleDjangoModel.objects.all()

        collection = SimpleDjangoModelCollectionSerializer(qs, sort=['foobar'])
        dump = collection.dump()
        self.assertEqual(dump['items'][0]['code'], 'DDDD')
        self.assertEqual(dump['items'][1]['code'], 'FFFF')
        self.assertEqual(dump['items'][2]['code'], 'CCCC')
        self.assertEqual(dump['items'][3]['code'], 'BBBB')
        self.assertEqual(dump['items'][4]['code'], 'AAAA')
 def test_empty_queryset(self):
     collection = SimpleDjangoModelCollectionSerializer(SimpleDjangoModel.objects.none())
     test_value = {
         "_metadata": {
             "totalCount": 0,
             "offset": 0,
             "limit": 10
         },
         "items": []
     }
     self.assertDictEqual(collection.dump(), test_value)
    def test_multiple_sort_empty_qs(self):
        qs = SimpleDjangoModel.objects.none()

        collection = SimpleDjangoModelCollectionSerializer(qs, limit=2, sort=['number', '-code'])
        test_value = {
            "_metadata": {
                "totalCount": 0,
                "offset": 0,
                "limit": 2
            },
            "items": []
        }
        self.assertDictEqual(collection.dump(), test_value)
 def test_simple(self):
     qs = SimpleDjangoModel.objects.all()
     with self.assertNumQueries(0):
         collection = SimpleDjangoModelCollectionSerializer(qs)
     with self.assertNumQueries(1):
         collection_dump = collection.dump()
     test_value = {
         "_metadata": {
             "totalCount": 5,
             "offset": 0,
             "limit": 10
         },
         "items": [
             {
                 "name": "One",
                 "code": "DDDD",
                 "number": 1
             },
             {
                 "name": "One",
                 "code": "FFFF",
                 "number": 1
             },
             {
                 "name": "Two",
                 "code": "CCCC",
                 "number": 2
             },
             {
                 "name": "Three",
                 "code": "BBBB",
                 "number": 3
             },
             {
                 "name": "Four",
                 "code": "AAAA",
                 "number": 4
             }
         ]
     }
     self.assertDictEqual(collection_dump, test_value)
    def test_sort(self):
        qs = SimpleDjangoModel.objects.all()

        collection = SimpleDjangoModelCollectionSerializer(qs, sort=['-number'])
        test_value = {
            "_metadata": {
                "totalCount": 5,
                "offset": 0,
                "limit": 10
            },
            "items": [
                {
                    "name": "Four",
                    "code": "AAAA",
                    "number": 4
                },
                {
                    "name": "Three",
                    "code": "BBBB",
                    "number": 3
                },
                {
                    "name": "Two",
                    "code": "CCCC",
                    "number": 2
                },
                {
                    "name": "One",
                    "code": "DDDD",
                    "number": 1
                },
                {
                    "name": "One",
                    "code": "FFFF",
                    "number": 1
                }
            ]
        }
        self.assertDictEqual(collection.dump(), test_value)
    def test_limit_offset(self):
        qs = SimpleDjangoModel.objects.all()

        collection = SimpleDjangoModelCollectionSerializer(qs, limit=2, offset=2)
        test_value = {
            "_metadata": {
                "totalCount": 5,
                "offset": 2,
                "limit": 2
            },
            "items": [
                {
                    "name": "Two",
                    "code": "CCCC",
                    "number": 2
                },
                {
                    "name": "Three",
                    "code": "BBBB",
                    "number": 3
                }
            ]
        }
        self.assertDictEqual(collection.dump(), test_value)
    def test_multiple_sort(self):
        qs = SimpleDjangoModel.objects.all()

        collection = SimpleDjangoModelCollectionSerializer(qs, limit=2, sort=['number', '-code'])
        test_value = {
            "_metadata": {
                "totalCount": 5,
                "offset": 0,
                "limit": 2
            },
            "items": [
                {
                    "name": "One",
                    "code": "FFFF",
                    "number": 1
                },
                {
                    "name": "One",
                    "code": "DDDD",
                    "number": 1
                }
            ]
        }
        self.assertDictEqual(collection.dump(), test_value)