#!/usr/bin/python3
# -*- encoding: utf-8 -*-
import logging
try:
import unittest2 as unittest
except ImportError:
import unittest
import os
import clitests
import problem
from abrtcli.config import ONELINE_FMT
from abrtcli.utils import (captured_output,
fmt_problems,
get_problem_field,
get_human_identifier,
remember_cwd,
sort_problems,
upcase_first_letter)
class UtilsTestCase(clitests.TestCase):
'''
Tests for utility functions
'''
def test_fmt_problems(self):
'''
Test default problem formatting
'''
pl = problem.list()
res = fmt_problems(pl)
for prob in pl:
self.assertIn(prob.short_id, res)
field, value = get_human_identifier(prob)
self.assertIn(value, res)
self.assertIn(str(prob.count), res)
self.assertIn('Bugzilla', res)
self.assertIn('https://bugzilla.redhat.com/show_bug.cgi?id=1223349',
res)
self.assertIn('ABRT Server', res)
furl = 'https://retrace.fedoraproject.org/faf/reports/bthash/' \
'3505a6db8a6bd51a3d690f1553b'
self.assertIn(furl, res)
self.assertIn('Not reportable', res)
self.assertIn('Not reportable reason', res)
def test_fmt_problems_oneline(self):
'''
Test oneline problem formatting
'''
pl = problem.list()
res = fmt_problems(pl, fmt=ONELINE_FMT)
self.assertIn('bc60a5c 15x pavucontrol', res)
self.assertIn('ffe635c 1x /home/user/bin/user_app', res)
def test_fmt_problems_custom(self):
'''
Test custom problem formatting
'''
pl = problem.list()
fmt = '''#table|id,{short_id}|user id,{uid_username}| '''
res = fmt_problems(pl, fmt=fmt)
self.assertIn('User id', res)
self.assertIn('1234', res)
self.assertTrue(len(res.splitlines()) > len(pl))
def test_fmt_problems_custom_oneline(self):
'''
Test custom problem formatting
'''
pl = problem.list()
fmt = '''{short_id} {uid_username}'''
res = fmt_problems(pl, fmt=fmt)
self.assertIn('1234', res)
self.assertTrue(len(res.splitlines()) == len(pl))
def test_fmt_problems_empty_input(self):
'''
Test that fmt_problems handles None as problem list
'''
self.assertEqual(fmt_problems(None), '')
def test_get_problem_field(self):
p = problem.list()[0]
self.assertTrue(get_problem_field(p, 'count'), p.count)
self.assertEqual(get_problem_field(p, 'notavail'), None)
def test_get_human_identifier(self):
p0 = problem.list()[0]
p3 = problem.list()[3]
p4 = problem.list()[4]
p0_t, p0_v = get_human_identifier(p0)
p3_t, p3_v = get_human_identifier(p3)
p4_t, p4_v = get_human_identifier(p4)
self.assertEqual(p0_t, 'component')
self.assertEqual(p0_v, p0.component)
self.assertEqual(p3_t, 'executable')
self.assertEqual(p3_v, p3.executable)
self.assertEqual(p4_t, 'type')
self.assertEqual(p4_v, p4.type)
def test_sort_problems(self):
'''
Test if problems are sotred by time
'''
pl = problem.list()
spl = sort_problems(pl)
self.assertTrue(spl[-1] == pl[2])
self.assertTrue(spl[0] == pl[3])
def test_upcase_first_letter(self):
self.assertEqual('LaLa', upcase_first_letter('laLa'))
def test_remember_cwd(self):
cwd = os.getcwd()
with remember_cwd():
os.chdir('/tmp')
self.assertEqual(os.getcwd(), cwd)
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
unittest.main()