API - handle user username and email case on login/register
This commit is contained in:
		@@ -3,6 +3,7 @@ from datetime import datetime, timedelta
 | 
			
		||||
from io import BytesIO
 | 
			
		||||
from unittest.mock import Mock, patch
 | 
			
		||||
 | 
			
		||||
import pytest
 | 
			
		||||
from flask import Flask
 | 
			
		||||
from freezegun import freeze_time
 | 
			
		||||
 | 
			
		||||
@@ -37,8 +38,38 @@ class TestUserRegistration:
 | 
			
		||||
        assert response.content_type == 'application/json'
 | 
			
		||||
        assert response.status_code == 201
 | 
			
		||||
 | 
			
		||||
    def test_it_returns_error_if_user_already_exists(
 | 
			
		||||
        self, app: Flask, user_1: User
 | 
			
		||||
    @pytest.mark.parametrize(
 | 
			
		||||
        'input_username',
 | 
			
		||||
        ['test', 'TEST'],
 | 
			
		||||
    )
 | 
			
		||||
    def test_it_returns_error_if_user_already_exists_with_same_username(
 | 
			
		||||
        self, app: Flask, user_1: User, input_username: str
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        client = app.test_client()
 | 
			
		||||
        response = client.post(
 | 
			
		||||
            '/api/auth/register',
 | 
			
		||||
            data=json.dumps(
 | 
			
		||||
                dict(
 | 
			
		||||
                    username=input_username,
 | 
			
		||||
                    email='another_email@test.com',
 | 
			
		||||
                    password='12345678',
 | 
			
		||||
                    password_conf='12345678',
 | 
			
		||||
                )
 | 
			
		||||
            ),
 | 
			
		||||
            content_type='application/json',
 | 
			
		||||
        )
 | 
			
		||||
        data = json.loads(response.data.decode())
 | 
			
		||||
        assert data['status'] == 'error'
 | 
			
		||||
        assert data['message'] == 'sorry, that user already exists'
 | 
			
		||||
        assert response.content_type == 'application/json'
 | 
			
		||||
        assert response.status_code == 400
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.parametrize(
 | 
			
		||||
        'input_email',
 | 
			
		||||
        ['test@test.com', 'TEST@TEST.COM'],
 | 
			
		||||
    )
 | 
			
		||||
    def test_it_returns_error_if_user_already_exists_with_same_email(
 | 
			
		||||
        self, app: Flask, user_1: User, input_email: str
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        client = app.test_client()
 | 
			
		||||
        response = client.post(
 | 
			
		||||
@@ -292,12 +323,40 @@ class TestUserRegistration:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestUserLogin:
 | 
			
		||||
    def test_user_can_register(self, app: Flask, user_1: User) -> None:
 | 
			
		||||
    @pytest.mark.parametrize(
 | 
			
		||||
        'input_email',
 | 
			
		||||
        ['test@test.com', 'TEST@TEST.COM'],
 | 
			
		||||
    )
 | 
			
		||||
    def test_user_can_login(
 | 
			
		||||
        self, app: Flask, user_1: User, input_email: str
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        client = app.test_client()
 | 
			
		||||
 | 
			
		||||
        response = client.post(
 | 
			
		||||
            '/api/auth/login',
 | 
			
		||||
            data=json.dumps(dict(email='test@test.com', password='12345678')),
 | 
			
		||||
            data=json.dumps(dict(email=input_email, password='12345678')),
 | 
			
		||||
            content_type='application/json',
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        assert response.content_type == 'application/json'
 | 
			
		||||
        assert response.status_code == 200
 | 
			
		||||
        data = json.loads(response.data.decode())
 | 
			
		||||
        assert data['status'] == 'success'
 | 
			
		||||
        assert data['message'] == 'successfully logged in'
 | 
			
		||||
        assert data['auth_token']
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.parametrize(
 | 
			
		||||
        'input_email',
 | 
			
		||||
        ['test@test.com', 'TEST@TEST.COM'],
 | 
			
		||||
    )
 | 
			
		||||
    def test_user_can_login_when_user_email_is_uppercase(
 | 
			
		||||
        self, app: Flask, user_1_upper: User, input_email: str
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        client = app.test_client()
 | 
			
		||||
 | 
			
		||||
        response = client.post(
 | 
			
		||||
            '/api/auth/login',
 | 
			
		||||
            data=json.dumps(dict(email=input_email, password='12345678')),
 | 
			
		||||
            content_type='application/json',
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user