Files
Brancheneinstufung2/company-explorer/backend/tests/test_metric_extraction_hospital.py

83 lines
3.5 KiB
Python

import unittest
import os
import sys
from unittest.mock import MagicMock, patch
# Adjust path to allow importing from backend
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from backend.services.classification import ClassificationService
from backend.database import Company, Industry, RoboticsCategory, Session
class TestHospitalMetricFinal(unittest.TestCase):
def setUp(self):
self.service = ClassificationService()
self.mock_db = MagicMock(spec=Session)
self.mock_company = Company(id=8, name="Klinikum Landkreis Erding")
self.mock_industry_hospital = Industry(
id=1,
name="Healthcare - Hospital",
scraper_search_term="Anzahl Betten",
standardization_logic="wert * 100",
primary_category=RoboticsCategory(name="Reinigungsroboter"),
secondary_category=RoboticsCategory(name="Serviceroboter"),
)
self.mock_website_content = "Ein langer Text, der die 100-Zeichen-Prüfung besteht."
@patch('backend.services.classification.ClassificationService._generate_marketing_opener')
@patch('backend.services.classification.ClassificationService._extract_and_calculate_metric_cascade')
@patch('backend.services.classification.ClassificationService._find_direct_area')
@patch('backend.services.classification.ClassificationService._run_llm_classification_prompt')
@patch('backend.services.classification.ClassificationService._get_website_content_and_url')
@patch('backend.services.classification.ClassificationService._load_industry_definitions')
def test_final_hospital_logic(
self,
mock_load_industries,
mock_get_website,
mock_classify,
mock_find_direct_area,
mock_extract_cascade,
mock_generate_opener
):
print("\n--- Running Final Hospital Logic Test ---")
# --- MOCK SETUP ---
mock_load_industries.return_value = [self.mock_industry_hospital]
mock_get_website.return_value = (self.mock_website_content, "http://mock.com")
mock_classify.return_value = "Healthcare - Hospital"
mock_find_direct_area.return_value = None # STAGE 1 MUST FAIL
proxy_metric_result = {
"calculated_metric_name": "Anzahl Betten",
"calculated_metric_value": 352.0,
"calculated_metric_unit": "Betten",
"standardized_metric_value": 35200.0,
"standardized_metric_unit": "",
"metric_source": "wikipedia",
}
mock_extract_cascade.return_value = proxy_metric_result
mock_generate_opener.side_effect = ["Primary Opener", "Secondary Opener"]
# --- EXECUTION ---
updated_company = self.service.classify_company_potential(self.mock_company, self.mock_db)
# --- ASSERTIONS ---
mock_find_direct_area.assert_called_once()
mock_extract_cascade.assert_called_once()
self.assertEqual(updated_company.calculated_metric_name, "Anzahl Betten")
self.assertEqual(updated_company.calculated_metric_value, 352.0)
self.assertEqual(updated_company.standardized_metric_value, 35200.0)
print(" ✅ Metrics from Stage 2 correctly applied.")
self.assertEqual(updated_company.ai_opener, "Primary Opener")
self.assertEqual(updated_company.ai_opener_secondary, "Secondary Opener")
print(" ✅ Openers correctly applied.")
print("\n--- ✅ PASSED: Final Hospital Logic Test. ---")
if __name__ == '__main__':
unittest.main()