#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
UnitTests for the class Anthropometry.

@author: Vertigo BioSystems
"""
import unittest

from src.vbs_riskmap.healthinfo.Anthropometry import Anthropometry


class TestAnthropometry(unittest.TestCase):

    def setUp(self):
        self.anthropometry = Anthropometry()
        self.input_data = {"age": 28,
                           "weight": 77,
                           "height": 177,
                           "sex": "M",
                           "waist": 30,
                           "hip": 38
                           }

    def tearDown(self):
        pass

    def test_setters_and_getters_parameters(self):
        self.anthropometry.set_params(self.input_data)

        self.assertNotEqual(self.anthropometry.age,  None)
        self.assertNotEqual(self.anthropometry.weight,  None)
        self.assertNotEqual(self.anthropometry.height,  None)
        self.assertNotEqual(self.anthropometry.sex,  None)
        self.assertNotEqual(self.anthropometry.waist,  None)
        self.assertNotEqual(self.anthropometry.hip,  None)

    def test_resting_energy_expenditure_1(self):
        # first test
        self.anthropometry = Anthropometry()
        self.anthropometry.weight = 77
        self.anthropometry.height = 177
        self.anthropometry.age = 28
        self.anthropometry.sex = "M"
        self.assertAlmostEqual(self.anthropometry.resting_energy_expenditure(),
                               1877.6)

    def test_resting_energy_expenditure_2(self):
        # second test
        self.anthropometry = Anthropometry()
        self.anthropometry.weight = 90
        self.anthropometry.height = 180
        self.anthropometry.age = 40
        self.anthropometry.sex = "M"
        self.assertAlmostEqual(self.anthropometry.resting_energy_expenditure(),
                               2015.5)

    def test_resting_energy_expenditure_no_parameters(self):
        # second test
        self.anthropometry = Anthropometry()
        self.anthropometry.weight = 90
        self.anthropometry.age = 40
        self.anthropometry.sex = "M"
        self.assertEqual(self.anthropometry.resting_energy_expenditure(), None)

    def test_total_energy_expenditure(self):
        # TODO
        pass

    def test_bmi(self):
        self.anthropometry = Anthropometry()
        self.anthropometry.weight = 77
        self.anthropometry.height = 177
        self.assertAlmostEqual(self.anthropometry.bmi(),
                               24.5778671518)

    def test_bmi_no_parameters(self):
        self.anthropometry = Anthropometry()
        self.anthropometry.height = 177
        self.assertEqual(self.anthropometry.bmi(), None)

    def test_body_composition(self):
        # TODO
        pass

    def test_waist_hip(self):
        self.anthropometry = Anthropometry()
        self.anthropometry.waist = 30
        self.anthropometry.hip = 38
        self.assertAlmostEqual(self.anthropometry.waist_hip(),
                               0.7894736842)


if __name__ == "__main__":
    suite = unittest.TestLoader().loadTestsFromTestCase(TestAnthropometry)
    unittest.TextTestRunner(verbosity=2).run(suite)
