def test_strategise__new(self, mock_ui_init, *mocks): mock_new_strategy = { 'savings': {'MOCK THREE'}, 'debts': {'MOCK FOUR '} } mock_current_strategy = { 'savings': {'MOCK ONE'}, 'debts': {'MOCK TWO '} } mock_ui = Mock() mock_ui.obtain_new_strategy.return_value = mock_new_strategy mock_ui_init.return_value = mock_ui mock_savings = Mock() mock_savings_init = mocks[2] mock_savings_init.return_value = mock_savings mock_debts = Mock() mock_debts_init = mocks[3] mock_debts_init.return_value = mock_debts person = Person(generate_test_data()) person.current_strategy = mock_current_strategy person.strategise() mock_ui.obtain_new_strategy.assert_called_once() self.assertDictEqual(person.current_strategy, mock_new_strategy) self.assertListEqual(person.outdated_strategies, [mock_current_strategy]) mock_savings.apply_strategy.assert_called_with( mock_new_strategy['savings']) mock_debts.apply_strategy.assert_called_with( mock_new_strategy['debts']) mock_debts.reset_recently_cleared.assert_called_once() self.assertFalse(person.updated)
def test_total_saved(self, *mocks): mock_savings = Mock() mock_savings.total_saved.return_value = Decimal('1500') mock_savings_init = mocks[2] mock_savings_init.return_value = mock_savings person = Person(generate_test_data()) result = person.total_saved() self.assertEqual(result, Decimal('1500'))
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 test_simulate_month__not_updated(self, *mocks): mock_savings = Mock() mock_savings_init = mocks[2] mock_savings_init.return_value = mock_savings mock_debts = Mock() mock_debts.recently_cleared = [] mock_debts_init = mocks[3] mock_debts_init.return_value = mock_debts person = Person(generate_test_data()) person.simulate_month() mock_debts.pay.assert_called_once() mock_savings.deposit.assert_called_once() self.assertFalse(person.updated)
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()
def test_end_year(self, mock_expenses_init, mock_payroll_init, mock_savings_init, mock_debts_init): mock_expenses = Mock() mock_expenses_init.return_value = mock_expenses mock_payroll = Mock() mock_payroll_init.return_value = mock_payroll mock_savings = Mock() mock_savings_init.return_value = mock_savings mock_debts = Mock() mock_debts_init.return_value = mock_debts person = Person(generate_test_data()) person.end_year() mock_payroll.payrise.assert_called_once() mock_expenses.inflate.assert_called_once() mock_debts.end_year.assert_called_once() mock_savings.end_year.assert_called_once()
def test_init(self, mock_expenses_init, mock_payroll_init, mock_savings_init, mock_debts_init): test_data = generate_test_data() person = Person(test_data) self.assertEqual(person.name, 'Alice') mock_payroll_init.assert_called_with(test_data['salary']) mock_expenses_init.assert_called_with(test_data['expenses']) mock_savings_init.assert_called_with(test_data['savings']) mock_debts_init.assert_called_with(test_data['debts'])
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
def __init__(self, data): people_data = data.get_people() self.people = [Person(person) for person in people_data] self.expenses = Expenses(data.get_shared_expenses()) self.proportional_expenses = data.proportional_expenses self.updated = False