| import pytest |
| import pandas as pd |
| import numpy as np |
| from src.data import generate_synthetic_data, Preprocessor, prepare_data |
|
|
| def test_generate_synthetic_data(): |
| n_samples = 150 |
| df = generate_synthetic_data(n_samples=n_samples, random_state=42) |
| |
| assert isinstance(df, pd.DataFrame) |
| assert len(df) == n_samples |
| assert list(df.columns) == ['age', 'monthly_charges', 'contract_length', 'support_calls', 'tech_support', 'churn'] |
| assert df['churn'].isin([0, 1]).all() |
| assert df['tech_support'].isin(['yes', 'no']).all() |
|
|
| def test_preprocessor(): |
| df = pd.DataFrame({ |
| 'age': [20, 40, 60], |
| 'monthly_charges': [30.0, 75.0, 110.0], |
| 'contract_length': [1, 12, 24], |
| 'support_calls': [0, 3, 5], |
| 'tech_support': ['yes', 'no', 'yes'], |
| 'churn': [0, 1, 0] |
| }) |
| |
| preprocessor = Preprocessor() |
| X_trans = preprocessor.fit_transform(df) |
| |
| |
| assert X_trans.shape == (3, 5) |
| |
| |
| assert preprocessor.is_fitted is True |
| |
| |
| unfitted = Preprocessor() |
| with pytest.raises(ValueError): |
| unfitted.transform(df) |
|
|
| def test_prepare_data(): |
| df = generate_synthetic_data(n_samples=200, random_state=42) |
| X_train, X_test, y_train, y_test, preprocessor = prepare_data(df, test_size=0.2, random_state=42) |
| |
| assert X_train.shape[0] == 160 |
| assert X_test.shape[0] == 40 |
| assert X_train.shape[1] == 5 |
| assert len(y_train) == 160 |
| assert len(y_test) == 40 |
| assert isinstance(preprocessor, Preprocessor) |
|
|