mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-19 01:44:45 -05:00
(show the "something went wrong" error page). also catch any other werkzeug http exceptions and show an appropriate template, if it exists
71 lines
2.7 KiB
Python
71 lines
2.7 KiB
Python
import pytest
|
||
from bs4 import BeautifulSoup
|
||
from flask import Response, url_for
|
||
from flask_wtf.csrf import CSRFError
|
||
from notifications_python_client.errors import HTTPError
|
||
|
||
|
||
def test_bad_url_returns_page_not_found(client):
|
||
response = client.get('/bad_url')
|
||
assert response.status_code == 404
|
||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||
assert page.h1.string.strip() == 'Page could not be found'
|
||
|
||
|
||
def test_load_service_before_request_handles_404(client_request, mocker):
|
||
exc = HTTPError(Response(status=404), 'Not found')
|
||
get_service = mocker.patch('app.service_api_client.get_service', side_effect=exc)
|
||
|
||
client_request.get(
|
||
'main.service_dashboard',
|
||
service_id='00000000-0000-0000-0000-000000000000',
|
||
_expected_status=404
|
||
)
|
||
|
||
get_service.assert_called_once_with('00000000-0000-0000-0000-000000000000')
|
||
|
||
|
||
@pytest.mark.parametrize('url', [
|
||
'/new-password/MALFORMED_TOKEN',
|
||
'/user-profile/email/confirm/MALFORMED_TOKEN',
|
||
'/verify-email/MALFORMED_TOKEN'
|
||
])
|
||
def test_malformed_token_returns_page_not_found(logged_in_client, url):
|
||
response = logged_in_client.get(url)
|
||
|
||
assert response.status_code == 404
|
||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||
assert page.h1.string.strip() == 'Page could not be found'
|
||
flash_banner = page.find('div', class_='banner-dangerous').string.strip()
|
||
assert flash_banner == "There’s something wrong with the link you’ve used."
|
||
|
||
|
||
def test_csrf_returns_400(logged_in_client, mocker):
|
||
# we turn off CSRF handling for tests, so fake a CSRF response here.
|
||
csrf_err = CSRFError('400 Bad Request: The CSRF tokens do not match.')
|
||
mocker.patch('app.main.views.index.render_template', side_effect=csrf_err)
|
||
|
||
response = logged_in_client.get('/cookies')
|
||
|
||
assert response.status_code == 400
|
||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||
assert page.h1.string.strip() == 'Something went wrong, please go back and try again.'
|
||
|
||
|
||
def test_csrf_redirects_to_sign_in_page_if_not_signed_in(client, mocker):
|
||
csrf_err = CSRFError('400 Bad Request: The CSRF tokens do not match.')
|
||
mocker.patch('app.main.views.index.render_template', side_effect=csrf_err)
|
||
|
||
response = client.get('/cookies')
|
||
|
||
assert response.status_code == 302
|
||
assert response.location == url_for('main.sign_in', next='/cookies', _external=True)
|
||
|
||
|
||
def test_405_returns_something_went_wrong_page(client, mocker):
|
||
response = client.post('/')
|
||
|
||
assert response.status_code == 405
|
||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||
assert page.h1.string.strip() == 'Something went wrong, please go back and try again.'
|