make some progress

This commit is contained in:
Kenneth Kehl
2023-09-08 12:53:35 -07:00
parent cc8f8dfcc2
commit 29ea098fd3
6 changed files with 161 additions and 161 deletions

View File

@@ -9,6 +9,7 @@ from uuid import UUID, uuid4
import pytest
from bs4 import BeautifulSoup
from dotenv import load_dotenv
from flask import Flask, url_for
from notifications_python_client.errors import HTTPError
from notifications_utils.url_safe_token import generate_token
@@ -33,6 +34,8 @@ from . import (
user_json,
)
load_dotenv()
class ElementNotFound(Exception):
pass
@@ -3689,7 +3692,8 @@ def end_to_end_authenticated_context(browser):
auth_state_path = os.path.join(
# TODO
"playwright/.auth/", "state.json"
"playwright/.auth/",
"state.json"
# os.getenv("NOTIFY_E2E_AUTH_STATE_PATH"), "state.json"
)
context = browser.new_context(storage_state=auth_state_path)

View File

@@ -2,52 +2,52 @@ import datetime
import os
import re
import pytest
from dotenv import load_dotenv
from playwright.sync_api import expect
def test_accounts_page(end_to_end_context):
load_dotenv()
def _bypass_sign_in(end_to_end_context):
# Open a new page and go to the staging site.
page = end_to_end_context.new_page()
print(page)
page.goto(os.getenv("NOTIFY_E2E_TEST_URI"))
accounts_uri = "{}accounts".format(os.getenv("NOTIFY_E2E_TEST_URI"))
page.goto(accounts_uri)
sign_in_button = page.get_by_role("link", name="Sign in")
# Check to make sure that we've arrived at the next page.
# 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")
print(page)
return page
def test_accounts_page(end_to_end_context):
page = _bypass_sign_in(end_to_end_context)
# 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()
expect(page).to_have_title(re.compile("Dashboard"))
def test_add_new_service_workflow(end_to_end_context):
page = end_to_end_context.new_page()
page.goto(os.getenv("NOTIFY_E2E_TEST_URI"))
#sign_in_button = page.get_by_role("link", name="Sign in")
# 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")
@pytest.mark.skip(reason="Not authenticating test users.")
def test_add_new_service_workflow(end_to_end_authenticated_context):
# 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"),
browser_type=end_to_end_authenticated_context.browser.browser_type.name,
browser_type=end_to_end_context.browser.browser_type.name,
)
# Open a new page and go to the staging site.
page = end_to_end_authenticated_context.new_page()
accounts_uri = "{}accounts".format(os.getenv("NOTIFY_E2E_TEST_URI"))
page.goto(accounts_uri)

View File

