# pylint: disable=redefined-outer-name,unused-argument,invalid-name import json import os from unittest import mock import pytest from dapd_importer_lambda.entities import ProjectsEnum from dapd_importer_lambda.exceptions import InvalidPayloadParameters from dapd_importer_lambda.services.config import ConfigService from . import FIXTURES_PATH def get_config(): with open(os.path.join(FIXTURES_PATH, 'config.json'), encoding='utf-8') as f: return json.load(f) def test_load_config__ok(): env = 'test' event = { 'project': 'dapd_apple', 'limit': 200, } with mock.patch( 'dapd_importer_lambda.services.config.load_default_config', return_value=get_config() ): service = ConfigService(env, event) config = service.load_config() assert config.env == env assert config.project == ProjectsEnum.DAPD_APPLE assert config.limit == 200 assert config.import_scheduled_ttl == 12 * 60 * 60 assert config.upserter_delay == 0.1 assert config.exporter_api_host == 'test-exporter-api.delphiplatform.io' assert config.exporter_api_schema == 'https' assert config.http_client_retry_interval == 5 assert config.http_client_max_retries == 5 assert config.http_client_request_timeout == 5 def test_load_config__ok_with_overridden_http(): env = 'test' event = { 'project': 'dapd_apple', 'limit': 200, 'exporter_api_host': 'foo.bar', 'exporter_api_schema': 'http', 'http_client_retry_interval': 1, 'http_client_max_retries': 2, 'http_client_request_timeout': 3 } with mock.patch( 'dapd_importer_lambda.services.config.load_default_config', return_value=get_config() ): service = ConfigService(env, event) config = service.load_config() assert config.env == env assert config.project == ProjectsEnum.DAPD_APPLE assert config.limit == 200 assert config.exporter_api_host == 'foo.bar' assert config.exporter_api_schema == 'http' assert config.http_client_retry_interval == 1 assert config.http_client_max_retries == 2 assert config.http_client_request_timeout == 3 def test_load_config__invalid_project(): env = 'test' event = { 'fact': 'fact_artist_followers', 'dimensions': ['dim_track', 'dim_playlist'], 'project': 'foo', } with mock.patch( 'dapd_importer_lambda.services.config.load_default_config', return_value=get_config() ): service = ConfigService(env, event) with pytest.raises(InvalidPayloadParameters): service.load_config()