package tui import ( "testing" "gitgud.io/mike/mpv-manager/pkg/config" "gitgud.io/mike/mpv-manager/pkg/constants" "gitgud.io/mike/mpv-manager/pkg/installer" "gitgud.io/mike/mpv-manager/pkg/version" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInstallerForTUIOperationUsesExactDestinationWithoutMutatingBase(t *testing.T) { release := installer.ReleaseInfo{MpvVersion: "0.41.0"} base := installer.NewInstaller(release, "/default/mpv") operation := installerForTUIOperation(base, "/selected/mpv") require.NotSame(t, base, operation) assert.Equal(t, "/selected/mpv", operation.InstallDir) assert.Equal(t, release, operation.ReleaseInfo) assert.Equal(t, "/default/mpv", base.InstallDir) fallback := installerForTUIOperation(base, "") require.NotSame(t, base, fallback) assert.Equal(t, base.InstallDir, fallback.InstallDir) } func TestMPCQTUpdatePersistsVersionBySelectedStableID(t *testing.T) { sandboxConfigHome(t) _, err := config.Reload() require.NoError(t, err) require.NoError(t, config.AddInstalledApp(config.InstalledApp{ AppName: "MPC-QT", InstallMethod: constants.MethodMPCQT, InstallPath: "/opt/mpc-a", AppVersion: "1.0.0", })) require.NoError(t, config.AddInstalledApp(config.InstalledApp{ AppName: "MPC-QT", InstallMethod: constants.MethodMPCQT, InstallPath: "/opt/mpc-b", AppVersion: "1.0.0", })) first, err := config.ResolveInstalledApp("", "MPC-QT", constants.MethodMPCQT, "/opt/mpc-a") require.NoError(t, err) second, err := config.ResolveInstalledApp("", "MPC-QT", constants.MethodMPCQT, "/opt/mpc-b") require.NoError(t, err) release := installer.ReleaseInfo{} release.MPCQT.AppVersion = "2.1.0" m := NewModel() m.installer = installer.NewInstaller(release, second.InstallPath) m.selectedMethodID = constants.MethodMPCQT m.selectedUpdateItem = &updateItem{AppID: second.ID, MethodID: constants.MethodMPCQT, InstallPath: second.InstallPath} require.NoError(t, m.updateInstalledAppVersion()) firstAfter, err := config.ResolveInstalledApp(first.ID, "", "", "") require.NoError(t, err) secondAfter, err := config.ResolveInstalledApp(second.ID, "", "", "") require.NoError(t, err) assert.Equal(t, "1.0.0", firstAfter.AppVersion) assert.Equal(t, "2.1.0", secondAfter.AppVersion) } func TestUpdateCheckResultCarriesStableIdentityIntoTUIItem(t *testing.T) { m := NewModel() result := &version.UpdateCheckResult{AppsToUpdate: []version.UpdateItem{{ AppID: "app-stable-id", AppName: "MPV", InstallPath: "/selected/mpv", CurrentVersion: "0.40.0", AvailableVersion: "0.41.0", UpdateType: "update", MethodID: "mpv-binary", }}} updated, _ := m.Update(updateCheckResultMsg{result: result}) updatedModel := updated.(*Model) var found *updateItem for _, listed := range updatedModel.updateList.Items() { if item, ok := listed.(updateItem); ok { copy := item found = © break } } require.NotNil(t, found) assert.Equal(t, "app-stable-id", found.AppID) assert.Equal(t, "/selected/mpv", found.InstallPath) assert.Equal(t, "mpv-binary", found.MethodID) }