Skip to content
quarry Artifact [d0e67f7261]
Login

Artifact [d0e67f7261]

Artifact d0e67f7261a365381a48ebda735ce473ddd8fdbeb5b6cc0748854c86b6cc0ab2:


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