import datetime import time import boto from moto import mock_ses from bulkperformancerights.logic import job from bulkperformancerights import config s3_subdomain = '.s3.amazonaws.com' user_type = 'vendor' user_id = 1 user_prefix = '{}/{}'.format(user_type, user_id) fake_filename = 'foo.xlsx' expected_input_file_path = '{}{}{}/{}'.format(config.bucket_name, config.prefix, user_prefix, fake_filename) def test_make_job_and_get_status(monkeypatch, db_fixture): job_made = job.make_job(fake_filename, user_type, user_id).dict() assert job_made.get('input_file_path') == fake_filename assert job_made.get('job_status') is 'uploaded' # Todo (OrCharles): maybe perform db teardown prior to each test assert job_made.get('job_id').isnumeric() lookup_job_id = job_made.get('job_id') lookup_job = job.get_job_status(user_type, user_id, lookup_job_id) assert lookup_job.get('input_file_path') == expected_input_file_path def test_make_job_and_check_start_time(monkeypatch, db_fixture): first_job = job.make_job(fake_filename, user_type, user_id).dict() time.sleep(1) second_job = job.make_job(fake_filename, user_type, user_id).dict() assert first_job.get('start_time') != second_job.get('start_time') def test_update_job(monkeypatch, db_fixture): job_to_update = job.make_job(fake_filename, user_type, user_id) status_dict = dict(job_status='converting') updated_job = job.update_job(job_to_update, **status_dict) assert updated_job.rowcount == 1 current_datetime = datetime.datetime.now() updated_job = job.update_job(job_to_update, end_time=current_datetime) assert updated_job.rowcount == 1 def test_get_job_status_list(): jobs_made = job.get_job_status(user_type, user_id, None) assert len(jobs_made) > 1 # Todo (OrCharles): figure out tear-down of module-scoped fixture # Reviewers: suggestions? # def test_get_job_status_list(): # jobs_made = job.get_job_status(None) # assert jobs_made == [] def test_s3_path_for_user_from_file(): user = {'type': user_type, 'id': user_id} assert job.s3_path_for_user_from_file(fake_filename, user) == \ expected_input_file_path def test_decorate_job(): job_dict = {} job_dict['user_id'] = user_id job_dict['user_type'] = user_type job_dict['input_file_path'] = 'foo.xlsx' job_dict['error_file_path'] = 'None' decorated_job = job.decorate_job(job_dict) assert expected_input_file_path == decorated_job.get('input_file_path') assert None == decorated_job.get('error_file_path') @mock_ses def test_send_complete_mail(): conn = boto.connect_ses() conn.verify_email_identity('foo@theorchard.com') conn.verify_email_identity('donotreply@theorchard.com') email_response = job.send_complete_mail(conn, 1, 'foo@theorchard.com') # assert that the interface of ses parsed params correctly assert len(email_response.get('SendEmailResponse')) > 1