File size: 1,664 Bytes
243b4bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import os
import pandas as pd
import pytest
import asyncio
from unittest.mock import AsyncMock, patch

from src.components.data_validation import Data_Validator
from src.entity.config_entity import DataValidationConfig, DataIngestionConfig
from src.entity.artifact_entity import DataValidationArtifact


@pytest.mark.asyncio
async def test_data_validation_initiate_success(dummy_dataframe, data_ingestion_artifact, monkeypatch):
    """Test that Data_Validator validates a dummy dataframe and writes a yaml report.

    The test patches ``pandas.read_csv`` used inside ``Data_Validator`` to return the
    ``dummy_dataframe`` fixture, avoiding any file‑system I/O.
    """
    # Patch pandas.read_csv to return the dummy dataframe
    with patch("pandas.read_csv", return_value=dummy_dataframe) as mock_read_csv:
        # Initialise validator with required configs and the ingestion artifact
        data_validation_config = DataValidationConfig()
        validator = Data_Validator(data_validation_config=data_validation_config,
                                 data_ingestion_artifact=data_ingestion_artifact)
        # Execute validation
        artifact: DataValidationArtifact = await validator.initiate()

        # Verify we got a proper artifact
        assert isinstance(artifact, DataValidationArtifact)
        # The validator writes a yaml report; ensure the file exists
        assert os.path.isfile(artifact.validation_report_file_path)
        # Optional sanity check: the yaml should contain a "status" key
        with open(artifact.validation_report_file_path) as f:
            yaml_content = f.read()
        assert "status" in yaml_content