Skip to content

🟡 [Enhancement] Add unit tests for predict.py and train.py using pytest #15

Description

@AkshatRaj00

Feature Request

Summary

VisaIQ has zero test coverage. Adding pytest unit tests would:

  • Prevent regressions during future development
  • Enable CI/CD on GitHub Actions
  • Increase project credibility for open-source contributors

Proposed Test Suite

# tests/test_predict.py
import pytest
from predict import predict_with_confidence, validate_input, safe_encode

VALID_PAYLOAD = {
    "country": "India",
    "visa_type": "Student",
    "application_date": "2024-06-01"
}

def test_valid_prediction_returns_dict():
    result, error = predict_with_confidence(VALID_PAYLOAD)
    assert error is None
    assert isinstance(result, dict)
    assert "days" in result
    assert "confidence" in result

def test_confidence_in_valid_range():
    result, _ = predict_with_confidence(VALID_PAYLOAD)
    assert 0.0 <= result["confidence"] <= 100.0

def test_confidence_label_valid():
    result, _ = predict_with_confidence(VALID_PAYLOAD)
    assert result["confidence_label"] in ["High", "Medium", "Low"]

def test_missing_fields_returns_error():
    errors = validate_input({"country": "India"})
    assert len(errors) > 0

def test_invalid_date_format():
    payload = {**VALID_PAYLOAD, "application_date": "01-06-2024"}
    errors = validate_input(payload)
    assert any("date" in e.lower() for e in errors)

def test_prediction_days_positive():
    result, _ = predict_with_confidence(VALID_PAYLOAD)
    assert result["days"] >= 1.0

GitHub Actions CI:

# .github/workflows/tests.yml
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pip install -r requirements.txt pytest
      - run: pytest tests/ -v

enhancement testing pytest ci-cd

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions