Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions backend/api/tests/test_applications_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def _build_create_payload(questionnaire):
"questionnaire_id": questionnaire.id,
"questionnaire_code": questionnaire.code,
"questionnaire_version": questionnaire.version,
"privacy_consent_agreed": True,
"collection_notice_agreed": True,
"turnstile_token": "test-token",
}

Expand Down Expand Up @@ -87,16 +87,16 @@ def test_application_create_requires_privacy_consent(
questionnaire,
monkeypatch,
):
"""Reject creation unless privacy consent is explicitly acknowledged."""
"""Reject creation unless collection notice consent is explicitly acknowledged."""
monkeypatch.setattr(application_serialisers, "verify_turnstile_token", lambda *_args, **_kwargs: True)
payload = _build_create_payload(questionnaire)
payload["privacy_consent_agreed"] = False
payload["collection_notice_agreed"] = False

api_client.force_authenticate(user=user)
response = api_client.post("/api/applications", payload, format="json")

assert response.status_code == status.HTTP_400_BAD_REQUEST
assert "privacy_consent_agreed" in response.data
assert "collection_notice_agreed" in response.data


@pytest.mark.django_db
Expand Down
18 changes: 9 additions & 9 deletions backend/applications/serialisers.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ class ApplicationSerialiser(JsonSchemaSerialiserMixin, serializers.ModelSerializ
required=False,
read_only=True,
)
privacy_consent_agreed = serializers.BooleanField(
collection_notice_agreed = serializers.BooleanField(
required=False,
write_only=True,
)
Expand Down Expand Up @@ -151,7 +151,7 @@ class Meta:
"questionnaire_name",
"questionnaire_version",
"questionnaire_sort_order",
"privacy_consent_agreed",
"collection_notice_agreed",
"turnstile_token",
"status",
"created_at",
Expand Down Expand Up @@ -194,9 +194,9 @@ def get_fields(self, *args, **kwargs):
# Questionnaire version is required when creating (to confirm data integrity)
fields["questionnaire_version"].required = isPost
fields["questionnaire_version"].read_only = not isPost
# Privacy consent acknowledgement is required when creating for auditability.
fields["privacy_consent_agreed"].required = isPost
fields["privacy_consent_agreed"].read_only = not isPost
# Collection notice acknowledgement is required when creating for auditability.
fields["collection_notice_agreed"].required = isPost
fields["collection_notice_agreed"].read_only = not isPost
# Turnstile verification token is required during create and final submit PATCH.
fields["turnstile_token"].required = isPost or isPatch
fields["turnstile_token"].read_only = not (isPost or isPatch)
Expand Down Expand Up @@ -346,7 +346,7 @@ def validate(self, attrs):
questionnaire_id = questionnaire_data.get("id")
questionnaire_code = questionnaire_data.get("code")
questionnaire_version = questionnaire_data.get("version")
privacy_consent_agreed = attrs.get("privacy_consent_agreed")
collection_notice_agreed = attrs.get("collection_notice_agreed")

# Ensure all integrity fields are present.
if (
Expand All @@ -359,11 +359,11 @@ def validate(self, attrs):
"Process slug, questionnaire id, code and version are required."
)

# Creation is allowed only when explicit consent is acknowledged.
if privacy_consent_agreed is not True:
# Creation is allowed only when explicit collection notice consent is acknowledged.
if collection_notice_agreed is not True:
raise exceptions.ValidationError(
{
"privacy_consent_agreed": "This field must be true to create an application."
"collection_notice_agreed": "This field must be true to create an application."
}
)

Expand Down
8 changes: 4 additions & 4 deletions backend/applications/tests/test_serialisers.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ def setUp(self):

@patch("applications.serialisers.verify_turnstile_token")
def test_create_requires_privacy_consent(self, mock_verify):
"""ApplicationSerialiser requires privacy_consent_agreed."""
"""ApplicationSerialiser requires collection_notice_agreed."""
mock_verify.return_value = True

from django.test import RequestFactory
Expand All @@ -196,7 +196,7 @@ def test_create_requires_privacy_consent(self, mock_verify):
"questionnaire_id": self.questionnaire.id,
"questionnaire_code": self.questionnaire.code,
"questionnaire_version": self.questionnaire.version,
"privacy_consent_agreed": False, # False
"collection_notice_agreed": False, # False
"turnstile_token": "test-token",
}

Expand All @@ -206,7 +206,7 @@ def test_create_requires_privacy_consent(self, mock_verify):
)

self.assertFalse(serializer.is_valid())
self.assertIn("privacy_consent_agreed", serializer.errors or {})
self.assertIn("collection_notice_agreed", serializer.errors or {})

