2025-02-13 11:02:02 -05:00
|
|
|
import datetime
|
2024-02-23 11:24:03 -05:00
|
|
|
import os
|
|
|
|
|
|
2025-03-10 14:25:36 -04:00
|
|
|
from contextlib import contextmanager
|
2025-02-13 11:02:02 -05:00
|
|
|
|
2024-02-23 11:24:03 -05:00
|
|
|
import pytest
|
2024-09-11 12:36:58 -07:00
|
|
|
from axe_core_python.sync_playwright import Axe
|
2024-02-23 11:24:03 -05:00
|
|
|
|
2025-01-31 11:56:26 -05:00
|
|
|
from app.notify_client.user_api_client import user_api_client
|
2025-02-13 11:02:02 -05:00
|
|
|
from app.notify_client.service_api_client import service_api_client
|
2025-01-31 11:56:26 -05:00
|
|
|
|
2024-02-23 11:24:03 -05:00
|
|
|
E2E_TEST_URI = os.getenv("NOTIFY_E2E_TEST_URI")
|
|
|
|
|
|
|
|
|
|
|
2024-07-15 08:07:18 -07:00
|
|
|
@pytest.fixture
|
2024-02-23 17:10:41 -05:00
|
|
|
def end_to_end_context(browser):
|
|
|
|
|
context = browser.new_context()
|
|
|
|
|
return context
|
2024-02-23 16:02:16 -05:00
|
|
|
|
2024-02-23 11:24:03 -05:00
|
|
|
|
2024-07-15 08:07:18 -07:00
|
|
|
@pytest.fixture
|
2024-02-23 16:02:16 -05:00
|
|
|
def authenticated_page(end_to_end_context):
|
|
|
|
|
# Open a new page and go to the site.
|
|
|
|
|
page = end_to_end_context.new_page()
|
2024-08-28 11:17:52 -07:00
|
|
|
page.goto(f"{E2E_TEST_URI}/sign-in")
|
2024-02-23 11:24:03 -05:00
|
|
|
|
|
|
|
|
# Wait for the next page to fully load.
|
|
|
|
|
page.wait_for_load_state("domcontentloaded")
|
2024-02-23 16:02:16 -05:00
|
|
|
|
2024-02-23 11:24:03 -05:00
|
|
|
return page
|
2024-09-11 12:36:58 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def check_axe_report(page):
|
|
|
|
|
axe = Axe()
|
|
|
|
|
|
|
|
|
|
results = axe.run(page)
|
|
|
|
|
|
2024-09-24 08:44:01 -07:00
|
|
|
# TODO fix remaining 'moderate' failures
|
|
|
|
|
# so we can set the level we skip to minor only
|
2024-09-11 12:57:10 -07:00
|
|
|
for violation in results["violations"]:
|
2024-09-11 13:31:50 -07:00
|
|
|
assert violation["impact"] in [
|
2024-10-07 09:11:10 -07:00
|
|
|
"minor",
|
2024-10-07 11:45:14 -07:00
|
|
|
"moderate",
|
2024-09-11 13:31:50 -07:00
|
|
|
], f"Accessibility violation: {violation}"
|
2025-01-31 11:56:26 -05:00
|
|
|
|
|
|
|
|
|
2025-02-13 11:02:02 -05:00
|
|
|
# Need e2e service defined here?
|
2025-01-31 11:56:26 -05:00
|
|
|
@pytest.fixture
|
2025-02-13 11:02:02 -05:00
|
|
|
def default_service(browser):
|
|
|
|
|
current_date_time = datetime.datetime.now()
|
|
|
|
|
now=current_date_time.strftime("%m/%d/%Y %H:%M:%S")
|
|
|
|
|
browser_type = browser.browser_type.name
|
|
|
|
|
service_name = f"E2E Federal Test Service {now} - {browser_type}"
|
|
|
|
|
|
|
|
|
|
default_user = user_api_client.get_user_by_email(os.getenv("NOTIFY_E2E_TEST_EMAIL"))
|
|
|
|
|
service = service_api_client.create_service(service_name, "federal", os.environ["DEFAULT_SERVICE_LIMIT"], True, default_user.id, default_user.email_address)
|
|
|
|
|
|
|
|
|
|
yield service
|
|
|
|
|
|
|
|
|
|
service_api_client.archive_service(service.id, None)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@contextmanager
|
|
|
|
|
def _set_up_user(default_service, name, email_addr, phone, password, auth_type, permissions, folder_permissions):
|
|
|
|
|
user = user_api_client.get_user_by_email_or_none(email_addr)
|
|
|
|
|
if user is None:
|
|
|
|
|
user = user_api_client.register_user(
|
|
|
|
|
name, email_addr, phone, password, auth_type
|
|
|
|
|
)
|
|
|
|
|
user_api_client.add_user_to_service(default_service.id, user.id, permissions, folder_permissions)
|
2025-01-31 11:56:26 -05:00
|
|
|
user_api_client.activate_user(user.id)
|
|
|
|
|
yield user
|
|
|
|
|
user_api_client.deactivate_user(user.id)
|
2025-02-13 11:02:02 -05:00
|
|
|
service_api_client.remove_user_from_service(user.id, default_service.id)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
|
def admin_user(default_service):
|
|
|
|
|
with _set_up_user(
|
|
|
|
|
default_service, "E2E Admin Test", "admin@nowhere.huh", "1234567890", "password", "sms"
|
|
|
|
|
) as user:
|
|
|
|
|
yield user
|