Removed best practices flag

This commit is contained in:
alexjanousekGSA
2025-01-12 17:42:15 -05:00
parent 6441ae8ca7
commit b6353c41e5
15 changed files with 162 additions and 313 deletions

View File

@@ -161,7 +161,7 @@
"filename": "app/config.py",
"hashed_secret": "577a4c667e4af8682ca431857214b3a920883efc",
"is_verified": false,
"line_number": 123,
"line_number": 120,
"is_secret": false
}
],
@@ -684,5 +684,5 @@
}
]
},
"generated_at": "2024-11-21T23:08:45Z"
"generated_at": "2025-01-12T22:42:11Z"
}

View File

@@ -168,20 +168,12 @@ def _csp(config):
def create_app(application):
application.config["FEATURE_BEST_PRACTICES_ENABLED"] = (
os.getenv("FEATURE_BEST_PRACTICES_ENABLED", "false").lower() == "true"
)
@application.context_processor
def inject_feature_flags():
feature_best_practices_enabled = application.config.get(
"FEATURE_BEST_PRACTICES_ENABLED", False
)
feature_about_page_enabled = application.config.get(
"FEATURE_ABOUT_PAGE_ENABLED", False
)
return dict(
FEATURE_BEST_PRACTICES_ENABLED=feature_best_practices_enabled,
FEATURE_ABOUT_PAGE_ENABLED=feature_about_page_enabled,
)

View File

@@ -87,9 +87,6 @@ class Config(object):
"tts-benefits-studio@gsa.gov",
],
}
FEATURE_BEST_PRACTICES_ENABLED = (
getenv("FEATURE_BEST_PRACTICES_ENABLED", "false") == "true"
)
FEATURE_ABOUT_PAGE_ENABLED = getenv("FEATURE_ABOUT_PAGE_ENABLED", "false") == "true"

View File

@@ -25,11 +25,6 @@ from app.utils.user import user_is_logged_in
# Hook to check for feature flags
@main.before_request
def check_feature_flags():
if request.path.startswith("/guides") and not current_app.config.get(
"FEATURE_BEST_PRACTICES_ENABLED", False
):
abort(404)
if request.path.startswith("/about") and not current_app.config.get(
"FEATURE_ABOUT_PAGE_ENABLED", False
):
@@ -40,8 +35,8 @@ def check_feature_flags():
def test_feature_flags():
return jsonify(
{
"FEATURE_BEST_PRACTICES_ENABLED": current_app.config[
"FEATURE_BEST_PRACTICES_ENABLED"
"FEATURE_ABOUT_PAGE_ENABLED": current_app.config[
"FEATURE_ABOUT_PAGE_ENABLED"
]
}
)
@@ -272,9 +267,6 @@ def guidance_index():
return render_template(
"views/guidance/index.html",
navigation_links=using_notify_nav(),
feature_best_practices_enabled=current_app.config[
"FEATURE_BEST_PRACTICES_ENABLED"
],
)

View File

@@ -33,10 +33,6 @@ def using_notify_nav():
{"name": "Delivery Status", "link": "main.message_status"},
{"name": "Guidance", "link": "main.guidance_index"},
]
if not current_app.config.get("FEATURE_BEST_PRACTICES_ENABLED"):
nav_items = [
item for item in nav_items if item["link"] != "main.best_practices"
]
return nav_items

View File

