Files
notifications-admin/tests/end_to_end/test_accounts_page.py

135 lines
4.8 KiB
Python
Raw Normal View History

import datetime
import os
import re
from playwright.sync_api import expect
2023-09-08 12:53:35 -07:00
def _bypass_sign_in(end_to_end_context):
# Open a new page and go to the staging site.
2023-09-08 08:38:27 -07:00
page = end_to_end_context.new_page()
2023-09-11 14:23:12 -07:00
2023-09-08 12:53:35 -07:00
page.goto(os.getenv("NOTIFY_E2E_TEST_URI"))
2023-09-08 12:53:35 -07:00
sign_in_button = page.get_by_role("link", name="Sign in")
2023-09-08 12:53:35 -07:00
# Test trying to sign in. Because we are loading the email and password
sign_in_button.click()
# Wait for the next page to fully load.
page.wait_for_load_state("domcontentloaded")
2023-09-08 12:53:35 -07:00
return page
2023-09-08 12:53:35 -07:00
def test_add_new_service_workflow(end_to_end_context):
2023-09-11 14:23:12 -07:00
#page = end_to_end_context.new_page()
page = _bypass_sign_in(end_to_end_context)
2023-09-08 12:53:35 -07:00
page.goto(os.getenv("NOTIFY_E2E_TEST_URI"))
2023-09-08 14:12:23 -07:00
# sign_in_button = page.get_by_role("link", name="Sign in")
#
2023-09-08 12:53:35 -07:00
# Test trying to sign in. Because we are loading the email and password
2023-09-08 14:12:23 -07:00
# sign_in_button.click()
#
2023-09-08 12:53:35 -07:00
# Wait for the next page to fully load.
page.wait_for_load_state("domcontentloaded")
# Prepare for adding a new service later in the test.
current_date_time = datetime.datetime.now()
new_service_name = "E2E Federal Test Service {now} - {browser_type}".format(
now=current_date_time.strftime("%m/%d/%Y %H:%M:%S"),
2023-09-08 12:53:35 -07:00
browser_type=end_to_end_context.browser.browser_type.name,
)
accounts_uri = "{}accounts".format(os.getenv("NOTIFY_E2E_TEST_URI"))
page.goto(accounts_uri)
# Check to make sure that we've arrived at the next page.
page.wait_for_load_state("domcontentloaded")
# Check to make sure that we've arrived at the next page.
# Check the page title exists and matches what we expect.
expect(page).to_have_title(re.compile("Choose service"))
# Check for the sign in heading.
sign_in_heading = page.get_by_role("heading", name="Choose service")
expect(sign_in_heading).to_be_visible()
# Retrieve some prominent elements on the page for testing.
add_service_button = page.get_by_role(
"button", name=re.compile("Add a new service")
)
expect(add_service_button).to_be_visible()
existing_service_link = page.get_by_role("link", name=new_service_name)
# Check to see if the service was already created - if so, we should fail.
# TODO: Figure out how to make this truly isolated, and/or work in a
# delete service workflow.
expect(existing_service_link).to_have_count(0)
# Click on add a new service.
add_service_button.click()
# Check to make sure that we've arrived at the next page.
page.wait_for_load_state("domcontentloaded")
# Check for the sign in heading.
about_heading = page.get_by_role("heading", name="About your service")
expect(about_heading).to_be_visible()
# Retrieve some prominent elements on the page for testing.
service_name_input = page.locator('xpath=//input[@name="name"]')
federal_radio_button = page.locator('xpath=//input[@value="federal"]')
state_radio_button = page.locator('xpath=//input[@value="state"]')
other_radio_button = page.locator('xpath=//input[@value="other"]')
add_service_button = page.get_by_role("button", name=re.compile("Add service"))
expect(service_name_input).to_be_visible()
expect(federal_radio_button).to_be_visible()
expect(state_radio_button).to_be_visible()
expect(other_radio_button).to_be_visible()
expect(add_service_button).to_be_visible()
# Fill in the form.
service_name_input.fill(new_service_name)
2023-09-08 13:55:56 -07:00
expect(federal_radio_button).to_be_enabled()
# Trying to click directly on the radio button resulted in a "not in viewport error" and this is the
# suggested workaround. Googling, the reason seems to be that there might be some (invisible?) css positioned
# above the radio button itself.
page.click("text='Federal government'")
# Click on add service.
add_service_button.click()
# Check to make sure that we've arrived at the next page.
page.wait_for_load_state("domcontentloaded")
# Check for the service name title and heading.
service_heading = page.get_by_text(new_service_name)
expect(service_heading).to_be_visible()
expect(page).to_have_title(re.compile(new_service_name))
2023-09-11 14:23:12 -07:00
page.click("text='Settings'")
# Check to make sure that we've arrived at the next page.
page.wait_for_load_state("domcontentloaded")
page.click("text='Delete this service'")
# Check to make sure that we've arrived at the next page.
page.wait_for_load_state("domcontentloaded")
page.click("text='Yes, delete'")
# Check to make sure that we've arrived at the next page.
page.wait_for_load_state("domcontentloaded")
# Check to make sure that we've arrived at the next page.
# Check the page title exists and matches what we expect.
expect(page).to_have_title(re.compile("Choose service"))