clonepack/internal/store/pending_test.go
GnomeZworc 9e287e4e6a
add test for the wall app
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
2026-04-25 19:37:17 +02:00

139 lines
3.6 KiB
Go

package store_test
import (
"context"
"testing"
"github.com/syonad/clonepack/internal/store"
)
func newPendingStore(t *testing.T) (*store.SQLitePendingPackageStore, int64) {
t.Helper()
db := newTestDB(t)
repoID := insertTestRepo(t, db)
return store.NewPendingPackageStore(db), repoID
}
func makePending(repoID int64, name, version, location string) store.PendingPackage {
return store.PendingPackage{
RepoID: repoID,
Name: name,
Version: version,
Arch: "amd64",
Location: location,
Checksum: "abc123",
ChecksumType: "sha256",
Size: 1024,
}
}
func TestUpsertAndListPending(t *testing.T) {
s, repoID := newPendingStore(t)
ctx := context.Background()
pkgs := []store.PendingPackage{
makePending(repoID, "curl", "7.88", "Packages/curl.rpm"),
makePending(repoID, "wget", "1.21", "Packages/wget.rpm"),
}
if err := s.UpsertPending(ctx, pkgs); err != nil {
t.Fatalf("UpsertPending: %v", err)
}
listed, err := s.ListPending(ctx, repoID)
if err != nil {
t.Fatalf("ListPending: %v", err)
}
if len(listed) != 2 {
t.Fatalf("expected 2 pending, got %d", len(listed))
}
if listed[0].Name != "curl" {
t.Errorf("expected curl first, got %q", listed[0].Name)
}
}
func TestUpsertPending_idempotent(t *testing.T) {
s, repoID := newPendingStore(t)
ctx := context.Background()
pkg := makePending(repoID, "curl", "7.88", "Packages/curl.rpm")
s.UpsertPending(ctx, []store.PendingPackage{pkg})
// Insert same package again — INSERT OR IGNORE, should not duplicate.
s.UpsertPending(ctx, []store.PendingPackage{pkg})
listed, _ := s.ListPending(ctx, repoID)
if len(listed) != 1 {
t.Errorf("expected 1 after double upsert, got %d", len(listed))
}
}
func TestDeletePending_byIDs(t *testing.T) {
s, repoID := newPendingStore(t)
ctx := context.Background()
pkgs := []store.PendingPackage{
makePending(repoID, "curl", "7.88", "Packages/curl.rpm"),
makePending(repoID, "wget", "1.21", "Packages/wget.rpm"),
makePending(repoID, "vim", "9.0", "Packages/vim.rpm"),
}
s.UpsertPending(ctx, pkgs)
listed, _ := s.ListPending(ctx, repoID)
if len(listed) != 3 {
t.Fatalf("setup: expected 3, got %d", len(listed))
}
// Delete first two.
ids := []int64{listed[0].ID, listed[1].ID}
if err := s.DeletePending(ctx, ids); err != nil {
t.Fatalf("DeletePending: %v", err)
}
remaining, _ := s.ListPending(ctx, repoID)
if len(remaining) != 1 {
t.Fatalf("expected 1 remaining, got %d", len(remaining))
}
if remaining[0].Name != "vim" {
t.Errorf("expected vim remaining, got %q", remaining[0].Name)
}
}
func TestDeletePending_empty(t *testing.T) {
s, _ := newPendingStore(t)
// Should not error on empty slice.
if err := s.DeletePending(context.Background(), nil); err != nil {
t.Errorf("DeletePending(nil): %v", err)
}
if err := s.DeletePending(context.Background(), []int64{}); err != nil {
t.Errorf("DeletePending([]): %v", err)
}
}
func TestDeleteAllPending(t *testing.T) {
s, repoID := newPendingStore(t)
ctx := context.Background()
s.UpsertPending(ctx, []store.PendingPackage{
makePending(repoID, "curl", "7.88", "Packages/curl.rpm"),
makePending(repoID, "wget", "1.21", "Packages/wget.rpm"),
})
if err := s.DeleteAllPending(ctx, repoID); err != nil {
t.Fatalf("DeleteAllPending: %v", err)
}
remaining, _ := s.ListPending(ctx, repoID)
if len(remaining) != 0 {
t.Errorf("expected 0 after DeleteAll, got %d", len(remaining))
}
}
func TestListPending_empty(t *testing.T) {
s, repoID := newPendingStore(t)
listed, err := s.ListPending(context.Background(), repoID)
if err != nil {
t.Fatalf("ListPending: %v", err)
}
if len(listed) != 0 {
t.Errorf("expected 0, got %d", len(listed))
}
}