#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
UnitTests related to the class Cardiovascular Risk

@author: Vertigo BioSystems
"""

import unittest
from src.vbs_riskmap.healthinfo.HealthInfo import HealthInfo
from src.vbs_riskmap.risk.CardiovascularRisk import CardiovascularRisk


class TestCardiovascularRisk(unittest.TestCase):

    def setUp(self):
        self.input_data = {"cholesterol": 180,
                           "cholesterol_hdl": 47,
                           "age": 61,
                           "height": 177,
                           "weight": 77,
                           "waist": 80,
                           "hip": 92,
                           "sex": "M",
                           "diabetes": True,
                           "hipertension": True,
                           "smoker": False,
                           "dbp": 50,
                           "sbp": 30,
                           "sbp_treated": False
                           }
        self.healthInfo = HealthInfo(self.input_data)
        self.cardiovascular_risk = CardiovascularRisk(self.healthInfo)

    def tearDown(self):
        pass

    def test_cox_cardiovascular_risk_test(self):
        self.assertEqual(self.cardiovascular_risk.
                         cox_cardiovascular_risk_test(), 1.5692878235103458)

    def test_cox_cardiovascular_risk_test_no_parameters(self):
        healthInfo = HealthInfo({"age": 28, "waist": 30})
        cardiovascular_risk = CardiovascularRisk(healthInfo)
        self.assertEqual(cardiovascular_risk.cox_cardiovascular_risk_test(),
                         None)

    def test_framingham_test(self):
        ft = self.cardiovascular_risk.framingham_test()
        self.assertAlmostEqual(ft.get("framingham_test"), 11.2)
        self.assertAlmostEqual(ft.get("heart_age"), 57)

    def test_framingham_test_no_parameters(self):
        healthInfo = HealthInfo({"age": 28, "waist": 30})
        cardiovascular_risk = CardiovascularRisk(healthInfo)
        ft = cardiovascular_risk.framingham_test()
        self.assertEqual(ft, None)


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