| """ |
| Tests for CLI functionality. |
| """ |
|
|
| import subprocess |
| import sys |
| from pathlib import Path |
|
|
| import pytest |
|
|
|
|
| class TestCLI: |
| """Test cases for CLI commands.""" |
|
|
| def test_info_command(self): |
| """Test the info command.""" |
| result = subprocess.run( |
| [sys.executable, "-m", "fukui_net", "info"], |
| capture_output=True, |
| text=True, |
| cwd=Path(__file__).parent.parent |
| ) |
| assert result.returncode == 0 |
| assert "Available Devices" in result.stdout |
| assert "Model checkpoint found" in result.stdout or "Model checkpoint not found" in result.stdout |
|
|
| def test_predict_single_molecule(self): |
| """Test single molecule prediction.""" |
| result = subprocess.run( |
| [sys.executable, "-m", "fukui_net", "predict", "CCO", "--device", "cpu"], |
| capture_output=True, |
| text=True, |
| cwd=Path(__file__).parent.parent |
| ) |
| assert result.returncode == 0 |
| assert "Model loaded successfully" in result.stdout |
| assert "Fukui indices:" in result.stdout |
|
|
| def test_predict_batch_csv(self): |
| """Test batch prediction from CSV.""" |
| input_file = Path(__file__).parent / "data" / "test_molecules.csv" |
| output_file = Path(__file__).parent / "data" / "test_predictions.csv" |
|
|
| if not input_file.exists(): |
| pytest.skip("Test data file not found") |
|
|
| result = subprocess.run( |
| [ |
| sys.executable, "-m", "fukui_net", "predict", |
| "--csv", str(input_file), |
| "--output", str(output_file), |
| "--device", "cpu" |
| ], |
| capture_output=True, |
| text=True, |
| cwd=Path(__file__).parent.parent |
| ) |
| assert result.returncode == 0 |
| assert "Model loaded successfully" in result.stdout |
| assert "Predictions saved to" in result.stdout |
| assert output_file.exists() |
|
|
| def test_missing_arguments(self): |
| """Test CLI with missing arguments.""" |
| result = subprocess.run( |
| [sys.executable, "-m", "fukui_net", "predict"], |
| capture_output=True, |
| text=True, |
| cwd=Path(__file__).parent.parent |
| ) |
| assert result.returncode == 1 |
| assert "Please provide either SMILES string or --csv file" in result.stdout |
|
|
| def test_csv_without_output(self): |
| """Test CSV prediction without output file.""" |
| input_file = Path(__file__).parent / "data" / "test_molecules.csv" |
|
|
| if not input_file.exists(): |
| pytest.skip("Test data file not found") |
|
|
| result = subprocess.run( |
| [ |
| sys.executable, "-m", "fukui_net", "predict", |
| "--csv", str(input_file), |
| "--device", "cpu" |
| ], |
| capture_output=True, |
| text=True, |
| cwd=Path(__file__).parent.parent |
| ) |
| assert result.returncode == 1 |
| assert "--output is required when using --csv" in result.stdout |
|
|
|
|