diff --git a/shortcuts/pr/pr_test.go b/shortcuts/pr/pr_test.go index 76995609..946cf794 100644 --- a/shortcuts/pr/pr_test.go +++ b/shortcuts/pr/pr_test.go @@ -57,9 +57,11 @@ func TestPRCommentPostsToCorrectIssueJournal(t *testing.T) { func TestPRCreateSameRepoBranchUsesSimplePayload(t *testing.T) { var payload map[string]interface{} + encodedHead := base64.RawURLEncoding.EncodeToString([]byte("feature/search")) + encodedBase := base64.RawURLEncoding.EncodeToString([]byte("master")) server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch { - case r.Method == "GET" && r.URL.Path == "/owner/repo/compare/"+base64.RawURLEncoding.EncodeToString([]byte("feature/search"))+"..."+base64.RawURLEncoding.EncodeToString([]byte("master"))+".json": + case r.Method == "GET" && r.URL.Path == "/owner/repo/compare/"+encodedHead+"..."+encodedBase+".json": writeJSON(t, w, map[string]interface{}{ "commits_count": float64(2), "files_count": float64(5), @@ -137,6 +139,44 @@ func TestPRCreateForkBranchAddsGitLinkForkFields(t *testing.T) { assertEqual(t, payload["files_count"], float64(7)) } +func TestFetchPRCompareCountsUsesURLSafeBase64(t *testing.T) { + encodedHead := base64.RawURLEncoding.EncodeToString([]byte("alice:feature/fork")) + encodedBase := base64.RawURLEncoding.EncodeToString([]byte("master")) + + if encodedHead != "YWxpY2U6ZmVhdHVyZS9mb3Jr" { + t.Fatalf("unexpected encoded head: %s", encodedHead) + } + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + wantPath := "/owner/repo/compare/" + encodedHead + "..." + encodedBase + ".json" + if r.Method != "GET" || r.URL.Path != wantPath { + t.Fatalf("unexpected request: %s %s, want GET %s", r.Method, r.URL.Path, wantPath) + } + writeJSON(t, w, map[string]interface{}{ + "commits_count": float64(4), + "files_count": float64(9), + }) + })) + defer server.Close() + + ctx := &common.RuntimeContext{ + Client: &client.Client{ + HTTP: server.Client(), + BaseURL: server.URL, + }, + Owner: "owner", + Repo: "repo", + } + + counts, err := fetchPRCompareCounts(ctx, "alice:feature/fork", "master") + if err != nil { + t.Fatalf("fetchPRCompareCounts failed: %v", err) + } + + assertEqual(t, counts["commits_count"], 4) + assertEqual(t, counts["files_count"], 9) +} + func TestParsePRHeadRejectsInvalidForkSyntax(t *testing.T) { _, err := parsePRHead("alice:feature/fork") if err == nil {