dima806's picture
Upload 39 files
eeeaee6 verified
"""Tests for src/schema.py - Pydantic input validation."""
import pytest
from pydantic import ValidationError
from src.schema import SalaryInput
def test_valid_input(sample_salary_input):
"""Valid input creates SalaryInput successfully."""
result = SalaryInput(**sample_salary_input)
assert result.country == sample_salary_input["country"]
assert result.years_code == sample_salary_input["years_code"]
assert result.work_exp == sample_salary_input["work_exp"]
assert result.education_level == sample_salary_input["education_level"]
assert result.dev_type == sample_salary_input["dev_type"]
assert result.industry == sample_salary_input["industry"]
assert result.age == sample_salary_input["age"]
assert result.ic_or_pm == sample_salary_input["ic_or_pm"]
assert result.org_size == sample_salary_input["org_size"]
def test_negative_years_code(sample_salary_input):
"""Negative years_code raises ValidationError."""
sample_salary_input["years_code"] = -1.0
with pytest.raises(ValidationError):
SalaryInput(**sample_salary_input)
def test_negative_work_exp(sample_salary_input):
"""Negative work_exp raises ValidationError."""
sample_salary_input["work_exp"] = -5.0
with pytest.raises(ValidationError):
SalaryInput(**sample_salary_input)
def test_missing_country():
"""Missing required field raises ValidationError."""
with pytest.raises(ValidationError):
SalaryInput(
years_code=5.0,
work_exp=3.0,
education_level="Bachelor's degree (B.A., B.S., B.Eng., etc.)",
dev_type="Developer, full-stack",
industry="Software Development",
age="25-34 years old",
ic_or_pm="Individual contributor",
org_size="20 to 99 employees",
employment="Employed",
)
def test_missing_education_level():
"""Missing education_level raises ValidationError."""
with pytest.raises(ValidationError):
SalaryInput(
country="United States of America",
years_code=5.0,
work_exp=3.0,
dev_type="Developer, full-stack",
industry="Software Development",
age="25-34 years old",
ic_or_pm="Individual contributor",
org_size="20 to 99 employees",
employment="Employed",
)
def test_missing_org_size():
"""Missing org_size raises ValidationError."""
with pytest.raises(ValidationError):
SalaryInput(
country="United States of America",
years_code=5.0,
work_exp=3.0,
education_level="Bachelor's degree (B.A., B.S., B.Eng., etc.)",
dev_type="Developer, full-stack",
industry="Software Development",
age="25-34 years old",
ic_or_pm="Individual contributor",
employment="Employed",
)
def test_zero_years_code(sample_salary_input):
"""Zero years_code is valid (ge=0)."""
sample_salary_input["years_code"] = 0.0
result = SalaryInput(**sample_salary_input)
assert result.years_code == 0.0
def test_zero_work_exp(sample_salary_input):
"""Zero work_exp is valid (ge=0)."""
sample_salary_input["work_exp"] = 0.0
result = SalaryInput(**sample_salary_input)
assert result.work_exp == 0.0