test updates

* when tests create a UnifiedJob and JobEvent,
  the two need to have the same value for job creation time
* some view validation was skipped due to `model` being
  a property in some cases now
This commit is contained in:
Jim Ladd 2021-03-24 16:04:40 -07:00
parent 5c1a33382c
commit 81db8091ea
3 changed files with 27 additions and 12 deletions

View File

@ -3,6 +3,7 @@
import base64
import json
import re
from datetime import datetime
from django.conf import settings
from django.utils.encoding import smart_str
@ -26,14 +27,20 @@ from awx.main.models import (
)
def _mk_project_update():
project = Project()
def _mk_project_update(created=None):
kwargs = {}
if created:
kwargs['created'] = created
project = Project(**kwargs)
project.save()
return ProjectUpdate(project=project)
def _mk_inventory_update():
source = InventorySource(source='ec2')
def _mk_inventory_update(created=None):
kwargs = {}
if created:
kwargs['created'] = created
source = InventorySource(source='ec2', **kwargs)
source.save()
iu = InventoryUpdate(inventory_source=source, source='e2')
return iu
@ -139,10 +146,11 @@ def test_stdout_line_range(sqlite_copy_expert, Parent, Child, relation, view, ge
@pytest.mark.django_db
def test_text_stdout_from_system_job_events(sqlite_copy_expert, get, admin):
job = SystemJob()
created = datetime.utcnow()
job = SystemJob(created=created)
job.save()
for i in range(3):
SystemJobEvent(system_job=job, stdout='Testing {}\n'.format(i), start_line=i).save()
SystemJobEvent(system_job=job, stdout='Testing {}\n'.format(i), start_line=i, job_created=created).save()
url = reverse('api:system_job_detail', kwargs={'pk': job.pk})
response = get(url, user=admin, expect=200)
assert smart_str(response.data['result_stdout']).splitlines() == ['Testing %d' % i for i in range(3)]
@ -150,11 +158,12 @@ def test_text_stdout_from_system_job_events(sqlite_copy_expert, get, admin):
@pytest.mark.django_db
def test_text_stdout_with_max_stdout(sqlite_copy_expert, get, admin):
job = SystemJob()
created = datetime.utcnow()
job = SystemJob(created=created)
job.save()
total_bytes = settings.STDOUT_MAX_BYTES_DISPLAY + 1
large_stdout = 'X' * total_bytes
SystemJobEvent(system_job=job, stdout=large_stdout, start_line=0).save()
SystemJobEvent(system_job=job, stdout=large_stdout, start_line=0, job_created=created).save()
url = reverse('api:system_job_detail', kwargs={'pk': job.pk})
response = get(url, user=admin, expect=200)
assert response.data['result_stdout'] == (
@ -176,11 +185,12 @@ def test_text_stdout_with_max_stdout(sqlite_copy_expert, get, admin):
@pytest.mark.parametrize('fmt', ['txt', 'ansi'])
@mock.patch('awx.main.redact.UriCleaner.SENSITIVE_URI_PATTERN', mock.Mock(**{'search.return_value': None})) # really slow for large strings
def test_max_bytes_display(sqlite_copy_expert, Parent, Child, relation, view, fmt, get, admin):
job = Parent()
created = datetime.utcnow()
job = Parent(created=created)
job.save()
total_bytes = settings.STDOUT_MAX_BYTES_DISPLAY + 1
large_stdout = 'X' * total_bytes
Child(**{relation: job, 'stdout': large_stdout, 'start_line': 0}).save()
Child(**{relation: job, 'stdout': large_stdout, 'start_line': 0, 'job_created': created}).save()
url = reverse(view, kwargs={'pk': job.pk})
response = get(url + '?format={}'.format(fmt), user=admin, expect=200)
@ -257,10 +267,11 @@ def test_text_with_unicode_stdout(sqlite_copy_expert, Parent, Child, relation, v
@pytest.mark.django_db
def test_unicode_with_base64_ansi(sqlite_copy_expert, get, admin):
job = Job()
created = datetime.utcnow()
job = Job(created=created)
job.save()
for i in range(3):
JobEvent(job=job, stdout='{}\n'.format(i), start_line=i).save()
JobEvent(job=job, stdout='{}\n'.format(i), start_line=i, job_created=created).save()
url = reverse('api:job_stdout', kwargs={'pk': job.pk}) + '?format=json&content_encoding=base64'
response = get(url, user=admin, expect=200)

View File

@ -55,6 +55,8 @@ def test_list_views_use_list_serializers(all_views):
"""
list_serializers = tuple(getattr(serializers, '{}ListSerializer'.format(cls.__name__)) for cls in (UnifiedJob.__subclasses__() + [UnifiedJob]))
for View in all_views:
if type(View.model) is property:
continue # special case for JobEventChildrenList
if hasattr(View, 'model') and issubclass(getattr(View, 'model'), UnifiedJob):
if issubclass(View, ListAPIView):
assert issubclass(View.serializer_class, list_serializers), 'View {} serializer {} is not a list serializer'.format(View, View.serializer_class)

View File

@ -73,6 +73,8 @@ def test_global_creation_always_possible(all_views):
views_by_model = {}
for View in all_views:
if not getattr(View, 'deprecated', False) and issubclass(View, ListAPIView) and hasattr(View, 'model'):
if type(View.model) is property:
continue # special case for JobEventChildrenList
views_by_model.setdefault(View.model, []).append(View)
for model, views in views_by_model.items():
creatable = False