From 930d294e708e7ba6ed92028817aabc0fa7523ba4 Mon Sep 17 00:00:00 2001 From: Vartan Benohanian Date: Thu, 16 Jul 2020 18:33:43 -0400 Subject: [PATCH] Add methods to set suggested comment sort for posts Signed-off-by: Vartan Benohanian --- post.go | 64 +++++++++++++++++ post_test.go | 198 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 262 insertions(+) diff --git a/post.go b/post.go index 669024f..db4c5e3 100644 --- a/post.go +++ b/post.go @@ -310,3 +310,67 @@ func (s *PostService) UnpinFromProfile(ctx context.Context, id string) (*Respons return s.client.Do(ctx, req, nil) } + +// setSuggestedSort sets the suggested comment sort for the post. +// sort must be one of: confidence (i.e. best), top, new, controversial, old, random, qa, live +func (s *PostService) setSuggestedSort(ctx context.Context, id string, sort string) (*Response, error) { + path := "api/set_suggested_sort" + + form := url.Values{} + form.Set("api_type", "json") + form.Set("id", id) + form.Set("sort", sort) + + req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// SetSuggestedSortBest sets the suggested comment sort for the post to best. +func (s *PostService) SetSuggestedSortBest(ctx context.Context, id string) (*Response, error) { + return s.setSuggestedSort(ctx, id, "confidence") +} + +// SetSuggestedSortTop sets the suggested comment sort for the post to top. +func (s *PostService) SetSuggestedSortTop(ctx context.Context, id string) (*Response, error) { + return s.setSuggestedSort(ctx, id, "top") +} + +// SetSuggestedSortNew sets the suggested comment sort for the post to new. +func (s *PostService) SetSuggestedSortNew(ctx context.Context, id string) (*Response, error) { + return s.setSuggestedSort(ctx, id, "new") +} + +// SetSuggestedSortControversial sets the suggested comment sort for the post to controversial. +func (s *PostService) SetSuggestedSortControversial(ctx context.Context, id string) (*Response, error) { + return s.setSuggestedSort(ctx, id, "controversial") +} + +// SetSuggestedSortOld sorts the comments on the posts randomly. +func (s *PostService) SetSuggestedSortOld(ctx context.Context, id string) (*Response, error) { + return s.setSuggestedSort(ctx, id, "old") +} + +// SetSuggestedSortRandom sets the suggested comment sort for the post to random. +func (s *PostService) SetSuggestedSortRandom(ctx context.Context, id string) (*Response, error) { + return s.setSuggestedSort(ctx, id, "random") +} + +// SetSuggestedSortAMA sets the suggested comment sort for the post to a Q&A styled fashion. +func (s *PostService) SetSuggestedSortAMA(ctx context.Context, id string) (*Response, error) { + return s.setSuggestedSort(ctx, id, "qa") +} + +// SetSuggestedSortLive sets the suggested comment sort for the post to stream new comments as they're posted. +// As of now, this is still in beta, so it's not a fully developed feature yet. It just sets the sort as "new" for now. +func (s *PostService) SetSuggestedSortLive(ctx context.Context, id string) (*Response, error) { + return s.setSuggestedSort(ctx, id, "live") +} + +// ClearSuggestedSort clears the suggested comment sort for the post. +func (s *PostService) ClearSuggestedSort(ctx context.Context, id string) (*Response, error) { + return s.setSuggestedSort(ctx, id, "") +} diff --git a/post_test.go b/post_test.go index 61696a5..fe30428 100644 --- a/post_test.go +++ b/post_test.go @@ -224,3 +224,201 @@ func TestPostService_UnpinFromProfile(t *testing.T) { assert.NoError(t, err) assert.Equal(t, http.StatusOK, res.StatusCode) } + +func TestPostService_SetSuggestedSortBest(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/set_suggested_sort", 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("sort", "confidence") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.PostForm) + }) + + res, err := client.Post.SetSuggestedSortBest(ctx, "t3_test") + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) +} + +func TestPostService_SetSuggestedSortTop(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/set_suggested_sort", 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("sort", "top") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.PostForm) + }) + + res, err := client.Post.SetSuggestedSortTop(ctx, "t3_test") + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) +} + +func TestPostService_SetSuggestedSortNew(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/set_suggested_sort", 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("sort", "new") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.PostForm) + }) + + res, err := client.Post.SetSuggestedSortNew(ctx, "t3_test") + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) +} + +func TestPostService_SetSuggestedSortControversial(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/set_suggested_sort", 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("sort", "controversial") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.PostForm) + }) + + res, err := client.Post.SetSuggestedSortControversial(ctx, "t3_test") + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) +} + +func TestPostService_SetSuggestedSortOld(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/set_suggested_sort", 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("sort", "old") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.PostForm) + }) + + res, err := client.Post.SetSuggestedSortOld(ctx, "t3_test") + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) +} + +func TestPostService_SetSuggestedSortRandom(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/set_suggested_sort", 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("sort", "random") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.PostForm) + }) + + res, err := client.Post.SetSuggestedSortRandom(ctx, "t3_test") + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) +} + +func TestPostService_SetSuggestedSortAMA(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/set_suggested_sort", 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("sort", "qa") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.PostForm) + }) + + res, err := client.Post.SetSuggestedSortAMA(ctx, "t3_test") + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) +} + +func TestPostService_SetSuggestedSortLive(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/set_suggested_sort", 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("sort", "live") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.PostForm) + }) + + res, err := client.Post.SetSuggestedSortLive(ctx, "t3_test") + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) +} + +func TestPostService_ClearSuggestedSort(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/set_suggested_sort", 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("sort", "") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.PostForm) + }) + + res, err := client.Post.ClearSuggestedSort(ctx, "t3_test") + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) +}