mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-12 01:48:04 -04:00
more fuzz services
This commit is contained in:
@@ -295,7 +295,7 @@
|
||||
"filename": "tests/app/service/test_rest.py",
|
||||
"hashed_secret": "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8",
|
||||
"is_verified": false,
|
||||
"line_number": 1288,
|
||||
"line_number": 1290,
|
||||
"is_secret": false
|
||||
}
|
||||
],
|
||||
@@ -374,5 +374,5 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"generated_at": "2025-09-05T01:27:41Z"
|
||||
"generated_at": "2025-09-11T16:22:46Z"
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ uuid_str_strategy = st.one_of(
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("client", "sample_scheduled_job")
|
||||
@settings(max_examples=5)
|
||||
@settings(max_examples=10)
|
||||
@given(fuzzed_job_id=uuid_str_strategy, fuzzed_service_id=uuid_str_strategy)
|
||||
def test_fuzz_cancel_job(fuzzed_job_id, fuzzed_service_id, request):
|
||||
client = request.getfixturevalue("client")
|
||||
|
||||
@@ -19,45 +19,43 @@ from tests.app.db import create_api_key, create_notification
|
||||
@pytest.mark.usefixtures(
|
||||
"client", "sample_service", "sample_template", "notify_db_session"
|
||||
)
|
||||
@settings(max_examples=10)
|
||||
@given(
|
||||
fuzzed_email_address=st.emails(),
|
||||
fuzzed_personalisation=st.dictionaries(
|
||||
keys=st.text(min_size=1, max_size=20),
|
||||
values=st.text(min_size=0, max_size=100),
|
||||
max_size=5,
|
||||
),
|
||||
fuzzed_reference=st.one_of(st.none(), st.text(min_size=0, max_size=50)),
|
||||
)
|
||||
def test_fuzz_send_email_notification(
|
||||
client,
|
||||
sample_service,
|
||||
sample_template,
|
||||
notify_db_session,
|
||||
sample_email_notification,
|
||||
fuzzed_email_address,
|
||||
fuzzed_personalisation,
|
||||
fuzzed_reference,
|
||||
):
|
||||
@settings(max_examples=5)
|
||||
@given(
|
||||
st.emails(),
|
||||
st.dictionaries(
|
||||
keys=st.text(min_size=1, max_size=20),
|
||||
values=st.text(min_size=0, max_size=100),
|
||||
max_size=5,
|
||||
),
|
||||
st.one_of(st.none(), st.text(min_size=0, max_size=50)),
|
||||
|
||||
template_id = str(sample_template.id)
|
||||
|
||||
payload = {
|
||||
"template_id": template_id,
|
||||
"email_address": fuzzed_email_address,
|
||||
"personalisation": fuzzed_personalisation,
|
||||
"reference": fuzzed_reference,
|
||||
}
|
||||
auth_header = create_service_authorization_header(
|
||||
service_id=sample_email_notification.service_id
|
||||
)
|
||||
def inner(email_address, personalisation, reference):
|
||||
|
||||
template_id = str(sample_template.id)
|
||||
|
||||
payload = {
|
||||
"template_id": template_id,
|
||||
"email_address": email_address,
|
||||
"personalisation": personalisation,
|
||||
"reference": reference,
|
||||
}
|
||||
auth_header = create_service_authorization_header(
|
||||
service_id=sample_email_notification.service_id
|
||||
)
|
||||
response = client.post(
|
||||
"/notifications/email", json=payload, headers=[auth_header]
|
||||
)
|
||||
assert response.status_code in (
|
||||
201,
|
||||
400,
|
||||
), f"Unexpected status: {response.status_code}, body: {response.json}"
|
||||
|
||||
inner()
|
||||
response = client.post("/notifications/email", json=payload, headers=[auth_header])
|
||||
assert response.status_code in (
|
||||
201,
|
||||
400,
|
||||
), f"Unexpected status: {response.status_code}, body: {response.json}"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("type", (NotificationType.EMAIL, NotificationType.SMS))
|
||||
|
||||
@@ -6,6 +6,8 @@ from unittest.mock import ANY, MagicMock, patch
|
||||
import pytest
|
||||
from flask import current_app, url_for
|
||||
from freezegun import freeze_time
|
||||
from hypothesis import given, settings
|
||||
from hypothesis import strategies as st
|
||||
from sqlalchemy import func, select
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
|
||||
@@ -3132,6 +3134,40 @@ def test_update_service_sms_sender(client, notify_db_session):
|
||||
assert not resp_json["is_default"]
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("client", "notify_db_session")
|
||||
@settings(max_examples=10)
|
||||
@pytest.mark.parametrize("client", [True], indirect=True)
|
||||
@given(sms_sender=st.text(min_size=0, max_size=50), is_default=st.booleans())
|
||||
def test_fuzz_update_service_sms_sender(
|
||||
client, notify_db_session, sms_sender, is_default
|
||||
):
|
||||
service = create_service()
|
||||
service_sms_sender = create_service_sms_sender(
|
||||
service=service, sms_sender="1235", is_default=False
|
||||
)
|
||||
data = {
|
||||
"sms_sender": sms_sender,
|
||||
"is_default": is_default,
|
||||
}
|
||||
response = client.post(
|
||||
f"/service/{service.id}/sms-sender/{service_sms_sender.id}",
|
||||
data=json.dumps(data),
|
||||
headers=[
|
||||
("Content-Type", "application/json"),
|
||||
create_admin_authorization_header(),
|
||||
],
|
||||
)
|
||||
assert response.status_code in [
|
||||
200,
|
||||
400,
|
||||
], f"Unexpected status: {response.status_code}, body: {response.get_data(as_text=True)}"
|
||||
|
||||
if response.status_code == 200:
|
||||
resp_json = json.loads(response.get_data(as_text=True))
|
||||
assert resp_json["sms_sender"] == sms_sender
|
||||
assert resp_json["is_default"] == is_default
|
||||
|
||||
|
||||
def test_update_service_sms_sender_switches_default(client, notify_db_session):
|
||||
service = create_service_with_defined_sms_sender(sms_sender_value="first")
|
||||
service_sms_sender = create_service_sms_sender(
|
||||
|
||||
Reference in New Issue
Block a user