Files
snack/detect/detect_integration_test.go
Tai Groot b12f956e45 test: exhaustive integration tests with codecov
- 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
2026-02-26 02:50:48 +00:00

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())
})
}