@patch("applications.serialisers.verify_turnstile_token")
def test_create_validates_questionnaire_exists(self, mock_verify):
Expand All @@ -225,7 +225,7 @@ def test_create_validates_questionnaire_exists(self, mock_verify):
"questionnaire_id": 99999, # Non-existent
"questionnaire_code": "new-app",
"questionnaire_version": 1,
"privacy_consent_agreed": True,
"collection_notice_agreed": True,
"turnstile_token": "test-token",
}

Expand Down
2 changes: 1 addition & 1 deletion backend/applications/tests/test_turnstile.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def _build_payload(self):
"questionnaire_id": self.questionnaire.id,
"questionnaire_code": self.questionnaire.code,
"questionnaire_version": self.questionnaire.version,
"privacy_consent_agreed": True,
"collection_notice_agreed": True,
"turnstile_token": "test-token",
}

Expand Down
2 changes: 1 addition & 1 deletion backend/e2e/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,7 @@ def draft_application(authenticated_request_context_factory, e2e_users):
"questionnaire_id": questionnaire.id,
"questionnaire_code": questionnaire.code,
"questionnaire_version": questionnaire.version,
"privacy_consent_agreed": True,
"collection_notice_agreed": True,
"turnstile_token": "e2e-turnstile-token",
}),
headers={
Expand Down
6 changes: 3 additions & 3 deletions backend/e2e/tests/test_my_applications_workflows.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def multiple_applications_fixture(authenticated_request_context_factory, e2e_use
"questionnaire_id": questionnaire.id,
"questionnaire_code": questionnaire.code,
"questionnaire_version": questionnaire.version,
"privacy_consent_agreed": True,
"collection_notice_agreed": True,
"turnstile_token": "e2e-turnstile-token",
}),
headers={
Expand All @@ -58,7 +58,7 @@ def multiple_applications_fixture(authenticated_request_context_factory, e2e_use
"questionnaire_id": questionnaire.id,
"questionnaire_code": questionnaire.code,
"questionnaire_version": questionnaire.version,
"privacy_consent_agreed": True,
"collection_notice_agreed": True,
"turnstile_token": "e2e-turnstile-token",
}),
headers={
Expand Down Expand Up @@ -105,7 +105,7 @@ def draft_application_for_discard(authenticated_request_context_factory, e2e_use
"questionnaire_id": questionnaire.id,
"questionnaire_code": questionnaire.code,
"questionnaire_version": questionnaire.version,
"privacy_consent_agreed": True,
"collection_notice_agreed": True,
"turnstile_token": "e2e-turnstile-token",
}),
headers={
Expand Down
8 changes: 4 additions & 4 deletions backend/e2e/tests/test_new_application_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def test_new_application_requires_privacy_consent_before_creation(
"questionnaire_id": questionnaire.id,
"questionnaire_code": questionnaire.code,
"questionnaire_version": questionnaire.version,
"privacy_consent_agreed": False,
"collection_notice_agreed": False,
"turnstile_token": "e2e-token",
}),
headers={
Expand All @@ -85,7 +85,7 @@ def test_new_application_requires_privacy_consent_before_creation(
request_context.dispose()

assert status == 400
assert "privacy_consent_agreed" in payload
assert "collection_notice_agreed" in payload


@pytest.mark.e2e
Expand All @@ -109,7 +109,7 @@ def test_new_application_requires_turnstile_token(
"questionnaire_id": questionnaire.id,
"questionnaire_code": questionnaire.code,
"questionnaire_version": questionnaire.version,
"privacy_consent_agreed": True,
"collection_notice_agreed": True,
}),
headers={
str(auth_context["csrf_header"]): str(auth_context["csrf_token"]),
Expand Down Expand Up @@ -146,7 +146,7 @@ def test_new_application_creation_succeeds_with_valid_payload(
"questionnaire_id": questionnaire.id,
"questionnaire_code": questionnaire.code,
"questionnaire_version": questionnaire.version,
"privacy_consent_agreed": True,
"collection_notice_agreed": True,
"turnstile_token": "e2e-token",
}),
headers={
Expand Down
2 changes: 1 addition & 1 deletion backend/e2e/tests/test_user_end_to_end_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def draft_application(authenticated_request_context_factory, e2e_users):
"questionnaire_id": questionnaire.id,
"questionnaire_code": questionnaire.code,
"questionnaire_version": questionnaire.version,
"privacy_consent_agreed": True,
"collection_notice_agreed": True,
"turnstile_token": "e2e-turnstile-token",
}),
headers={
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/layout/form/FormLayout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ export const FormLayout = () => {
showSnackbar(
<>
DBCA will collect, use and disclose your personal information in <br />
accordance with applicable privacy laws and DBCA's{" "}
accordance with applicable privacy laws and its{" "}
<Link href="/privacy" target="_blank" rel="noopener" color="inherit" underline="always">
Privacy Policy
</Link>.
Expand Down
Loading