"""Regression: show bible JSON shape variants from real models.""" from puppet_theater.show_bible import parse_show_bible_response def test_parse_accepts_three_puppet_actors_plus_director() -> None: """HF often returns director + three puppet_actors; we keep director + first two puppets.""" raw = """ { "show_title": "Benny's Birthday Bash", "setting": "A sunny meadow with soft grass.", "backdrop_description": "Soft sky, open center.", "director": { "name": "Puppet Master Pippa", "avatar": "🎭", "avatar_image_url": "", "goal": "Guide the scene.", "secret": "Secret one.", "speaking_style": "Whimsical", "tools": ["consult_stage_oracle", "change_lighting"] }, "puppet_actors": [ { "name": "Benny", "avatar": "🧸", "avatar_image_url": "", "goal": "Find cake.", "secret": "Secret two.", "speaking_style": "Hopeful", "tools": ["change_lighting"] }, { "name": "Rabbit Rosie", "avatar": "🐰", "avatar_image_url": "", "goal": "Help Benny.", "secret": "Secret three.", "speaking_style": "Bouncy", "tools": ["consult_stage_oracle"] }, { "name": "Turtle Tim", "avatar": "🐢", "avatar_image_url": "", "goal": "Slow wisdom.", "secret": "Secret four.", "speaking_style": "Calm", "tools": ["inspect_prop"] } ] } """ out = parse_show_bible_response(raw) assert out is not None title, setting, desc, actors = out assert title == "Benny's Birthday Bash" assert "meadow" in setting.lower() assert desc and "center" in desc.lower() assert len(actors) == 3 assert actors[0].name == "Puppet Master Pippa" assert actors[1].name == "Benny" assert actors[2].name == "Rabbit Rosie"