Skip to content
Snippets Groups Projects
test_auth_views.py 2.35 KiB
Newer Older
  • Learn to ignore specific revisions
  • from django.contrib import auth
    from django.urls import reverse
    
    
    def test_restricted_access(api_client, db):
        url = reverse("api:v1:artists-list")
        response = api_client.get(url)
    
        assert response.status_code == 401
    
    
    def test_login_correct(api_client, factories, mocker):
        login = mocker.spy(auth, "login")
        password = "hellotest"
        user = factories["users.User"]()
        user.set_password(password)
        user.save()
    
        url = reverse("api:v1:auth:login")
        data = {"username": user.username, "password": password}
        expected = {}
        response = api_client.post(url, data)
    
        assert response.status_code == 200
        assert response.data == expected
        login.assert_called_once_with(request=mocker.ANY, user=user)
    
    
    def test_login_incorrect(api_client, factories, mocker):
        login = mocker.spy(auth, "login")
        user = factories["users.User"]()
    
        url = reverse("api:v1:auth:login")
        data = {"username": user.username, "password": "invalid"}
        response = api_client.post(url, data)
    
        assert response.status_code == 400
    
        login.assert_not_called()
    
    
    def test_login_inactive(api_client, factories, mocker):
        login = mocker.spy(auth, "login")
        password = "hellotest"
        user = factories["users.User"](is_active=False)
        user.set_password(password)
        user.save()
    
        url = reverse("api:v1:auth:login")
        data = {"username": user.username, "password": password}
        response = api_client.post(url, data)
    
        assert response.status_code == 400
        assert "Invalid username or password" in response.data["non_field_errors"]
    
        login.assert_not_called()
    
    
    def test_logout(logged_in_api_client, factories, mocker):
        logout = mocker.spy(auth, "logout")
    
        url = reverse("api:v1:auth:logout")
        response = logged_in_api_client.post(url)
    
        assert response.status_code == 200
        assert response.data == {}
        logout.assert_called_once_with(request=mocker.ANY)
    
    
    def test_logout_real(api_client, factories):
        password = "hellotest"
        user = factories["users.User"]()
        user.set_password(password)
        user.save()
    
        url = reverse("api:v1:auth:login")
        data = {"username": user.username, "password": password}
        response = api_client.post(url, data)
    
        url = reverse("api:v1:auth:logout")
        response = api_client.post(url)
    
        url = reverse("api:v1:artists-list")
        response = api_client.get(url)
    
        assert response.status_code == 401