def test_begin_year(self, mock_strat, mock_expenses_init, mock_payroll_init, *_): mock_expenses = Mock() mock_expenses.monthly_total = Decimal('50') mock_expenses_init.return_value = mock_expenses mock_payroll = Mock() mock_payroll.net_monthly = Decimal('1500') mock_payroll_init.return_value = mock_payroll test_data = generate_test_data() person = Person(test_data) person.begin_year(joint_contrib=Decimal('1000')) self.assertEqual(person.joint_contrib, Decimal('1000')) self.assertEqual(person.disposable_income, Decimal('450')) mock_strat.assert_called_once()
class Simulation: def __init__(self, data): self.group_mode = data.group_mode if self.group_mode: self.model = Group(data) else: self.model = Person(data.get_people()[0]) self.month = 0 goal_from_data = data.savings_goal if goal_from_data is not None: self.savings_goal = goal_from_data else: self.savings_goal = UI.obtain_savings_goal() def simulate(self): goal_met = False while not goal_met: self.month += 1 goal_met = self._step_forward() # TODO: Construct and save final report UI.end(self.month) def _step_forward(self): if (self.month % 12) == 1: self.model.begin_year() self.model.simulate_month() if self._achieved_goal(): return True if (self.month % 12) == 0: self.model.end_year() UI.end_year(self.model, self.month // 12) else: if self.model.updated: self.model.strategise() return False def _achieved_goal(self): return self.model.total_saved() >= self.savings_goal