Source code for fireant.tests.test_formats
from unittest import (
TestCase,
)
import numpy as np
import pandas as pd
from datetime import (
date,
datetime,
)
from fireant import formats
[docs]class FormatMetricValueTests(TestCase):
[docs] def test_that_literal_strings_are_not_converted(self):
for value in ['NAN', 'INF', 'nan', 'inf']:
with self.subTest(value):
result = formats.metric_value(value)
self.assertEqual(result, value)
[docs] def test_that_nan_data_point_is_converted_to_none(self):
# np.nan is converted to None
result = formats.metric_value(np.nan)
self.assertIsNone(result)
[docs] def test_that_inf_data_point_is_converted_to_none(self):
# np.nan is converted to None
result = formats.metric_value(np.inf)
self.assertIsNone(result)
[docs] def test_that_neg_inf_data_point_is_converted_to_none(self):
# np.nan is converted to None
result = formats.metric_value(-np.inf)
self.assertIsNone(result)
[docs] def test_str_data_point_is_returned_unchanged(self):
result = formats.metric_value(u'abc')
self.assertEqual('abc', result)
[docs] def test_int64_data_point_is_returned_as_py_int(self):
# Needs to be cast to python int
result = formats.metric_value(np.int64(1))
self.assertEqual(int(1), result)
[docs] def test_data_data_point_is_returned_as_string_iso_no_time(self):
# Needs to be converted to milliseconds
result = formats.metric_value(date(2000, 1, 1))
self.assertEqual('2000-01-01', result)
[docs] def test_datatime_data_point_is_returned_as_string_iso_with_time(self):
# Needs to be converted to milliseconds
result = formats.metric_value(datetime(2000, 1, 1, 1))
self.assertEqual('2000-01-01T01:00:00', result)
[docs] def test_timestamp_no_time_data_point_is_returned_as_string_iso_no_time(self):
# Needs to be converted to milliseconds
result = formats.metric_value(pd.Timestamp(date(2000, 1, 1)))
self.assertEqual('2000-01-01', result)
[docs] def test_timestamp_data_point_is_returned_as_string_iso_no_time(self):
# Needs to be converted to milliseconds
result = formats.metric_value(pd.Timestamp(datetime(2000, 1, 1, 1)))
self.assertEqual('2000-01-01T01:00:00', result)
[docs]class DisplayValueTests(TestCase):
[docs] def test_str_value_no_formats(self):
display = formats.metric_display('abcdef')
self.assertEqual('abcdef', display)
[docs] def test_bool_true_value_no_formats(self):
display = formats.metric_display(True)
self.assertEqual('true', display)
[docs] def test_bool_false_value_no_formats(self):
display = formats.metric_display(False)
self.assertEqual('false', display)
[docs] def test_int_value_no_formats(self):
display = formats.metric_display(12345)
self.assertEqual('12,345', display)
[docs] def test_decimal_value_no_formats(self):
display = formats.metric_display(12345.123456789)
self.assertEqual('12,345.123457', display)
[docs] def test_str_value_with_prefix(self):
display = formats.metric_display('abcdef', prefix='$')
self.assertEqual('$abcdef', display)
[docs] def test_bool_true_value_with_prefix(self):
display = formats.metric_display(True, prefix='$')
self.assertEqual('$true', display)
[docs] def test_bool_false_value_with_prefix(self):
display = formats.metric_display(False, prefix='$')
self.assertEqual('$false', display)
[docs] def test_int_value_with_prefix(self):
display = formats.metric_display(12345, prefix='$')
self.assertEqual('$12,345', display)
[docs] def test_decimal_value_with_prefix(self):
display = formats.metric_display(12345.123456789, prefix='$')
self.assertEqual('$12,345.123457', display)
[docs] def test_str_value_with_suffix(self):
display = formats.metric_display('abcdef', suffix='€')
self.assertEqual('abcdef€', display)
[docs] def test_bool_true_value_with_suffix(self):
display = formats.metric_display(True, suffix='€')
self.assertEqual('true€', display)
[docs] def test_bool_false_value_with_suffix(self):
display = formats.metric_display(False, suffix='€')
self.assertEqual('false€', display)
[docs] def test_int_value_with_suffix(self):
display = formats.metric_display(12345, suffix='€')
self.assertEqual('12,345€', display)
[docs] def test_decimal_value_with_suffix(self):
display = formats.metric_display(12345.123456789, suffix='€')
self.assertEqual('12,345.123457€', display)
[docs] def test_str_value_with_precision(self):
display = formats.metric_display('abcdef', precision=2)
self.assertEqual('abcdef', display)
[docs] def test_bool_true_value_with_precision(self):
display = formats.metric_display(True, precision=2)
self.assertEqual('true', display)
[docs] def test_bool_false_value_with_precision(self):
display = formats.metric_display(False, precision=2)
self.assertEqual('false', display)
[docs] def test_int_value_with_precision(self):
display = formats.metric_display(12345, precision=2)
self.assertEqual('12,345', display)
[docs] def test_decimal_value_with_precision_0(self):
display = formats.metric_display(12345.123456789, precision=0)
self.assertEqual('12,345', display)
[docs] def test_decimal_value_with_precision_2(self):
display = formats.metric_display(12345.123456789, precision=2)
self.assertEqual('12,345.12', display)
[docs] def test_decimal_value_with_precision_9(self):
display = formats.metric_display(12345.123456789, precision=9)
self.assertEqual('12,345.123456789', display)
[docs] def test_decimal_value_with_precision_trim_trailing_zeros(self):
result = formats.metric_display(1.01)
self.assertEqual('1.01', result)
[docs] def test_nan_format_no_formatting(self):
display = formats.metric_display('NaN', prefix='$', suffix='€', precision=2)
self.assertEqual('null', display)
[docs] def test_inf_format_no_formatting(self):
display = formats.metric_display('Inf', prefix='$', suffix='€', precision=2)
self.assertEqual('Inf', display)
[docs] def test_null_format_no_formatting(self):
display = formats.metric_display('null', prefix='$', suffix='€', precision=2)
self.assertEqual('null', display)
[docs] def test_negative_usd_float_value(self):
display = formats.metric_display(-0.12, prefix='$')
self.assertEqual('-$0.12', display)
[docs] def test_negative_usd_int_value(self):
display = formats.metric_display(-12, prefix='$')
self.assertEqual('-$12', display)
[docs]class CoerceTypeTests(TestCase):
[docs] def allow_literal_nan(self):
result = formats.coerce_type('nan')
self.assertEqual('nan', result)
[docs] def allow_literal_nan_upper(self):
result = formats.coerce_type('NAN')
self.assertEqual('NAN', result)
[docs] def allow_literal_inf(self):
result = formats.coerce_type('inf')
self.assertEqual('inf', result)
[docs] def allow_literal_inf_upper(self):
result = formats.coerce_type('INF')
self.assertEqual('INF', result)