62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
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'})
|