mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-11 07:42:20 -05:00
more tests
This commit is contained in:
@@ -336,6 +336,7 @@ def create_random_identifier():
|
||||
return ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(16))
|
||||
|
||||
|
||||
# TODO maintainability what is the purpose of this? Debugging?
|
||||
def setup_sqlalchemy_events(app):
|
||||
|
||||
TOTAL_DB_CONNECTIONS = Gauge(
|
||||
|
||||
@@ -147,6 +147,8 @@ def purge_functional_test_data(user_email_prefix):
|
||||
@click.option('-f', '--file_name', required=True,
|
||||
help="""Full path of the file to upload, file is a contains inbound numbers, one number per line.""")
|
||||
def insert_inbound_numbers_from_file(file_name):
|
||||
# TODO maintainability what is the purpose of this command? Who would use it and why?
|
||||
|
||||
print("Inserting inbound numbers from {}".format(file_name))
|
||||
with open(file_name) as file:
|
||||
sql = "insert into inbound_numbers values('{}', '{}', 'sns', null, True, now(), null);"
|
||||
@@ -168,6 +170,9 @@ def setup_commands(application):
|
||||
@click.option('-d', '--day', help="The date to recalculate, as YYYY-MM-DD", required=True,
|
||||
type=click_dt(format='%Y-%m-%d'))
|
||||
def rebuild_ft_billing_for_day(service_id, day):
|
||||
|
||||
# TODO maintainability what is the purpose of this command? Who would use it and why?
|
||||
|
||||
"""
|
||||
Rebuild the data in ft_billing for the given service_id and date
|
||||
"""
|
||||
@@ -386,6 +391,8 @@ def populate_service_volume_intentions(file_name):
|
||||
# [1] SMS:: volume intentions for service
|
||||
# [2] Email:: volume intentions for service
|
||||
|
||||
# TODO maintainability what is the purpose of this command? Who would use it and why?
|
||||
|
||||
with open(file_name, 'r') as f:
|
||||
for line in itertools.islice(f, 1, None):
|
||||
columns = line.split(',')
|
||||
|
||||
@@ -45,6 +45,7 @@ class InvalidRequest(Exception):
|
||||
return str(self.to_dict())
|
||||
|
||||
|
||||
# TODO maintainability what is this for? How to unit test it?
|
||||
def register_errors(blueprint):
|
||||
@blueprint.errorhandler(InvalidEmailError)
|
||||
def invalid_format(error):
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from app.dao import DAOClass
|
||||
from app.dao.permissions_dao import permission_dao
|
||||
from tests.app.db import create_service
|
||||
|
||||
@@ -22,3 +23,17 @@ def test_get_permissions_by_user_id_returns_only_active_service(sample_user):
|
||||
assert len(permissions) == 7
|
||||
assert active_service in [i.service for i in permissions]
|
||||
assert inactive_service not in [i.service for i in permissions]
|
||||
|
||||
|
||||
def test_dao_class(sample_user):
|
||||
create_service(user=sample_user, service_name="Active service")
|
||||
create_service(user=sample_user, service_name="Inactive service", active=False)
|
||||
|
||||
permissions_orig = permission_dao.get_permissions_by_user_id(user_id=sample_user.id)
|
||||
assert len(permissions_orig) == 7
|
||||
dao = DAOClass()
|
||||
|
||||
for permission in permissions_orig:
|
||||
dao.delete_instance(permission, True)
|
||||
permissions = permission_dao.get_permissions_by_user_id(user_id=sample_user.id)
|
||||
assert len(permissions) == 0
|
||||
|
||||
@@ -12,6 +12,7 @@ from app.dao.service_user_dao import (
|
||||
dao_update_service_user,
|
||||
)
|
||||
from app.dao.users_dao import (
|
||||
_remove_values_for_keys_if_present,
|
||||
count_user_verify_codes,
|
||||
create_secret_code,
|
||||
dao_archive_user,
|
||||
@@ -294,3 +295,16 @@ def test_user_cannot_be_archived_if_the_other_service_members_do_not_have_the_ma
|
||||
|
||||
assert len(sample_service.users) == 3
|
||||
assert not user_can_be_archived(active_user)
|
||||
|
||||
|
||||
def test_remove_values_for_keys_if_present():
|
||||
keys = {'a', 'b', 'c'}
|
||||
my_dict = {
|
||||
'a': 1,
|
||||
'b': 2,
|
||||
'c': 3,
|
||||
'd': 4,
|
||||
}
|
||||
_remove_values_for_keys_if_present(my_dict, keys)
|
||||
|
||||
assert my_dict == {'d': 4}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from base64 import b64encode
|
||||
from datetime import datetime
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
from flask import json
|
||||
@@ -7,6 +8,7 @@ from flask import json
|
||||
from app.models import EMAIL_TYPE, INBOUND_SMS_TYPE, SMS_TYPE, InboundSms
|
||||
from app.notifications.receive_notifications import (
|
||||
create_inbound_sms_object,
|
||||
fetch_potential_service,
|
||||
has_inbound_sms_permissions,
|
||||
unescape_string,
|
||||
)
|
||||
@@ -290,3 +292,15 @@ def test_create_inbound_sms_object_works_with_alphanumeric_sender(sample_service
|
||||
)
|
||||
|
||||
assert inbound_sms.user_number == 'ALPHANUM3R1C'
|
||||
|
||||
|
||||
@mock.patch('app.notifications.receive_notifications.dao_fetch_service_by_inbound_number')
|
||||
def test_fetch_potential_service_cant_find_it(mock_dao):
|
||||
mock_dao.return_value = None
|
||||
found_service = fetch_potential_service(234, 'sns')
|
||||
assert found_service is False
|
||||
|
||||
# Permissions will not be set so it will still return false
|
||||
mock_dao.return_value = create_service()
|
||||
found_service = fetch_potential_service(234, 'sns')
|
||||
assert found_service is False
|
||||
|
||||
@@ -9,6 +9,11 @@ from app.models import EMAIL_TYPE, SMS_TYPE
|
||||
from app.notifications.process_notifications import (
|
||||
create_content_for_notification,
|
||||
)
|
||||
from app.notifications.sns_cert_validator import (
|
||||
VALID_SNS_TOPICS,
|
||||
get_string_to_sign,
|
||||
validate_sns_cert,
|
||||
)
|
||||
from app.notifications.validators import (
|
||||
check_application_over_retention_limit,
|
||||
check_if_service_can_send_files_by_email,
|
||||
@@ -535,3 +540,34 @@ def test_check_if_service_can_send_files_by_email_passes_if_contact_link_set(sam
|
||||
service_contact_link=sample_service.contact_link,
|
||||
service_id=sample_service.id
|
||||
)
|
||||
|
||||
|
||||
def test_get_string_to_sign():
|
||||
VALID_SNS_TOPICS.append("arn:aws:sns:us-west-2:009969138378:connector-svc-test")
|
||||
sns_payload = {
|
||||
"Type": "Notification",
|
||||
"MessageId": "ccccccccc-cccc-cccc-cccc-ccccccccccccc",
|
||||
"TopicArn": "arn:aws:sns:us-west-2:009969138378:connector-svc-test",
|
||||
"Message": "{\"AbsoluteTime\":\"2021-09-08T13:28:24.656Z\",\"Content\":\"help\",\"ContentType\":\"text/plain\",\"Id\":\"333333333-be0d-4a44-889d-d2a86fc06f0c\",\"Type\":\"MESSAGE\",\"ParticipantId\":\"bbbbbbbb-c562-4d95-b76c-dcbca8b4b5f7\",\"DisplayName\":\"Jane\",\"ParticipantRole\":\"CUSTOMER\",\"InitialContactId\":\"33333333-abc5-46db-9ad5-d772559ab556\",\"ContactId\":\"33333333-abc5-46db-9ad5-d772559ab556\"}", # noqa
|
||||
"Timestamp": "2021-09-08T13:28:24.860Z",
|
||||
"SignatureVersion": "1",
|
||||
"Signature": "examplegggggg/1tEBYdiVDgJgBoJUniUFcArLFGfg5JCvpOr/v6LPCHiD7A0BWy8+ZOnGTmOjBMn80U9jSzYhKbHDbQHaNYTo9sRyQA31JtHHiIseQeMfTDpcaAXqfs8hdIXq4XZaJYqDFqosfbvh56VPh5QgmeHTltTc7eOZBUwnt/177eOTLTt2yB0ItMV3NAYuE1Tdxya1lLYZQUIMxETTVcRAZkDIu8TbRZC9a00q2RQVjXhDaU3k+tL+kk85syW/2ryjjkDYoUb+dyRGkqMy4aKA22UpfidOtdAZ/GGtXaXSKBqazZTEUuSEzt0duLtFntQiYJanU05gtDig==", # noqa
|
||||
"SigningCertURL": "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-11111111111111111111111111111111.pem", # noqa
|
||||
"UnsubscribeURL": "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:000000000000:connector-svc-test:22222222-aaaa-bbbb-cccc-333333333333", # noqa
|
||||
"MessageAttributes": {
|
||||
"InitialContactId": {"Type": "String", "Value": "33333333-abc5-46db-9ad5-d772559ab556"},
|
||||
"MessageVisibility": {"Type": "String", "Value": "ALL"},
|
||||
"Type": {"Type": "String", "Value": "MESSAGE"},
|
||||
"AccountId": {"Type": "String", "Value": "999999999999"},
|
||||
"ContentType": {"Type": "String", "Value": "text/plain"},
|
||||
"InstanceId": {"Type": "String", "Value": "dddddddd-b64e-40c5-921b-109fd92499ae"},
|
||||
"ContactId": {"Type": "String", "Value": "33333333-abc5-46db-9ad5-d772559ab556"},
|
||||
"ParticipantRole": {"Type": "String", "Value": "CUSTOMER"}
|
||||
}
|
||||
}
|
||||
str = get_string_to_sign(sns_payload)
|
||||
assert str == b'Message\n{"AbsoluteTime":"2021-09-08T13:28:24.656Z","Content":"help","ContentType":"text/plain","Id":"333333333-be0d-4a44-889d-d2a86fc06f0c","Type":"MESSAGE","ParticipantId":"bbbbbbbb-c562-4d95-b76c-dcbca8b4b5f7","DisplayName":"Jane","ParticipantRole":"CUSTOMER","InitialContactId":"33333333-abc5-46db-9ad5-d772559ab556","ContactId":"33333333-abc5-46db-9ad5-d772559ab556"}\nMessageId\nccccccccc-cccc-cccc-cccc-ccccccccccccc\nTimestamp\n2021-09-08T13:28:24.860Z\nTopicArn\narn:aws:sns:us-west-2:009969138378:connector-svc-test\nType\nNotification\n' # noqa
|
||||
|
||||
# This is a test payload with no valid cert, so it should raise a ValueError
|
||||
with pytest.raises(ValueError):
|
||||
validate_sns_cert(sns_payload)
|
||||
|
||||
6
tests/app/test_errors.py
Normal file
6
tests/app/test_errors.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from app.errors import VirusScanError
|
||||
|
||||
|
||||
def test_virus_scan_error():
|
||||
vse = VirusScanError("a message")
|
||||
assert "a message" in vse.args
|
||||
6
tests/app/test_exceptions.py
Normal file
6
tests/app/test_exceptions.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from app.exceptions import DVLAException
|
||||
|
||||
|
||||
def test_dvla_exception():
|
||||
dvla = DVLAException("a message")
|
||||
assert dvla.message == "a message"
|
||||
@@ -1,3 +1,4 @@
|
||||
import json
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from unittest import mock
|
||||
@@ -47,6 +48,14 @@ def test_get_user_list(admin_request, sample_service):
|
||||
assert sorted(expected_permissions) == sorted(fetched['permissions'][str(sample_service.id)])
|
||||
|
||||
|
||||
def test_get_all_users(admin_request):
|
||||
create_user()
|
||||
json_resp = admin_request.get('user.get_all_users')
|
||||
json_resp_str = json.dumps(json_resp)
|
||||
assert 'Test User' in json_resp_str
|
||||
assert '+12028675309' in json_resp_str
|
||||
|
||||
|
||||
def test_get_user(admin_request, sample_service, sample_organization):
|
||||
"""
|
||||
Tests GET endpoint '/<user_id>' to retrieve a single service.
|
||||
|
||||
Reference in New Issue
Block a user