Skip to content

Commit e458912

Browse files
authored
Add support for creating reaction for a release (#2196)
Fixes: #2194.
1 parent f81ca31 commit e458912

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

github/reactions.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,3 +492,29 @@ func (s *ReactionsService) deleteReaction(ctx context.Context, url string) (*Res
492492

493493
return s.client.Do(ctx, req, nil)
494494
}
495+
496+
// Create a reaction to a release.
497+
// Note that a response with a Status: 200 OK means that you already
498+
// added the reaction type to this release.
499+
// The content should have one of the following values: "+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", or "eyes".
500+
//
501+
// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/reactions/#create-reaction-for-a-release
502+
func (s *ReactionsService) CreateReleaseReaction(ctx context.Context, owner, repo string, releaseID int64, content string) (*Reaction, *Response, error) {
503+
u := fmt.Sprintf("repos/%v/%v/releases/%v/reactions", owner, repo, releaseID)
504+
505+
body := &Reaction{Content: String(content)}
506+
req, err := s.client.NewRequest("POST", u, body)
507+
if err != nil {
508+
return nil, nil, err
509+
}
510+
511+
req.Header.Set("Accept", mediaTypeReactionsPreview)
512+
513+
m := &Reaction{}
514+
resp, err := s.client.Do(ctx, req, m)
515+
if err != nil {
516+
return nil, resp, err
517+
}
518+
519+
return m, resp, nil
520+
}

github/reactions_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -868,3 +868,41 @@ func TestReactionsService_DeleteTeamDiscussionCommentReactionByTeamIDAndOrgID(t
868868
return client.Reactions.DeleteTeamDiscussionCommentReactionByOrgIDAndTeamID(ctx, 1, 2, 3, 4, 5)
869869
})
870870
}
871+
872+
func TestReactionService_CreateReleaseReaction(t *testing.T) {
873+
client, mux, _, teardown := setup()
874+
defer teardown()
875+
876+
mux.HandleFunc("/repos/o/r/releases/1/reactions", func(w http.ResponseWriter, r *http.Request) {
877+
testMethod(t, r, "POST")
878+
testHeader(t, r, "Accept", mediaTypeReactionsPreview)
879+
880+
w.WriteHeader(http.StatusCreated)
881+
w.Write([]byte(`{"id":1,"user":{"login":"l","id":2},"content":"rocket"}`))
882+
})
883+
884+
const methodName = "CreateReleaseReaction"
885+
ctx := context.Background()
886+
got, _, err := client.Reactions.CreateReleaseReaction(ctx, "o", "r", 1, "rocket")
887+
if err != nil {
888+
t.Errorf("%v returned error: %v", methodName, err)
889+
}
890+
891+
want := &Reaction{ID: Int64(1), User: &User{Login: String("l"), ID: Int64(2)}, Content: String("rocket")}
892+
if !cmp.Equal(got, want) {
893+
t.Errorf("%v = %+v, want %+v", methodName, got, want)
894+
}
895+
896+
testBadOptions(t, methodName, func() (err error) {
897+
_, _, err = client.Reactions.CreateReleaseReaction(ctx, "\n", "\n", -1, "\n")
898+
return err
899+
})
900+
901+
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
902+
got, resp, err := client.Reactions.CreateReleaseReaction(ctx, "o", "r", 1, "rocket")
903+
if got != nil {
904+
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
905+
}
906+
return resp, err
907+
})
908+
}

0 commit comments

Comments
 (0)