# -*- coding: utf-8 -*-
"""Tests for the common routines."""
__author__ = 'Diego Elio Pettenò'
__email__ = 'flameeyes@flameeyes.eu'
__copyright__ = 'Copyright © 2013, Diego Elio Pettenò'
__license__ = 'MIT'
import datetime
import os
import sys
import unittest
from absl.testing import parameterized
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from glucometerutils import common
from glucometerutils import exceptions
class TestGlucoseConversion(parameterized.TestCase):
def test_convert_to_mmol(self):
self.assertEqual(
5.56, common.convert_glucose_unit(
100, common.Unit.MG_DL, common.Unit.MMOL_L))
def test_convert_to_mgdl(self):
self.assertEqual(
180, common.convert_glucose_unit(
10, common.Unit.MMOL_L, common.Unit.MG_DL))
@parameterized.parameters(list(common.Unit))
def test_convert_identity(self, unit):
self.assertEqual(
100, common.convert_glucose_unit(
100, unit, unit))
@parameterized.parameters([unit.value for unit in common.Unit])
def test_convert_identity_str(self, unit_str):
self.assertEqual(
100, common.convert_glucose_unit(
100, unit_str, unit_str))
@parameterized.parameters(
(common.Unit.MMOL_L, 'foo'),
('foo', common.Unit.MG_DL),
(None, common.Unit.MG_DL),
(common.Meal.NONE, common.Unit.MG_DL))
def test_invalid_values(self, from_unit, to_unit):
with self.assertRaises(Exception):
common.convert_glucose_unit(100, from_unit, to_unit)
class TestGlucoseReading(parameterized.TestCase):
TEST_DATETIME = datetime.datetime(2018, 1 ,1, 0, 30, 45)
def test_minimal(self):
reading = common.GlucoseReading(self.TEST_DATETIME, 100)
self.assertEqual(reading.as_csv(common.Unit.MG_DL),
'"2018-01-01 00:30:45","100.00","","blood sample",""')
@parameterized.named_parameters(
('_mgdl', common.Unit.MG_DL, 100),
('_mmoll', common.Unit.MMOL_L, 5.56))
def test_value(self, unit, expected_value):
reading = common.GlucoseReading(self.TEST_DATETIME, 100)
self.assertAlmostEqual(
reading.get_value_as(unit), expected_value, places=2)
@parameterized.named_parameters(
('_meal_none',
{'meal': common.Meal.NONE},
'"2018-01-01 00:30:45","100.00","","blood sample",""'),
('_meal_before',
{'meal': common.Meal.BEFORE},
'"2018-01-01 00:30:45","100.00","Before Meal","blood sample",""'),
('_meal_after',
{'meal': common.Meal.AFTER},
'"2018-01-01 00:30:45","100.00","After Meal","blood sample",""'),
('_measurement_blood',
{'measure_method': common.MeasurementMethod.BLOOD_SAMPLE},
'"2018-01-01 00:30:45","100.00","","blood sample",""'),
('_measurement_cgm',
{'measure_method': common.MeasurementMethod.CGM},
'"2018-01-01 00:30:45","100.00","","CGM",""'),
('_comment',
{'comment': 'too much'},
'"2018-01-01 00:30:45","100.00","","blood sample","too much"'),
('_comment_quoted',
{'comment': '"too" much'},
'"2018-01-01 00:30:45","100.00","","blood sample","\"too\" much"'),
)
def test_csv(self, kwargs_dict, expected_csv):
reading = common.GlucoseReading(
self.TEST_DATETIME, 100, **kwargs_dict)
self.assertEqual(reading.as_csv(common.Unit.MG_DL), expected_csv)
class TestMeterInfo(parameterized.TestCase):
@parameterized.named_parameters(
('_no_serial_number',
{},
'Serial Number: N/A\n'),
('_serial_number',
{'serial_number': 1234},
'Serial Number: 1234\n'),
('_no_version_information',
{},
'Version Information:\n N/A\n'),
('_version_information_1',
{'version_info': ['test']},
'Version Information:\n test\n'),
('_version_information_2',
{'version_info': ['test', 'test2']},
'Version Information:\n test\n test2\n'),
('_default_native_unit',
{},
'Native Unit: mg/dL\n'),
)
def test_meter_info(self, kwargs_dict, expected_fragment):
info = common.MeterInfo(self.id(), **kwargs_dict)
self.assertIn(expected_fragment, str(info))
if __name__ == '__main__':
unittest.main()