"""Tests Phase B: Text-Signale für PlanningTargetProfile.""" from planning_exercise_text_signals import resolve_planning_text_to_catalog_weights def test_resolve_planning_text_matches_skill_and_partner_hint(): class _Cur: def execute(self, sql, params=None): self._sql = sql def fetchall(self): sql = getattr(self, "_sql", "") if "FROM skills" in sql: return [ {"id": 5, "name": "Kime"}, {"id": 8, "name": "Schnellkraft"}, {"id": 2, "name": "Ab"}, ] if "FROM focus_areas" in sql: return [{"id": 10, "name": "Karate Technik"}] if "FROM style_directions" in sql: return [] if "FROM training_types" in sql: return [] if "FROM target_groups" in sql: return [{"id": 3, "name": "Partnerübung"}] return [] focus, style, tt, tg, skills = resolve_planning_text_to_catalog_weights( _Cur(), "Abschnitt: Kime vertiefen mit Partnerübung", ) assert skills.get(5, 0) > 0 assert 8 not in skills assert tg.get(3, 0) > 0 assert not style and not tt def test_resolve_planning_text_empty(): class _Cur: def execute(self, sql, params=None): pass def fetchall(self): return [] focus, style, tt, tg, skills = resolve_planning_text_to_catalog_weights(_Cur(), " ") assert not focus and not skills