def test_ordering(self): VideoFactory.create_batch(3) qs = Video.objects.all() forward, _, _ = queryset_to_json(qs, "pk", {"id": "id"}) backward, _, _ = queryset_to_json(qs, "-pk", {"id": "id"}) self.assertEqual(forward, list(reversed(backward)))
def test_property_map(self): video = VideoFactory().add_titles() qs = Video.objects.all() items, _, _ = queryset_to_json(qs, "pk", {"bob": "title"}) self.assertEqual(items[0].keys(), ["bob"]) self.assertEqual(items[0]["bob"], video.title)
def test_pagination_options(self): VideoFactory.create_batch(3) videos = list(Video.objects.all().order_by("pk").add_titles()) qs = Video.objects.all() items, first, last = queryset_to_json(qs, "pk", {"id": "id"}) self.assertEqual(items, [{"id": v.id} for v in videos]) self.assertEqual(first, videos[0].pk) self.assertEqual(last, videos[2].pk)
def test_end(self): videos = VideoFactory.create_batch(3) videos = list(Video.objects.all().order_by("pk").add_titles()) qs = Video.objects.all() items, first, last = queryset_to_json(qs, "pk", {"id": "id"}, end=videos[1].pk) self.assertEqual(items, [{"id": v.id} for v in reversed(videos[:2])]) self.assertEqual(first, videos[1].pk) self.assertEqual(last, videos[0].pk)
def test_start(self): videos = VideoFactory.create_batch(3) videos = list(Video.objects.all().order_by("pk").add_titles()) qs = Video.objects.all() items, first, last = queryset_to_json(qs, "pk", {"id": "id"}, start=videos[1].pk) self.assertEqual(items, [{"id": v.id} for v in videos[1:]]) self.assertEqual(first, videos[1].pk) self.assertEqual(last, videos[2].pk)
def test_property_map_value_error(self): VideoFactory() qs = Video.objects.all() with self.assertRaises(ValueError): queryset_to_json(qs, "pk", (("id", "id"), ("title", "title")))
def test_page_size(self): VideoFactory.create_batch(3) qs = Video.objects.all() items, _, _ = queryset_to_json(qs, "pk", {"id": "id"}) self.assertEqual(len(items), 2)
def test_empty(self): qs = Video.objects.none() result = queryset_to_json(qs, "pk", {"id": "id"}) self.assertEqual(result, ([], None, None))