mirror of
https://github.com/gogrlx/snack.git
synced 2026-04-02 05:08:42 -07:00
- Root package unit tests: Targets, TargetNames, ApplyOptions, error sentinels - Every provider integration test now covers: - All Manager interface methods (positive + negative cases) - GetCapabilities verification (assert expected interfaces) - VersionQuerier: LatestVersion, ListUpgrades, UpgradeAvailable, VersionCmp - Holder: Hold, ListHeld, Unhold (apt, dnf) - Cleaner: Autoremove, Clean - FileOwner: FileList, Owner (+ not-found cases) - RepoManager: ListRepos (apt, dnf, flatpak) - KeyManager: ListKeys (apt, dnf) - Grouper: GroupList, GroupInfo (pacman, dnf) - NameNormalizer: NormalizeName, ParseArch table tests (apt, dpkg, dnf, rpm) - Containertest matrix: 5 distros (debian, alpine, arch, fedora39, fedora-latest) - CI: coverage profiles uploaded per-job, merged in codecov job - Added .gitignore for coverage files
65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
//go:build integration
|
|
|
|
package detect_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/gogrlx/snack"
|
|
"github.com/gogrlx/snack/detect"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestIntegration_Detect(t *testing.T) {
|
|
t.Run("Default", func(t *testing.T) {
|
|
mgr, err := detect.Default()
|
|
require.NoError(t, err)
|
|
require.NotNil(t, mgr)
|
|
assert.NotEmpty(t, mgr.Name())
|
|
assert.True(t, mgr.Available())
|
|
t.Logf("Detected default: %s", mgr.Name())
|
|
})
|
|
|
|
t.Run("All", func(t *testing.T) {
|
|
all := detect.All()
|
|
require.NotEmpty(t, all)
|
|
for _, m := range all {
|
|
assert.NotEmpty(t, m.Name())
|
|
assert.True(t, m.Available())
|
|
t.Logf("Available: %s", m.Name())
|
|
}
|
|
})
|
|
|
|
t.Run("ByName_Valid", func(t *testing.T) {
|
|
all := detect.All()
|
|
require.NotEmpty(t, all)
|
|
|
|
// Should be able to find each detected manager by name
|
|
for _, m := range all {
|
|
found, err := detect.ByName(m.Name())
|
|
require.NoError(t, err, "ByName(%s)", m.Name())
|
|
require.NotNil(t, found)
|
|
assert.Equal(t, m.Name(), found.Name())
|
|
}
|
|
})
|
|
|
|
t.Run("ByName_Invalid", func(t *testing.T) {
|
|
_, err := detect.ByName("xyznonexistentmanager999")
|
|
assert.Error(t, err)
|
|
assert.ErrorIs(t, err, snack.ErrManagerNotFound)
|
|
})
|
|
|
|
t.Run("Capabilities", func(t *testing.T) {
|
|
mgr, err := detect.Default()
|
|
require.NoError(t, err)
|
|
|
|
caps := snack.GetCapabilities(mgr)
|
|
t.Logf("Default manager %s capabilities: %+v", mgr.Name(), caps)
|
|
|
|
// Every manager should have at least the base Manager interface
|
|
// (which isn't in Capabilities, but let's verify some basics)
|
|
assert.NotEmpty(t, mgr.Name())
|
|
})
|
|
}
|