Files
snack/flatpak/flatpak_integration_test.go
Tai Groot c913d96de3 fix(ci): update integration tests for NameNormalizer, fix lint and Windows CI
- Update apk/pacman/snap/flatpak integration tests to assert
  NameNormalize=true (all managers now implement NameNormalizer)
- Update flatpak integration test to assert VersionQuery=true
- Remove unused aur functions: rpcInfoMulti, getAURBuildDir
- Wire AUR.Clean to call clean() for consistency
- Fix Windows CI: add shell:bash to avoid PowerShell arg splitting
  on -coverprofile=coverage-windows.out
2026-03-06 04:13:39 +00:00

155 lines
3.9 KiB
Go

//go:build integration
package flatpak_test
import (
"context"
"testing"
"github.com/gogrlx/snack"
"github.com/gogrlx/snack/flatpak"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestIntegration_Flatpak(t *testing.T) {
var mgr snack.Manager = flatpak.New()
if !mgr.Available() {
t.Skip("flatpak not available")
}
ctx := context.Background()
assert.Equal(t, "flatpak", mgr.Name())
caps := snack.GetCapabilities(mgr)
assert.True(t, caps.Clean, "flatpak should support Clean")
assert.True(t, caps.RepoManagement, "flatpak should support RepoManagement")
assert.True(t, caps.VersionQuery, "flatpak should support VersionQuery")
assert.False(t, caps.Hold)
assert.False(t, caps.FileOwnership)
assert.False(t, caps.KeyManagement)
assert.False(t, caps.Groups)
assert.True(t, caps.NameNormalize, "flatpak should support NameNormalize")
t.Run("Update", func(t *testing.T) {
require.NoError(t, mgr.Update(ctx))
})
// --- RepoManager ---
t.Run("RepoManager", func(t *testing.T) {
rm, ok := mgr.(snack.RepoManager)
require.True(t, ok)
t.Run("ListRepos", func(t *testing.T) {
repos, err := rm.ListRepos(ctx)
require.NoError(t, err)
found := false
for _, r := range repos {
if r.Name == "flathub" || r.ID == "flathub" {
found = true
break
}
}
assert.True(t, found, "flathub repo should be configured")
})
})
t.Run("Search", func(t *testing.T) {
pkgs, err := mgr.Search(ctx, "Flatseal")
require.NoError(t, err)
require.NotEmpty(t, pkgs)
})
t.Run("Search_NoResults", func(t *testing.T) {
pkgs, err := mgr.Search(ctx, "xyznonexistentpackage999")
require.NoError(t, err)
assert.Empty(t, pkgs)
})
t.Run("Install", func(t *testing.T) {
_, err := mgr.Install(ctx, snack.Targets("com.github.tchx84.Flatseal"), snack.WithSudo(), snack.WithAssumeYes())
require.NoError(t, err)
})
t.Run("IsInstalled_True", func(t *testing.T) {
installed, err := mgr.IsInstalled(ctx, "com.github.tchx84.Flatseal")
require.NoError(t, err)
assert.True(t, installed)
})
t.Run("IsInstalled_False", func(t *testing.T) {
installed, err := mgr.IsInstalled(ctx, "xyznonexistentpackage999")
require.NoError(t, err)
assert.False(t, installed)
})
t.Run("Info", func(t *testing.T) {
pkg, err := mgr.Info(ctx, "com.github.tchx84.Flatseal")
if err != nil {
t.Logf("Info failed (flatpak may not support info on app IDs): %v", err)
} else {
require.NotNil(t, pkg)
}
})
t.Run("Info_NotFound", func(t *testing.T) {
_, err := mgr.Info(ctx, "xyznonexistentpackage999")
assert.Error(t, err)
})
t.Run("Version", func(t *testing.T) {
ver, err := mgr.Version(ctx, "com.github.tchx84.Flatseal")
if err != nil {
t.Logf("Version failed: %v", err)
} else {
assert.NotEmpty(t, ver)
t.Logf("Flatseal version: %s", ver)
}
})
t.Run("List_ContainsInstalled", func(t *testing.T) {
pkgs, err := mgr.List(ctx)
require.NoError(t, err)
found := false
for _, p := range pkgs {
if p.Name == "Flatseal" || p.Description == "com.github.tchx84.Flatseal" {
found = true
break
}
}
assert.True(t, found, "Flatseal should be in installed list")
})
t.Run("Remove", func(t *testing.T) {
_, err := mgr.Remove(ctx, snack.Targets("com.github.tchx84.Flatseal"), snack.WithSudo(), snack.WithAssumeYes())
require.NoError(t, err)
})
t.Run("IsInstalled_After_Remove", func(t *testing.T) {
installed, err := mgr.IsInstalled(ctx, "com.github.tchx84.Flatseal")
require.NoError(t, err)
assert.False(t, installed)
})
// --- Cleaner ---
t.Run("Cleaner", func(t *testing.T) {
cl, ok := mgr.(snack.Cleaner)
require.True(t, ok)
t.Run("Autoremove", func(t *testing.T) {
err := cl.Autoremove(ctx, snack.WithAssumeYes())
require.NoError(t, err)
})
t.Run("Clean", func(t *testing.T) {
err := cl.Clean(ctx)
require.NoError(t, err)
})
})
t.Run("Upgrade", func(t *testing.T) {
err := mgr.Upgrade(ctx, snack.WithAssumeYes())
require.NoError(t, err)
})
}