import importlib
import os

import pytest
from src.system_var import constants, environments


class TestEnvironments:
    def setup_method(self):
        self.backup_environ = os.environ._data.copy()

    def teardown_method(self):
        os.environ._data = self.backup_environ.copy()

    def test_LOG_LEVEL(self):
        """
        Cases:
            環境変数 LOG_LEVELが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.LOG_LEVEL] = 'CRITICAL'
        importlib.reload(environments)
        assert environments.LOG_LEVEL == 'CRITICAL'

    def test_LOG_LEVEL_default(self):
        """
        Cases:
            環境変数 LOG_LEVELのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.LOG_LEVEL in os.environ:
            del os.environ[constants.LOG_LEVEL]
        importlib.reload(environments)
        assert environments.LOG_LEVEL == 'INFO'

    def test_CRM_AUTH_TIMEOUT(self):
        """
        Cases:
            環境変数 CRM_AUTH_TIMEOUTが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_AUTH_TIMEOUT] = '0.0000001'
        importlib.reload(environments)
        assert environments.CRM_AUTH_TIMEOUT == 0.0000001

    def test_CRM_AUTH_TIMEOUT_default(self):
        """
        Cases:
            環境変数 CRM_AUTH_TIMEOUTのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_AUTH_TIMEOUT in os.environ:
            del os.environ[constants.CRM_AUTH_TIMEOUT]
        importlib.reload(environments)
        assert environments.CRM_AUTH_TIMEOUT == 100

    def test_CRM_GET_RECORD_COUNT_TIMEOUT(self):
        """
        Cases:
            環境変数 CRM_GET_RECORD_COUNT_TIMEOUTが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_GET_RECORD_COUNT_TIMEOUT] = '0.0000001'
        importlib.reload(environments)
        assert environments.CRM_GET_RECORD_COUNT_TIMEOUT == 0.0000001

    def test_CRM_GET_RECORD_COUNT_TIMEOUT_default(self):
        """
        Cases:
            環境変数 CRM_GET_RECORD_COUNT_TIMEOUTのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_GET_RECORD_COUNT_TIMEOUT in os.environ:
            del os.environ[constants.CRM_GET_RECORD_COUNT_TIMEOUT]
        importlib.reload(environments)
        assert environments.CRM_GET_RECORD_COUNT_TIMEOUT == 300

    def test_CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT(self):
        """
        Cases:
            環境変数 CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPTが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT] = '1'
        importlib.reload(environments)
        assert environments.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT == 1

    def test_CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT_default(self):
        """
        Cases:
            環境変数 CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPTのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT in os.environ:
            del os.environ[constants.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT]
        importlib.reload(environments)
        assert environments.CRM_GET_RECORD_COUNT_MAX_RETRY_ATTEMPT == 4

    def test_CRM_GET_RECORD_COUNT_RETRY_INTERVAL(self):
        """
        Cases:
            環境変数 CRM_GET_RECORD_COUNT_RETRY_INTERVALが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_GET_RECORD_COUNT_RETRY_INTERVAL] = '1'
        importlib.reload(environments)
        assert environments.CRM_GET_RECORD_COUNT_RETRY_INTERVAL == 1

    def test_CRM_GET_RECORD_COUNT_RETRY_INTERVAL_default(self):
        """
        Cases:
            環境変数 CRM_GET_RECORD_COUNT_RETRY_INTERVALのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_GET_RECORD_COUNT_RETRY_INTERVAL in os.environ:
            del os.environ[constants.CRM_GET_RECORD_COUNT_RETRY_INTERVAL]
        importlib.reload(environments)
        assert environments.CRM_GET_RECORD_COUNT_RETRY_INTERVAL == 5

    def test_CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL(self):
        """
        Cases:
            環境変数 CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVALが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL] = '1'
        importlib.reload(environments)
        assert environments.CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL == 1

    def test_CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL_default(self):
        """
        Cases:
            環境変数 CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVALのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL in os.environ:
            del os.environ[constants.CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL]
        importlib.reload(environments)
        assert environments.CRM_GET_RECORD_COUNT_RETRY_MIN_INTERVAL == 5

    def test_CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL(self):
        """
        Cases:
            環境変数 CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVALが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL] = '1'
        importlib.reload(environments)
        assert environments.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL == 1

    def test_CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL_default(self):
        """
        Cases:
            環境変数 CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVALのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL in os.environ:
            del os.environ[constants.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL]
        importlib.reload(environments)
        assert environments.CRM_GET_RECORD_COUNT_RETRY_MAX_INTERVAL == 50

    def test_CRM_FETCH_RECORD_TIMEOUT(self):
        """
        Cases:
            環境変数 CRM_FETCH_RECORD_TIMEOUTが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_FETCH_RECORD_TIMEOUT] = '0.0000001'
        importlib.reload(environments)
        assert environments.CRM_FETCH_RECORD_TIMEOUT == 0.0000001

    def test_CRM_FETCH_RECORD_TIMEOUT_default(self):
        """
        Cases:
            環境変数 CRM_FETCH_RECORD_TIMEOUTのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_FETCH_RECORD_TIMEOUT in os.environ:
            del os.environ[constants.CRM_FETCH_RECORD_TIMEOUT]
        importlib.reload(environments)
        assert environments.CRM_FETCH_RECORD_TIMEOUT == 300

    def test_CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT(self):
        """
        Cases:
            環境変数 CRM_FETCH_RECORD_MAX_RETRY_ATTEMPTが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT] = '1'
        importlib.reload(environments)
        assert environments.CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT == 1

    def test_CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT_default(self):
        """
        Cases:
            環境変数 CRM_FETCH_RECORD_MAX_RETRY_ATTEMPTのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT in os.environ:
            del os.environ[constants.CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT]
        importlib.reload(environments)
        assert environments.CRM_FETCH_RECORD_MAX_RETRY_ATTEMPT == 4

    def test_CRM_FETCH_RECORD_RETRY_INTERVAL(self):
        """
        Cases:
            環境変数 CRM_FETCH_RECORD_RETRY_INTERVALが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_FETCH_RECORD_RETRY_INTERVAL] = '1'
        importlib.reload(environments)
        assert environments.CRM_FETCH_RECORD_RETRY_INTERVAL == 1

    def test_CRM_FETCH_RECORD_RETRY_INTERVAL_default(self):
        """
        Cases:
            環境変数 CRM_FETCH_RECORD_RETRY_INTERVALのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_FETCH_RECORD_RETRY_INTERVAL in os.environ:
            del os.environ[constants.CRM_FETCH_RECORD_RETRY_INTERVAL]
        importlib.reload(environments)
        assert environments.CRM_FETCH_RECORD_RETRY_INTERVAL == 5

    def test_CRM_FETCH_RECORD_RETRY_MIN_INTERVAL(self):
        """
        Cases:
            環境変数 CRM_FETCH_RECORD_RETRY_MIN_INTERVALが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_FETCH_RECORD_RETRY_MIN_INTERVAL] = '1'
        importlib.reload(environments)
        assert environments.CRM_FETCH_RECORD_RETRY_MIN_INTERVAL == 1

    def test_CRM_FETCH_RECORD_RETRY_MIN_INTERVAL_default(self):
        """
        Cases:
            環境変数 CRM_FETCH_RECORD_RETRY_MIN_INTERVALのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_FETCH_RECORD_RETRY_MIN_INTERVAL in os.environ:
            del os.environ[constants.CRM_FETCH_RECORD_RETRY_MIN_INTERVAL]
        importlib.reload(environments)
        assert environments.CRM_FETCH_RECORD_RETRY_MIN_INTERVAL == 5

    def test_CRM_FETCH_RECORD_RETRY_MAX_INTERVAL(self):
        """
        Cases:
            環境変数 CRM_FETCH_RECORD_RETRY_MAX_INTERVALが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_FETCH_RECORD_RETRY_MAX_INTERVAL] = '1'
        importlib.reload(environments)
        assert environments.CRM_FETCH_RECORD_RETRY_MAX_INTERVAL == 1

    def test_CRM_FETCH_RECORD_RETRY_MAX_INTERVAL_default(self):
        """
        Cases:
            環境変数 CRM_FETCH_RECORD_RETRY_MAX_INTERVALのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_FETCH_RECORD_RETRY_MAX_INTERVAL in os.environ:
            del os.environ[constants.CRM_FETCH_RECORD_RETRY_MAX_INTERVAL]
        importlib.reload(environments)
        assert environments.CRM_FETCH_RECORD_RETRY_MAX_INTERVAL == 50

    def test_CONVERT_TZ(self):
        """
        Cases:
            環境変数 CONVERT_TZが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CONVERT_TZ] = 'GMT'
        importlib.reload(environments)
        assert environments.CONVERT_TZ == 'GMT'

    def test_CONVERT_TZ_default(self):
        """
        Cases:
            環境変数 CONVERT_TZのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CONVERT_TZ in os.environ:
            del os.environ[constants.CONVERT_TZ]
        importlib.reload(environments)
        assert environments.CONVERT_TZ == 'Asia/Tokyo'

    def test_CRM_AUTH_DOMAIN(self):
        """
        Cases:
            環境変数 CRM_AUTH_DOMAINが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_AUTH_DOMAIN] = 'test'
        importlib.reload(environments)
        assert environments.CRM_AUTH_DOMAIN == 'test'

    def test_raise_CRM_AUTH_DOMAIN(self):
        """
        Cases:
            環境変数 CRM_AUTH_DOMAINが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        if constants.CRM_AUTH_DOMAIN in os.environ:
            del os.environ[constants.CRM_AUTH_DOMAIN]
        with pytest.raises(KeyError):
            importlib.reload(environments)

    def test_CRM_USER_NAME(self):
        """
        Cases:
            環境変数 CRM_USER_NAMEが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_USER_NAME] = 'test_user'
        importlib.reload(environments)
        assert environments.CRM_USER_NAME == 'test_user'

    def test_raise_CRM_USER_NAME(self):
        """
        Cases:
            環境変数 CRM_USER_NAMEが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        if constants.CRM_USER_NAME in os.environ:
            del os.environ[constants.CRM_USER_NAME]
        with pytest.raises(KeyError):
            importlib.reload(environments)

    def test_CRM_USER_PASSWORD(self):
        """
        Cases:
            環境変数 CRM_USER_PASSWORDが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_USER_PASSWORD] = 'p@ssw0rd!'
        importlib.reload(environments)
        assert environments.CRM_USER_PASSWORD == 'p@ssw0rd!'

    def test_raise_CRM_USER_PASSWORD(self):
        """
        Cases:
            環境変数 CRM_USER_PASSWORDが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        if constants.CRM_USER_PASSWORD in os.environ:
            del os.environ[constants.CRM_USER_PASSWORD]
        with pytest.raises(KeyError):
            importlib.reload(environments)

    def test_CRM_USER_SECURITY_TOKEN(self):
        """
        Cases:
            環境変数 CRM_USER_SECURITY_TOKENが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_USER_SECURITY_TOKEN] = 'sU/a(,2yyrMDpMaut.'
        importlib.reload(environments)
        assert environments.CRM_USER_SECURITY_TOKEN == 'sU/a(,2yyrMDpMaut.'

    def test_raise_CRM_USER_SECURITY_TOKEN(self):
        """
        Cases:
            環境変数 CRM_USER_SECURITY_TOKENが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        if constants.CRM_USER_SECURITY_TOKEN in os.environ:
            del os.environ[constants.CRM_USER_SECURITY_TOKEN]
        with pytest.raises(KeyError):
            importlib.reload(environments)

    def test_CRM_CONFIG_BUCKET(self):
        """
        Cases:
            環境変数 CRM_CONFIG_BUCKETが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_CONFIG_BUCKET] = 'bucket_name'
        importlib.reload(environments)
        assert environments.CRM_CONFIG_BUCKET == 'bucket_name'

    def test_raise_CRM_CONFIG_BUCKET(self):
        """
        Cases:
            環境変数 CRM_CONFIG_BUCKETが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        if constants.CRM_CONFIG_BUCKET in os.environ:
            del os.environ[constants.CRM_CONFIG_BUCKET]
        with pytest.raises(KeyError):
            importlib.reload(environments)

    def test_CRM_BACKUP_BUCKET(self):
        """
        Cases:
            環境変数 CRM_BACKUP_BUCKETが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_BACKUP_BUCKET] = 'bucket_name'
        importlib.reload(environments)
        assert environments.CRM_BACKUP_BUCKET == 'bucket_name'

    def test_raise_CRM_BACKUP_BUCKET(self):
        """
        Cases:
            環境変数 CRM_BACKUP_BUCKETが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        if constants.CRM_BACKUP_BUCKET in os.environ:
            del os.environ[constants.CRM_BACKUP_BUCKET]
        with pytest.raises(KeyError):
            importlib.reload(environments)

    def test_IMPORT_DATA_BUCKET(self):
        """
        Cases:
            環境変数 IMPORT_DATA_BUCKETが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.IMPORT_DATA_BUCKET] = 'bucket_name'
        importlib.reload(environments)
        assert environments.IMPORT_DATA_BUCKET == 'bucket_name'

    def test_raise_IMPORT_DATA_BUCKET(self):
        """
        Cases:
            環境変数 IMPORT_DATA_BUCKETが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        if constants.IMPORT_DATA_BUCKET in os.environ:
            del os.environ[constants.IMPORT_DATA_BUCKET]
        with pytest.raises(KeyError):
            importlib.reload(environments)

    def test_OBJECT_INFO_FOLDER(self):
        """
        Cases:
            環境変数 OBJECT_INFO_FOLDERが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.OBJECT_INFO_FOLDER] = 'object_info'
        importlib.reload(environments)
        assert environments.OBJECT_INFO_FOLDER == 'object_info'

    def test_OBJECT_INFO_FOLDER_default(self):
        """
        Cases:
            環境変数 OBJECT_INFO_FOLDERのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.OBJECT_INFO_FOLDER in os.environ:
            del os.environ[constants.OBJECT_INFO_FOLDER]
        importlib.reload(environments)
        assert environments.OBJECT_INFO_FOLDER == 'crm/object_info'

    def test_OBJECT_INFO_FILENAME(self):
        """
        Cases:
            環境変数 OBJECT_INFO_FILENAMEが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.OBJECT_INFO_FILENAME] = 'file_name'
        importlib.reload(environments)
        assert environments.OBJECT_INFO_FILENAME == 'file_name'

    def test_raise_OBJECT_INFO_FILENAME(self):
        """
        Cases:
            環境変数 OBJECT_INFO_FILENAMEが設定されていない場合にエラーとなること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        if constants.OBJECT_INFO_FILENAME in os.environ:
            del os.environ[constants.OBJECT_INFO_FILENAME]
        with pytest.raises(KeyError):
            importlib.reload(environments)

    def test_PROCESS_RESULT_FOLDER(self):
        """
        Cases:
            環境変数 PROCESS_RESULT_FOLDERが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.PROCESS_RESULT_FOLDER] = 'process_result'
        importlib.reload(environments)
        assert environments.PROCESS_RESULT_FOLDER == 'process_result'

    def test_PROCESS_RESULT_FOLDER_default(self):
        """
        Cases:
            環境変数 PROCESS_RESULT_FOLDERのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.PROCESS_RESULT_FOLDER in os.environ:
            del os.environ[constants.PROCESS_RESULT_FOLDER]
        importlib.reload(environments)
        assert environments.PROCESS_RESULT_FOLDER == 'data_import'

    def test_PROCESS_RESULT_FILENAME(self):
        """
        Cases:
            環境変数 PROCESS_RESULT_FILENAMEが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.PROCESS_RESULT_FILENAME] = 'process_result.csv'
        importlib.reload(environments)
        assert environments.PROCESS_RESULT_FILENAME == 'process_result.csv'

    def test_PROCESS_RESULT_FILENAME_default(self):
        """
        Cases:
            環境変数 PROCESS_RESULT_FILENAMEのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.PROCESS_RESULT_FILENAME in os.environ:
            del os.environ[constants.PROCESS_RESULT_FILENAME]
        importlib.reload(environments)
        assert environments.PROCESS_RESULT_FILENAME == 'process_result.json'

    def test_LAST_FETCH_DATE_FOLDER(self):
        """
        Cases:
            環境変数 LAST_FETCH_DATE_FOLDERが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.LAST_FETCH_DATE_FOLDER] = 'last_fetch_datetime'
        importlib.reload(environments)
        assert environments.LAST_FETCH_DATE_FOLDER == 'last_fetch_datetime'

    def test_LAST_FETCH_DATE_FOLDER_default(self):
        """
        Cases:
            環境変数 LAST_FETCH_DATE_FOLDERのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.LAST_FETCH_DATE_FOLDER in os.environ:
            del os.environ[constants.LAST_FETCH_DATE_FOLDER]
        importlib.reload(environments)
        assert environments.LAST_FETCH_DATE_FOLDER == 'crm/last_fetch_datetime'

    def test_CRM_IMPORT_DATA_FOLDER(self):
        """
        Cases:
            環境変数 CRM_IMPORT_DATA_FOLDERが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_IMPORT_DATA_FOLDER] = 'target'
        importlib.reload(environments)
        assert environments.CRM_IMPORT_DATA_FOLDER == 'target'

    def test_CRM_IMPORT_DATA_FOLDER_default(self):
        """
        Cases:
            環境変数 CRM_IMPORT_DATA_FOLDERのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_IMPORT_DATA_FOLDER in os.environ:
            del os.environ[constants.CRM_IMPORT_DATA_FOLDER]
        importlib.reload(environments)
        assert environments.CRM_IMPORT_DATA_FOLDER == 'crm/target'

    def test_RESPONSE_JSON_BACKUP_FOLDER(self):
        """
        Cases:
            環境変数 RESPONSE_JSON_BACKUP_FOLDERが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.RESPONSE_JSON_BACKUP_FOLDER] = 'response'
        importlib.reload(environments)
        assert environments.RESPONSE_JSON_BACKUP_FOLDER == 'response'

    def test_RESPONSE_JSON_BACKUP_FOLDER_default(self):
        """
        Cases:
            環境変数 RESPONSE_JSON_BACKUP_FOLDERのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.RESPONSE_JSON_BACKUP_FOLDER in os.environ:
            del os.environ[constants.RESPONSE_JSON_BACKUP_FOLDER]
        importlib.reload(environments)
        assert environments.RESPONSE_JSON_BACKUP_FOLDER == 'response_json'

    def test_CRM_IMPORT_DATA_BACKUP_FOLDER(self):
        """
        Cases:
            環境変数 CRM_IMPORT_DATA_BACKUP_FOLDERが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ[constants.CRM_IMPORT_DATA_BACKUP_FOLDER] = 'import'
        importlib.reload(environments)
        assert environments.CRM_IMPORT_DATA_BACKUP_FOLDER == 'import'

    def test_CRM_IMPORT_DATA_BACKUP_FOLDER_default(self):
        """
        Cases:
            環境変数 CRM_IMPORT_DATA_BACKUP_FOLDERのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if constants.CRM_IMPORT_DATA_BACKUP_FOLDER in os.environ:
            del os.environ[constants.CRM_IMPORT_DATA_BACKUP_FOLDER]
        importlib.reload(environments)
        assert environments.CRM_IMPORT_DATA_BACKUP_FOLDER == 'data_import'

    def test_FETCH_LIMIT_CLAUSE(self):
        """
        Cases:
            環境変数 FETCH_LIMIT_CLAUSEが正常に取得できること
        Arranges:
            - 環境変数を設定する
        Expects:
            - 設定した環境変数が取得できる
        """
        os.environ['FETCH_LIMIT_CLAUSE'] = ' LIMIT 200'
        importlib.reload(environments)
        assert environments.FETCH_LIMIT_CLAUSE == ' LIMIT 200'

    def test_FETCH_LIMIT_CLAUSE_default(self):
        """
        Cases:
            環境変数 FETCH_LIMIT_CLAUSEのデフォルト値が正常に取得できること
        Arranges:
            - 環境変数を削除する
        Expects:
            - 環境変数のデフォルト値が取得できる
        """
        if 'FETCH_LIMIT_CLAUSE' in os.environ:
            del os.environ['FETCH_LIMIT_CLAUSE']
        importlib.reload(environments)
        assert environments.FETCH_LIMIT_CLAUSE == ''
