from unittest.mock import call, ANY, Mock import pytest import uuid from flask import url_for from bs4 import BeautifulSoup from werkzeug.exceptions import InternalServerError import app from app.utils import email_safe from tests import validate_route_permission, service_json from tests.app.test_utils import normalize_spaces from tests.conftest import active_user_with_permissions, platform_admin_user @pytest.mark.parametrize('user, expected_rows', [ (active_user_with_permissions, [ 'Label Value Action', 'Service name service one Change', 'Email reply to address None Change', 'Text message sender 40604 Change', 'International text messages Off Change', 'Letters Off Change', ]), (platform_admin_user, [ 'Label Value Action', 'Service name service one Change', 'Email reply to address None Change', 'Text message sender 40604 Change', 'International text messages Off Change', 'Letters Off Change', 'Label Value Action', 'Email branding GOV.UK Change', 'Letter branding HM Government Change', ]), ]) def test_should_show_overview( client, mocker, service_one, fake_uuid, mock_get_letter_organisations, user, expected_rows, ): client.login(user(fake_uuid), mocker, service_one) response = client.get(url_for( 'main.service_settings', service_id=service_one['id'] )) assert response.status_code == 200 page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') assert page.find('h1').text == 'Settings' rows = page.find_all('tr') assert len(rows) == len(expected_rows) for index, row in enumerate(expected_rows): assert row == " ".join(rows[index].text.split()) app.service_api_client.get_service.assert_called_with(service_one['id']) def test_should_show_overview_for_service_with_more_things_set( client, active_user_with_permissions, mocker, service_with_reply_to_addresses, mock_get_organisation, mock_get_letter_organisations, ): client.login(active_user_with_permissions, mocker, service_with_reply_to_addresses) response = client.get(url_for( 'main.service_settings', service_id=service_with_reply_to_addresses['id'] )) page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') for index, row in enumerate([ 'Service name service one Change', 'Email reply to address test@example.com Change', 'Text message sender elevenchars Change', 'International text messages Off Change', 'Letters Off Change', ]): assert row == " ".join(page.find_all('tr')[index + 1].text.split()) def test_if_cant_send_letters_then_cant_see_letter_contact_block( logged_in_client, service_one, mock_get_letter_organisations, ): response = logged_in_client.get(url_for( 'main.service_settings', service_id=service_one['id'] )) assert 'Letter contact block' not in response.get_data(as_text=True) def test_letter_contact_block_shows_none_if_not_set( logged_in_client, service_one, mocker, mock_get_letter_organisations, ): service_one['can_send_letters'] = True response = logged_in_client.get(url_for( 'main.service_settings', service_id=service_one['id'] )) page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') div = page.find_all('tr')[6].find_all('td')[1].div assert div.text.strip() == 'None' assert 'default' in div.attrs['class'][0] def test_escapes_letter_contact_block( logged_in_client, service_one, mocker, mock_get_letter_organisations, ): service_one['can_send_letters'] = True service_one['letter_contact_block'] = 'foo\nbar' response = logged_in_client.get(url_for( 'main.service_settings', service_id=service_one['id'] )) page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') div = str(page.find_all('tr')[6].find_all('td')[1].div) assert 'foo
bar' in div assert '