This commit is contained in:
Kenneth Kehl
2025-09-17 12:16:12 -07:00
parent cef8917614
commit 518823439e
4 changed files with 39 additions and 112 deletions
+4 -4
View File
@@ -527,7 +527,7 @@
"filename": "tests/app/main/views/test_register.py", "filename": "tests/app/main/views/test_register.py",
"hashed_secret": "bdbb156d25d02fd7792865824201dda1c60f4473", "hashed_secret": "bdbb156d25d02fd7792865824201dda1c60f4473",
"is_verified": false, "is_verified": false,
"line_number": 118, "line_number": 111,
"is_secret": false "is_secret": false
}, },
{ {
@@ -535,7 +535,7 @@
"filename": "tests/app/main/views/test_register.py", "filename": "tests/app/main/views/test_register.py",
"hashed_secret": "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8", "hashed_secret": "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8",
"is_verified": false, "is_verified": false,
"line_number": 188, "line_number": 172,
"is_secret": false "is_secret": false
}, },
{ {
@@ -543,7 +543,7 @@
"filename": "tests/app/main/views/test_register.py", "filename": "tests/app/main/views/test_register.py",
"hashed_secret": "bb5b7caa27d005d38039e3797c3ddb9bcd22c3c8", "hashed_secret": "bb5b7caa27d005d38039e3797c3ddb9bcd22c3c8",
"is_verified": false, "is_verified": false,
"line_number": 259, "line_number": 243,
"is_secret": false "is_secret": false
} }
], ],
@@ -634,5 +634,5 @@
} }
] ]
}, },
"generated_at": "2025-09-09T19:57:05Z" "generated_at": "2025-09-17T19:16:00Z"
} }
+25 -2
View File
@@ -3,6 +3,8 @@ import uuid
import pytest import pytest
from flask import url_for from flask import url_for
from hypothesis import HealthCheck, given, settings
from hypothesis import strategies as st
import app import app
from app.enums import ServicePermission from app.enums import ServicePermission
@@ -1219,16 +1221,37 @@ def test_cancel_invited_user_cancels_user_invitations(
) )
# @pytest.mark.usefixtures(
# "client_request",
# "mocker",
# )
# def test_cancel_invited_user_doesnt_work_if_user_not_invited_to_this_service(
# client_request,
# mocker,
# ):
# @given(fuzzed_uuid=st.uuids())
# def inner(fuzzed_uuid):
# mock_cancel = mocker.patch("app.invite_api_client.cancel_invited_user")
# client_request.get(
# "main.cancel_invited_user",
# service_id=SERVICE_ONE_ID,
# invited_user_id=fuzzed_uuid,
# _expected_status=404,
# )
# assert mock_cancel.called is False
# inner()
def test_cancel_invited_user_doesnt_work_if_user_not_invited_to_this_service( def test_cancel_invited_user_doesnt_work_if_user_not_invited_to_this_service(
client_request, client_request,
mock_get_invites_for_service,
mocker, mocker,
): ):
mock_cancel = mocker.patch("app.invite_api_client.cancel_invited_user") mock_cancel = mocker.patch("app.invite_api_client.cancel_invited_user")
client_request.get( client_request.get(
"main.cancel_invited_user", "main.cancel_invited_user",
service_id=SERVICE_ONE_ID, service_id=SERVICE_ONE_ID,
invited_user_id=sample_uuid(), invited_user_id="6ce466d0-fd6a-11e5-82f5-e0accb9d11a6",
_expected_status=404, _expected_status=404,
) )
assert mock_cancel.called is False assert mock_cancel.called is False
+10 -32
View File
@@ -3,7 +3,9 @@ import json
from unittest.mock import ANY from unittest.mock import ANY
import pytest import pytest
from flask import url_for from flask import current_app, url_for
from hypothesis import HealthCheck, given, settings
from hypothesis import strategies as st
from app.enums import ServicePermission from app.enums import ServicePermission
from app.main.views.register import ( from app.main.views.register import (
@@ -78,15 +80,6 @@ def test_register_creates_new_user_and_redirects_to_continue_page(
== "An email has been sent to notfound@example.gsa.gov." == "An email has been sent to notfound@example.gsa.gov."
) )
# mock_send_verify_email.assert_called_with(ANY, user_data["email_address"])
# mock_register_user.assert_called_with(
# user_data["name"],
# user_data["email_address"],
# user_data["mobile_number"],
# user_data["password"],
# user_data["auth_type"],
# )
def test_register_continue_handles_missing_session_sensibly(client_request, mocker): def test_register_continue_handles_missing_session_sensibly(client_request, mocker):
@@ -139,33 +132,24 @@ def test_should_return_200_when_email_is_not_gov_uk(
) )
@pytest.mark.parametrize( @settings(suppress_health_check=[HealthCheck.function_scoped_fixture])
"email_address", @given(
[ fuzzed_email_address=st.from_regex(
"notfound@example.gsa.gov", r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}", fullmatch=True
"example@lsquo.si.edu", )
],
) )
def test_should_add_user_details_to_session( def test_should_add_user_details_to_session(
client_request, client_request,
mocker, mocker,
mock_send_verify_code, fuzzed_email_address,
mock_register_user,
mock_get_user_by_email_not_found,
mock_get_organizations_with_unusual_domains,
mock_email_is_not_already_in_use,
mock_send_verify_email,
mock_login,
email_address,
): ):
mocker.patch("app.notify_client.user_api_client.UserApiClient.deactivate_user") mocker.patch("app.notify_client.user_api_client.UserApiClient.deactivate_user")
client_request.logout() client_request.logout()
client_request.post( client_request.post(
"main.register", "main.register",
_data={ _data={
"name": "Test Codes", "name": "Test Codes",
"email_address": email_address, "email_address": fuzzed_email_address,
"mobile_number": "+12023123123", "mobile_number": "+12023123123",
"password": "validPassword!", "password": "validPassword!",
}, },
@@ -451,12 +435,6 @@ def test_decode_state(encoded_invite_data):
} }
# @pytest.mark.parametrize(
# ("user_services", "user_organizations", "expected_status", "organization_checked"),
# [
# ([SERVICE_ONE_ID], [], 200, False),
@pytest.mark.parametrize( @pytest.mark.parametrize(
("invite_data", "expected_is_org_invite", "expected_user_id"), ("invite_data", "expected_is_org_invite", "expected_user_id"),
[ [
-74
View File
@@ -14,8 +14,6 @@ from zipfile import BadZipFile
import pytest import pytest
from flask import url_for from flask import url_for
from hypothesis import HealthCheck, given, settings
from hypothesis import strategies as st
from xlrd.biffh import XLRDError from xlrd.biffh import XLRDError
from xlrd.xldate import XLDateAmbiguous, XLDateError, XLDateNegative, XLDateTooLarge from xlrd.xldate import XLDateAmbiguous, XLDateError, XLDateNegative, XLDateTooLarge
@@ -106,78 +104,6 @@ test_spreadsheet_files = glob(path.join("tests", "spreadsheet_files", "*"))
test_non_spreadsheet_files = glob(path.join("tests", "non_spreadsheet_files", "*")) test_non_spreadsheet_files = glob(path.join("tests", "non_spreadsheet_files", "*"))
@settings(max_examples=10, suppress_health_check=[HealthCheck.function_scoped_fixture])
@given(
rows=st.integers(min_value=1, max_value=10),
rows_data=st.lists(
st.tuples(
st.text(
min_size=10,
max_size=15,
alphabet=st.characters(min_codepoint=ord("0"), max_codepoint=ord("9")),
),
st.text(
min_size=1,
max_size=20,
alphabet=st.characters(whitelist_categories=["L", "N", "Zs"]),
),
st.text(
min_size=1,
max_size=20,
alphabet=st.characters(whitelist_categories=["L", "N", "Zs"]),
),
st.text(
min_size=1,
max_size=20,
alphabet=st.characters(whitelist_categories=["L", "N", "Zs"]),
),
),
min_size=1,
max_size=10,
),
)
def test_fuzz_upload_csv_batch_sms_handles_bad_and_good_input(
rows, rows_data, client_request, mocker, fake_uuid
):
mock_s3_set_metadata = mocker.patch(
"app.main.views.send.set_metadata_on_csv_upload"
)
mock_s3_upload = mocker.patch("app.main.views.send.s3upload")
mocker.patch(
"app.main.views.send.get_csv_metadata",
return_value={"original_file_name": "fuzz.csv"},
)
output = io.StringIO()
writer = csv.writer(output)
writer.writerow(["phone_number", "name", "favourite colour", "fruit"])
for row in rows_data[: min(rows, len(rows_data))]:
writer.writerow(row)
csv_content = output.getvalue()
try:
client_request.post(
"main.send_messages",
service_id=SERVICE_ONE_ID,
template_id=fake_uuid,
_data={"file": (io.BytesIO(csv_content.encode("utf-8")), "fuzz.csv")},
_content_type="multipart/form-data",
_follows_redirects=False,
)
except Exception:
print("Generated CSV that caused 500:\n", csv_content) # noqa
raise
assert mock_s3_upload.called
uploaded_data = mock_s3_upload.call_args[0][1]["data"].strip()
assert "phone number" in uploaded_data
mock_s3_set_metadata.assert_called_once_with(
SERVICE_ONE_ID, ANY, original_file_name="fuzz.csv"
)
def test_show_correct_title_and_description_for_email_sender_type( def test_show_correct_title_and_description_for_email_sender_type(
client_request, client_request,
fake_uuid, fake_uuid,