mirror of
https://github.com/gogrlx/snack.git
synced 2026-04-02 05:08:42 -07:00
- 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
155 lines
3.9 KiB
Go
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)
|
|
})
|
|
}
|