hh-bot/test_basic.py

146 lines
4.9 KiB
Python

"""
🧪 Базовые тесты для HH.ru автоматизации
"""
import pytest
from hh_bot.config.settings import Settings
from hh_bot.models.vacancy import Vacancy, Employer, Experience, Snippet
from hh_bot.services.gemini_service import GeminiAIService
from hh_bot.services.hh_api_service import HHApiService
class TestModels:
"""Тесты моделей данных"""
def test_vacancy_creation(self):
"""Тест создания вакансии"""
employer = Employer(id="123", name="Test Company")
experience = Experience(id="noExperience", name="Без опыта")
snippet = Snippet(requirement="Python", responsibility="Программирование")
vacancy = Vacancy(
id="test_id",
name="Python Developer",
alternate_url="https://test.url",
employer=employer,
experience=experience,
snippet=snippet,
)
assert vacancy.id == "test_id"
assert vacancy.name == "Python Developer"
assert vacancy.employer.name == "Test Company"
def test_vacancy_has_python(self):
"""Тест проверки Python в вакансии"""
employer = Employer(id="123", name="Test Company")
experience = Experience(id="noExperience", name="Без опыта")
snippet = Snippet(requirement="Python разработчик", responsibility="Кодинг")
vacancy = Vacancy(
id="test_id",
name="Python Developer",
alternate_url="https://test.url",
employer=employer,
experience=experience,
snippet=snippet,
)
assert vacancy.has_python() is True
def test_vacancy_is_junior_level(self):
"""Тест проверки junior уровня"""
employer = Employer(id="123", name="Test Company")
experience = Experience(id="noExperience", name="Без опыта")
snippet = Snippet(requirement="Junior Python Developer")
vacancy = Vacancy(
id="test_id",
name="Junior Python Developer",
alternate_url="https://test.url",
employer=employer,
experience=experience,
snippet=snippet,
)
assert vacancy.is_junior_level() is True
class TestSettings:
"""Тесты настроек"""
def test_settings_creation(self):
"""Тест создания настроек"""
settings = Settings()
assert settings.hh_search.keywords == "python junior"
assert settings.application.max_applications == 40
assert settings.browser.headless is False
def test_update_keywords(self):
"""Тест обновления ключевых слов"""
settings = Settings()
settings.update_search_keywords("django developer")
assert settings.hh_search.keywords == "django developer"
class TestServices:
"""Тесты сервисов"""
def test_gemini_service_creation(self):
"""Тест создания Gemini сервиса"""
service = GeminiAIService()
assert service.model == "gemini-2.0-flash"
assert service.match_threshold == 0.7
def test_hh_api_service_creation(self):
"""Тест создания HH API сервиса"""
service = HHApiService()
assert service.base_url == "https://api.hh.ru"
assert service is not None
def test_gemini_basic_analysis(self):
"""Тест базового анализа Gemini"""
service = GeminiAIService()
employer = Employer(id="123", name="Test Company")
experience = Experience(id="noExperience", name="Без опыта")
snippet = Snippet(requirement="Python", responsibility="Программирование")
vacancy = Vacancy(
id="test_id",
name="Python Developer",
alternate_url="https://test.url",
employer=employer,
experience=experience,
snippet=snippet,
)
score, reasons = service._basic_analysis(vacancy)
assert isinstance(score, float)
assert 0.0 <= score <= 1.0
assert isinstance(reasons, list)
assert len(reasons) > 0
def test_imports():
"""Тест что все импорты работают"""
from hh_bot.config.settings import settings
from hh_bot.services.gemini_service import GeminiAIService
from hh_bot.services.hh_api_service import HHApiService
from hh_bot.services.browser_service import BrowserService
from hh_bot.core.job_application_manager import JobApplicationManager
assert settings is not None
assert GeminiAIService() is not None
assert HHApiService() is not None
assert BrowserService() is not None
assert JobApplicationManager() is not None
if __name__ == "__main__":
pytest.main([__file__, "-v"])