text: import pytest
  import json
  from unittest.mock import patch
  from urllib.parse import urlencode
  
  from awx.main.models.inventory import Group, Host
  from awx.api.pagination import Pagination
  from awx.api.versioning import reverse
  
  
  @pytest.fixture
  def host(inventory):
      def handler(name, groups):
          h = Host(name=name, inventory=inventory)
          h.save()
          h = Host.objects.get(name=name, inventory=inventory)
          for g in groups:
              h.groups.add(g)
          h.save()
          h = Host.objects.get(name=name, inventory=inventory)
          return h
      return handler
  
  
  @pytest.fixture
  def group(inventory):
      def handler(name):
          g = Group(name=name, inventory=inventory)
          g.save()
          g = Group.objects.get(name=name, inventory=inventory)
          return g
      return handler
  
  
  @pytest.mark.django_db
  def test_pagination_backend_output_correct_total_count(group, host):
      # NOTE: this test might not be db-backend-agnostic. Manual tests might be needed also
      g1 = group('pg_group1')
      g2 = group('pg_group2')
      host('pg_host1', [g1, g2])
      queryset = Host.objects.filter(groups__name__in=('pg_group1', 'pg_group2')).distinct()
      p = Pagination().django_paginator_class(queryset, 10)
      p.page(1)
      assert p.count == 1
  
  
  @pytest.mark.django_db
  def test_pagination_cap_page_size(get, admin, inventory):
      for i in range(20):
          Host(name='host-{}'.format(i), inventory=inventory).save()
  
      def host_list_url(params):
          request_qs = '?' + urlencode(params)
          return reverse('api:host_list') + request_qs
  
      with patch('awx.api.pagination.Pagination.max_page_size', 5):
          resp = get(host_list_url({'page': '2', 'page_size': '10'}), user=admin)
          jdata = json.loads(resp.content)
  
          assert jdata['previous'] == host_list_url({'page': '1', 'page_size': '5'})
          assert jdata['next'] == host_list_url({'page': '3', 'page_size': '5'})
  