コード例 #1
0
ファイル: person_test.py プロジェクト: rhysb27/finsim
    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()
コード例 #2
0
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