from typing import List from flowsint_core.core.enricher_base import Enricher from flowsint_types import Phone from flowsint_types.domain import Domain from flowsint_types.ip import Ip class ResolveEnricher(Enricher): InputType = List[Domain] OutputType = List[Ip] @classmethod def name(cls) -> str: return "domain_to_ip" @classmethod def category(cls) -> str: return "Domain" @classmethod def key(cls) -> str: return "domain" async def scan(self, data: InputType) -> OutputType: return [] def postprocess(self, results: OutputType, original_input: InputType) -> OutputType: return [] # Make types available at module level for easy access InputType = ResolveEnricher.InputType OutputType = ResolveEnricher.OutputType enricher = ResolveEnricher("sketch_123", "scan_123") def test_correct_preprocess(): inputs = [ Domain(domain="mydomain.com"), {"domain": "blog.mydomain2.com"}, "mydomain3.com", "notADomaiN", ] preprocessed = enricher.preprocess(inputs) assert len(preprocessed) == 3 # 3 valid domains assert preprocessed[0].domain == "mydomain.com" assert preprocessed[0].label == "mydomain.com" assert preprocessed[0].root == True assert preprocessed[1].domain == "blog.mydomain2.com" assert preprocessed[1].label == "blog.mydomain2.com" assert preprocessed[1].root == False assert preprocessed[2].domain == "mydomain3.com" assert preprocessed[2].label == "mydomain3.com" assert preprocessed[2].root == True def test_incorrect_preprocess(): inputs = [ Phone(number="+33634565423"), {"name": "JohnDoe"}, "mydomain.com", "notADomaiN", ] preprocessed = enricher.preprocess(inputs) assert len(preprocessed) == 1 # 1 valid domain assert preprocessed[0].domain == "mydomain.com" assert preprocessed[0].root == True assert preprocessed[0].label == "mydomain.com"