# pylint: disable=protected-access,unused-argument import base64 import json import os from unittest import mock import pytest import smart_open from slz_gdpr_email_sender.messages import FailureMessage, SuccessMessage from . import FIXTURES_PATH @pytest.mark.integration @pytest.mark.parametrize('size_limit, result_filename', [ (1, 'report.zip'), (11, 'report.csv'), ]) def test_success_message_with_attach(size_limit, result_filename, s3_client, email_mock, clean_db): with smart_open.open(os.path.join(FIXTURES_PATH, 'report.csv')) as file_: report = file_.read() s3_client.put_object( Body=report, Bucket='bucket-decompressed', Key='request_to_forget/report.csv', ) with smart_open.open(os.path.join(FIXTURES_PATH, 'event_s3.json')) as file_: event = json.loads(file_.read()) logger = mock.Mock() message = SuccessMessage(logger) with mock.patch('slz_gdpr_email_sender.messages.MAX_FILE_SIZE_PLAIN', size_limit): result = message.as_email(event) result = message.set_msg_headers(result, sender='test.sender@gmail.com', email=email_mock) result_as_str = result.as_string() assert 'Subject: Re: Sony Music Fan Delete Request - Delphi - 6/4/2021' in result_as_str assert 'From: test.sender@gmail.com' in result_as_str assert 'References: ,' in result_as_str assert 'In-Reply-To: <123>' in result_as_str text = b'Attached users not found, the rest were successfully processed and removed' assert base64.encodebytes(text).decode() in result_as_str assert f'filename="{result_filename}"' in result_as_str def test_success_message_without_attach(s3_client): with smart_open.open(os.path.join(FIXTURES_PATH, 'report_all_processed.csv')) as file_: report = file_.read() s3_client.put_object( Body=report, Bucket='bucket-decompressed', Key='request_to_forget/report_all_processed.csv', ) with smart_open.open(os.path.join(FIXTURES_PATH, 'event_s3_all_processed.json')) as file_: event = json.loads(file_.read()) logger = mock.Mock() message = SuccessMessage(logger) result = message.as_email(event) result_as_str = result.as_string() text = b'All users were successfully processed and removed' assert base64.encodebytes(text).decode() in result_as_str assert 'filename="report_all_processed.csv"' not in result_as_str @pytest.mark.parametrize( 'file_name, expected', [ ('report_all_processed_lower_env.csv', True), ('report_all_processed_lower_env_unordered.csv', True) ] ) def test_success_message_lower_env(file_name, expected, s3_client): with smart_open.open(os.path.join(FIXTURES_PATH, file_name)) as file_: report = file_.read() s3_client.put_object( Body=report, Bucket='bucket-decompressed', Key='request_to_forget/report_all_processed_lower_env.csv', ) with smart_open.open( os.path.join(FIXTURES_PATH, 'event_s3_all_processed_lower_env.json') ) as file_: event = json.loads(file_.read()) logger = mock.Mock() message = SuccessMessage(logger) result = message.as_email(event) result_as_str = result.as_string() text = b'All data in DEV environment was deleted\n' \ b'All data in QA environment was deleted\n' \ b'All users were successfully processed and removed' assert (base64.encodebytes(text).decode() in result_as_str) == expected @pytest.mark.integration def test_failure_message(email_mock): with smart_open.open(os.path.join(FIXTURES_PATH, 'event_sns.json')) as file_: event = json.loads(file_.read()) logger = mock.Mock() message = FailureMessage(logger) result = message.as_email(event) result = message.set_msg_headers(result, sender='test.sender@gmail.com', email=email_mock) result_as_str = result.as_string() assert 'Subject: Re: Sony Music Fan Delete Request - Delphi - 6/4/2021' in result_as_str assert 'References: ,' in result_as_str assert 'In-Reply-To: <123>' in result_as_str text = b'Error in processing email. Email address "mfelten" is not valid' assert base64.encodebytes(text).decode() in result_as_str assert 'From: test.sender@gmail.com' in result_as_str