|
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 |
|
) |
|
|