package processing import ( "context" "testing" "github.com/descrybe/descrybe-v2/apps/api/internal/eprel" ) type stubEprel struct { enabled bool data *eprel.Data err error calls int lastID string } func (s *stubEprel) Enabled() bool { return s.enabled } func (s *stubEprel) Fetch(_ context.Context, id string) (*eprel.Data, error) { s.calls++ s.lastID = id return s.data, s.err } func TestRunSteps_EPREL_mergesAttributes(t *testing.T) { st := &stubEprel{ enabled: true, data: &eprel.Data{ ID: "246834", Label: "https://eprel.ec.europa.eu/api/product/246834/labels?format=png", PDF: "https://eprel.ec.europa.eu/fiches/x.pdf", EnergyClass: "C", EnergyScale: "A-G", }, } e := &Engine{EPREL: st, Completer: HeuristicCompleter{}, Vector: NoopVectorCategorizer{}} out, err := e.RunSteps(context.Background(), "co", ProductInput{ Mapped: map[string]any{"name": "Fridge"}, Raw: map[string]any{"EPRELID": "246834"}, }, "eprel_only", nil, StepPolicy{AllowAI: true, AllowEPREL: true}) if err != nil { t.Fatal(err) } if st.calls != 1 || st.lastID != "246834" { t.Fatalf("calls=%d id=%q", st.calls, st.lastID) } if out.ProcessedAttributes["eprel_id"] != "246834" { t.Fatalf("attrs=%v", out.ProcessedAttributes) } if out.ProcessedAttributes["eprel_energy_class"] != "C" { t.Fatalf("class missing: %v", out.ProcessedAttributes) } } func TestRunSteps_EPREL_disabledOrMissingID(t *testing.T) { e := &Engine{EPREL: eprel.Disabled{}, Completer: HeuristicCompleter{}, Vector: NoopVectorCategorizer{}} out, err := e.RunSteps(context.Background(), "co", ProductInput{ Raw: map[string]any{"EPRELID": "1"}, }, "eprel_only", nil, StepPolicy{AllowAI: true, AllowEPREL: true}) if err != nil { t.Fatal(err) } // Disabled enricher still records the discovered id; it must not fetch remote data. if out.ProcessedAttributes["eprel_energy_class"] != nil { t.Fatal("should not fetch energy class when disabled") } st := &stubEprel{enabled: true} e.EPREL = st _, err = e.RunSteps(context.Background(), "co", ProductInput{}, "eprel_only", nil, StepPolicy{AllowAI: true, AllowEPREL: true}) if err != nil { t.Fatal(err) } if st.calls != 0 { t.Fatal("should not call fetch without id") } }