--- /dev/null
+def get_status(summary):
+ """
+ :param summary: The job summary dict. Normally ctx.summary
+ :returns: A status string like 'pass', 'fail', or 'dead'
+ """
+ status = summary.get('status')
+ if status is not None:
+ return status
+
+ success = summary.get('success')
+ if success is True:
+ status = 'pass'
+ elif success is False:
+ status = 'fail'
+ else:
+ status = None
+ return status
+
+
+def set_status(summary, status):
+ """
+ Sets summary['status'] to status, and summary['success'] to True if status
+ is 'pass'. If status is not 'pass', then 'success' is False.
+
+ If status is None, do nothing.
+
+ :param summary: The job summary dict. Normally ctx.summary
+ :param status: The job status, e.g. 'pass', 'fail', 'dead'
+ """
+ if status is None:
+ return
+
+ summary['status'] = status
+ if status == 'pass':
+ summary['success'] = True
+ else:
+ summary['success'] = False
+
--- /dev/null
+from .. import job_status
+
+
+class TestJobStatus(object):
+ def test_get_only_success_true(self):
+ summary = dict(success=True)
+ status = job_status.get_status(summary)
+ assert status == 'pass'
+
+ def test_get_only_success_false(self):
+ summary = dict(success=False)
+ status = job_status.get_status(summary)
+ assert status == 'fail'
+
+ def test_get_status_pass(self):
+ summary = dict(status='pass')
+ status = job_status.get_status(summary)
+ assert status == 'pass'
+
+ def test_get_status_fail(self):
+ summary = dict(status='fail')
+ status = job_status.get_status(summary)
+ assert status == 'fail'
+
+ def test_get_status_dead(self):
+ summary = dict(status='dead')
+ status = job_status.get_status(summary)
+ assert status == 'dead'
+
+ def test_get_status_none(self):
+ summary = dict()
+ status = job_status.get_status(summary)
+ assert status is None
+
+ def test_set_status_pass(self):
+ summary = dict()
+ job_status.set_status(summary, 'pass')
+ assert summary == dict(status='pass', success=True)
+
+ def test_set_status_dead(self):
+ summary = dict()
+ job_status.set_status(summary, 'dead')
+ assert summary == dict(status='dead', success=False)
+
+ def test_set_then_get_status_dead(self):
+ summary = dict()
+ job_status.set_status(summary, 'dead')
+ status = job_status.get_status(summary)
+ assert status == 'dead'
+
+ def test_set_status_none(self):
+ summary = dict()
+ job_status.set_status(summary, None)
+ assert summary == dict()