import pytest

from src.batch.common.batch_context import BatchContext
from src.batch.vjsk.vjsk_importer import _check_received_files
from src.error.exceptions import BatchOperationException


def test_check_received_files_ok1(init_check_received_files_ok1):
    """
    観点
        正常系 : 卸在庫データ取込対象日
    期待値
        例外が発生しない
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    received_s3_files = _check_received_files()

    assert received_s3_files is not None

    # target_path = path.dirname(__file__)
    # target_file = "xxxxxxxxxxxx000000000000.gz"
    # s3_client.upload_file()


def test_check_received_files_ok2(init_check_received_files_ok2):
    """
    観点
        正常系 : 卸在庫データ取込対象日以外
    期待値
        例外が発生しない
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = False

    received_s3_files = _check_received_files()
    # with pytest.raises(BatchOperationException):
    #     received_s3_files = _check_received_files()

    assert received_s3_files is not None


def test_check_received_files_ng01(init_check_received_files_ng01):
    """
    観点
        異常系 : 卸在庫データファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("卸在庫データファイルがありません") > 0


def test_check_received_files_ng02(init_check_received_files_ng02):
    """
    観点
        異常系 : 卸販売データファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("卸販売データファイルがありません") > 0


def test_check_received_files_ng03(init_check_received_files_ng03):
    """
    観点
        異常系 : 卸組織変換マスタファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("卸組織変換マスタファイルがありません") > 0


def test_check_received_files_ng04(init_check_received_files_ng04):
    """
    観点
        異常系 : 施設統合マスタファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("施設統合マスタファイルがありません") > 0


def test_check_received_files_ng05(init_check_received_files_ng05):
    """
    観点
        異常系 : 卸マスタファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("卸マスタファイルがありません") > 0


def test_check_received_files_ng06(init_check_received_files_ng06):
    """
    観点
        異常系 : 卸ホールディングスマスタファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("卸ホールディングスマスタファイルがありません") > 0


def test_check_received_files_ng07(init_check_received_files_ng07):
    """異常系 : 施設マスタファイルが欠落"""
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("施設マスタファイルがありません") > 0


def test_check_received_files_ng08(init_check_received_files_ng08):
    """
    観点
        異常系 : メーカー卸組織展開表ファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("メーカー卸組織展開表ファイルがありません") > 0


def test_check_received_files_ng09(init_check_received_files_ng09):
    """異常系 : 取引区分マスタファイルが欠落"""
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("取引区分マスタファイルがありません") > 0


def test_check_received_files_ng10(init_check_received_files_ng10):
    """
    観点
        異常系 : 製品マスタファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("製品マスタファイルがありません") > 0


def test_check_received_files_ng11(init_check_received_files_ng11):
    """
    観点
        異常系 : 製品価格マスタファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("製品価格マスタファイルがありません") > 0


def test_check_received_files_ng12(init_check_received_files_ng12):
    """
    観点
        異常系 : 卸得意先情報マスタファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("卸得意先情報マスタファイルがありません") > 0


def test_check_received_files_ng13(init_check_received_files_ng13):
    """
    観点
        異常系 : MDBコード変換マスタファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("MDBコード変換マスタファイルがありません") > 0


def test_check_received_files_ng14(init_check_received_files_ng14):
    """
    観点
        異常系 : 生物由来データファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("生物由来データファイルがありません") > 0


def test_check_received_files_ng15(init_check_received_files_ng15):
    """
    観点
        異常系 : 製造ロット番号マスタファイルが欠落
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("製造ロット番号マスタファイルがありません") > 0


def test_check_received_files_ng16(init_check_received_files_ng16):
    """
    観点
        異常系 : 想定外のファイルが受領されている(卸在庫データ取込対象日)
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = True

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("想定数を超える受領ファイルがあります") > 0


def test_check_received_files_ng17(init_check_received_files_ng17):
    """
    観点
        異常系 : 想定外のファイルが受領されている(卸在庫データ取込対象日)
    期待値
        例外が発生する
    """
    batch_context = BatchContext.get_instance()
    batch_context.is_vjsk_stock_import_day = False

    with pytest.raises(BatchOperationException) as e:
        _check_received_files()

    assert str(e.value).startswith("想定数を超える受領ファイルがあります") > 0
