Files
snack/apk/apk_integration_test.go
Tai Groot b443269594 feat: add integration tests and GitHub Actions CI
Add integration test files for all providers (apt, dpkg, pacman, apk,
dnf, rpm, flatpak, snap, pkg, detect) behind the 'integration' build
tag. Tests exercise real package operations: update, search, info,
install, verify, list, remove, and capability interfaces.

Add GitHub Actions workflow running unit tests on ubuntu-latest and
integration tests on Debian, Ubuntu, Fedora, Alpine, Arch Linux, and
Ubuntu+Flatpak containers/runners.
2026-02-26 01:42:19 +00:00

105 lines
2.3 KiB
Go

//go:build integration
package apk_test
import (
"context"
"testing"
"github.com/gogrlx/snack"
"github.com/gogrlx/snack/apk"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestIntegration_Apk(t *testing.T) {
mgr := apk.New()
if !mgr.Available() {
t.Skip("apk not available")
}
ctx := context.Background()
t.Run("Update", func(t *testing.T) {
err := mgr.Update(ctx)
require.NoError(t, err)
})
t.Run("Search", func(t *testing.T) {
pkgs, err := mgr.Search(ctx, "curl")
require.NoError(t, err)
require.NotEmpty(t, pkgs)
})
t.Run("Info", func(t *testing.T) {
pkg, err := mgr.Info(ctx, "curl")
require.NoError(t, err)
require.NotNil(t, pkg)
assert.Equal(t, "curl", pkg.Name)
})
t.Run("Install", func(t *testing.T) {
err := mgr.Install(ctx, snack.Targets("tree"), snack.WithSudo(), snack.WithAssumeYes())
require.NoError(t, err)
})
t.Run("IsInstalled", func(t *testing.T) {
installed, err := mgr.IsInstalled(ctx, "tree")
require.NoError(t, err)
assert.True(t, installed)
})
t.Run("Version", func(t *testing.T) {
ver, err := mgr.Version(ctx, "tree")
require.NoError(t, err)
assert.NotEmpty(t, ver)
})
t.Run("List", func(t *testing.T) {
pkgs, err := mgr.List(ctx)
require.NoError(t, err)
found := false
for _, p := range pkgs {
if p.Name == "tree" {
found = true
break
}
}
assert.True(t, found, "tree should be in installed list")
})
t.Run("Remove", func(t *testing.T) {
err := mgr.Remove(ctx, snack.Targets("tree"), snack.WithSudo(), snack.WithAssumeYes())
require.NoError(t, err)
})
t.Run("IsInstalled_After_Remove", func(t *testing.T) {
installed, err := mgr.IsInstalled(ctx, "tree")
require.NoError(t, err)
assert.False(t, installed)
})
t.Run("Capabilities", func(t *testing.T) {
if vq, ok := mgr.(snack.VersionQuerier); ok {
ver, err := vq.LatestVersion(ctx, "curl")
require.NoError(t, err)
assert.NotEmpty(t, ver)
upgrades, err := vq.ListUpgrades(ctx)
require.NoError(t, err)
_ = upgrades
}
if cl, ok := mgr.(snack.Cleaner); ok {
err := cl.Clean(ctx)
require.NoError(t, err)
}
if fo, ok := mgr.(snack.FileOwner); ok {
owner, err := fo.Owner(ctx, "/usr/bin/apk")
if err == nil {
assert.NotEmpty(t, owner)
}
}
})
}