from django.test import TestCase from core.models import MutualFund, Stock from core.mfrating.score_calculator import MutualFundScorer, MFRating from core.tests.data import test_data class MutualFundScorerTestCase(TestCase): """ Test case for the MutualFundScorer class to test scores. """ def setUp(self): self.stock_data = [ {"isin_number": "INE040A01034", "rank": 10}, {"isin_number": "INE090A01021", "rank": 21}, {"isin_number": "INE002A01018", "rank": 131}, {"isin_number": "INE154A01025", "rank": 99}, {"isin_number": "INE018A01030", "rank": 31}, {"isin_number": "INE280A01028", "rank": 2}, ] self.mutual_fund_data = [ { "isin_number": "ISIN1", "fund_name": "Testing Fund 1", "rank": 1, "aum": 837.3, "crisil_rank": 4, "security_id": "SEC1", "data": test_data[1], }, { "isin_number": "ISIN2", "fund_name": "Testing Fund 2", "rank": 2, "aum": 210.3, "crisil_rank": 1, "security_id": "SEC2", "data": test_data[2], }, { "isin_number": "ISIN3", "fund_name": "Testing Fund 3", "rank": 3, "aum": 639.3, "crisil_rank": 3, "security_id": "SEC3", "data": test_data[3], }, { "isin_number": "ISIN4", "fund_name": "Testing Fund 4", "rank": 4, "aum": 410.3, "crisil_rank": 2, "security_id": "SEC4", "data": test_data[4], }, { "isin_number": "ISIN5", "fund_name": "Testing Fund 5", "rank": 5, "aum": 1881.3, "crisil_rank": 5, "security_id": "SEC5", "data": test_data[5], }, ] self.create_stock_objects() self.create_mutual_fund_objects() self.mf_scorer = MutualFundScorer() def create_stock_objects(self): """ Create stock objects using the predefined stock data. """ self.stock_objects = [Stock.objects.create(**data) for data in self.stock_data] def create_mutual_fund_objects(self): """ Create mutual fund objects using the predefined mutual fund data. """ self.mutual_fund_objects = [ MutualFund.objects.create(**data) for data in self.mutual_fund_data ] def test_get_scores_returns_sorted_list(self): """ Test whether the get_scores method returns a sorted list of scores. """ scores = self.mf_scorer.get_scores() self.assertEqual(len(scores), 5) self.assertEqual( scores, sorted(scores, key=lambda x: x["overall_score"], reverse=True) ) expected_scores = [0.4263, 0.3348, 0.2962, 0.2447, 0.2101] for i, expected_score in enumerate(expected_scores): self.assertAlmostEqual( scores[i]["overall_score"], expected_score, delta=1e-4 )