Source code for mentat.reports.test_base
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# This file is part of Mentat system (https://mentat.cesnet.cz/).
#
# Copyright (C) since 2011 CESNET, z.s.p.o (http://www.ces.net/)
# Use of this source is governed by the MIT license, see LICENSE file.
#-------------------------------------------------------------------------------
"""
Unit test module for testing the :py:mod:`mentat.reports.base` module.
"""
__author__ = "Jan Mach <jan.mach@cesnet.cz>"
__credits__ = "Pavel Kácha <pavel.kacha@cesnet.cz>, Andrea Kropáčová <andrea.kropacova@cesnet.cz>"
import os
import datetime
import unittest
from unittest.mock import Mock, call
#
# Custom libraries
#
import mentat.reports.base
#-------------------------------------------------------------------------------
# NOTE: Sorry for the long lines in this file. They are deliberate, because the
# assertion permutations are (IMHO) more readable this way.
#-------------------------------------------------------------------------------
[docs]class TestMentatReportsBase(unittest.TestCase):
"""
Unit test class for testing the :py:mod:`mentat.reports.base` module.
"""
#
# Turn on more verbose output, which includes print-out of constructed
# objects. This will really clutter your console, usable only for test
# debugging.
#
verbose = True
[docs] def setUp(self):
"""
Perform test case setup.
"""
self.reporter = mentat.reports.base.BaseReporter(
Mock(),
'/var/tmp',
os.path.abspath(
os.path.join(
os.path.dirname(__file__),
'../../../conf/templates/utest'
)
)
)
[docs] def test_01_format_decimal(self):
"""
Perform decimal formating tests.
"""
self.maxDiff = None
num = 1265358.56
self.assertEqual(self.reporter.format_decimal(num), '1,265,358.56')
self.reporter.set_locale('cs')
self.assertEqual(self.reporter.format_decimal(num), '1\xa0265\xa0358,56')
[docs] def test_02_format_datetime(self):
"""
Perform datetime formating tests.
"""
self.maxDiff = None
dtm = datetime.datetime(2018, 1, 1, 12, 0)
self.assertRegex(self.reporter.format_datetime(dtm), r'Jan 1, 2018, 12:00:00[\u0020|\u202f]PM')
self.reporter.set_locale('cs')
self.assertEqual(self.reporter.format_datetime(dtm), '1. 1. 2018 12:00:00')
[docs] def test_03_format_localdatetime(self):
"""
Perform datetime formating tests in local timezone.
"""
self.maxDiff = None
dtm = datetime.datetime(2018, 1, 1, 12, 0)
dtml = datetime.datetime(2018, 1, 1, 12, 0) + (datetime.datetime.fromtimestamp(dtm.timestamp()) - datetime.datetime.utcfromtimestamp(dtm.timestamp()))
self.assertEqual(
self.reporter.format_localdatetime(dtm),
self.reporter.format_datetime(dtml),
)
self.reporter.set_locale('cs')
self.assertEqual(
self.reporter.format_localdatetime(dtm),
self.reporter.format_datetime(dtml),
)
[docs] def test_04_format_tzdatetime(self):
"""
Perform timezone aware datetime formating tests.
"""
self.maxDiff = None
dtm = datetime.datetime(2018, 1, 1, 12, 0)
self.assertRegex(self.reporter.format_tzdatetime(dtm), r'Jan 1, 2018, 12:00:00[\u0020|\u202f]PM')
self.reporter.set_locale('cs')
self.assertEqual(self.reporter.format_tzdatetime(dtm), '1. 1. 2018 12:00:00')
self.reporter.set_timezone('Europe/Prague')
self.assertEqual(self.reporter.format_tzdatetime(dtm), '1. 1. 2018 13:00:00')
self.reporter.set_timezone('America/Los_Angeles')
self.assertEqual(self.reporter.format_tzdatetime(dtm), '1. 1. 2018 4:00:00')
[docs] def test_05_format_rfctzdatetime(self):
"""
Perform timezone aware datetime formating tests with enforced RFC 3339
time format.
"""
self.maxDiff = None
dtm = datetime.datetime(2018, 1, 1, 12, 0)
self.assertEqual(self.reporter.format_rfctzdatetime(dtm), '2018-01-01T12:00:00+0000')
self.reporter.set_locale('cs')
self.assertEqual(self.reporter.format_rfctzdatetime(dtm), '2018-01-01T12:00:00+0000')
self.reporter.set_timezone('Europe/Prague')
self.assertEqual(self.reporter.format_rfctzdatetime(dtm), '2018-01-01T13:00:00+0100')
self.reporter.set_timezone('America/Los_Angeles')
self.assertEqual(self.reporter.format_rfctzdatetime(dtm), '2018-01-01T04:00:00-0800')
[docs] def test_06_format_timedelta(self):
"""
Perform timedelta formating tests.
"""
self.maxDiff = None
tdl = datetime.timedelta(days = 2, seconds = 12)
self.assertEqual(self.reporter.format_timedelta(tdl), '2 days')
self.reporter.set_locale('cs')
self.assertEqual(self.reporter.format_timedelta(tdl), '2 dny')
[docs] def test_07_format_url(self):
"""
Perform URL formating tests.
"""
self.maxDiff = None
self.assertEqual(
self.reporter.format_url(
'https://domain.org/'
),
'https://domain.org/'
)
self.assertEqual(
self.reporter.format_url(
'https://domain.org/test',
{'key1': 'value1', 'submit': 'Search'}
),
'https://domain.org/test?key1=value1&submit=Search'
)
self.assertEqual(
self.reporter.format_url(
'https://domain.org/test',
{'key1': 'test žščř', 'submit': 'Search'}
),
'https://domain.org/test?key1=test+%C5%BE%C5%A1%C4%8D%C5%99&submit=Search'
)
[docs] def test_08_translations(self):
"""
Perform translations tests.
"""
self.maxDiff = None
self.assertEqual(self.reporter.translator.gettext('Locale:'), 'Locale:')
self.assertEqual(self.reporter.translator.gettext('Counter:'), 'Counter:')
self.assertEqual(self.reporter.translator.gettext('Time:'), 'Time:')
self.assertEqual(self.reporter.translator.gettext('Timezone:'), 'Timezone:')
self.assertEqual(self.reporter.translator.gettext('TZ time:'), 'TZ time:')
self.assertEqual(self.reporter.translator.gettext('Period:'), 'Period:')
self.reporter.set_locale('cs')
self.assertEqual(self.reporter.translator.gettext('Locale:'), 'Lokále:')
self.assertEqual(self.reporter.translator.gettext('Counter:'), 'Čítač:')
self.assertEqual(self.reporter.translator.gettext('Time:'), 'Čas:')
self.assertEqual(self.reporter.translator.gettext('Timezone:'), 'Zóna:')
self.assertEqual(self.reporter.translator.gettext('TZ time:'), 'Čas zóny:')
self.assertEqual(self.reporter.translator.gettext('Period:'), 'Perioda:')
[docs] def test_09_rendering(self):
"""
Perform rendering tests.
"""
self.maxDiff = None
template_txt = self.reporter.renderer.get_template('default.txt.j2')
report_txt = template_txt.render(
test_count = 1265358.56,
test_time = datetime.datetime(2018, 1, 1, 12, 0),
test_period = datetime.timedelta(days = 2, seconds = 12)
)
self.reporter.logger.assert_has_calls([
call.warning('Test log line from Jinja2 template.')
])
self.assertRegex(report_txt, "Locale: en\nCounter: 1,265,358.56\nTime: Jan 1, 2018, 12:00:00[\u0020|\u202f]PM\nTimezone: UTC\nTZ time: Jan 1, 2018, 12:00:00[\u0020|\u202f]PM\nPeriod: 2 days")
self.reporter.set_timezone('Europe/Prague')
report_txt = template_txt.render(
test_count = 1265358.56,
test_time = datetime.datetime(2018, 1, 1, 12, 0),
test_period = datetime.timedelta(days = 2, seconds = 12)
)
self.assertRegex(report_txt, "Locale: en\nCounter: 1,265,358.56\nTime: Jan 1, 2018, 12:00:00[\u0020|\u202f]PM\nTimezone: Europe/Prague\nTZ time: Jan 1, 2018, 1:00:00[\u0020|\u202f]PM\nPeriod: 2 days")
self.reporter.set_timezone('America/Los_Angeles')
report_txt = template_txt.render(
test_count = 1265358.56,
test_time = datetime.datetime(2018, 1, 1, 12, 0),
test_period = datetime.timedelta(days = 2, seconds = 12)
)
self.assertRegex(report_txt, "Locale: en\nCounter: 1,265,358.56\nTime: Jan 1, 2018, 12:00:00[\u0020|\u202f]PM\nTimezone: America/Los_Angeles\nTZ time: Jan 1, 2018, 4:00:00[\u0020|\u202f]AM\nPeriod: 2 days")
self.reporter.set_locale('cs')
report_txt = template_txt.render(
test_count = 1265358.56,
test_time = datetime.datetime(2018, 1, 1, 12, 0),
test_period = datetime.timedelta(days = 2, seconds = 12)
)
self.assertRegex(report_txt, "Lokále: cs\nČítač: 1 265 358,56\nČas: 1. 1. 2018[\u0020|\u202f]12:00:00\nZóna: America/Los_Angeles\nČas zóny: 1. 1. 2018 4:00:00\nPerioda: 2 dny")
self.reporter.logger.assert_has_calls([
call.warning('Test log line from Jinja2 template.')
])
#-------------------------------------------------------------------------------
if __name__ == '__main__':
unittest.main()