Removed all govuk css (#2814)

* Removed all govuk css

* Updated reference files

* Removing govuk js

* Fixed casing for modules, removed unused page

* Got more reference images

* Updated template page

* Removed govuk padding util

* Updated hint to uswds hint

* More govuk cleanup

* Commiting backstopjs ref files

* Fixed all unit tests that broke due to brittleness around govuk styling

* Added new ref images

* Final removal of govuk

* Officially removed all govuk references

* Updated reference file

* Updated link to button

* UI modernization

* Cleanup

* removed govuk escaping tests since they are no longer needed

* Fix CodeQL security issue in escapeElementName function

- Escape backslashes first before other special characters
- Prevents potential double-escaping vulnerability
- Addresses CodeQL alert about improper string escaping

* Found more govuk removal. Fixed unit tests

* Add missing pipeline check to pre-commit

* updated test

* Updated e2e test

* More update to e2e test

* Fixed another e2e test

* Simple PR comments addressed

* More updates

* Updated backstop ref files

* Refactored folder selection for non-admins

* Updated redundant line

* Updated tests to include correct mocks

* Added more ref files

* Addressing carlos comments

* Addressing Carlo comments, cleanup of window initing

* More cleanup and addressing carlo comments

* Fixing a11 scan

* Fixed a few issues with javascript

* Fixed for pr

* Fixing e2e tests

* Tweaking e2e test

* Added more ref files and cleaned up urls.js

* Fixed bug with creating new template

* Removed brittle test - addressed code ql comment

* e2e race condition fix

* More e2e test fixes

* Updated e2e tests to not wait for text sent

* Updated test to not wait for button click response

* Made tear down more resilent if staging is down

* reverted e2e test to what was working before main merge

* Updated backstopRef images

* Updated gulp to include job-polling differently
This commit is contained in:
Alex Janousek
2025-10-06 09:38:54 -04:00
committed by GitHub
parent a366a10865
commit 6f5750f095
323 changed files with 2731 additions and 2796 deletions

View File

@@ -1,12 +1,6 @@
import logging
from flask import (
abort,
redirect,
render_template,
request,
url_for,
)
from flask import abort, redirect, render_template, request, url_for
from flask_login import current_user
from app import status_api_client
@@ -69,14 +63,6 @@ def delivery_and_failure():
return redirect(url_for(".message_status"), 301)
@main.route("/design-patterns-content-guidance")
@user_is_logged_in
def design_content():
return redirect(
"https://www.gov.uk/service-manual/design/sending-emails-and-text-messages", 301
)
@main.route("/documentation")
@user_is_logged_in
def documentation():

View File

@@ -22,7 +22,7 @@ from app import (
notification_api_client,
service_api_client,
)
from app.enums import NotificationStatus, ServicePermission
from app.enums import NotificationStatus, NotificationType, ServicePermission
from app.formatters import get_time_left, message_count_noun
from app.main import main
from app.main.forms import SearchNotificationsForm
@@ -387,36 +387,37 @@ def get_notifications(service_id, message_type, status_override=None): # noqa
def get_status_filters(service, message_type, statistics):
if message_type is None:
stats = {
key: sum(statistics[message_type][key] for message_type in {"email", "sms"})
for key in {
"requested",
NotificationStatus.DELIVERED,
NotificationStatus.FAILED,
}
}
else:
stats = statistics[message_type]
message_types = (
[message_type]
if message_type
else [NotificationType.EMAIL, NotificationType.SMS]
)
if stats.get("failure") is not None:
stats[NotificationStatus.FAILED] = stats["failure"]
stats = {
NotificationStatus.REQUESTED: sum(
statistics[mt].get(NotificationStatus.REQUESTED, 0) for mt in message_types
),
NotificationStatus.DELIVERED: sum(
statistics[mt].get(NotificationStatus.DELIVERED, 0) for mt in message_types
),
NotificationStatus.FAILED: sum(
statistics[mt].get(NotificationStatus.FAILED, 0) for mt in message_types
),
}
stats[NotificationStatus.PENDING] = (
stats["requested"]
stats[NotificationStatus.REQUESTED]
- stats[NotificationStatus.DELIVERED]
- stats[NotificationStatus.FAILED]
)
filters = [
# key, label, option
("requested", "total", "sending,delivered,failed"),
(NotificationStatus.REQUESTED, "total", "sending,delivered,failed"),
(NotificationStatus.PENDING, "pending", "sending,pending"),
(NotificationStatus.DELIVERED, "delivered", "delivered"),
(NotificationStatus.FAILED, "failed", "failed"),
]
return [
# return list containing label, option, link, count
(
label,
option,

View File

@@ -1,5 +1,4 @@
from flask import current_app, render_template
from flask_login import current_user
from flask import render_template
from app.main import main
from app.main.forms import SearchByNameForm
@@ -35,18 +34,3 @@ def how_to_pay():
"views/pricing/how-to-pay.html",
navigation_links=using_notify_nav(),
)
@main.route("/pricing/billing-details")
@user_is_logged_in
def billing_details():
if current_user.is_authenticated:
return render_template(
"views/pricing/billing-details.html",
billing_details=current_app.config["NOTIFY_BILLING_DETAILS"],
navigation_links=using_notify_nav(),
)
return render_template(
"views/pricing/billing-details-signed-out.html",
navigation_links=using_notify_nav(),
)

View File

@@ -149,7 +149,7 @@ def service_switch_live(service_id):
@user_is_platform_admin
def service_switch_count_as_live(service_id):
form = ServiceOnOffSettingForm(
name="Count in list of live services",
name="Count as live",
enabled=current_service.count_as_live,
truthy="Yes",
falsey="No",

View File

@@ -190,10 +190,9 @@ def _handle_e2e_tests(redirect_url): # pragma: no cover
)
except Exception as e:
stre = str(e)
stre = stre.replace(" ", "_")
# Trying to get a message back to playwright somehow since we can't raise an error
return redirect(url_for(f"https://{stre}"))
current_app.logger.error(f"E2E test error: {e}")
# Return a simple error page instead of trying to create an invalid URL
abort(500)
@main.route("/sign-in", methods=(["GET", "POST"]))

View File

@@ -263,14 +263,24 @@ def _add_template_by_type(template_type, template_folder_id):
)
)
return redirect(
url_for(
".add_service_template",
service_id=current_service.id,
template_type=template_type,
template_folder_id=template_folder_id,
# Use the appropriate route based on whether we're in a folder or not
if template_folder_id:
return redirect(
url_for(
".add_service_template",
service_id=current_service.id,
template_type=template_type,
template_folder_id=template_folder_id,
)
)
else:
return redirect(
url_for(
".add_service_template",
service_id=current_service.id,
template_type=template_type,
)
)
)
@main.route("/services/<uuid:service_id>/templates/copy")