from api.app import app from unittest.mock import patch from test.test_objects import create_mock_user from .test_helpers import response_data_to_dict, BASE_URL class TestUserAPI: @patch('database.finance_database.FinanceDatabase.insert_dashboard_user') def test_post(self, mock_insert_user): client = app.test_client() # test if failed to insert user payload = { 'name': 'name', 'email': 'email', 'password': 'password', } mock_insert_user.return_value = None response = client.post(f'{BASE_URL}/user',json=payload) assert response.status_code == 500 # test if successfully inserted user mock_user = create_mock_user() mock_insert_user.return_value = mock_user response = client.post(f'{BASE_URL}/user',json=payload) assert response.status_code == 200 response_data = response_data_to_dict(response) assert response_data == { 'status': 'SUCCESS', 'status_code': 200, "data": { 'user_id':1, 'name': 'name' }, } class TestUserByIdAPI: @patch('database.finance_database.FinanceDatabase.get_dashboard_user') def test_get(self, mock_get_user): client = app.test_client() # test if failed to get user mock_get_user.return_value = None response = client.get(f'{BASE_URL}/user/{0}') assert response.status_code == 500 # test if sucessfully get user mock_user = create_mock_user() mock_get_user.return_value = mock_user response = client.get(f'{BASE_URL}/user/{1}') response_data = response_data_to_dict(response) assert response.status_code == 200 expected = { 'status': 'SUCCESS', 'status_code': 200, "data": { 'user_id':1, 'name': 'name' }, } assert response_data == expected @patch('database.finance_database.FinanceDatabase.update_user_password') def test_put(self, mock_update_password): client = app.test_client() payload = { 'password': 'bAdPassWord' } mock_update_password.return_value = False response = client.put(f'{BASE_URL}/user/{1}', json=payload) assert response.status_code == 500 mock_update_password.return_value = True response = client.put(f'{BASE_URL}/user/{1}', json=payload) mock_update_password.assert_called_with( user_id=1, password='9233a7e6d80eeb026537cd5af4b7d12574dce8c1e6f58256a4815da82e37396d' ) assert response.status_code == 200 class TestUserPasswordAPI: @patch('database.finance_database.FinanceDatabase.check_user') @patch('database.finance_database.FinanceDatabase.get_user_by_email') def test_post(self, mock_get_user, mock_check_user): client = app.test_client() # test if failed to get user mock_get_user.return_value = None payload = { "email": 'some@email.com', "password": 'wohoho' } response = client.post(f'{BASE_URL}/user/password', json=payload) assert response.status_code == 404 mock_get_user.return_value = create_mock_user() ## invalid login credentials mock_check_user.return_value = False response = client.post(f'{BASE_URL}/user/password', json=payload) assert response.status_code == 401 ## valid login credentials mock_check_user.return_value = True response = client.post(f'{BASE_URL}/user/password', json=payload) assert response.status_code == 200