mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-15 15:28:50 -04:00
Fixed merge conflict
This commit is contained in:
@@ -9,6 +9,7 @@ from freezegun import freeze_time
|
||||
|
||||
from app.main.views.jobs import get_status_filters, get_time_left
|
||||
from app.models.service import Service
|
||||
from tests import notification_json
|
||||
from tests.conftest import (
|
||||
SERVICE_ONE_ID,
|
||||
create_active_caseworking_user,
|
||||
@@ -284,6 +285,93 @@ def test_link_to_download_notifications(
|
||||
)
|
||||
|
||||
|
||||
def test_download_links_show_when_data_available(
|
||||
client_request,
|
||||
service_one,
|
||||
active_user_with_permissions,
|
||||
mocker,
|
||||
):
|
||||
|
||||
mock_jobs_with_data = {
|
||||
"data": [{"id": "job1", "created_at": "2020-01-01T00:00:00.000000+00:00"}],
|
||||
"total": 1,
|
||||
"page_size": 50
|
||||
}
|
||||
|
||||
mocker.patch("app.job_api_client.get_page_of_jobs", return_value=mock_jobs_with_data)
|
||||
mocker.patch("app.job_api_client.get_immediate_jobs", return_value=[{"id": "job1"}])
|
||||
|
||||
page = client_request.get(
|
||||
"main.all_jobs_activity",
|
||||
service_id=service_one["id"],
|
||||
)
|
||||
|
||||
assert "Download recent reports" in page.text
|
||||
assert "Download all data last 24 hours" in page.text
|
||||
assert "Download all data last 3 days" in page.text
|
||||
assert "Download all data last 5 days" in page.text
|
||||
assert "Download all data last 7 days" in page.text
|
||||
assert "No recent activity to download" not in page.text
|
||||
|
||||
|
||||
def test_download_links_partial_data_available(
|
||||
client_request,
|
||||
service_one,
|
||||
active_user_with_permissions,
|
||||
mocker,
|
||||
):
|
||||
mock_jobs_with_data = {
|
||||
"data": [{"id": "job1", "created_at": "2020-01-01T00:00:00.000000+00:00"}],
|
||||
"total": 1,
|
||||
"page_size": 50
|
||||
}
|
||||
mock_jobs_empty = {"data": [], "total": 0, "page_size": 50}
|
||||
|
||||
def mock_get_page_of_jobs(service_id, page=1, limit_days=None):
|
||||
if limit_days in [1, 5]:
|
||||
return mock_jobs_with_data
|
||||
return mock_jobs_empty
|
||||
|
||||
mocker.patch("app.job_api_client.get_page_of_jobs", side_effect=mock_get_page_of_jobs)
|
||||
mocker.patch("app.job_api_client.get_immediate_jobs", return_value=[])
|
||||
|
||||
page = client_request.get(
|
||||
"main.all_jobs_activity",
|
||||
service_id=service_one["id"],
|
||||
)
|
||||
|
||||
assert "Download recent reports" in page.text
|
||||
assert "Download all data last 24 hours" in page.text
|
||||
assert "Download all data last 3 days" not in page.text
|
||||
assert "Download all data last 5 days" in page.text
|
||||
assert "Download all data last 7 days" not in page.text
|
||||
assert "No recent activity to download" not in page.text
|
||||
|
||||
|
||||
def test_download_links_no_data_available(
|
||||
client_request,
|
||||
service_one,
|
||||
active_user_with_permissions,
|
||||
mocker,
|
||||
):
|
||||
mock_jobs_empty = {"data": [], "total": 0, "page_size": 50}
|
||||
|
||||
mocker.patch("app.job_api_client.get_page_of_jobs", return_value=mock_jobs_empty)
|
||||
mocker.patch("app.job_api_client.get_immediate_jobs", return_value=[])
|
||||
|
||||
page = client_request.get(
|
||||
"main.all_jobs_activity",
|
||||
service_id=service_one["id"],
|
||||
)
|
||||
|
||||
assert "Download recent reports" in page.text
|
||||
assert "Download all data last 24 hours" not in page.text
|
||||
assert "Download all data last 3 days" not in page.text
|
||||
assert "Download all data last 5 days" not in page.text
|
||||
assert "Download all data last 7 days" not in page.text
|
||||
assert "No recent activity to download. Download links will appear when jobs are available." in page.text
|
||||
|
||||
|
||||
def test_download_not_available_to_users_without_dashboard(
|
||||
client_request,
|
||||
active_caseworking_user,
|
||||
@@ -465,12 +553,17 @@ def test_should_show_notifications_for_a_service_with_next_previous(
|
||||
client_request,
|
||||
service_one,
|
||||
active_user_with_permissions,
|
||||
mock_get_notifications_with_previous_next,
|
||||
mock_get_service_statistics,
|
||||
mock_get_service_data_retention,
|
||||
mock_get_no_api_keys,
|
||||
mocker,
|
||||
):
|
||||
mocker.patch(
|
||||
"app.notification_api_client.get_notifications_for_service",
|
||||
return_value=notification_json(
|
||||
service_one["id"], rows=50, with_links=True
|
||||
) | {"total": 150},
|
||||
)
|
||||
page = client_request.get(
|
||||
"main.view_notifications",
|
||||
service_id=service_one["id"],
|
||||
@@ -504,16 +597,76 @@ def test_should_show_notifications_for_a_service_with_next_previous(
|
||||
assert "page 1" in prev_page_link.text.strip()
|
||||
|
||||
|
||||
def test_doesnt_show_pagination_with_search_term(
|
||||
def test_doesnt_show_next_button_on_last_page(
|
||||
client_request,
|
||||
service_one,
|
||||
active_user_with_permissions,
|
||||
mock_get_notifications_with_previous_next,
|
||||
mock_get_service_statistics,
|
||||
mock_get_service_data_retention,
|
||||
mock_get_no_api_keys,
|
||||
mocker,
|
||||
):
|
||||
mocker.patch(
|
||||
"app.notification_api_client.get_notifications_for_service",
|
||||
return_value=notification_json(
|
||||
service_one["id"], rows=50, with_links=True
|
||||
) | {"total": 100},
|
||||
)
|
||||
page = client_request.get(
|
||||
"main.view_notifications",
|
||||
service_id=service_one["id"],
|
||||
message_type="sms",
|
||||
page=2,
|
||||
)
|
||||
|
||||
next_page_link = page.find("a", {"rel": "next"})
|
||||
prev_page_link = page.find("a", {"rel": "previous"})
|
||||
|
||||
assert next_page_link is None
|
||||
assert prev_page_link is not None
|
||||
|
||||
|
||||
def test_doesnt_show_pagination_when_50_or_fewer_items(
|
||||
client_request,
|
||||
service_one,
|
||||
active_user_with_permissions,
|
||||
mock_get_service_statistics,
|
||||
mock_get_service_data_retention,
|
||||
mock_get_no_api_keys,
|
||||
mocker,
|
||||
):
|
||||
mocker.patch(
|
||||
"app.notification_api_client.get_notifications_for_service",
|
||||
return_value=notification_json(
|
||||
service_one["id"], rows=50, with_links=False
|
||||
),
|
||||
)
|
||||
page = client_request.get(
|
||||
"main.view_notifications",
|
||||
service_id=service_one["id"],
|
||||
message_type="sms",
|
||||
)
|
||||
|
||||
assert not page.find("a", {"rel": "next"})
|
||||
assert not page.find("a", {"rel": "previous"})
|
||||
assert not page.select_one(".table-show-more-link")
|
||||
|
||||
|
||||
def test_doesnt_show_pagination_with_search_term(
|
||||
client_request,
|
||||
service_one,
|
||||
active_user_with_permissions,
|
||||
mock_get_service_statistics,
|
||||
mock_get_service_data_retention,
|
||||
mock_get_no_api_keys,
|
||||
mocker,
|
||||
):
|
||||
mocker.patch(
|
||||
"app.notification_api_client.get_notifications_for_service",
|
||||
return_value=notification_json(
|
||||
service_one["id"], rows=50, with_links=True
|
||||
) | {"total": 100},
|
||||
)
|
||||
page = client_request.post(
|
||||
"main.view_notifications",
|
||||
service_id=service_one["id"],
|
||||
|
||||
@@ -49,4 +49,4 @@ def test_owasp_useful_headers_set(
|
||||
expected_sources <= actual_sources
|
||||
), f"Missing sources in connect-src: {expected_sources - actual_sources}"
|
||||
assert search(r"style-src 'self' static\.example\.com 'nonce-.*';", csp)
|
||||
assert search(r"img-src 'self' static\.example\.com static-logos\.test\.com", csp)
|
||||
assert search(r"img-src 'self' static\.example\.com", csp)
|
||||
|
||||
@@ -50,6 +50,9 @@ def test_all_activity(
|
||||
mock_get_page_of_jobs = mocker.patch(
|
||||
"app.job_api_client.get_page_of_jobs", return_value=MOCK_JOBS
|
||||
)
|
||||
mocker.patch(
|
||||
"app.job_api_client.get_immediate_jobs", return_value=[]
|
||||
)
|
||||
|
||||
response = client_request.get_response(
|
||||
"main.all_jobs_activity",
|
||||
@@ -60,7 +63,11 @@ def test_all_activity(
|
||||
assert response.data is not None, "Response data is None"
|
||||
|
||||
assert "All activity" in response.text
|
||||
mock_get_page_of_jobs.assert_called_with(SERVICE_ONE_ID, page=current_page)
|
||||
|
||||
assert any(
|
||||
call[0][0] == SERVICE_ONE_ID and call[1].get('page') == current_page
|
||||
for call in mock_get_page_of_jobs.call_args_list
|
||||
)
|
||||
page = BeautifulSoup(response.data, "html.parser")
|
||||
table = page.find("table")
|
||||
assert table is not None, "Table not found in the response"
|
||||
@@ -115,7 +122,6 @@ def test_all_activity(
|
||||
|
||||
failed_cell = cells[6].get_text(strip=True)
|
||||
assert failed_cell == "5", f"Expected failed count '5', but got '{failed_cell}'"
|
||||
mock_get_page_of_jobs.assert_called_with(SERVICE_ONE_ID, page=current_page)
|
||||
|
||||
|
||||
def test_all_activity_no_jobs(client_request, mocker):
|
||||
@@ -133,6 +139,9 @@ def test_all_activity_no_jobs(client_request, mocker):
|
||||
"total": 0,
|
||||
},
|
||||
)
|
||||
mocker.patch(
|
||||
"app.job_api_client.get_immediate_jobs", return_value=[]
|
||||
)
|
||||
response = client_request.get_response(
|
||||
"main.all_jobs_activity",
|
||||
service_id=SERVICE_ONE_ID,
|
||||
@@ -152,7 +161,10 @@ def test_all_activity_no_jobs(client_request, mocker):
|
||||
assert (
|
||||
expected_message == actual_message
|
||||
), f"Expected message '{expected_message}', but got '{actual_message}'"
|
||||
mock_get_page_of_jobs.assert_called_with(SERVICE_ONE_ID, page=current_page)
|
||||
assert any(
|
||||
call[0][0] == SERVICE_ONE_ID and call[1].get('page') == current_page
|
||||
for call in mock_get_page_of_jobs.call_args_list
|
||||
)
|
||||
|
||||
|
||||
def test_all_activity_pagination(client_request, mocker):
|
||||
@@ -182,13 +194,19 @@ def test_all_activity_pagination(client_request, mocker):
|
||||
"total": 100,
|
||||
},
|
||||
)
|
||||
mocker.patch(
|
||||
"app.job_api_client.get_immediate_jobs", return_value=[]
|
||||
)
|
||||
|
||||
response = client_request.get_response(
|
||||
"main.all_jobs_activity",
|
||||
service_id=SERVICE_ONE_ID,
|
||||
page=current_page,
|
||||
)
|
||||
mock_get_page_of_jobs.assert_called_with(SERVICE_ONE_ID, page=current_page)
|
||||
assert any(
|
||||
call[0][0] == SERVICE_ONE_ID and call[1].get('page') == current_page
|
||||
for call in mock_get_page_of_jobs.call_args_list
|
||||
)
|
||||
|
||||
page = BeautifulSoup(response.data, "html.parser")
|
||||
pagination_controls = page.find_all("li", class_="usa-pagination__item")
|
||||
|
||||
Reference in New Issue
Block a user