package stacks import ( "os" "path/filepath" "testing" ) // R-1058 (v0.314.0) — Prowlarr's own start runs the media wiring, so installed AFTER Sonarr/Radarr it is linked with // no button. Through the PRODUCTION compose call (composeExecCustomEnv) with the docker stand-in on PATH (R-650). // COMPANION RED-PROOF: empty linkOnlyApps → „prowlarr" is missing from the calls and this fails. func TestR1058_ProwlarrUpRunsTheWiring(t *testing.T) { m := gateManager(t, "display_name: x\n") var calls []string m.SetOnMediaUp(func(name string) { calls = append(calls, name) }) mk := func(name, yml string) string { d := filepath.Join(m.cfg.Paths.StacksDir, name) must(t, os.MkdirAll(d, 0o755)) must(t, os.WriteFile(filepath.Join(d, "docker-compose.yml"), []byte("services: {}\n"), 0o644)) must(t, os.WriteFile(filepath.Join(d, ".felhom.yml"), []byte(yml), 0o644)) return d } prowlarr := mk("prowlarr", "display_name: Prowlarr\nsetup_gate: true\n") sonarr := mk("sonarr", "display_name: Sonarr\nmedia_library:\n kinds: [tv]\n") plain := mk("vaultwarden", "display_name: Vaultwarden\n") for _, d := range []string{prowlarr, sonarr, plain} { if _, err := m.composeExecCustomEnv(d, nil, "up", "-d"); err != nil { t.Fatal(err) } } if _, err := m.composeExecCustomEnv(prowlarr, nil, "ps"); err != nil { t.Fatal(err) } want := []string{"prowlarr", "sonarr"} if len(calls) != len(want) || calls[0] != want[0] || calls[1] != want[1] { t.Fatalf("wiring runs = %v, want %v (Prowlarr's up, Sonarr's up; never another app, never a non-up command)", calls, want) } }