From 90feb6d210632dc086fd226dc00e284173441934 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 28 Feb 2021 20:31:01 +1100 Subject: [PATCH] Server-side paginatino for build orders --- InvenTree/build/api.py | 3 +++ InvenTree/part/test_api.py | 13 +++++++++++++ InvenTree/stock/test_api.py | 13 +++++++++++++ InvenTree/templates/js/build.js | 1 + 4 files changed, 30 insertions(+) diff --git a/InvenTree/build/api.py b/InvenTree/build/api.py index cb6b3f6b2b..13c24c6110 100644 --- a/InvenTree/build/api.py +++ b/InvenTree/build/api.py @@ -8,6 +8,7 @@ from __future__ import unicode_literals from django_filters.rest_framework import DjangoFilterBackend from rest_framework import filters from rest_framework import generics +from rest_framework.pagination import LimitOffsetPagination from django.conf.urls import url, include @@ -28,6 +29,8 @@ class BuildList(generics.ListCreateAPIView): queryset = Build.objects.all() serializer_class = BuildSerializer + pagination_class = LimitOffsetPagination + filter_backends = [ DjangoFilterBackend, filters.SearchFilter, diff --git a/InvenTree/part/test_api.py b/InvenTree/part/test_api.py index d917b6ebb2..23865aa0f3 100644 --- a/InvenTree/part/test_api.py +++ b/InvenTree/part/test_api.py @@ -235,6 +235,19 @@ class PartAPITest(InvenTreeAPITestCase): self.assertEqual(response.status_code, status.HTTP_200_OK) + def test_paginate(self): + """ + Test pagination of the Part list API + """ + + for n in [1, 5, 10]: + response = self.get(reverse('api-part-list'), {'limit': n}) + + self.assertIn('count', response) + self.assertIn('results', response) + + self.assertEqual(len(response['results']), n) + class PartAPIAggregationTest(InvenTreeAPITestCase): """ diff --git a/InvenTree/stock/test_api.py b/InvenTree/stock/test_api.py index 17cab7ffe3..ae0d6fd862 100644 --- a/InvenTree/stock/test_api.py +++ b/InvenTree/stock/test_api.py @@ -244,6 +244,19 @@ class StockItemListTest(StockAPITestCase): response = self.get_stock(expired=0) self.assertEqual(len(response), 16) + def test_paginate(self): + """ + Test that we can paginate results correctly + """ + + for n in [1, 5, 10]: + response = self.get_stock(limit=n) + + self.assertIn('count', response) + self.assertIn('results', response) + + self.assertEqual(len(response['results']), n) + class StockItemTest(StockAPITestCase): """ diff --git a/InvenTree/templates/js/build.js b/InvenTree/templates/js/build.js index 01d5fcdef0..45ebd133d1 100644 --- a/InvenTree/templates/js/build.js +++ b/InvenTree/templates/js/build.js @@ -630,6 +630,7 @@ function loadBuildTable(table, options) { url: options.url, queryParams: filters, groupBy: false, + sidePagination: 'server', name: 'builds', original: params, columns: [