@@ -5,9 +5,9 @@ import pytest
from playwright.sync_api import expect
def test_landing_page(end_to_end_context):
def test_landing_page(browser):
# Open a new page and go to the staging site.
page = end_to_end_context.new_page()
page = browser.new_page()
page.goto(os.getenv("NOTIFY_E2E_TEST_URI"))
# Check to make sure that we've arrived at the next page.
@@ -22,6 +22,7 @@ def test_landing_page(end_to_end_context):
)
sign_in_button = page.get_by_role("link", name="Sign in")
benefits_studio_email = page.get_by_role("link", name="tts-benefits-studio@gsa.gov")
print(page)
# Check to make sure the elements are visible.
expect(main_header).to_be_visible()
@@ -49,118 +50,120 @@ def test_landing_page(end_to_end_context):
).to_be_visible()
@pytest.mark.skip(reason="Not authenticating test users.")
def test_sign_in_and_mfa_pages(end_to_end_context):
# Open a new page and go to the staging site.
page = end_to_end_context.new_page()
page.goto(os.getenv("NOTIFY_E2E_TEST_URI"))
sign_in_button = page.get_by_role("link", name="Sign in")
# Test trying to sign in.
sign_in_button.click()
# Check to make sure that we've arrived at the next page.
page.wait_for_load_state("domcontentloaded")
# Check the page title exists and matches what we expect.
expect(page).to_have_title(re.compile("Sign in"))
# Check for the sign in heading.
sign_in_heading = page.get_by_role("heading", name="Sign in")
expect(sign_in_heading).to_be_visible()
# Check for the sign in form elements.
# NOTE: Playwright cannot find input elements by role and recommends using
# get_by_label() instead; however, hidden form elements do not have
# labels associated with them, hence the XPath!
# See https://playwright.dev/python/docs/api/class-page#page-get-by-label
# and https://playwright.dev/python/docs/locators#locate-by-css-or-xpath
# for more information.
email_address_input = page.get_by_label("Email address")
password_input = page.get_by_label("Password")
csrf_token = page.locator('xpath=//input[@name="csrf_token"]')
continue_button = page.get_by_role("button", name=re.compile("Continue"))
forgot_password_link = page.get_by_role("link", name="Forgot your password?")
# Make sure form elements are visible and not visible as expected.
expect(email_address_input).to_be_visible()
expect(password_input).to_be_visible()
expect(continue_button).to_be_visible()
expect(forgot_password_link).to_be_visible()
expect(csrf_token).to_be_hidden()
# Make sure form elements are configured correctly with the right
# attributes.
expect(email_address_input).to_have_attribute("type", "email")
expect(password_input).to_have_attribute("type", "password")
expect(csrf_token).to_have_attribute("type", "hidden")
expect(continue_button).to_have_attribute("type", "submit")
expect(forgot_password_link).to_have_attribute("href", "/forgot-password")
# Sign in to the site.
email_address_input.fill(os.getenv("NOTIFY_E2E_TEST_EMAIL"))
password_input.fill(os.getenv("NOTIFY_E2E_TEST_PASSWORD"))
continue_button.click()
# Wait for the next page to fully load.
page.wait_for_load_state("domcontentloaded")
# Check the page title exists and matches what we expect.
expect(page).to_have_title(re.compile("Check your phone"))
# Check for the sign in heading.
sign_in_heading = page.get_by_role("heading", name="Check your phone")
expect(sign_in_heading).to_be_visible()
# Check for the sign in form elements.
# NOTE: Playwright cannot find input elements by role and recommends using
# get_by_label() instead; however, hidden form elements do not have
# labels associated with them, hence the XPath!
# See https://playwright.dev/python/docs/api/class-page#page-get-by-label
# and https://playwright.dev/python/docs/locators#locate-by-css-or-xpath
# for more information.
mfa_input = page.get_by_label("Text message code")
csrf_token = page.locator('xpath=//input[@name="csrf_token"]')
continue_button = page.get_by_role("button", name=re.compile("Continue"))
not_received_message_link = page.get_by_role(
"link", name="Not received a text message?"
)
# Make sure form elements are visible and not visible as expected.
expect(mfa_input).to_be_visible()
expect(continue_button).to_be_visible()
expect(not_received_message_link).to_be_visible()
expect(csrf_token).to_be_hidden()
# Make sure form elements are configured correctly with the right
# attributes.
expect(mfa_input).to_have_attribute("type", "tel")
expect(mfa_input).to_have_attribute("pattern", "[0-9]*")
expect(csrf_token).to_have_attribute("type", "hidden")
expect(continue_button).to_have_attribute("type", "submit")
expect(not_received_message_link).to_have_attribute("href", "/text-not-received")
# Enter MFA code and continue.
# TODO: Revisit this at a later point in time.
# totp = pyotp.TOTP(
# os.getenv('MFA_TOTP_SECRET'),
# digits=int(os.getenv('MFA_TOTP_LENGTH'))
# )
# mfa_input.fill('totp.now()')
# continue_button.click()
# # Check to make sure that we've arrived at the next page.
# page.wait_for_load_state('domcontentloaded')
# # Check that no MFA code error happened.
# code_not_found_error = page.get_by_text('Code not found')
# expect(code_not_found_error).to_have_count(0)
# # Check the page title exists and matches what we expect.
# # This could be either the Dashboard of a service if there is only
# # one, or choosing a service if there are multiple.
# expect(page).to_have_title(re.compile('Dashboard|Choose service'))
# def test_sign_in_and_mfa_pages(end_to_end_context):
# # Open a new page and go to the staging site.
# page = end_to_end_context.new_page()
# page.goto(os.getenv("NOTIFY_E2E_TEST_URI"))
# print(f"test_sign_in_and_mfa_pages initial {page}")
#
# sign_in_button = page.get_by_role("link", name="Sign in")
#
# # Test trying to sign in.
# sign_in_button.click()
#
# # Check to make sure that we've arrived at the next page.
# page.wait_for_load_state("domcontentloaded")
#
# # Check the page title exists and matches what we expect.
# expect(page).to_have_title(re.compile("Sign in"))
#
# # Check for the sign in heading.
# sign_in_heading = page.get_by_role("heading", name="Sign in")
# expect(sign_in_heading).to_be_visible()
#
# # Check for the sign in form elements.
# # NOTE: Playwright cannot find input elements by role and recommends using
# # get_by_label() instead; however, hidden form elements do not have
# # labels associated with them, hence the XPath!
# # See https://playwright.dev/python/docs/api/class-page#page-get-by-label
# # and https://playwright.dev/python/docs/locators#locate-by-css-or-xpath
# # for more information.
# email_address_input = page.get_by_label("Email address")
# password_input = page.get_by_label("Password")
# csrf_token = page.locator('xpath=//input[@name="csrf_token"]')
# continue_button = page.get_by_role("button", name=re.compile("Continue"))
# forgot_password_link = page.get_by_role("link", name="Forgot your password?")
#
# # Make sure form elements are visible and not visible as expected.
# expect(email_address_input).to_be_visible()
# expect(password_input).to_be_visible()
# expect(continue_button).to_be_visible()
# expect(forgot_password_link).to_be_visible()
#
# expect(csrf_token).to_be_hidden()
#
# # Make sure form elements are configured correctly with the right
# # attributes.
# expect(email_address_input).to_have_attribute("type", "email")
# expect(password_input).to_have_attribute("type", "password")
# expect(csrf_token).to_have_attribute("type", "hidden")
# expect(continue_button).to_have_attribute("type", "submit")
# expect(forgot_password_link).to_have_attribute("href", "/forgot-password")
#
# # Sign in to the site.
# email_address_input.fill(os.getenv("NOTIFY_E2E_TEST_EMAIL"))
# password_input.fill(os.getenv("NOTIFY_E2E_TEST_PASSWORD"))
# print(f"email and password {os.getenv('NOTIFY_E2E_TEST_EMAIL')} {os.getenv('NOTIFY_E2E_TEST_PASSWORD')}")
# continue_button.click()
#
# # Wait for the next page to fully load.
# page.wait_for_load_state("domcontentloaded")
#
# # Check the page title exists and matches what we expect.
# print(f"test_sign_in_and_mfa_pages finally is {page}")
# expect(page).to_have_title(re.compile("Check your phone"))
#
# # Check for the sign in heading.
# sign_in_heading = page.get_by_role("heading", name="Check your phone")
# expect(sign_in_heading).to_be_visible()
#
# # Check for the sign in form elements.
# # NOTE: Playwright cannot find input elements by role and recommends using
# # get_by_label() instead; however, hidden form elements do not have
# # labels associated with them, hence the XPath!
# # See https://playwright.dev/python/docs/api/class-page#page-get-by-label
# # and https://playwright.dev/python/docs/locators#locate-by-css-or-xpath
# # for more information.
# mfa_input = page.get_by_label("Text message code")
# csrf_token = page.locator('xpath=//input[@name="csrf_token"]')
# continue_button = page.get_by_role("button", name=re.compile("Continue"))
# not_received_message_link = page.get_by_role(
# "link", name="Not received a text message?"
# )
#
# # Make sure form elements are visible and not visible as expected.
# expect(mfa_input).to_be_visible()
# expect(continue_button).to_be_visible()
# expect(not_received_message_link).to_be_visible()
#
# expect(csrf_token).to_be_hidden()
#
# # Make sure form elements are configured correctly with the right
# # attributes.
# expect(mfa_input).to_have_attribute("type", "tel")
# expect(mfa_input).to_have_attribute("pattern", "[0-9]*")
# expect(csrf_token).to_have_attribute("type", "hidden")
# expect(continue_button).to_have_attribute("type", "submit")
# expect(not_received_message_link).to_have_attribute("href", "/text-not-received")
#
# # Enter MFA code and continue.
# # TODO: Revisit this at a later point in time.
# # totp = pyotp.TOTP(
# # os.getenv('MFA_TOTP_SECRET'),
# # digits=int(os.getenv('MFA_TOTP_LENGTH'))
# # )
#
# # mfa_input.fill('totp.now()')
# # continue_button.click()
#
# # # Check to make sure that we've arrived at the next page.
# # page.wait_for_load_state('domcontentloaded')
#
# # # Check that no MFA code error happened.
# # code_not_found_error = page.get_by_text('Code not found')
# # expect(code_not_found_error).to_have_count(0)
#
# # # Check the page title exists and matches what we expect.
# # # This could be either the Dashboard of a service if there is only
# # # one, or choosing a service if there are multiple.
# # expect(page).to_have_title(re.compile('Dashboard|Choose service'))