from api.app import app from unittest.mock import patch from test.test_objects import create_mock_budget from .test_helpers import response_data_to_dict, BASE_URL from helpers.helper_functions import get_string_from_date class TestBudgetAPI: @patch('database.finance_database.FinanceDatabase.get_budgets') def test_get(self, mock_get_budget): client = app.test_client() mock_get_budget.return_value = None response = client.get(f'{BASE_URL}/budget?dashboard_user_id=1') assert response.status_code == 500 mock_budget = create_mock_budget() mock_get_budget.return_value = [] response = client.get(f'{BASE_URL}/budget?dashboard_user_id=1') assert response.status_code == 200 mock_get_budget.return_value = [mock_budget] response = client.get(f'{BASE_URL}/budget?dashboard_user_id=1') assert response.status_code == 200 response_data = response_data_to_dict(response) assert response_data == { 'status': 'SUCCESS', 'status_code': 200, 'data': [{ 'id': mock_budget.id, 'name': mock_budget.name, 'business_type_id': mock_budget.business_type_id, 'created_date': get_string_from_date(mock_budget.created_date), 'updated_date': 'null' }] } @patch('database.finance_database.FinanceDatabase.create_budget') def test_post(self, mock_create_budget): client = app.test_client() payload = { "dashboard_user_id": 1, "name": 'UpdatedBudget', "amount": 349, "business_type_id": 100, } mock_create_budget.return_value = None response = client.post(f'{BASE_URL}/budget', json=payload) assert response.status_code == 500 mock_budget = create_mock_budget( dashboard_user_id=payload['dashboard_user_id'], name=payload['name'], amount=payload['amount'], business_type_id=payload['business_type_id'] ) mock_create_budget.return_value = mock_budget response = client.post(f'{BASE_URL}/budget', json=payload) assert response.status_code == 200 response_data = response_data_to_dict(response) assert response_data == { 'status': 'SUCCESS', 'status_code': 200, 'data': { 'id': mock_budget.id, 'name': mock_budget.name, 'business_type_id': mock_budget.business_type_id, 'created_date': get_string_from_date(mock_budget.created_date), 'updated_date': 'null' } } @patch('database.finance_database.FinanceDatabase.update_budget') def test_patch(self, mock_update_budget): client = app.test_client() payload = { 'budget_id': 1 } response = client.patch(f'{BASE_URL}/budget', json=payload) assert response.status_code == 500 payload = { 'budget_id': 1, 'name': 'TestBudget', 'amount': 200 } mock_update_budget.return_value = False response = client.patch(f'{BASE_URL}/budget', json=payload) assert response.status_code == 500 mock_update_budget.return_value = True response = client.patch(f'{BASE_URL}/budget', json=payload) assert response.status_code == 200 @patch('database.finance_database.FinanceDatabase.delete_budget') def test_delete(self, mock_delete_budget): client = app.test_client() payload = { 'dashboard_user_id': 5, 'name': 'TestBudget' } mock_delete_budget.return_value = False response = client.delete(f'{BASE_URL}/budget', json=payload) assert response.status_code == 500 mock_delete_budget.return_value = True response = client.delete(f'{BASE_URL}/budget', json=payload) assert response.status_code == 200