import boto import datetime from moto import mock_s3 from unittest.mock import MagicMock from bulkperformancerights import config from bulkperformancerights.logic import exporter user_id = 1 user_type = 'vendor' file_name = 'foo.json' date_time = '' @mock_s3 def test_tracks_json_to_s3(monkeypatch): def fake_json_returning_function(a, b): return ('{"foo":"bar"}', 1) monkeypatch.setattr('bulkperformancerights.logic.track.tracks_line_json', fake_json_returning_function) conn = boto.connect_s3() bucket = conn.create_bucket(config.bucket_name) s3_key = boto.s3.key.Key(bucket) fake_json_string, count = fake_json_returning_function('foo', 'bar') user = {'type': user_type, 'id': user_id} s3_key.key = '{}/{}_{}/{}'.format(config.xlsx_prefix, user_type, user_id, file_name) s3_key.set_contents_from_string(fake_json_string) row_count = exporter.tracks_json_to_s3(file_name, user) assert row_count == 1 @mock_s3 def test_tracks_json_to_xlsx_with_timestamp(monkeypatch): def mock_get_datetime_as_string(): global date_time date_time = '{:%Y%m%d_%H%M}'.format( datetime.datetime.utcnow() ) return date_time conn = boto.connect_s3() bucket = conn.create_bucket(config.bucket_name) xlsx_file_name = file_name.replace('json', 'xlsx') monkeypatch.setattr( 'bulkperformancerights.logic.exporter.get_datetime_as_string', mock_get_datetime_as_string ) monkeypatch.setattr( 'bulkperformancerights.logic.converter.json_to_xlsx', MagicMock(return_value=xlsx_file_name) ) user = {'type': user_type, 'id': user_id} json_key = boto.s3.key.Key(bucket) json_key.key = '{}json/{}_{}/{}'.format(config.xlsx_prefix, user_type, user_id, file_name) json_key.set_contents_from_string('foo') xlsx_key = boto.s3.key.Key(bucket) xlsx_key.key = '{}xlsx/{}_{}/{}'.format(config.xlsx_prefix, user_type, user_id, xlsx_file_name) xlsx_key.set_contents_from_string('foo') copied_managerights_xlsx_key = exporter.tracks_json_to_xlsx(file_name, user) extension = '.xlsx' xlsx_file_name = '{}_{}UTC{}'.format( xlsx_file_name.rstrip(extension), date_time, extension ).replace(' ', '_') expected_key_name = '/managerights/{}/{}/{}'.format(user_type, user_id, xlsx_file_name) assert copied_managerights_xlsx_key.name == expected_key_name # test if only one xlsx file is present keys = [] prefix = 'managerights/{}/{}'.format(user_type, user_id) for key in bucket.list(prefix): key_name = key.name if key_name.endswith(extension): keys.append(key_name) assert len(keys) == 1