1package daemon23import (4 "context"5 "strings"6 "testing"78 "github.com/FelineStateMachine/tinyrelay/internal/event"9)1011func TestRepoURLsUseMemberNameWhenPresent(t *testing.T) {12 _, tenant := testTenant(t)13 ctx := context.Background()14 owner := tenant.Policy().Owner15 named := wikiKey(t, testMemberSecret)16 wikiMember(t, tenant, named)17 base := strings.TrimRight(tenant.publicURL, "/")18 // The owner has no member name, so the hex key stays in the path.19 if got := tenant.repoPageURL(ctx, owner, "notes"); got != base+"/repos/"+owner+"/notes" {20 t.Fatalf("owner repo url %q", got)21 }22 // A named member is written by name, escaped for the path.23 if got := tenant.repoPageURL(ctx, named, "my notes"); got != base+"/repos/member-"+named[:8]+"/my%20notes" {24 t.Fatalf("member repo url %q", got)25 }26 if got := tenant.repoItemURL(ctx, named, "notes", "issues", strings.Repeat("1", 64)); got != base+"/repos/member-"+named[:8]+"/notes/issues/"+strings.Repeat("1", 64) {27 t.Fatalf("member issue url %q", got)28 }29 // A request about a pull request in the member's repository resolves30 // the same way.31 pull := strings.Repeat("2", 64)32 e := event.Event{Kind: kindComment, Tags: [][]string{{"request", "approve"}, {"a", "30617:" + named + ":notes"}, {"E", pull}, {"K", "1618"}}}33 if about := tenant.approvalAboutFrom(ctx, e); about == nil || about.URL != base+"/repos/member-"+named[:8]+"/notes/prs/"+pull {34 t.Fatalf("about %+v", about)35 }36 // A stranger with no membership is written as hex too.37 stranger := strings.Repeat("f", 64)38 if got := tenant.repoPageURL(ctx, stranger, "notes"); got != base+"/repos/"+stranger+"/notes" {39 t.Fatalf("stranger repo url %q", got)40 }41}