import datetime import json from datetime import timedelta, timezone from unittest import mock from dapd_db_schema.schemas.uow_meta import UnitOfWork from dapd_exporter_lambda.entities import BatchPrioritiesEnum from dapd_exporter_lambda.services.s3_client import load_batch_config, store_meta_to_s3 def test_load_batch_config(s3): # pylint: disable=invalid-name priority = BatchPrioritiesEnum.HIGH.value data = {'data': 'test'} s3.put_object( Body=json.dumps({'data': 'test'}), Bucket='test-delphi-configs', Key=f'public-data/exporter/batch-{priority}-priority.json', ) res = load_batch_config(env='test', priority=priority) assert res == data @mock.patch('dapd_helpers.misc.utcnow') def test_store_meta_to_s3(dt_mock, s3): # pylint: disable=invalid-name bucket = 'test-delphi-configs' prefix = 'public-data/exporter' uows = [ UnitOfWork( uow_id=1, project='dapd', fact='fact_artist_followers', first_fact_id=990, last_fact_id=1000, ), UnitOfWork( uow_id=2, project='dapd_v2', fact=None, first_fact_id=datetime.datetime.now().timestamp(), last_fact_id=(datetime.datetime.now() + timedelta(minutes=15)).timestamp(), ), ] dt_now = datetime.datetime.now(tz=timezone.utc) dt_mock.return_value = dt_now store_meta_to_s3( units_of_work=uows, s3_bucket=bucket, s3_prefix=prefix, ) objects = s3.list_objects_v2(Bucket=bucket, Prefix=prefix) assert objects['Contents'][0]['Key'] == f'{prefix}/{dt_now.strftime("%Y%m%dT%H%M%S")}.json'