Example #1
0
    def test_process_mode__ok_group(self, mock_json, _):
        test_data = generate_test_data()
        mock_json.return_value = test_data
        sim_data = SimData()

        self.assertTrue(sim_data.group_mode)
        self.assertTrue(sim_data.proportional_expenses)
Example #2
0
    def test_init(self, mock_process, mock_lower, mock_json, _):
        mock_json.return_value = generate_test_data()
        sim_data = SimData()

        mock_json.assert_called_once()
        mock_lower.assert_called_once()
        mock_process.assert_called_once()
        self.assertDictEqual(sim_data.data, {'test_data': 'test'})
Example #3
0
    def test_people(self, mock_json, _):
        mock_json.return_value = generate_test_data()
        sim_data = SimData()
        result = sim_data.get_people()

        self.assertEqual(len(result), 2)
        self.assertEqual(result[0]['name'], 'Alice')
        self.assertEqual(result[1]['name'], 'Bob')
Example #4
0
    def test_get_shared_expenses(self, mock_json, _):
        mock_json.return_value = generate_test_data()
        sim_data = SimData()
        result = sim_data.get_shared_expenses()

        self.assertIn('monthly', result)
        self.assertIn('annual', result)
        self.assertEqual(len(result['monthly']), 2)
        self.assertEqual(len(result['annual']), 2)
Example #5
0
    def test_process_mode__ok_single(self, mock_json, _):
        test_data = generate_test_data()
        del test_data['group']
        del test_data['people'][1]
        mock_json.return_value = test_data
        sim_data = SimData()

        self.assertFalse(sim_data.group_mode)
        self.assertIsNone(sim_data.proportional_expenses)
Example #6
0
    def test_validate_expenses__err_invalid_inflation(self, mock_val_obj, *_):
        test_data = generate_test_data()['people'][0]['expenses']
        test_data['monthly'][0]['inflation'] = 'yes'

        with self.assertRaises(DataImportError) as context:
            SimData._validate_expenses(test_data)

        expected_err = 'The "inflation" attribute of an expense item, if included, must be either "true" or "false".'
        self.assertEqual(expected_err, str(context.exception))
Example #7
0
    def test_validate_expenses__err_negative_cost(self, mock_val_obj, *_):
        test_data = generate_test_data()['people'][0]['expenses']
        test_data['monthly'][0]['cost'] = '-100'

        with self.assertRaises(DataImportError) as context:
            SimData._validate_expenses(test_data)

        expected_err = 'Expense costs must be greater than Zero.'
        self.assertEqual(expected_err, str(context.exception))
Example #8
0
    def test_validate_expenses__err_invalid_cost(self, mock_val_obj, *_):
        test_data = generate_test_data()['people'][0]['expenses']
        test_data['monthly'][0]['cost'] = 'ten'

        with self.assertRaises(DataImportError) as context:
            SimData._validate_expenses(test_data)

        expected_err = 'Expense costs must be a valid number.'
        self.assertEqual(expected_err, str(context.exception))
Example #9
0
    def test_process__missing_savings_goal(self, mock_val_exp, mock_val_people,
                                           mock_json, _):
        test_data = generate_test_data()
        del test_data['savings_goal']
        mock_json.return_value = test_data

        sim_data = SimData()

        self.assertIsNone(sim_data.savings_goal)
Example #10
0
    def test_process__group_mode(self, mock_val_exp, mock_val_people,
                                 mock_json, _):
        test_data = generate_test_data()
        mock_json.return_value = test_data
        sim_data = SimData()

        mock_val_people.assert_called_once()
        mock_val_exp.assert_any_call(test_data['group']['expenses'])
        self.assertEqual(sim_data.savings_goal, Decimal('10000'))
Example #11
0
    def test_validate_people__err_missing_savings(self, mock_val_exp,
                                                  mock_val_obj, *_):
        test_data = generate_test_data()['people']
        test_data[0]['savings'] = []

        with self.assertRaises(DataImportError) as context:
            SimData._validate_people(test_data)

        expected_err = 'Alice must have at least one savings account.'
        self.assertEqual(expected_err, str(context.exception))
Example #12
0
    def test_validate_people__err_invalid_name(self, mock_val_exp,
                                               mock_val_obj, *_):
        test_data = generate_test_data()['people']
        test_data[0]['name'] = 100

        with self.assertRaises(DataImportError) as context:
            SimData._validate_people(test_data)

        expected_err = 'Each person in the data file must have a valid name.'
        self.assertEqual(expected_err, str(context.exception))
Example #13
0
    def test_process_mode__err_missing_group(self, mock_json, _):
        test_data = generate_test_data()
        del test_data['group']
        mock_json.return_value = test_data

        with self.assertRaises(DataImportError) as context:
            sim_data = SimData()

        expected_err = 'If the data file contains more than one person, a "group" must be defined.'
        self.assertEqual(expected_err, str(context.exception))
Example #14
0
    def test_process_mode__err_redundant_group(self, mock_json, _):
        test_data = generate_test_data()
        del test_data['people'][1]
        mock_json.return_value = test_data

        with self.assertRaises(DataImportError) as context:
            sim_data = SimData()

        expected_err = '"Group" data is not permitted when only one person is defined.'
        self.assertEqual(expected_err, str(context.exception))
