tests are, uh, mostly passing

This commit is contained in:
stvnrlly
2022-10-05 01:12:35 +00:00
parent 9d5bcdf910
commit 53204c307b
12 changed files with 37 additions and 40 deletions

View File

@@ -8,6 +8,7 @@ def find_by_service_name(services, service_name):
return services[i] return services[i]
return None return None
def extract_cloudfoundry_config(): def extract_cloudfoundry_config():
vcap_services = json.loads(os.environ['VCAP_SERVICES']) vcap_services = json.loads(os.environ['VCAP_SERVICES'])
@@ -18,7 +19,10 @@ def extract_cloudfoundry_config():
os.environ['REDIS_URL'] = vcap_services['aws-elasticache-redis'][0]['credentials']['uri'].replace('redis', 'rediss') os.environ['REDIS_URL'] = vcap_services['aws-elasticache-redis'][0]['credentials']['uri'].replace('redis', 'rediss')
# CSV Upload Bucket Name # CSV Upload Bucket Name
bucket_service = find_by_service_name(vcap_services['s3'], f"notifications-api-csv-upload-bucket-{os.environ['DEPLOY_ENV']}") bucket_service = find_by_service_name(
vcap_services['s3'],
f"notifications-api-csv-upload-bucket-{os.environ['DEPLOY_ENV']}"
)
if bucket_service: if bucket_service:
os.environ['CSV_UPLOAD_BUCKET_NAME'] = bucket_service['credentials']['bucket'] os.environ['CSV_UPLOAD_BUCKET_NAME'] = bucket_service['credentials']['bucket']
os.environ['CSV_UPLOAD_ACCESS_KEY'] = bucket_service['credentials']['access_key_id'] os.environ['CSV_UPLOAD_ACCESS_KEY'] = bucket_service['credentials']['access_key_id']
@@ -26,7 +30,10 @@ def extract_cloudfoundry_config():
os.environ['CSV_UPLOAD_REGION'] = bucket_service['credentials']['region'] os.environ['CSV_UPLOAD_REGION'] = bucket_service['credentials']['region']
# Contact List Bucket Name # Contact List Bucket Name
bucket_service = find_by_service_name(vcap_services['s3'], f"notifications-api-contact-list-bucket-{os.environ['DEPLOY_ENV']}") bucket_service = find_by_service_name(
vcap_services['s3'],
f"notifications-api-contact-list-bucket-{os.environ['DEPLOY_ENV']}"
)
if bucket_service: if bucket_service:
os.environ['CONTACT_LIST_BUCKET_NAME'] = bucket_service['credentials']['bucket'] os.environ['CONTACT_LIST_BUCKET_NAME'] = bucket_service['credentials']['bucket']
os.environ['CONTACT_LIST_ACCESS_KEY'] = bucket_service['credentials']['access_key_id'] os.environ['CONTACT_LIST_ACCESS_KEY'] = bucket_service['credentials']['access_key_id']

View File

