139 lines
3.6 KiB
Go
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))
|
|
}
|
|
}
|