package web import ( "errors" "net/http" "net/http/httptest" "testing" "gitgud.io/mike/mpv-manager/pkg/config" "gitgud.io/mike/mpv-manager/pkg/installer" "gitgud.io/mike/mpv-manager/pkg/platform" "github.com/stretchr/testify/require" ) func TestExplicitUpdateCheckRefreshesManifest(t *testing.T) { for _, path := range []string{"/api/apps/check-updates", "/api/apps/refresh-installed"} { t.Run(path, func(t *testing.T) { previous := installer.ReleaseInfo{Version: "1.3.0-rc.9"} next := installer.ReleaseInfo{Version: "1.3.0-rc.10"} stubFetchReleaseInfo(t, &next, nil) cfg, err := config.Load() require.NoError(t, err) server := NewServer(platform.Detect(), cfg, installer.NewInstaller(previous, config.GetInstallPath()), &previous) response := httptest.NewRecorder() request := httptest.NewRequest(http.MethodPost, path+"?refresh_manifest=true", nil) if path == "/api/apps/check-updates" { server.handleCheckAppUpdatesAPI(response, request) } else { server.handleRefreshInstalledAppsAPI(response, request) } require.Equal(t, http.StatusOK, response.Code, response.Body.String()) require.Equal(t, next.Version, server.releaseSnapshot().Version) require.Equal(t, "true", response.Header().Get("HX-Refresh")) }) } } func TestExplicitUpdateCheckReportsFetchFailureAndRetainsSnapshot(t *testing.T) { stubFetchReleaseInfo(t, nil, errors.New("signature rejected")) server := &Server{releaseInfo: &installer.ReleaseInfo{Version: "1.3.0-rc.9"}} response := httptest.NewRecorder() server.handleCheckAppUpdatesAPI(response, httptest.NewRequest(http.MethodPost, "/api/apps/check-updates?refresh_manifest=true", nil)) require.Equal(t, http.StatusServiceUnavailable, response.Code) require.Contains(t, response.Body.String(), "signature rejected") require.Equal(t, "1.3.0-rc.9", server.releaseSnapshot().Version) require.Empty(t, response.Header().Get("HX-Refresh")) }