add host_status, play, and task counts to job details

This commit is contained in:
Jake McDermott
2018-06-05 22:07:44 -04:00
parent 246e63bdb6
commit f8f59c8c8c
3 changed files with 92 additions and 2 deletions

View File

@@ -1,4 +1,5 @@
# Python
from collections import namedtuple
import pytest
import mock
import json
@@ -7,6 +8,7 @@ from six.moves import xrange
# AWX
from awx.api.serializers import (
JobDetailSerializer,
JobSerializer,
JobOptionsSerializer,
)
@@ -14,6 +16,7 @@ from awx.api.serializers import (
from awx.main.models import (
Label,
Job,
JobEvent,
)
@@ -53,6 +56,7 @@ def jobs(mocker):
@mock.patch('awx.api.serializers.UnifiedJobTemplateSerializer.get_related', lambda x,y: {})
@mock.patch('awx.api.serializers.JobOptionsSerializer.get_related', lambda x,y: {})
class TestJobSerializerGetRelated():
@pytest.mark.parametrize("related_resource_name", [
'job_events',
'relaunch',
@@ -76,6 +80,7 @@ class TestJobSerializerGetRelated():
@mock.patch('awx.api.serializers.BaseSerializer.to_representation', lambda self,obj: {
'extra_vars': obj.extra_vars})
class TestJobSerializerSubstitution():
def test_survey_password_hide(self, mocker):
job = mocker.MagicMock(**{
'display_extra_vars.return_value': '{\"secret_key\": \"$encrypted$\"}',
@@ -90,6 +95,7 @@ class TestJobSerializerSubstitution():
@mock.patch('awx.api.serializers.BaseSerializer.get_summary_fields', lambda x,y: {})
class TestJobOptionsSerializerGetSummaryFields():
def test__summary_field_labels_10_max(self, mocker, job_template, labels):
job_template.labels.all = mocker.MagicMock(**{'return_value': labels})
@@ -101,3 +107,45 @@ class TestJobOptionsSerializerGetSummaryFields():
def test_labels_exists(self, test_get_summary_fields, job_template):
test_get_summary_fields(JobOptionsSerializer, job_template, 'labels')
class TestJobDetailSerializerGetHostStatusCountFields(object):
def test_hosts_are_counted_once(self, job, mocker):
mock_event = JobEvent(**{
'event': 'playbook_on_stats',
'event_data': {
'skipped': {
'localhost': 2,
'fiz': 1,
},
'ok': {
'localhost': 1,
'foo': 2,
},
'changed': {
'localhost': 1,
'bar': 3,
},
'dark': {
'localhost': 2,
'fiz': 2,
}
}
})
mock_qs = namedtuple('mock_qs', ['get'])(mocker.MagicMock(return_value=mock_event))
job.job_events.only = mocker.MagicMock(return_value=mock_qs)
serializer = JobDetailSerializer()
host_status_counts = serializer.get_host_status_counts(job)
assert host_status_counts == {'ok': 1, 'changed': 1, 'dark': 2}
def test_host_status_counts_is_empty_dict_without_stats_event(self, job, mocker):
job.job_events = JobEvent.objects.none()
serializer = JobDetailSerializer()
host_status_counts = serializer.get_host_status_counts(job)
assert host_status_counts == {}