from crawler_platform.app.config.loader import ProjectConfig, SourceConfig from crawler_platform.app.domains.perfume.extractor import PerfumeRuleBasedExtractor def test_perfume_rule_based_extractor_maps_claims(): config = ProjectConfig( project_name="perfume_subscription", domain="perfume", target_entities=["Perfume", "Brand", "Note"], fields=["name", "brand", "top_notes", "middle_notes", "base_notes"], sources=[SourceConfig(name="official_brand_site", trust_level=0.95)], ontology={"aliases": {"top_notes": "hasTopNote"}}, ) text = """ Neroli Summer Eau de Parfum Brand: Example Maison Top notes: Bergamot, Neroli Middle notes: Jasmine Base notes: Musk A fresh daily perfume for summer office wear. Price $89. """ bundle = PerfumeRuleBasedExtractor().extract(text, config) predicates = {claim.predicate for claim in bundle.claims} entity_names = {entity.name for entity in bundle.entities} assert "Neroli Summer Eau de Parfum" in entity_names assert "Bergamot" in entity_names assert "hasTopNote" in predicates assert "suitableForSeason" in predicates assert "hasPrice" in predicates