import pytest
from rest_framework import status
from rest_framework.reverse import reverse


@pytest.mark.django_db
def test_get_person_fail(client):
    """Anonymous user cannot get person info"""
    url = reverse("gregui-v1:person-get", kwargs={"id": 1})
    response = client.get(url)
    assert response.status_code == status.HTTP_403_FORBIDDEN


@pytest.mark.django_db
def test_get_person(client, log_in, user_sponsor, invited_person):
    """Logged in sponsor can get person info"""
    person, _ = invited_person
    url = reverse("gregui-v1:person-get", kwargs={"id": person.id})
    log_in(user_sponsor)
    response = client.get(url)
    assert response.status_code == status.HTTP_200_OK


@pytest.mark.django_db
def test_patch_person_no_data_fail(client, log_in, user_sponsor, invited_person):
    """No data in patch should fail"""
    person, _ = invited_person
    url = reverse("gregui-v1:person-get", kwargs={"id": person.id})
    log_in(user_sponsor)
    response = client.patch(url)
    assert response.status_code == status.HTTP_400_BAD_REQUEST


@pytest.mark.django_db
def test_patch_person_new_email_ok(client, log_in, user_sponsor, invited_person):
    """Logged in sponsor can update email address of person"""
    person, _ = invited_person
    url = reverse("gregui-v1:person-get", kwargs={"id": person.id})
    log_in(user_sponsor)
    assert person.private_email.value == "foo@example.org"
    response = client.patch(url, data={"email": "new@example.com"})
    assert response.status_code == status.HTTP_200_OK
    person.refresh_from_db()
    assert person.private_email.value == "new@example.com"