Add resolve and reply support

This commit is contained in:
2026-07-28 11:27:20 +02:00
parent fdaee6a69e
commit 0e880fa9b0
8 changed files with 664 additions and 44 deletions

View File

@@ -119,6 +119,62 @@ func TestGraphQLErrorsAreReturned(t *testing.T) {
}
}
func TestThreadWriteMutationsUseThreadIDs(t *testing.T) {
requests := 0
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
requests++
var request graphQLRequest
if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
t.Fatal(err)
}
input, _ := request.Variables["input"].(map[string]any)
switch {
case strings.Contains(request.Query, "unresolveReviewThread"):
if input["threadId"] != "thread" {
t.Fatalf("unresolve input = %#v", input)
}
_, _ = w.Write([]byte(`{"data":{"unresolveReviewThread":{"thread":{
"id":"thread","path":"a.go","isResolved":false,"viewerCanResolve":true
}}}}`))
case strings.Contains(request.Query, "resolveReviewThread"):
if input["threadId"] != "thread" {
t.Fatalf("resolve input = %#v", input)
}
_, _ = w.Write([]byte(`{"data":{"resolveReviewThread":{"thread":{
"id":"thread","path":"a.go","isResolved":true,"viewerCanUnresolve":true
}}}}`))
case strings.Contains(request.Query, "addPullRequestReviewThreadReply"):
if input["pullRequestReviewThreadId"] != "thread" || input["body"] != "reply body" {
t.Fatalf("reply input = %#v", input)
}
_, _ = w.Write([]byte(`{"data":{"addPullRequestReviewThreadReply":{"comment":{
"id":"comment","body":"reply body","createdAt":"2026-01-01T00:00:00Z",
"url":"https://example/comment","author":{"login":"me"}
}}}}`))
default:
t.Fatalf("unexpected mutation: %s", request.Query)
}
}))
defer server.Close()
client := NewGitHubClient(server.URL, "secret")
resolved, err := client.SetThreadResolved(context.Background(), "thread", true)
if err != nil || !resolved.IsResolved || !resolved.ViewerCanUnresolve {
t.Fatalf("resolve result = %#v, error = %v", resolved, err)
}
unresolved, err := client.SetThreadResolved(context.Background(), "thread", false)
if err != nil || unresolved.IsResolved || !unresolved.ViewerCanResolve {
t.Fatalf("unresolve result = %#v, error = %v", unresolved, err)
}
comment, err := client.ReplyToThread(context.Background(), "thread", "reply body")
if err != nil || comment.ID != "comment" || comment.Author != "me" || comment.Body != "reply body" {
t.Fatalf("reply result = %#v, error = %v", comment, err)
}
if requests != 3 {
t.Fatalf("mutation requests = %d, want 3", requests)
}
}
func TestCheckContextsAndAnnotationsArePaginated(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var request graphQLRequest