diff --git a/post-and-comment.go b/post-and-comment.go index 42d33e1..0dfa227 100644 --- a/post-and-comment.go +++ b/post-and-comment.go @@ -12,6 +12,8 @@ import ( // This service holds functionality common to both posts and comments. // // Reddit API docs: https://www.reddit.com/dev/api/#section_links_and_comments +// +// todo: this is ugly, find a solution type PostAndCommentService service type vote int diff --git a/post.go b/post.go index db4c5e3..26c66ef 100644 --- a/post.go +++ b/post.go @@ -374,3 +374,38 @@ func (s *PostService) SetSuggestedSortLive(ctx context.Context, id string) (*Res func (s *PostService) ClearSuggestedSort(ctx context.Context, id string) (*Response, error) { return s.setSuggestedSort(ctx, id, "") } + +// EnableContestMode enables contest mode for the post. +// Comments will be sorted randomly and regular users cannot see comment scores. +func (s *PostService) EnableContestMode(ctx context.Context, id string) (*Response, error) { + path := "api/set_contest_mode" + + form := url.Values{} + form.Set("api_type", "json") + form.Set("id", id) + form.Set("state", "true") + + req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// DisableContestMode disables contest mode for the post. +func (s *PostService) DisableContestMode(ctx context.Context, id string) (*Response, error) { + path := "api/set_contest_mode" + + form := url.Values{} + form.Set("api_type", "json") + form.Set("id", id) + form.Set("state", "false") + + req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/post_test.go b/post_test.go index fe30428..c501ea7 100644 --- a/post_test.go +++ b/post_test.go @@ -422,3 +422,47 @@ func TestPostService_ClearSuggestedSort(t *testing.T) { assert.NoError(t, err) assert.Equal(t, http.StatusOK, res.StatusCode) } + +func TestPostService_EnableContestMode(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/set_contest_mode", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("id", "t3_test") + form.Set("state", "true") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.PostForm) + }) + + res, err := client.Post.EnableContestMode(ctx, "t3_test") + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) +} + +func TestPostService_DisableContestMode(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/set_contest_mode", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("id", "t3_test") + form.Set("state", "false") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.PostForm) + }) + + res, err := client.Post.DisableContestMode(ctx, "t3_test") + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) +}