569340cf5fa42e3986981d057b955fb893418910 / internal/db/repos_test.go · 4663 bytes · raw
package db
import (
"errors"
"testing"
)
func TestCreateAndGetRepo(t *testing.T) {
database := openTestDB(t)
ownerID, err := CreateUser(database, "josie", "hash")
if err != nil {
t.Fatalf("CreateUser: %v", err)
}
repo, err := CreateRepo(database, ownerID, "demo", "desc", "public")
if err != nil {
t.Fatalf("CreateRepo: %v", err)
}
if repo.ID == 0 || repo.OwnerID != ownerID {
t.Errorf("repo IDs = %+v, want nonzero id and owner %d", repo, ownerID)
}
if repo.DefaultBranch != "main" || repo.Visibility != "public" {
t.Errorf("repo = %+v, want column defaults main/public", repo)
}
if repo.PushedAt.Valid {
t.Errorf("PushedAt = %d, want NULL", repo.PushedAt.Int64)
}
byID, err := GetRepoByID(database, repo.ID)
if err != nil {
t.Fatalf("GetRepoByID: %v", err)
}
if byID.Name != "demo" {
t.Errorf("GetRepoByID name = %q, want demo", byID.Name)
}
byName, err := GetRepoByName(database, "josie", "demo")
if err != nil {
t.Fatalf("GetRepoByName: %v", err)
}
if byName.ID != repo.ID {
t.Errorf("GetRepoByName id = %d, want %d", byName.ID, repo.ID)
}
if _, err := GetRepoByName(database, "josie", "nope"); !errors.Is(err, ErrNotFound) {
t.Errorf("missing repo err = %v, want ErrNotFound", err)
}
if _, err := GetRepoByName(database, "nobody", "demo"); !errors.Is(err, ErrNotFound) {
t.Errorf("missing owner err = %v, want ErrNotFound", err)
}
if _, err := CreateRepo(database, ownerID, "demo", "", "private"); err == nil {
t.Error("duplicate (owner, name) accepted")
}
}
func TestUpdateRepoVisibilityAndRename(t *testing.T) {
database := openTestDB(t)
ownerID, err := CreateUser(database, "josie", "hash")
if err != nil {
t.Fatalf("CreateUser: %v", err)
}
repo, err := CreateRepo(database, ownerID, "demo", "", "private")
if err != nil {
t.Fatalf("CreateRepo: %v", err)
}
if err := UpdateRepoVisibility(database, repo.ID, "public"); err != nil {
t.Fatalf("UpdateRepoVisibility: %v", err)
}
got, err := GetRepoByID(database, repo.ID)
if err != nil {
t.Fatalf("GetRepoByID: %v", err)
}
if got.Visibility != "public" {
t.Errorf("Visibility = %q, want public", got.Visibility)
}
if err := RenameRepo(database, repo.ID, "renamed"); err != nil {
t.Fatalf("RenameRepo: %v", err)
}
if _, err := GetRepoByName(database, "josie", "renamed"); err != nil {
t.Errorf("renamed repo not found: %v", err)
}
if _, err := GetRepoByName(database, "josie", "demo"); !errors.Is(err, ErrNotFound) {
t.Errorf("old name still resolves: %v", err)
}
if err := UpdateRepoVisibility(database, repo.ID+99, "public"); !errors.Is(err, ErrNotFound) {
t.Errorf("visibility on missing repo err = %v, want ErrNotFound", err)
}
if err := RenameRepo(database, repo.ID+99, "x"); !errors.Is(err, ErrNotFound) {
t.Errorf("rename missing repo err = %v, want ErrNotFound", err)
}
}
func TestRecordPush(t *testing.T) {
database := openTestDB(t)
ownerID, err := CreateUser(database, "josie", "hash")
if err != nil {
t.Fatalf("CreateUser: %v", err)
}
if _, err := CreateRepo(database, ownerID, "demo", "", "private"); err != nil {
t.Fatalf("CreateRepo: %v", err)
}
if err := RecordPush(database, "josie", "demo", 12345, ""); err != nil {
t.Fatalf("RecordPush touch: %v", err)
}
repo, err := GetRepoByName(database, "josie", "demo")
if err != nil {
t.Fatalf("GetRepoByName: %v", err)
}
if !repo.PushedAt.Valid || repo.PushedAt.Int64 != 12345 {
t.Errorf("PushedAt = %+v, want 12345", repo.PushedAt)
}
if repo.DefaultBranch != "main" {
t.Errorf("DefaultBranch = %q, want unchanged main", repo.DefaultBranch)
}
if err := RecordPush(database, "josie", "demo", 12346, "master"); err != nil {
t.Fatalf("RecordPush default: %v", err)
}
repo, err = GetRepoByName(database, "josie", "demo")
if err != nil {
t.Fatalf("GetRepoByName: %v", err)
}
if repo.DefaultBranch != "master" || repo.PushedAt.Int64 != 12346 {
t.Errorf("repo = %+v, want default master and pushed_at 12346", repo)
}
if err := RecordPush(database, "josie", "nope", 1, ""); !errors.Is(err, ErrNotFound) {
t.Errorf("RecordPush missing repo err = %v, want ErrNotFound", err)
}
}
func TestDeleteRepo(t *testing.T) {
database := openTestDB(t)
ownerID, err := CreateUser(database, "josie", "hash")
if err != nil {
t.Fatalf("CreateUser: %v", err)
}
repo, err := CreateRepo(database, ownerID, "demo", "", "private")
if err != nil {
t.Fatalf("CreateRepo: %v", err)
}
if err := DeleteRepo(database, repo.ID); err != nil {
t.Fatalf("DeleteRepo: %v", err)
}
if _, err := GetRepoByID(database, repo.ID); !errors.Is(err, ErrNotFound) {
t.Errorf("deleted repo err = %v, want ErrNotFound", err)
}
}