mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-09 14:49:49 -04:00
Fixed one test
This commit is contained in:
@@ -161,7 +161,7 @@
|
|||||||
"filename": "app/config.py",
|
"filename": "app/config.py",
|
||||||
"hashed_secret": "577a4c667e4af8682ca431857214b3a920883efc",
|
"hashed_secret": "577a4c667e4af8682ca431857214b3a920883efc",
|
||||||
"is_verified": false,
|
"is_verified": false,
|
||||||
"line_number": 118,
|
"line_number": 119,
|
||||||
"is_secret": false
|
"is_secret": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -684,5 +684,5 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"generated_at": "2024-10-17T17:16:34Z"
|
"generated_at": "2024-10-24T21:58:17Z"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ class Config(object):
|
|||||||
"tts-benefits-studio@gsa.gov",
|
"tts-benefits-studio@gsa.gov",
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
FEATURE_GUIDANCE_ENABLED = getenv("FEATURE_GUIDANCE_ENABLED", "false")
|
||||||
|
|
||||||
|
|
||||||
def _s3_credentials_from_env(bucket_prefix):
|
def _s3_credentials_from_env(bucket_prefix):
|
||||||
|
|||||||
@@ -1,89 +1,8 @@
|
|||||||
|
import os
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from bs4 import BeautifulSoup
|
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
from freezegun import freeze_time
|
|
||||||
|
|
||||||
from tests.conftest import SERVICE_ONE_ID, normalize_spaces
|
|
||||||
|
|
||||||
|
|
||||||
def test_non_logged_in_user_can_see_homepage(
|
|
||||||
client_request, mock_get_service_and_organization_counts, mocker
|
|
||||||
):
|
|
||||||
|
|
||||||
mocker.patch("app.notify_client.user_api_client.UserApiClient.deactivate_user")
|
|
||||||
client_request.logout()
|
|
||||||
page = client_request.get("main.index", _test_page_title=False)
|
|
||||||
|
|
||||||
assert page.h1.text.strip() == (
|
|
||||||
"Reach people where they are with government-powered text messages"
|
|
||||||
)
|
|
||||||
|
|
||||||
assert (
|
|
||||||
page.select_one(
|
|
||||||
"a.usa-button.login-button.login-button--primary.margin-right-2"
|
|
||||||
).text
|
|
||||||
== "Sign in with \n"
|
|
||||||
)
|
|
||||||
assert page.select_one("meta[name=description]") is not None
|
|
||||||
# This area is hidden for the pilot
|
|
||||||
# assert normalize_spaces(page.select_one('#whos-using-notify').text) == (
|
|
||||||
# 'Who’s using Notify.gov ' # Hiding this next area for the pilot
|
|
||||||
# # Hiding this next area for the pilot
|
|
||||||
# # 'See the list of services and organizations. '
|
|
||||||
# 'There are 111 Organizations and 9,999 Services using Notify.'
|
|
||||||
# )
|
|
||||||
|
|
||||||
assert page.select_one("#whos-using-notify a") is None
|
|
||||||
|
|
||||||
|
|
||||||
def test_logged_in_user_redirects_to_choose_account(
|
|
||||||
client_request,
|
|
||||||
api_user_active,
|
|
||||||
mock_get_user,
|
|
||||||
mock_get_user_by_email,
|
|
||||||
mock_login,
|
|
||||||
):
|
|
||||||
client_request.get(
|
|
||||||
"main.index",
|
|
||||||
_expected_status=302,
|
|
||||||
)
|
|
||||||
client_request.get(
|
|
||||||
"main.sign_in",
|
|
||||||
_expected_status=302,
|
|
||||||
_expected_redirect=url_for(
|
|
||||||
"main.show_accounts_or_dashboard",
|
|
||||||
next="EMAIL_IS_OK",
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def test_robots(client_request):
|
|
||||||
client_request.get_url("/robots.txt", _expected_status=404)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
("endpoint", "kwargs"),
|
|
||||||
[
|
|
||||||
("sign_in", {}),
|
|
||||||
("register", {}),
|
|
||||||
pytest.param("index", {}, marks=pytest.mark.xfail(raises=AssertionError)),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@freeze_time("2012-12-12 12:12") # So we don’t go out of business hours
|
|
||||||
def test_hiding_pages_from_search_engines(
|
|
||||||
client_request, mock_get_service_and_organization_counts, endpoint, kwargs, mocker
|
|
||||||
):
|
|
||||||
|
|
||||||
mocker.patch("app.notify_client.user_api_client.UserApiClient.deactivate_user")
|
|
||||||
client_request.logout()
|
|
||||||
response = client_request.get_response(f"main.{endpoint}", **kwargs)
|
|
||||||
assert "X-Robots-Tag" in response.headers
|
|
||||||
assert response.headers["X-Robots-Tag"] == "noindex"
|
|
||||||
|
|
||||||
page = BeautifulSoup(response.data.decode("utf-8"), "html.parser")
|
|
||||||
assert page.select_one("meta[name=robots]")["content"] == "noindex"
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
@@ -115,163 +34,46 @@ def test_hiding_pages_from_search_engines(
|
|||||||
)
|
)
|
||||||
def test_static_pages(client_request, mock_get_organization_by_domain, view, mocker):
|
def test_static_pages(client_request, mock_get_organization_by_domain, view, mocker):
|
||||||
mocker.patch("app.notify_client.user_api_client.UserApiClient.deactivate_user")
|
mocker.patch("app.notify_client.user_api_client.UserApiClient.deactivate_user")
|
||||||
|
|
||||||
|
# Function to check if a view is feature-flagged and should return 404 when disabled
|
||||||
|
def is_feature_flagged(view):
|
||||||
|
feature_guidance_enabled = (
|
||||||
|
os.getenv("FEATURE_GUIDANCE_ENABLED", "false").lower() == "true"
|
||||||
|
)
|
||||||
|
feature_flagged_views = [
|
||||||
|
"guidance",
|
||||||
|
"clear_goals",
|
||||||
|
"rules_and_regulations",
|
||||||
|
"establish_trust",
|
||||||
|
"write_for_action",
|
||||||
|
"multiple_languages",
|
||||||
|
"benchmark_performance",
|
||||||
|
]
|
||||||
|
return not feature_guidance_enabled and view in feature_flagged_views
|
||||||
|
|
||||||
request = partial(client_request.get, "main.{}".format(view))
|
request = partial(client_request.get, "main.{}".format(view))
|
||||||
|
|
||||||
# Check the page loads when user is signed in
|
# If the guidance feature is disabled, expect a 404 for feature-flagged views
|
||||||
page = request()
|
if is_feature_flagged(view):
|
||||||
assert page.select_one("meta[name=description]")
|
page = request(_expected_status=404)
|
||||||
|
else:
|
||||||
|
# Check the page loads when user is signed in
|
||||||
|
page = request()
|
||||||
|
assert page.select_one("meta[name=description]")
|
||||||
|
|
||||||
# Check it still works when they don’t have a recent service
|
# Check it still works when they don’t have a recent service
|
||||||
with client_request.session_transaction() as session:
|
with client_request.session_transaction() as session:
|
||||||
session["service_id"] = None
|
session["service_id"] = None
|
||||||
request()
|
request()
|
||||||
|
|
||||||
# Check it redirects to the login screen when they sign out
|
# Check it redirects to the login screen when they sign out
|
||||||
client_request.logout()
|
client_request.logout()
|
||||||
with client_request.session_transaction() as session:
|
with client_request.session_transaction() as session:
|
||||||
session["service_id"] = None
|
session["service_id"] = None
|
||||||
session["user_id"] = None
|
session["user_id"] = None
|
||||||
request(
|
request(
|
||||||
_expected_status=302,
|
_expected_status=302,
|
||||||
_expected_redirect="/sign-in?next={}".format(url_for("main.{}".format(view))),
|
_expected_redirect="/sign-in?next={}".format(
|
||||||
)
|
url_for("main.{}".format(view))
|
||||||
|
),
|
||||||
|
|
||||||
def test_guidance_pages_link_to_service_pages_when_signed_in(client_request, mocker):
|
|
||||||
|
|
||||||
mocker.patch("app.notify_client.user_api_client.UserApiClient.deactivate_user")
|
|
||||||
request = partial(client_request.get, "main.edit_and_format_messages")
|
|
||||||
selector = ".list-number li a"
|
|
||||||
|
|
||||||
# Check the page loads when user is signed in
|
|
||||||
page = request()
|
|
||||||
assert page.select_one(selector)["href"] == url_for(
|
|
||||||
"main.choose_template",
|
|
||||||
service_id=SERVICE_ONE_ID,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Check it still works when they don’t have a recent service
|
|
||||||
with client_request.session_transaction() as session:
|
|
||||||
session["service_id"] = None
|
|
||||||
page = request()
|
|
||||||
assert not page.select_one(selector)
|
|
||||||
|
|
||||||
# Check it redirects to the login screen when they sign out
|
|
||||||
client_request.logout()
|
|
||||||
with client_request.session_transaction() as session:
|
|
||||||
session["service_id"] = None
|
|
||||||
session["user_id"] = None
|
|
||||||
page = request(_expected_status=302)
|
|
||||||
assert not page.select_one(selector)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
("view", "expected_view"),
|
|
||||||
[
|
|
||||||
("information_risk_management", "security"),
|
|
||||||
("old_integration_testing", "integration_testing"),
|
|
||||||
("old_roadmap", "roadmap"),
|
|
||||||
("information_security", "using_notify"),
|
|
||||||
("old_using_notify", "using_notify"),
|
|
||||||
("delivery_and_failure", "message_status"),
|
|
||||||
("callbacks", "documentation"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
def test_old_static_pages_redirect(client_request, view, expected_view, mocker):
|
|
||||||
|
|
||||||
mocker.patch("app.notify_client.user_api_client.UserApiClient.deactivate_user")
|
|
||||||
client_request.logout()
|
|
||||||
client_request.get(
|
|
||||||
"main.{}".format(view),
|
|
||||||
_expected_status=301,
|
|
||||||
_expected_redirect=url_for(
|
|
||||||
"main.{}".format(expected_view),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def test_old_using_notify_page(client_request):
|
|
||||||
client_request.get("main.using_notify", _expected_status=410)
|
|
||||||
|
|
||||||
|
|
||||||
# def test_old_integration_testing_page(
|
|
||||||
# client_request,
|
|
||||||
# ):
|
|
||||||
# page = client_request.get(
|
|
||||||
# 'main.integration_testing',
|
|
||||||
# _expected_status=410,
|
|
||||||
# )
|
|
||||||
# assert normalize_spaces(page.select_one('.grid-row').text) == (
|
|
||||||
# 'Integration testing '
|
|
||||||
# 'This information has moved. '
|
|
||||||
# 'Refer to the documentation for the client library you are using.'
|
|
||||||
# )
|
|
||||||
# assert page.select_one('.grid-row a')['href'] == url_for(
|
|
||||||
# 'main.documentation'
|
|
||||||
# )
|
|
||||||
|
|
||||||
|
|
||||||
# def test_terms_page_has_correct_content(client_request):
|
|
||||||
# terms_page = client_request.get("main.terms")
|
|
||||||
# assert normalize_spaces(terms_page.select("main p")[0].text) == (
|
|
||||||
# "These terms apply to your service’s use of Notify.gov. "
|
|
||||||
# "You must be the service manager to accept them."
|
|
||||||
# )
|
|
||||||
|
|
||||||
|
|
||||||
def test_css_is_served_from_correct_path(client_request):
|
|
||||||
page = client_request.get("main.documentation") # easy static page
|
|
||||||
|
|
||||||
for index, link in enumerate(page.select("link[rel=stylesheet]")):
|
|
||||||
assert link["href"].startswith(
|
|
||||||
[
|
|
||||||
"https://static.example.com/css/styles.css?",
|
|
||||||
][index]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# Commenting out until after the pilot when we'll decide on a logo
|
|
||||||
# def test_resources_that_use_asset_path_variable_have_correct_path(client_request):
|
|
||||||
|
|
||||||
# page = client_request.get('main.documentation') # easy static page
|
|
||||||
|
|
||||||
# logo_svg_fallback = page.select_one('.usa-flag-logo')
|
|
||||||
|
|
||||||
# assert logo_svg_fallback['src'].startswith('https://static.example.com/images/us-notify-color.png')
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
("current_date", "expected_rate"),
|
|
||||||
[
|
|
||||||
("2022-05-01", "1.72"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
@pytest.mark.skip(reason="Currently hidden for TTS")
|
|
||||||
def test_sms_price(
|
|
||||||
client_request,
|
|
||||||
mock_get_service_and_organization_counts,
|
|
||||||
current_date,
|
|
||||||
expected_rate,
|
|
||||||
mocker,
|
|
||||||
):
|
|
||||||
|
|
||||||
mocker.patch("app.notify_client.user_api_client.UserApiClient.deactivate_user")
|
|
||||||
client_request.logout()
|
|
||||||
|
|
||||||
with freeze_time(current_date):
|
|
||||||
home_page = client_request.get("main.index", _test_page_title=False)
|
|
||||||
pricing_page = client_request.get("main.pricing")
|
|
||||||
|
|
||||||
assert normalize_spaces(
|
|
||||||
home_page.select(".product-page-section")[5].select(".grid-col-6")[1].text
|
|
||||||
) == (
|
|
||||||
f"Text messages "
|
|
||||||
f"Up to 40,000 free text messages a year, "
|
|
||||||
f"then {expected_rate} pence per message"
|
|
||||||
)
|
|
||||||
|
|
||||||
assert normalize_spaces(pricing_page.select_one("#text-messages + p + p").text) == (
|
|
||||||
f"When a service has used its annual allowance, it costs "
|
|
||||||
f"{expected_rate} pence (plus VAT) for each text message you "
|
|
||||||
f"send."
|
|
||||||
)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user