123 lines
4.4 KiB
Python
Raw Normal View History

2025-11-04 08:01:20 +01:00
import pytest
import tempfile
import os
from pr.core.validation import (
validate_file_path,
validate_directory_path,
validate_model_name,
validate_api_url,
validate_session_name,
validate_temperature,
validate_max_tokens,
)
from pr.core.exceptions import ValidationError
def test_validate_file_path_empty():
with pytest.raises(ValidationError, match="File path cannot be empty"):
validate_file_path("")
def test_validate_file_path_not_exist():
with pytest.raises(ValidationError, match="File does not exist"):
validate_file_path("/nonexistent/file.txt", must_exist=True)
def test_validate_file_path_is_dir():
with tempfile.TemporaryDirectory() as tmpdir:
with pytest.raises(ValidationError, match="Path is a directory"):
validate_file_path(tmpdir, must_exist=True)
def test_validate_file_path_valid():
with tempfile.NamedTemporaryFile() as tmpfile:
result = validate_file_path(tmpfile.name, must_exist=True)
assert os.path.isabs(result)
assert result == os.path.abspath(tmpfile.name)
def test_validate_directory_path_empty():
with pytest.raises(ValidationError, match="Directory path cannot be empty"):
validate_directory_path("")
def test_validate_directory_path_not_exist():
with pytest.raises(ValidationError, match="Directory does not exist"):
validate_directory_path("/nonexistent/dir", must_exist=True)
def test_validate_directory_path_not_dir():
with tempfile.NamedTemporaryFile() as tmpfile:
with pytest.raises(ValidationError, match="Path is not a directory"):
validate_directory_path(tmpfile.name, must_exist=True)
def test_validate_directory_path_create():
with tempfile.TemporaryDirectory() as tmpdir:
new_dir = os.path.join(tmpdir, "new_dir")
result = validate_directory_path(new_dir, must_exist=True, create=True)
assert os.path.isdir(new_dir)
assert result == os.path.abspath(new_dir)
def test_validate_directory_path_valid():
with tempfile.TemporaryDirectory() as tmpdir:
result = validate_directory_path(tmpdir, must_exist=True)
assert result == os.path.abspath(tmpdir)
def test_validate_model_name_empty():
with pytest.raises(ValidationError, match="Model name cannot be empty"):
validate_model_name("")
def test_validate_model_name_too_short():
with pytest.raises(ValidationError, match="Model name too short"):
validate_model_name("a")
def test_validate_model_name_valid():
result = validate_model_name("gpt-3.5-turbo")
assert result == "gpt-3.5-turbo"
def test_validate_api_url_empty():
with pytest.raises(ValidationError, match="API URL cannot be empty"):
validate_api_url("")
def test_validate_api_url_invalid():
with pytest.raises(ValidationError, match="API URL must start with"):
validate_api_url("invalid-url")
def test_validate_api_url_valid():
result = validate_api_url("https://api.example.com")
assert result == "https://api.example.com"
def test_validate_session_name_empty():
with pytest.raises(ValidationError, match="Session name cannot be empty"):
validate_session_name("")
def test_validate_session_name_invalid_char():
with pytest.raises(ValidationError, match="contains invalid character"):
validate_session_name("test/session")
def test_validate_session_name_too_long():
long_name = "a" * 256
with pytest.raises(ValidationError, match="Session name too long"):
validate_session_name(long_name)
def test_validate_session_name_valid():
result = validate_session_name("valid_session_123")
assert result == "valid_session_123"
def test_validate_temperature_too_low():
with pytest.raises(ValidationError, match="Temperature must be between"):
validate_temperature(-0.1)
def test_validate_temperature_too_high():
with pytest.raises(ValidationError, match="Temperature must be between"):
validate_temperature(2.1)
def test_validate_temperature_valid():
result = validate_temperature(0.7)
assert result == 0.7
def test_validate_max_tokens_too_low():
with pytest.raises(ValidationError, match="Max tokens must be at least 1"):
validate_max_tokens(0)
def test_validate_max_tokens_too_high():
with pytest.raises(ValidationError, match="Max tokens too high"):
validate_max_tokens(100001)
def test_validate_max_tokens_valid():
result = validate_max_tokens(1000)
assert result == 1000