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