package tui import ( "errors" "testing" "gitgud.io/mike/mpv-manager/pkg/installer" ) func TestReleaseLoaderRefreshesInstallerFromOneManifest(t *testing.T) { m := NewModel() inst := installer.NewInstaller(installer.ReleaseInfo{}, "/tmp/mpv") m.SetInstaller(inst, nil) calls := 0 m.SetReleaseInfoLoader(func() (*installer.ReleaseInfo, error) { calls++ return &installer.ReleaseInfo{Version: "9.9.9", MpvVersion: "0.42.0"}, nil }) msg := loadReleaseInfoCmd(m.releaseInfoLoader)() updated, _ := m.Update(msg) m = updated.(*Model) if calls != 1 { t.Fatalf("loader calls = %d, want 1", calls) } if m.releaseInfoLoading || m.releaseInfoStatus != "" { t.Fatalf("successful refresh left loading/status state: loading=%v status=%q", m.releaseInfoLoading, m.releaseInfoStatus) } if inst.ReleaseInfo.MpvVersion != "0.42.0" { t.Fatalf("installer manifest was not refreshed: %+v", inst.ReleaseInfo) } if m.versionCheckResult == nil { t.Fatal("single manifest did not also produce manager update state") } } func TestReleaseLoaderFailureLeavesExplicitOfflineState(t *testing.T) { m := NewModel() m.SetInstaller(installer.NewInstaller(installer.ReleaseInfo{}, "/tmp/mpv"), nil) m.SetReleaseInfoLoader(func() (*installer.ReleaseInfo, error) { return nil, errors.New("network unavailable") }) updated, _ := m.Update(loadReleaseInfoCmd(m.releaseInfoLoader)()) m = updated.(*Model) if m.releaseInfoLoading || m.releaseInfoStatus == "" { t.Fatalf("failed refresh did not enter explicit offline state: loading=%v status=%q", m.releaseInfoLoading, m.releaseInfoStatus) } if m.versionCheckResult == nil || m.versionCheckResult.Error == nil { t.Fatal("failed refresh did not populate update error state") } }