package api
import (
"context"
"path/filepath"
"testing"
"craftdesign.group/quarry/internal/oltp"
"craftdesign.group/quarry/internal/ops"
)
// repo.add answers with where the repository is shown and how to clone
// it, which for a private team's repository is under its owner, not the
// namespace it is stored in (#412).
func TestRepoAddAnswersWithTheAddressItIsShownAt(t *testing.T) {
db, err := oltp.Open(filepath.Join(t.TempDir(), "o.db"))
if err != nil {
t.Fatal(err)
}
t.Cleanup(func() { db.Close() })
if err := db.AddAccount("ada", "a-long-enough-password", false); err != nil {
t.Fatal(err)
}
if err := db.AddTeam("crew", "Crew", "", "ada"); err != nil {
t.Fatal(err)
}
reg := &fakeRegistry{}
r := ops.NewRegistry()
shown := func(repo string) (string, string, bool) {
if repo == "widgets" {
return "ada", "widgets", true // a private team's repository appears under its owner
}
return "", "", false
}
if err := RegisterAll(r, Deps{Version: "v", Repos: NewRepos(nil), Registry: reg, Origin: "https://forge.example",
Address: shown, Accounts: newFakeAccounts(), Teams: db}); err != nil {
t.Fatal(err)
}
out, err := r.Invoke(ops.WithUser(context.Background(), "ada"), "repo.add", repoAddIn{Name: "widgets", Namespace: "crew", Create: true})
if err != nil {
t.Fatal(err)
}
o := out.(repoAddOut)
if o.Namespace != "crew" || o.Address != "ada/widgets" || o.CloneURL != "https://forge.example/r/ada/widgets" {
t.Errorf("FAIL: repo.add answered %+v", o)
}
}