Skip to content
quarry Artifact [f035394e41]
Login

Artifact [f035394e41]

Artifact f035394e41827cdac4ae63c8c2e9745b8e1f7c9520ce702a05cb7644993b2800:


package main

import (
	"testing"

	"craftdesign.group/quarry/internal/oltp"
)

// An address is read as readers see it (RFC 0025): a private team's
// repository is at its owner's namespace while the team is private, and
// at the team's when it is public, never at both.
func TestAnAddressIsWhereReadersSeeTheRepository(t *testing.T) {
	db := newTestRegistrar(t, 25).odb
	if err := db.AddRepo("quiet", t.TempDir(), "", oltp.Public); err != nil {
		t.Fatal(err)
	}
	if err := db.SetOwner("quiet", "alice"); err != nil {
		t.Fatal(err)
	}
	if err := db.AddTeam("hush", "Hush", "", "alice"); err != nil {
		t.Fatal(err)
	}
	if err := db.SetTeamRepo("hush", "quiet", "alice"); err != nil {
		t.Fatal(err)
	}
	a := addressesOf(db)
	if ns, handle, ok := a.Of("quiet"); !ok || ns != "hush" || handle != "quiet" {
		t.Errorf("FAIL: quiet is at %s/%s (%v), want hush/quiet", ns, handle, ok)
	}
	if key, ok := a.At("hush", "quiet"); !ok || key != "quiet" {
		t.Errorf("FAIL: hush/quiet is %q (%v)", key, ok)
	}
	if _, err := db.SetTeamPrivate("hush", true); err != nil {
		t.Fatal(err)
	}
	if key, ok := a.At("alice", "quiet"); !ok || key != "quiet" {
		t.Errorf("FAIL: with the team private, alice/quiet is %q (%v)", key, ok)
	}
	if _, ok := a.At("hush", "quiet"); ok {
		t.Error("FAIL: a private team's name reaches its repository")
	}
	if got := a.Named("quiet"); len(got) != 1 || got[0] != "quiet" {
		t.Errorf("FAIL: the handle quiet names %v", got)
	}
	if _, _, ok := a.Of("nothere"); ok {
		t.Error("FAIL: a name no repository has has an address")
	}
}