@@ -1,20 +1,13 @@
{% set is_information_section = FEATURE_ABOUT_PAGE_ENABLED and (
request.path.startswith('/about') or
request.path.startswith('/join-notify') or
request.path.startswith('/contact')
) %}
{% set is_about_page = request.path.startswith('/about') %}
{% set is_join_notify_page = request.path.startswith('/join-notify') %}
{% set is_contact_page = request.path.startswith('/contact') %}
{% set is_information_section = is_about_page or is_join_notify_page or is_contact_page %}
{% if current_user.is_authenticated %}
{% set navigation = [
{"href": url_for("main.show_accounts_or_dashboard"), "text": "Current service", "active": header_navigation.is_selected('accounts-or-dashboard')},
{"href": url_for('main.get_started'), "text": "Using Notify", "active": header_navigation.is_selected('using_notify')}
] %}
{% if FEATURE_BEST_PRACTICES_ENABLED %}
{% set navigation = navigation + [{"href": url_for('main.best_practices'), "text": "Guides", "active": header_navigation.is_selected('best_practices')}] %}
{% endif %}
{% set navigation = navigation + [
{"href": url_for('main.get_started'), "text": "Using Notify", "active": header_navigation.is_selected('using_notify')},
{"href": url_for('main.best_practices'), "text": "Guides", "active": header_navigation.is_selected('best_practices')},
{"href": url_for('main.features'), "text": "Features", "active": header_navigation.is_selected('features')},
{"href": url_for('main.support'), "text": "Contact us", "active": header_navigation.is_selected('support')}
] %}
@@ -41,16 +34,15 @@
{% endif %}
{% else %}
{% set navigation = [] %}
{% if FEATURE_ABOUT_PAGE_ENABLED %}
{% set navigation = navigation + [
{"href": url_for('main.about_notify'), "text": "About Notify", "active": is_information_section},
{"href": url_for('main.join_notify'), "text": "Join Notify", "active": request.path.startswith('/join-notify')},
{"href": url_for('main.contact'), "text": "Contact us", "active": request.path.startswith('/contact')}
{% set navigation = [
{"href": url_for('main.about_notify'), "text": "About Notify", "active": is_about_page},
{"href": url_for('main.join_notify'), "text": "Join Notify", "active": is_join_notify_page},
{"href": url_for('main.contact'), "text": "Contact us", "active": is_contact_page}
] %}
{% endif %}
{% endif %}

View File

@@ -8,245 +8,118 @@
{% endblock %}
{% block content_column_content %}
<h1 class="font-body-2xl margin-bottom-3">Guidance</h1>
<h1 class="font-body-2xl margin-bottom-3">Guidance</h1>
<p>Notify allows you to easily create templates for messages for your recipients. You can customize messages to encourage
your recipient to manage their benefits and increase follow-through.</p>
<p>Below we explain how to:</p>
<p>Notify allows you easily to create templates for messages for your recipients. You can customize messages to encourage
your recipient to manage their benefits and increase follow through.</p>
<p>Below we explain how to:</p>
<ul class="list list-bullet">
<li><a class="usa-link" href="#format-content">Format your content</a></li>
<li><a class="usa-link" href="#add-links">Add links</a></li>
<li><a class="usa-link" href="#personalize-content">Personalize your content</a></li>
<li><a class="usa-link" href="#conditional-content">Add conditional content</a></li>
<li><a class="usa-link" href="#indentify-program">Identify your program</a></li>
<li><a class="usa-link" href="#prepare-data">Prepare your data</a></li>
<li><a class="usa-link" href="#prevent-fraud">Prevent fraud</a></li>
</ul>
<ul class="list list-bullet">
{% if not feature_best_practices_enabled %}
<li><a class="usa-link" href="#format-content">Format your content</a></li>
<li><a class="usa-link" href="#add-links">Add links</a></li>
{% endif %}
<li><a class="usa-link" href="#personalize-content">Personalize your content</a></li>
<li><a class="usa-link" href="#conditional-content">Add conditional content</a></li>
<li><a class="usa-link" href="#indentify-program">Identify your program</a></li>
<li><a class="usa-link" href="#prepare-data">Prepare your data</a></li>
{% if not feature_best_practices_enabled %}
<li><a class="usa-link" href="#prevent-fraud">Prevent fraud</a></li>
{% endif%}
</ul>
{# Format content #}
<h2 class="padding-top-1" id="format-content">Format your content</h2>
<p>Effective texts will help your message recipients take the steps needed to secure and keep the benefits and services
they depend on. To craft an effective text:</p>
{# Format content #}
<h2 class="padding-top-1" id="format-content">Format your content</h2>
{% if not feature_best_practices_enabled %}
<p>Effective texts will help your message recipients take the steps needed to secure and keep the benefits and services
they depend on. To craft an effective text:</p>
<ul class="list list-bullet">
<li>Choose your messages thoughtfully. Text messages are best to remind/nudge someone to take a specific action or
communicate information at a particular time rather than pushing out broad or overly general information.</li>
<li>Clearly state the issue and expected response. Tell your recipient what you expect from them.</li>
<li>Say only one important thing per message.</li>
<li>Frame the message to encourage action and explain the consequences of not completing the desired action.</li>
</ul>
<ul class="list list-bullet">
<li>Choose your messages thoughtfully. Text messages are best to remind/nudge someone to take a specific action or
communicate information at a particular time rather than pushing out broad or overly general information.</li>
<li>Clearly state the issue and expected response. Tell your recipient what you expect from them.</li>
<li>Say only one important thing per message.</li>
<li>Frame the message to encourage action and explain the consequences of not completing the desired action.</li>
</ul>
{% endif %}
<h3>To create and format your message</h3>
<ol class="list">
<li>All messages start from a template</li>
<li>Click "<a href={{ url_for('.choose_template', service_id=current_service.id) }}>Send Messages</a>". You'll see existing templates.</li>
<li>Add a new template or choose an existing template and select Edit.</li>
</ol>
<h3>To create and format your message</h3>
<ol class="list">
<li>All messages start from a template</li>
<li>Click "<a href={{ url_for('.choose_template', service_id=current_service.id) }}>Send Messages</a>". You'll see existing templates.</li>
<li>Add a new template or choose an existing template and select Edit.</li>
</ol>
{% if not feature_best_practices_enabled %}
{# Add links #}
<h2 class="padding-top-1" id="add-links">Add links</h2>
<p>When composing a text message, links to websites or online applications can help your recipient respond quickly.</p>
{# Add links #}
<h2 class="padding-top-1" id="add-links">Add links</h2>
<p>When composing a text message, links to websites or online applications can help your recipient respond quickly.</p>
<ul class="list list-bullet">
<li>Write URLs in full and Notify will convert them into links for you. Note that you cannot hyperlink text in Notify
messages.</li>
<li>For link click tracking, you can consider adding campaign parameters to URLs.</li>
<li>All links should point to a government domain.</li>
<li>Link directly to where your recipient needs to take action, not to more information.</li>
</ul>
<ul class="list list-bullet">
<li>Write URLs in full and Notify will convert them into links for you. Note that you cannot hyperlink text in Notify
messages.</li>
<li>For link click tracking, you can consider adding campaign parameters to URLs.</li>
<li>All links should point to a government domain.</li>
<li>Link directly to where your recipient needs to take action, not to more information.</li>
</ul>
<h3>About link-shortening services</h3>
<p>We do not recommend using a third-party link-shortening service because:</p>
<ul class="list list-bullet">
<li>Your recipient cannot see where the link will take them, which could make them suspect the link is spam/scam.</li>
<li>Your link might stop working if theres a service outage.</li>
<li>You can no longer control where the redirect goes.</li>
</ul>
{% endif %}
<h3>About link-shortening services</h3>
<p>We do not recommend using a third-party link-shortening service because:</p>
<ul class="list list-bullet">
<li>Your recipient cannot see where the link will take them, which could make them suspect the link is spam/scam.</li>
<li>Your link might stop working if theres a service outage.</li>
<li>You can no longer control where the redirect goes.</li>
</ul>
{# Personalize content #}
<h2 class="padding-top-1" id="personalize-content">Personalize your content</h2>
<p>Personalizing your content can increase response rates and help the recipient know the text is legitimate.</p>
<ul class="list list-bullet">
<li>Including a person's first name increases response rates.</li>
<li>Specific details such as time and location of an appointment or where suspected fraud use occurred encourages action.</li>
</ul>
{# Personalize content #}
<h2 class="padding-top-1" id="personalize-content">Personalize your content</h2>
<p>Personalizing your content can increase response rates and help the recipient know the text is legitimate.</p>
<ul class="list list-bullet">
<li>Including a person's first name increases response rates.</li>
<li>Specific details such as time and location of an appointment or where suspected fraud use occurred encourages action.</li>
</ul>
<h3>To personalize your content</h3>
<ol class="list">
<li>Add a placeholder to your content by placing two brackets around the personalized elements.</li>
<li>You can manually enter the personalized content or you can upload a spreadsheet with the details and let Notify do the
work for you. See <a href="#prepare-data">data preparation</a>.</li>
</ol>
<h3>To personalize your content</h3>
<ol class="list">
<li>Add a placeholder to your content by placing two brackets around the personalized elements.</li>
<li>You can manually enter the personalized content or you can upload a spreadsheet with the details and let Notify do the
work for you. See <a href="#prepare-data">data preparation</a>.</li>
</ol>
<h4>Example</h4>
<p>To personalize with the recipient's first name and include a reference number:</p>
<p class="padding-2 bg-base-lightest">State WIC: Hello ((first name)), your reference is ((ref number)). Please provide this number when you call 555-123-1234 to make an appointment.</p>
<h4>Example</h4>
<p>To personalize with the recipient's first name and include a reference number:</p>
<p class="padding-2 bg-base-lightest">State WIC: Hello ((first name)), your reference is ((ref number)). Please provide this number when you call 555-123-1234 to make an appointment.</p>
<p>Note that variations in the length of personalized content can impact the length of specific messages, and may affect
the number of parts used.</p>
<p>Note that variations in the length of personalized content can impact the length of specific messages, and may affect
the number of parts used.</p>
{# Add conditional content #}
<h2 class="padding-top-1" id="conditional-content">Add conditional content</h2>
<p>Conditional (or optional) content appears only when a recipient meets certain criteria. This feature allows you to make
all or part of the message contingent upon specific criteria associated with the recipient.</p>
{# Add conditional content #}
<h2 class="padding-top-1" id="conditional-content">Add conditional content</h2>
<p>Conditional (or optional) content appears only when a recipient meets certain criteria. This feature allows you to make
all or part of the message contingent upon specific criteria associated with the recipient.</p>
<h3>To add conditional content</h3>
<ol class="list">
<li>Use two brackets and ?? to define the conditional content.</li>
<li>You can manually enter the conditional content or you can upload a spreadsheet with the personal details and let Notify
do the work for you. See <a href="#prepare-data">data preparation</a>.</li>
</ol>
<h3>To add conditional content</h3>
<ol class="list">
<li>Use two brackets and ?? to define the conditional content.</li>
<li>You can manually enter the conditional content or you can upload a spreadsheet with the personal details and let Notify
do the work for you. See <a href="#prepare-data">data preparation</a>.</li>
</ol>
<h4>Examples</h4>
<ol class="list">
<li>If you only want to show something to people who are under 18:
</br>
<p class="padding-2 bg-base-lightest">State SNAP: Renewal applications are due by March 15. ((under18??Please get your application signed by a parent or
guardian.))</p>
</li>
<li>
If you want to make people who are homebound aware of the option of virtual visits (but not other message recipients):
</br>
<p class="padding-2 bg-base-lightest">State Medicaid: Please call 555-123-1234 to schedule an appointment. ((homebound??Virtual visits are available.))</p>
</li>
<li>
If you want to send a messages in different languages to different recipients:
</br>
<p class="padding-2 bg-base-lightest">((English??Weve identified unauthorized use on your EBT account. Call the phone number on the back of your card to
cancel or go to your local CSO for immediate replacement.))((Spanish??Hemos identificado un uso no autorizado en su
cuenta EBT. Llame al número de teléfono que aparece en el reverso de su tarjeta para cancelarla o diríjase a su CSO
local para que se la sustituyan inmediatamente.))</p>
</li>
</ol>
<h4>Examples</h4>
<ol class="list">
<li>If you only want to show something to people who are under 18:
</br>
<p class="padding-2 bg-base-lightest">State SNAP: Renewal applications are due by March 15. ((under18??Please get your application signed by a parent or
guardian.))</p>
</li>
<li>
If you want to make people who are homebound aware of the option of virtual visits (but not other message recipients):
</br>
<p class="padding-2 bg-base-lightest">State Medicaid: Please call 555-123-1234 to schedule an appointment. ((homebound??Virtual visits are available.))</p>
</li>
<li>
If you want to send a messages in different languages to different recipients:
</br>
<p class="padding-2 bg-base-lightest">((English??Weve identified unauthorized use on your EBT account. Call the phone number on the back of your card to
cancel or go to your local CSO for immediate replacement.))((Spanish??Hemos identificado un uso no autorizado en su
cuenta EBT. Llame al número de teléfono que aparece en el reverso de su tarjeta para cancelarla o diríjase a su CSO
local para que se la sustituyan inmediatamente.))</p>
</li>
</ol>
...
{# Identify your program #}
<h2 class="padding-top-1" id="indentify-program">Identify your program</h2>
<p>You can help your recipients identify your texts as legitimate by customizing your messages to clearly state who they
are from. Consider using the program or benefit name that is most familiar to your recipients.</p>
<h3>To customize your program name</h3>
<p>To change the text message sender from the default service name:</p>
<ol class="list">
<li>Go to the <a href="{{ url_for('main.service_settings', service_id=current_service.id) }}">Settings page</a></li>
<li>Select “Start text messages with service name.”</li>
<li>Change the service name to a familiar program or benefit.</li>
</ol>
{# Prepare your data #}
<h2 class="padding-top-1" id="prepare-data">Prepare your data</h2>
<p>The easiest and most efficient way to personalize your content is by uploading a spreadsheet. Notify can accommodate
many file formats and structures.</p>
<h3>File format</h3>
<p>Notify can accept files in the following formats: CSV, TSV, ODS, and Microsoft Excel.</p>
<h3>File structure</h3>
<ul class="list">
<li>The phone number must be in the first column (Column A) and must be labeled <strong>Phone number</strong>.</li>
<li>Each column must have a unique name.</li>
<li>If you are using Excel, you must either disable the”auto-date/time format” for time and date columns or convert the file
to a CSV prior to loading. (If you do not, Excel will display date/time data in a confusing format.)</li>
</ul>
<h3>Formatting personalized content</h3>
<p>If you are sending a message with personalized content, such as the first name of the recipient or the appointment time
and location, the names of the column headings have to match the indicator included in the message template.</p>
<p>For example, if the personalized content is the first name of the recipient, and we are using the spreadsheet below, the
indicator in the message needs to be ((First name)), not ((firstname)) or ((name)).</p>
<h3>Formatting conditional content</h3>
<p>If you are sending messages with conditional content, such as content based on the recipients preferred language or
location, the flag to receive the content needs to be captured in its own column with a Yes or No (Y/N) flag.</p>
<h3>Example</h3>
<div class="table-overflow-x-auto">
<table class="usa-table">
<caption class="usa-sr-only">
Example
</caption>
<thead>
<tr>
<th scope="col">Phone number</th>
<th scope="col">First name</th>
<th scope="col">Last name</th>
<th scope="col">Spanish</th>
<th scope="col">English</th>
<th scope="col">Date</th>
<th scope="col">Time</th>
<th scope="col">Location</th>
</tr>
</thead>
<tbody>
<tr>
<td>123-456-7890</td>
<td>Lulu</td>
<td>Praether</td>
<td>N</td>
<td>Y</td>
<td>November 2, 2023</td>
<td>3:25</td>
<td>123 Ford Rd.</td>
</tr>
<tr>
<td>234-567-8901</td>
<td>Sela</td>
<td>Appel</td>
<td>Y</td>
<td>N</td>
<td>November 2, 2023</td>
<td>4:00</td>
<td>123 Ford Rd.</td>
</tr>
<tr>
<td>123-456-7890</td>
<td>Dexter</td>
<td>Moseley</td>
<td>N</td>
<td>Y</td>
<td>November 2, 2023</td>
<td>2:00</td>
<td>123 Ford Rd.</td>
</tr>
</tbody>
</table>
</div>
{% if not feature_best_practices_enabled %}
{# Preventing fraud #}
<h2 class="padding-top-1" id="prevent-fraud">Preventing fraud</h2>
<p>Texting fraud is ever prevalent and while we cant eliminate the risk, we can reduce the chances that recipients will
fall victim to fraud.</p>
<ol class="list">
<li>Never send unnecessary or protected private information.</li>
<li>Remind your recipients that text messaging is not a secure means of communication and they should not send you private
information via text.</li>
<li>Only include links to websites and online applications that are secure.</li>
<li>Send an introductory text letting recipients know you will be texting them and to save the number in their phone.</li>
<li>Include an auto-response with the name of your organization and a contact phone number.</li>
</ol>
<h3>Examples</h3>
<ol class="list">
<li>Introductory text:
</br>
<p class="padding-2 bg-base-lightest">State Transit Dept: We're piloting a new way to get important reminders to our staff. Save this number to your phone,
you'll receive updates from us here.</p>
</li>
<li>Auto-response text:
</br>
<p class="padding-2 bg-base-lightest">State Agency: This number is unmonitored. To contact us, call us at 555-123-1234. We will never ask for personal details
in a text. If you have questions about how to protect your privacy, see statename.gov/privacy.</p>
</li>
</ol>
{% endif %}
{% endblock %}

View File

@@ -7,4 +7,3 @@ cloud_dot_gov_route: notify-demo.app.cloud.gov
redis_enabled: 1
nr_agent_id: '1134302465'
nr_app_id: '1083160688'
FEATURE_BEST_PRACTICES_ENABLED: true

View File

@@ -7,4 +7,3 @@ cloud_dot_gov_route: notify.app.cloud.gov
redis_enabled: 1
nr_agent_id: '1050708682'
nr_app_id: '1050708682'
FEATURE_BEST_PRACTICES_ENABLED: false

View File

@@ -12,4 +12,3 @@ SECRET_KEY: sandbox-notify-secret-key
nr_agent_id: ''
nr_app_id: ''
NR_BROWSER_KEY: ''
FEATURE_BEST_PRACTICES_ENABLED: true

View File

@@ -7,4 +7,3 @@ cloud_dot_gov_route: notify-staging.app.cloud.gov
redis_enabled: 1
nr_agent_id: '1134291385'
nr_app_id: '1031640326'
FEATURE_BEST_PRACTICES_ENABLED: false

View File

@@ -62,4 +62,3 @@ applications:
LOGIN_DOT_GOV_CERTS_URL: ((LOGIN_DOT_GOV_CERTS_URL))
# feature flagging
FEATURE_BEST_PRACTICES_ENABLED: ((FEATURE_BEST_PRACTICES_ENABLED))

View File

@@ -121,8 +121,7 @@ def test_static_pages(client_request, mock_get_organization_by_domain, view, moc
"guidance_index",
]
return (
not current_app.config["FEATURE_BEST_PRACTICES_ENABLED"]
and view in feature_flagged_views
view in feature_flagged_views
)
request = partial(client_request.get, "main.{}".format(view))

View File

@@ -16,43 +16,39 @@ def test_best_practices_side_menu(authenticated_page):
page.wait_for_load_state("domcontentloaded")
check_axe_report(page)
response = page.request.get(f"{E2E_TEST_URI}/test/feature-flags")
feature_flags = response.json()
feature_best_practices_enabled = feature_flags.get("FEATURE_BEST_PRACTICES_ENABLED")
# Test Best Practices navigation
page.get_by_role("link", name="Best Practices").click()
expect(page).to_have_title(re.compile("Best Practice"))
if feature_best_practices_enabled:
page.get_by_role("link", name="Best Practices").click()
expect(page).to_have_title(re.compile("Best Practice"))
page.get_by_role("link", name="Clear goals", exact=True).click()
expect(page).to_have_title(re.compile("Establish clear goals"))
page.get_by_role("link", name="Clear goals", exact=True).click()
expect(page).to_have_title(re.compile("Establish clear goals"))
page.get_by_role("link", name="Rules and regulations").click()
expect(page).to_have_title(re.compile("Rules and regulations"))
page.get_by_role("link", name="Rules and regulations").click()
expect(page).to_have_title(re.compile("Rules and regulations"))
page.get_by_role("link", name="Establish trust").click()
expect(page).to_have_title(re.compile("Establish trust"))
page.get_by_role("link", name="Establish trust").click()
expect(page).to_have_title(re.compile("Establish trust"))
page.get_by_role("link", name="Write for action").click()
expect(page).to_have_title(re.compile("Write texts that provoke"))
page.get_by_role("link", name="Write for action").click()
expect(page).to_have_title(re.compile("Write texts that provoke"))
page.get_by_role("link", name="Multiple languages").click()
expect(page).to_have_title(re.compile("Text in multiple languages"))
page.get_by_role("link", name="Multiple languages").click()
expect(page).to_have_title(re.compile("Text in multiple languages"))
page.get_by_role("link", name="Benchmark performance").click()
expect(page).to_have_title(re.compile("Measuring performance with"))
page.get_by_role("link", name="Benchmark performance").click()
expect(page).to_have_title(re.compile("Measuring performance with"))
parent_link = page.get_by_role("link", name="Establish trust")
parent_link.hover()
parent_link = page.get_by_role("link", name="Establish trust")
parent_link.hover()
submenu_item = page.get_by_role("link", name=re.compile("Get the word out"))
submenu_item.click()
submenu_item = page.get_by_role("link", name=re.compile("Get the word out"))
submenu_item.click()
expect(page).to_have_url(re.compile(r"#get-the-word-out"))
expect(page).to_have_url(re.compile(r"#get-the-word-out"))
anchor_target = page.locator("#get-the-word-out")
expect(anchor_target).to_be_visible()
anchor_target.click()
anchor_target = page.locator("#get-the-word-out")
expect(anchor_target).to_be_visible()
anchor_target.click()
def test_breadcrumbs_best_practices(authenticated_page):
@@ -63,10 +59,6 @@ def test_breadcrumbs_best_practices(authenticated_page):
page.wait_for_load_state("domcontentloaded")
check_axe_report(page)
response = page.request.get(f"{E2E_TEST_URI}/test/feature-flags")
feature_flags = response.json()
feature_best_practices_enabled = feature_flags.get("FEATURE_BEST_PRACTICES_ENABLED")
if feature_best_practices_enabled:
page.get_by_role("link", name="Clear goals", exact=True).click()
page.locator("ol").get_by_role("link", name="Best Practices").click()
# Test Best Practices breadcrumbs
page.get_by_role("link", name="Clear goals", exact=True).click()
page.locator("ol").get_by_role("link", name="Best Practices").click()

21
urls.js
View File

@@ -32,6 +32,27 @@ const sublinks = [
label: 'Benchmark Performance',
path: '/guides/benchmark-performance',
},
{
label: 'About',
path: '/about',
},
{
label: 'Why Text Messaging',
path: '/about/why-text-messaging',
},
{
label: 'Security',
path: '/about/security',
},
{
label: 'Join Notify',
path: '/join-notify',
},
{
label: 'Contact',
path: '/contact',
},
// Add more links here as needed
];