@@ -40,7 +40,6 @@ from app.dao.organisation_dao import (
dao_get_organisation_by_email_address, dao_get_organisation_by_email_address,
dao_get_organisation_by_id, dao_get_organisation_by_id,
) )
from app.dao.permissions_dao import permission_dao
from app.dao.services_dao import ( from app.dao.services_dao import (
dao_fetch_all_services_by_user, dao_fetch_all_services_by_user,
dao_fetch_all_services_created_by_user, dao_fetch_all_services_created_by_user,
@@ -64,7 +63,6 @@ from app.models import (
LetterBranding, LetterBranding,
Notification, Notification,
Organisation, Organisation,
Permission,
Service, Service,
User, User,
) )
@@ -151,8 +149,8 @@ def backfill_notification_statuses():
`Notification._status_enum` `Notification._status_enum`
""" """
LIMIT = 250000 LIMIT = 250000
subq = "SELECT id FROM notification_history WHERE notification_status is NULL LIMIT {}".format(LIMIT) # nosec B608 no user-controlled input subq = "SELECT id FROM notification_history WHERE notification_status is NULL LIMIT {}".format(LIMIT) # nosec B608 no user-controlled input
update = "UPDATE notification_history SET notification_status = status WHERE id in ({})".format(subq) # nosec B608 no user-controlled input update = "UPDATE notification_history SET notification_status = status WHERE id in ({})".format(subq) # nosec B608 no user-controlled input
result = db.session.execute(subq).fetchall() result = db.session.execute(subq).fetchall()
while len(result) > 0: while len(result) > 0:
@@ -169,7 +167,7 @@ def update_notification_international_flag():
""" """
# 250,000 rows takes 30 seconds to update. # 250,000 rows takes 30 seconds to update.
subq = "select id from notifications where international is null limit 250000" subq = "select id from notifications where international is null limit 250000"
update = "update notifications set international = False where id in ({})".format(subq) # nosec B608 no user-controlled input update = "update notifications set international = False where id in ({})".format(subq) # nosec B608 no user-controlled input
result = db.session.execute(subq).fetchall() result = db.session.execute(subq).fetchall()
while len(result) > 0: while len(result) > 0:
@@ -180,7 +178,7 @@ def update_notification_international_flag():
# Now update notification_history # Now update notification_history
subq_history = "select id from notification_history where international is null limit 250000" subq_history = "select id from notification_history where international is null limit 250000"
update_history = "update notification_history set international = False where id in ({})".format(subq_history) # nosec B608 no user-controlled input update_history = "update notification_history set international = False where id in ({})".format(subq_history) # nosec B608 no user-controlled input
result_history = db.session.execute(subq_history).fetchall() result_history = db.session.execute(subq_history).fetchall()
while len(result_history) > 0: while len(result_history) > 0:
db.session.execute(update_history) db.session.execute(update_history)
@@ -201,8 +199,8 @@ def fix_notification_statuses_not_in_sync():
""" """
MAX = 10000 MAX = 10000
subq = "SELECT id FROM notifications WHERE cast (status as text) != notification_status LIMIT {}".format(MAX) # nosec B608 no user-controlled input subq = "SELECT id FROM notifications WHERE cast (status as text) != notification_status LIMIT {}".format(MAX) # nosec B608 no user-controlled input
update = "UPDATE notifications SET notification_status = status WHERE id in ({})".format(subq) # nosec B608 no user-controlled input update = "UPDATE notifications SET notification_status = status WHERE id in ({})".format(subq) # nosec B608 no user-controlled input
result = db.session.execute(subq).fetchall() result = db.session.execute(subq).fetchall()
while len(result) > 0: while len(result) > 0:
@@ -212,7 +210,7 @@ def fix_notification_statuses_not_in_sync():
result = db.session.execute(subq).fetchall() result = db.session.execute(subq).fetchall()
subq_hist = "SELECT id FROM notification_history WHERE cast (status as text) != notification_status LIMIT {}".format(MAX) # nosec B608 subq_hist = "SELECT id FROM notification_history WHERE cast (status as text) != notification_status LIMIT {}".format(MAX) # nosec B608
update = "UPDATE notification_history SET notification_status = status WHERE id in ({})".format(subq_hist) # nosec B608 no user-controlled input update = "UPDATE notification_history SET notification_status = status WHERE id in ({})".format(subq_hist) # nosec B608 no user-controlled input
result = db.session.execute(subq_hist).fetchall() result = db.session.execute(subq_hist).fetchall()
while len(result) > 0: while len(result) > 0:

View File

@@ -144,7 +144,7 @@ class Config(object):
MAX_VERIFY_CODE_COUNT = 5 MAX_VERIFY_CODE_COUNT = 5
MAX_FAILED_LOGIN_COUNT = 10 MAX_FAILED_LOGIN_COUNT = 10
SES_STUB_URL = None # TODO: set to a URL in env and remove this to use a stubbed SES service SES_STUB_URL = None # TODO: set to a URL in env and remove this to use a stubbed SES service
# be careful increasing this size without being sure that we won't see slowness in pysftp # be careful increasing this size without being sure that we won't see slowness in pysftp
MAX_LETTER_PDF_ZIP_FILESIZE = 40 * 1024 * 1024 # 40mb MAX_LETTER_PDF_ZIP_FILESIZE = 40 * 1024 * 1024 # 40mb
@@ -164,7 +164,7 @@ class Config(object):
SMS_CODE_TEMPLATE_ID = '36fb0730-6259-4da1-8a80-c8de22ad4246' SMS_CODE_TEMPLATE_ID = '36fb0730-6259-4da1-8a80-c8de22ad4246'
EMAIL_2FA_TEMPLATE_ID = '299726d2-dba6-42b8-8209-30e1d66ea164' EMAIL_2FA_TEMPLATE_ID = '299726d2-dba6-42b8-8209-30e1d66ea164'
NEW_USER_EMAIL_VERIFICATION_TEMPLATE_ID = 'ece42649-22a8-4d06-b87f-d52d5d3f0a27' NEW_USER_EMAIL_VERIFICATION_TEMPLATE_ID = 'ece42649-22a8-4d06-b87f-d52d5d3f0a27'
PASSWORD_RESET_TEMPLATE_ID = '474e9242-823b-4f99-813d-ed392e7f1201' # nosec B105 - this is not a password PASSWORD_RESET_TEMPLATE_ID = '474e9242-823b-4f99-813d-ed392e7f1201' # nosec B105 - this is not a password
ALREADY_REGISTERED_EMAIL_TEMPLATE_ID = '0880fbb1-a0c6-46f0-9a8e-36c986381ceb' ALREADY_REGISTERED_EMAIL_TEMPLATE_ID = '0880fbb1-a0c6-46f0-9a8e-36c986381ceb'
CHANGE_EMAIL_CONFIRMATION_TEMPLATE_ID = 'eb4d9930-87ab-4aef-9bce-786762687884' CHANGE_EMAIL_CONFIRMATION_TEMPLATE_ID = 'eb4d9930-87ab-4aef-9bce-786762687884'
SERVICE_NOW_LIVE_TEMPLATE_ID = '618185c6-3636-49cd-b7d2-6f6f5eb3bdde' SERVICE_NOW_LIVE_TEMPLATE_ID = '618185c6-3636-49cd-b7d2-6f6f5eb3bdde'

View File

@@ -28,12 +28,7 @@ from app.dao.templates_dao import (
) )
from app.errors import InvalidRequest, register_errors from app.errors import InvalidRequest, register_errors
from app.letters.utils import get_letter_pdf_and_metadata from app.letters.utils import get_letter_pdf_and_metadata
from app.models import ( from app.models import LETTER_TYPE, SECOND_CLASS, SMS_TYPE, Template
LETTER_TYPE,
SECOND_CLASS,
SMS_TYPE,
Template,
)
from app.notifications.validators import check_reply_to, service_has_permission from app.notifications.validators import check_reply_to, service_has_permission
from app.schema_validation import validate from app.schema_validation import validate
from app.schemas import ( from app.schemas import (
@@ -171,6 +166,7 @@ def get_all_templates_for_service(service_id):
data = template_schema.dump(templates, many=True) data = template_schema.dump(templates, many=True)
else: else:
data = template_schema_no_detail.dump(templates, many=True) data = template_schema_no_detail.dump(templates, many=True)
print(data)
return jsonify(data=data) return jsonify(data=data)

View File

@@ -87,11 +87,7 @@ def get_london_month_from_utc_column(column):
def get_public_notify_type_text(notify_type, plural=False): def get_public_notify_type_text(notify_type, plural=False):
from app.models import ( from app.models import PRECOMPILED_LETTER, SMS_TYPE, UPLOAD_DOCUMENT
PRECOMPILED_LETTER,
SMS_TYPE,
UPLOAD_DOCUMENT,
)
notify_type_text = notify_type notify_type_text = notify_type
if notify_type == SMS_TYPE: if notify_type == SMS_TYPE:
notify_type_text = 'text message' notify_type_text = 'text message'

View File

@@ -34,11 +34,7 @@ from app.models import (
NOTIFICATION_PENDING_VIRUS_CHECK, NOTIFICATION_PENDING_VIRUS_CHECK,
) )
from tests.app import load_example_csv from tests.app import load_example_csv
from tests.app.db import ( from tests.app.db import create_job, create_notification, create_template
create_job,
create_notification,
create_template,
)
from tests.conftest import set_config from tests.conftest import set_config

View File

@@ -13,10 +13,7 @@ from app.dao.api_key_dao import save_model_api_key
from app.dao.invited_user_dao import save_invited_user from app.dao.invited_user_dao import save_invited_user
from app.dao.jobs_dao import dao_create_job from app.dao.jobs_dao import dao_create_job
from app.dao.notifications_dao import dao_create_notification from app.dao.notifications_dao import dao_create_notification
from app.dao.organisation_dao import ( from app.dao.organisation_dao import dao_create_organisation
dao_add_service_to_organisation,
dao_create_organisation,
)
from app.dao.services_dao import dao_add_user_to_service, dao_create_service from app.dao.services_dao import dao_add_user_to_service, dao_create_service
from app.dao.templates_dao import dao_create_template from app.dao.templates_dao import dao_create_template
from app.dao.users_dao import create_secret_code, create_user_code from app.dao.users_dao import create_secret_code, create_user_code

View File

@@ -17,6 +17,7 @@ def mmg_post(client, data):
data=data, data=data,
headers=[('Content-Type', 'application/json')]) headers=[('Content-Type', 'application/json')])
@pytest.mark.skip(reason="Needs updating for TTS: Firetext removal") @pytest.mark.skip(reason="Needs updating for TTS: Firetext removal")
def test_firetext_callback_should_not_need_auth(client, mocker): def test_firetext_callback_should_not_need_auth(client, mocker):
mocker.patch('app.notifications.notifications_sms_callback.process_sms_client_response') mocker.patch('app.notifications.notifications_sms_callback.process_sms_client_response')
@@ -36,6 +37,7 @@ def test_firetext_callback_should_return_400_if_empty_reference(client, mocker):
assert json_resp['result'] == 'error' assert json_resp['result'] == 'error'
assert json_resp['message'] == ['Firetext callback failed: reference missing'] assert json_resp['message'] == ['Firetext callback failed: reference missing']
@pytest.mark.skip(reason="Needs updating for TTS: Firetext removal") @pytest.mark.skip(reason="Needs updating for TTS: Firetext removal")
def test_firetext_callback_should_return_400_if_no_reference(client, mocker): def test_firetext_callback_should_return_400_if_no_reference(client, mocker):
data = 'mobile=441234123123&status=0&time=2016-03-10 14:17:00' data = 'mobile=441234123123&status=0&time=2016-03-10 14:17:00'
@@ -45,6 +47,7 @@ def test_firetext_callback_should_return_400_if_no_reference(client, mocker):
assert json_resp['result'] == 'error' assert json_resp['result'] == 'error'
assert json_resp['message'] == ['Firetext callback failed: reference missing'] assert json_resp['message'] == ['Firetext callback failed: reference missing']
@pytest.mark.skip(reason="Needs updating for TTS: Firetext removal") @pytest.mark.skip(reason="Needs updating for TTS: Firetext removal")
def test_firetext_callback_should_return_400_if_no_status(client, mocker): def test_firetext_callback_should_return_400_if_no_status(client, mocker):
data = 'mobile=441234123123&time=2016-03-10 14:17:00&reference=notification_id' data = 'mobile=441234123123&time=2016-03-10 14:17:00&reference=notification_id'
@@ -54,6 +57,7 @@ def test_firetext_callback_should_return_400_if_no_status(client, mocker):
assert json_resp['result'] == 'error' assert json_resp['result'] == 'error'
assert json_resp['message'] == ['Firetext callback failed: status missing'] assert json_resp['message'] == ['Firetext callback failed: status missing']
@pytest.mark.skip(reason="Needs updating for TTS: Firetext removal") @pytest.mark.skip(reason="Needs updating for TTS: Firetext removal")
def test_firetext_callback_should_return_200_and_call_task_with_valid_data(client, mocker): def test_firetext_callback_should_return_200_and_call_task_with_valid_data(client, mocker):
mock_celery = mocker.patch( mock_celery = mocker.patch(
@@ -70,6 +74,7 @@ def test_firetext_callback_should_return_200_and_call_task_with_valid_data(clien
queue='sms-callbacks', queue='sms-callbacks',
) )
@pytest.mark.skip(reason="Needs updating for TTS: Firetext removal") @pytest.mark.skip(reason="Needs updating for TTS: Firetext removal")
def test_firetext_callback_including_a_code_should_return_200_and_call_task_with_valid_data(client, mocker): def test_firetext_callback_including_a_code_should_return_200_and_call_task_with_valid_data(client, mocker):
mock_celery = mocker.patch( mock_celery = mocker.patch(
@@ -86,6 +91,7 @@ def test_firetext_callback_including_a_code_should_return_200_and_call_task_with
queue='sms-callbacks', queue='sms-callbacks',
) )
@pytest.mark.skip(reason="Needs updating for TTS: MMG removal") @pytest.mark.skip(reason="Needs updating for TTS: MMG removal")
def test_mmg_callback_should_not_need_auth(client, mocker, sample_notification): def test_mmg_callback_should_not_need_auth(client, mocker, sample_notification):
mocker.patch('app.notifications.notifications_sms_callback.process_sms_client_response') mocker.patch('app.notifications.notifications_sms_callback.process_sms_client_response')
@@ -98,6 +104,7 @@ def test_mmg_callback_should_not_need_auth(client, mocker, sample_notification):
response = mmg_post(client, data) response = mmg_post(client, data)
assert response.status_code == 200 assert response.status_code == 200
@pytest.mark.skip(reason="Needs updating for TTS: MMG removal") @pytest.mark.skip(reason="Needs updating for TTS: MMG removal")
def test_process_mmg_response_returns_400_for_malformed_data(client): def test_process_mmg_response_returns_400_for_malformed_data(client):
data = json.dumps({"reference": "mmg_reference", data = json.dumps({"reference": "mmg_reference",
@@ -114,6 +121,7 @@ def test_process_mmg_response_returns_400_for_malformed_data(client):
assert "{} callback failed: {} missing".format('MMG', 'status') in json_data['message'] assert "{} callback failed: {} missing".format('MMG', 'status') in json_data['message']
assert "{} callback failed: {} missing".format('MMG', 'CID') in json_data['message'] assert "{} callback failed: {} missing".format('MMG', 'CID') in json_data['message']
@pytest.mark.skip(reason="Needs updating for TTS: MMG removal") @pytest.mark.skip(reason="Needs updating for TTS: MMG removal")
def test_mmg_callback_should_return_200_and_call_task_with_valid_data(client, mocker): def test_mmg_callback_should_return_200_and_call_task_with_valid_data(client, mocker):
mock_celery = mocker.patch( mock_celery = mocker.patch(

View File

@@ -5,9 +5,8 @@ from app.commands import (
populate_annual_billing_with_defaults, populate_annual_billing_with_defaults,
) )
from app.dao.inbound_numbers_dao import dao_get_available_inbound_numbers from app.dao.inbound_numbers_dao import dao_get_available_inbound_numbers
from app.dao.services_dao import dao_add_user_to_service
from app.models import AnnualBilling from app.models import AnnualBilling
from tests.app.db import create_annual_billing, create_service, create_user from tests.app.db import create_annual_billing, create_service
def test_insert_inbound_numbers_from_file(notify_db_session, notify_api, tmpdir): def test_insert_inbound_numbers_from_file(notify_db_session, notify_api, tmpdir):

View File

@@ -60,7 +60,7 @@ def test_load_config_if_cloudfoundry_not_available(reload_config):
def test_queue_names_all_queues_correct(): def test_queue_names_all_queues_correct():
# Need to ensure that all_queues() only returns queue names used in API # Need to ensure that all_queues() only returns queue names used in API
queues = QueueNames.all_queues() queues = QueueNames.all_queues()
assert len(queues) == 18 assert len(queues) == 17
assert set([ assert set([
QueueNames.PRIORITY, QueueNames.PRIORITY,
QueueNames.PERIODIC, QueueNames.PERIODIC,

View File

@@ -5,7 +5,7 @@ import pytest
import sqlalchemy import sqlalchemy
from alembic.command import upgrade from alembic.command import upgrade
from alembic.config import Config from alembic.config import Config
from flask import Flask from flask import Flask, current_app
from app import create_app, db from app import create_app, db
from app.dao.provider_details_dao import get_provider_details_by_identifier from app.dao.provider_details_dao import get_provider_details_by_identifier