finance-watcher / test / api / endpoints / test_user.py
test_user.py
Raw
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