Add granular consent preference flow and regression tests
This commit is contained in:
@@ -21,3 +21,47 @@ def test_consent_post_view(client):
|
||||
resp = client.post("/consent/", {"accept_all": "1"}, follow=False)
|
||||
assert resp.status_code == 302
|
||||
assert CONSENT_COOKIE_NAME in resp.cookies
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_consent_get_without_cookie_defaults_false():
|
||||
request = HttpRequest()
|
||||
state = ConsentService.get_consent(request)
|
||||
assert state.analytics is False
|
||||
assert state.advertising is False
|
||||
assert state.requires_prompt is True
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_consent_malformed_cookie_returns_safe_default():
|
||||
request = HttpRequest()
|
||||
request.COOKIES[CONSENT_COOKIE_NAME] = "not=a=valid%%%cookie"
|
||||
state = ConsentService.get_consent(request)
|
||||
assert state.analytics is False
|
||||
assert state.advertising is False
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_consent_post_preferences(client):
|
||||
resp = client.post("/consent/", {"analytics": "1", "advertising": ""})
|
||||
assert resp.status_code == 302
|
||||
value = resp.cookies[CONSENT_COOKIE_NAME].value
|
||||
assert "a=1" in value
|
||||
assert "d=0" in value
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_consent_get_method_not_allowed(client):
|
||||
resp = client.get("/consent/")
|
||||
assert resp.status_code == 405
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_cookie_banner_hides_after_consent(client, home_page):
|
||||
first = client.get("/")
|
||||
assert "id=\"cookie-banner\"" in first.content.decode()
|
||||
consented = client.post("/consent/", {"accept_all": "1"})
|
||||
cookie_value = consented.cookies[CONSENT_COOKIE_NAME].value
|
||||
client.cookies[CONSENT_COOKIE_NAME] = cookie_value
|
||||
second = client.get("/")
|
||||
assert "id=\"cookie-banner\"" not in second.content.decode()
|
||||
|
||||
Reference in New Issue
Block a user