Example #15
0
    def test_process__invalid_savings_goal(self, mock_val_exp, mock_val_people,
                                           mock_json, _):
        test_data = generate_test_data()
        test_data['savings_goal'] = 'LOTS OF MONEY'
        mock_json.return_value = test_data

        with self.assertRaises(DataImportError) as context:
            sim_data = SimData()

        expected_err = 'Savings Goal must be a valid number.'
        self.assertEqual(expected_err, str(context.exception))
Example #16
0
    def test_process__single_mode(self, mock_val_exp, mock_val_people,
                                  mock_json, _):
        test_data = generate_test_data()
        del test_data['group']
        del test_data['people'][1]
        mock_json.return_value = test_data
        sim_data = SimData()

        mock_val_people.assert_called_once()
        mock_val_exp.assert_not_called()
        self.assertEqual(sim_data.savings_goal, Decimal('10000'))
Example #17
0
    def test_process__negative_savings_goal(self, mock_val_exp,
                                            mock_val_people, mock_json, _):
        test_data = generate_test_data()
        test_data['savings_goal'] = '-1000'
        mock_json.return_value = test_data

        with self.assertRaises(DataImportError) as context:
            sim_data = SimData()

        expected_err = 'Savings Goal must be greater than Zero.'
        self.assertEqual(expected_err, str(context.exception))
Example #18
0
    def test_process_mode__err_no_people(self, mock_json, _):
        test_data = generate_test_data()
        test_data['people'] = []
        del test_data['group']
        mock_json.return_value = test_data

        with self.assertRaises(DataImportError) as context:
            sim_data = SimData()

        expected_err = 'The data file must contain at least one person.'
        self.assertEqual(expected_err, str(context.exception))
Example #19
0
    def test_validate_object__err_invalid_attr(self, *_):
        test_data = generate_test_data()['people'][0]
        test_data['invalid_attr'] = 'TEST'

        with self.assertRaises(DataImportError) as context:
            SimData._validate_object(test_data,
                                     'person',
                                     req_attr=['name', 'salary', 'savings'],
                                     optional_attr=['expenses', 'debts'])

        expected_err = '"invalid_attr" is not a valid attribute of "person".'
        self.assertEqual(expected_err, str(context.exception))
Example #20
0
    def test_validate_object__err_missing_attr(self, *_):
        test_data = generate_test_data()['people'][0]
        del test_data['salary']

        with self.assertRaises(DataImportError) as context:
            SimData._validate_object(test_data,
                                     'person',
                                     req_attr=['name', 'salary', 'savings'],
                                     optional_attr=['expenses', 'debts'])

        expected_err = '"person" object must contain a "salary" attribute.'
        self.assertEqual(expected_err, str(context.exception))
Example #21
0
def generate_data_mock(group_mode=True, savings_goal='10000'):
    data = generate_test_data()
    mock_data = Mock()
    mock_data.group_mode = group_mode
    if not group_mode:
        del data['people'][1]
        del data['group']

    mock_data.get_people.return_value = data['people']
    if savings_goal is not None:
        mock_data.savings_goal = Decimal(savings_goal)
    else:
        mock_data.savings_goal = None

    return mock_data
Example #22
0
    def test_lower_keys(self, *_):
        test_data = generate_test_data()
        test_data['people'][0]['Name'] = test_data['people'][0]['name']
        test_data['group']['expenses']['monthly'][0]['Cost'] = test_data[
            'group']['expenses']['monthly'][0]['cost']
        test_data['People'] = test_data['people']
        del test_data['group']['expenses']['monthly'][0]['cost']
        del test_data['people']

        result = _lower_keys(test_data)

        self.assertNotIn('People', result)
        self.assertIn('people', result)
        self.assertNotIn('Name', result['people'][0])
        self.assertIn('name', result['people'][0])
        self.assertNotIn('Cost', result['group']['expenses']['monthly'][0])
        self.assertIn('cost', result['group']['expenses']['monthly'][0])
        self.assertEqual(result['people'][0]['name'], 'Alice')
        self.assertEqual(result['group']['expenses']['monthly'][0]['cost'],
                         '500.00')
Example #23
0
def generate_data_mock():
    data = generate_test_data()
    mock_data = Mock()
    mock_data.get_people.return_value = data['people']
    mock_data.get_shared_expenses.return_value = data['group']['expenses']
    return mock_data
Example #24
0
    def test_validate_people__ok(self, mock_val_exp, mock_val_obj, *_):
        test_data = generate_test_data()['people']
        SimData._validate_people(test_data)

        self.assertEqual(mock_val_obj.call_count, 7)
        self.assertEqual(mock_val_exp.call_count, 2)
Example #25
0
    def test_validate_expenses__ok(self, mock_val_obj, *_):
        test_data = generate_test_data()['people'][0]['expenses']
        SimData._validate_expenses(test_data)

        self.assertEqual(mock_val_obj.call_count, 2)
Example #26
0
 def test_validate_object__ok(self, *_):
     test_data = generate_test_data()['people'][0]
     SimData._validate_object(test_data,
                              'person',
                              req_attr=['name', 'salary', 'savings'],
                              optional_attr=['expenses', 'debts'])