Skip to content

Commit d18f3db

Browse files
committed
refactor(handler): extract redactActors, lock list single-probe
1 parent 0d9bdfb commit d18f3db

2 files changed

Lines changed: 24 additions & 4 deletions

File tree

internal/handler/repo.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,15 @@ func toRepoRow(r reporequest.Request) RepoRow {
7777
}
7878
}
7979

80+
func redactActors(row *RepoRow) {
81+
row.RequestedBy = ""
82+
row.Approver = ""
83+
}
84+
8085
func (h *Handlers) repoRowFor(r *http.Request, req reporequest.Request) RepoRow {
8186
row := toRepoRow(req)
8287
if !h.callerSeesActors(r) {
83-
row.RequestedBy = ""
84-
row.Approver = ""
88+
redactActors(&row)
8589
}
8690
return row
8791
}
@@ -254,8 +258,7 @@ func (h *Handlers) ReposList(w http.ResponseWriter, r *http.Request) {
254258
}
255259
row := toRepoRow(req)
256260
if !seesActors {
257-
row.RequestedBy = ""
258-
row.Approver = ""
261+
redactActors(&row)
259262
}
260263
rows = append(rows, row)
261264
}

internal/handler/repo_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,23 @@ func TestReposList_RedactsActorFieldsForNonStaff(t *testing.T) {
388388
assert.Equal(t, "a", got[0].Name, "non-actor fields stay visible")
389389
}
390390

391+
func TestReposList_SingleProbeForManyRows(t *testing.T) {
392+
store := newFakeRepoStore()
393+
ctx := context.Background()
394+
for _, n := range []string{"a", "b", "c", "d"} {
395+
_, _ = store.Create(ctx, reporequest.Request{Name: n, RequestedBy: "alice", Visibility: reporequest.VisibilityPrivate})
396+
}
397+
gh := staffRepoGH()
398+
h := repoHandlers(t, gh, store, &fakeRepoCreator{})
399+
400+
w := doReq(h, http.MethodGet, "/api/repos?status=all", nil, "alice", "tok", (*Handlers).ReposList)
401+
require.Equal(t, http.StatusOK, w.Code, w.Body.String())
402+
var got []RepoRow
403+
require.NoError(t, json.Unmarshal(w.Body.Bytes(), &got))
404+
require.Len(t, got, 4)
405+
assert.Equal(t, 1, gh.authorizeCalls, "actor-visibility probed ONCE per list, never per row")
406+
}
407+
391408
func TestRepoGet(t *testing.T) {
392409
store := newFakeRepoStore()
393410
created, _ := store.Create(context.Background(), reporequest.Request{Name: "g", RequestedBy: "alice", Visibility: reporequest.VisibilityPublic})

0 commit comments

Comments
 (0)