Use ListOptions for parameters instead of functional options
Signed-off-by: Vartan Benohanian <vartanbeno@gmail.com>
This commit is contained in:
parent
23d572046c
commit
23ed51efcc
11 changed files with 325 additions and 307 deletions
|
@ -27,10 +27,16 @@ func run() (err error) {
|
||||||
|
|
||||||
client.OnRequestCompleted(logResponse)
|
client.OnRequestCompleted(logResponse)
|
||||||
|
|
||||||
client.Subreddit.Search(ctx, "programming", reddit.SetLimit(10))
|
client.Subreddit.Search(ctx, "programming", nil)
|
||||||
client.Subreddit.SearchNames(ctx, "monitor")
|
client.Subreddit.SearchNames(ctx, "monitor")
|
||||||
client.Subreddit.SearchPosts(ctx, "react", "webdev", reddit.SortByNumberOfComments)
|
client.Subreddit.SearchPosts(ctx, "react", "webdev", nil)
|
||||||
client.User.Posts(ctx, reddit.SetLimit(50))
|
client.User.Posts(ctx, &reddit.ListUserOverviewOptions{
|
||||||
|
ListOptions: reddit.ListOptions{
|
||||||
|
Limit: 50,
|
||||||
|
},
|
||||||
|
Sort: "top",
|
||||||
|
Time: "month",
|
||||||
|
})
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,12 @@ func run() (err error) {
|
||||||
// Let's get the top 200 posts of r/golang.
|
// Let's get the top 200 posts of r/golang.
|
||||||
// Reddit returns a maximum of 100 posts at a time,
|
// Reddit returns a maximum of 100 posts at a time,
|
||||||
// so we'll need to separate this into 2 requests.
|
// so we'll need to separate this into 2 requests.
|
||||||
result, _, err := client.Subreddit.TopPosts(ctx, "golang", reddit.SetLimit(100), reddit.FromAllTime)
|
result, _, err := client.Subreddit.TopPosts(ctx, "golang", &reddit.ListPostOptions{
|
||||||
|
ListOptions: reddit.ListOptions{
|
||||||
|
Limit: 100,
|
||||||
|
},
|
||||||
|
Time: "all",
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -38,7 +43,13 @@ func run() (err error) {
|
||||||
|
|
||||||
// The SetAfter option sets the id of an item that Reddit
|
// The SetAfter option sets the id of an item that Reddit
|
||||||
// will use as an anchor point for the returned listing.
|
// will use as an anchor point for the returned listing.
|
||||||
result, _, err = client.Subreddit.TopPosts(ctx, "golang", reddit.SetLimit(100), reddit.FromAllTime, reddit.SetAfter(result.After))
|
result, _, err = client.Subreddit.TopPosts(ctx, "golang", &reddit.ListPostOptions{
|
||||||
|
ListOptions: reddit.ListOptions{
|
||||||
|
Limit: 100,
|
||||||
|
After: result.After,
|
||||||
|
},
|
||||||
|
Time: "all",
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,11 +41,36 @@ type ModAction struct {
|
||||||
|
|
||||||
// GetActions gets a list of moderator actions on a subreddit.
|
// GetActions gets a list of moderator actions on a subreddit.
|
||||||
// By default, the limit parameter is 25; max is 500.
|
// By default, the limit parameter is 25; max is 500.
|
||||||
func (s *ModerationService) GetActions(ctx context.Context, subreddit string, opts ...SearchOptionSetter) (*ModActions, *Response, error) {
|
func (s *ModerationService) GetActions(ctx context.Context, subreddit string, opts *ListOptions) (*ModActions, *Response, error) {
|
||||||
form := newSearchOptions(opts...)
|
return s.GetActionsByType(ctx, subreddit, "", opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetActionsByType gets a list of moderator actions of the specified type on a subreddit.
|
||||||
|
// By default, the limit parameter is 25; max is 500.
|
||||||
|
// The type should be one of: banuser, unbanuser, spamlink, removelink, approvelink, spamcomment,
|
||||||
|
// removecomment, approvecomment, addmoderator, showcomment, invitemoderator, uninvitemoderator,
|
||||||
|
// acceptmoderatorinvite, removemoderator, addcontributor, removecontributor, editsettings, editflair,
|
||||||
|
// distinguish, marknsfw, wikibanned, wikicontributor, wikiunbanned, wikipagelisted, removewikicontributor,
|
||||||
|
// wikirevise, wikipermlevel, ignorereports, unignorereports, setpermissions, setsuggestedsort, sticky,
|
||||||
|
// unsticky, setcontestmode, unsetcontestmode, lock, unlock, muteuser, unmuteuser, createrule, editrule,
|
||||||
|
// reorderrules, deleterule, spoiler, unspoiler, modmail_enrollment, community_styling, community_widgets,
|
||||||
|
// markoriginalcontent, collections, events, hidden_award, add_community_topics, remove_community_topics,
|
||||||
|
// create_scheduled_post, edit_scheduled_post, delete_scheduled_post, submit_scheduled_post, edit_post_requirements,
|
||||||
|
// invitesubscriber, submit_content_rating_survey.
|
||||||
|
func (s *ModerationService) GetActionsByType(ctx context.Context, subreddit string, actionType string, opts *ListOptions) (*ModActions, *Response, error) {
|
||||||
path := fmt.Sprintf("r/%s/about/log", subreddit)
|
path := fmt.Sprintf("r/%s/about/log", subreddit)
|
||||||
path = addQuery(path, form)
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
type params struct {
|
||||||
|
Type string `url:"type,omitempty"`
|
||||||
|
}
|
||||||
|
path, err = addOptions(path, params{actionType})
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -61,22 +86,6 @@ func (s *ModerationService) GetActions(ctx context.Context, subreddit string, op
|
||||||
return root.getModeratorActions(), resp, nil
|
return root.getModeratorActions(), resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetActionsByType gets a list of moderator actions of the specified type on a subreddit.
|
|
||||||
// By default, the limit parameter is 25; max is 500.
|
|
||||||
// The type should be one of: banuser, unbanuser, spamlink, removelink, approvelink, spamcomment,
|
|
||||||
// removecomment, approvecomment, addmoderator, showcomment, invitemoderator, uninvitemoderator,
|
|
||||||
// acceptmoderatorinvite, removemoderator, addcontributor, removecontributor, editsettings, editflair,
|
|
||||||
// distinguish, marknsfw, wikibanned, wikicontributor, wikiunbanned, wikipagelisted, removewikicontributor,
|
|
||||||
// wikirevise, wikipermlevel, ignorereports, unignorereports, setpermissions, setsuggestedsort, sticky,
|
|
||||||
// unsticky, setcontestmode, unsetcontestmode, lock, unlock, muteuser, unmuteuser, createrule, editrule,
|
|
||||||
// reorderrules, deleterule, spoiler, unspoiler, modmail_enrollment, community_styling, community_widgets,
|
|
||||||
// markoriginalcontent, collections, events, hidden_award, add_community_topics, remove_community_topics,
|
|
||||||
// create_scheduled_post, edit_scheduled_post, delete_scheduled_post, submit_scheduled_post, edit_post_requirements
|
|
||||||
func (s *ModerationService) GetActionsByType(ctx context.Context, subreddit string, actionType string, opts ...SearchOptionSetter) (*ModActions, *Response, error) {
|
|
||||||
opts = append(opts, setType(actionType))
|
|
||||||
return s.GetActions(ctx, subreddit, opts...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// AcceptInvite accepts a pending invite to moderate the specified subreddit.
|
// AcceptInvite accepts a pending invite to moderate the specified subreddit.
|
||||||
func (s *ModerationService) AcceptInvite(ctx context.Context, subreddit string) (*Response, error) {
|
func (s *ModerationService) AcceptInvite(ctx context.Context, subreddit string) (*Response, error) {
|
||||||
path := fmt.Sprintf("r/%s/api/accept_moderator_invite", subreddit)
|
path := fmt.Sprintf("r/%s/api/accept_moderator_invite", subreddit)
|
||||||
|
|
|
@ -61,7 +61,7 @@ func TestModerationService_GetActions(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
result, _, err := client.Moderation.GetActions(ctx, "testsubreddit")
|
result, _, err := client.Moderation.GetActions(ctx, "testsubreddit", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedModActionsResult, result)
|
assert.Equal(t, expectedModActionsResult, result)
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ func TestModerationService_GetActionsByType(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
result, _, err := client.Moderation.GetActionsByType(ctx, "testsubreddit", "testtype")
|
result, _, err := client.Moderation.GetActionsByType(ctx, "testsubreddit", "testtype", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedModActionsResult, result)
|
assert.Equal(t, expectedModActionsResult, result)
|
||||||
}
|
}
|
||||||
|
|
62
reddit.go
62
reddit.go
|
@ -360,6 +360,68 @@ type ListOptions struct {
|
||||||
Before string `url:"before,omitempty"`
|
Before string `url:"before,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Value returns the value stored in the pointer.
|
||||||
|
func (o *ListOptions) Value() ListOptions {
|
||||||
|
if o == nil {
|
||||||
|
return ListOptions{}
|
||||||
|
}
|
||||||
|
return *o
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetLimit returns the limit option.
|
||||||
|
func (o *ListOptions) GetLimit() int {
|
||||||
|
if o == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return o.Limit
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAfter returns the after option.
|
||||||
|
func (o *ListOptions) GetAfter() string {
|
||||||
|
if o == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return o.After
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetBefore returns the before option.
|
||||||
|
func (o *ListOptions) GetBefore() string {
|
||||||
|
if o == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return o.Before
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListSubredditOptions defines possible options used when searching for subreddits.
|
||||||
|
type ListSubredditOptions struct {
|
||||||
|
ListOptions
|
||||||
|
// One of: relevance, activity.
|
||||||
|
Sort string `url:"sort,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPostOptions defines possible options used when getting posts from a subreddit.
|
||||||
|
type ListPostOptions struct {
|
||||||
|
ListOptions
|
||||||
|
// One of: hour, day, week, month, year, all.
|
||||||
|
Time string `url:"t,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPostSearchOptions defines possible options used when searching for posts within a subreddit.
|
||||||
|
type ListPostSearchOptions struct {
|
||||||
|
ListPostOptions
|
||||||
|
// One of: relevance, hot, top, new, comments.
|
||||||
|
Sort string `url:"sort,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListUserOverviewOptions defines possible options used when getting a user's post and/or comments.
|
||||||
|
type ListUserOverviewOptions struct {
|
||||||
|
ListOptions
|
||||||
|
// One of: hot, new, top, controversial.
|
||||||
|
Sort string `url:"sort,omitempty"`
|
||||||
|
// One of: hour, day, week, month, year, all.
|
||||||
|
Time string `url:"t,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
func addOptions(s string, opt interface{}) (string, error) {
|
func addOptions(s string, opt interface{}) (string, error) {
|
||||||
v := reflect.ValueOf(opt)
|
v := reflect.ValueOf(opt)
|
||||||
if v.Kind() == reflect.Ptr && v.IsNil() {
|
if v.Kind() == reflect.Ptr && v.IsNil() {
|
||||||
|
|
|
@ -60,6 +60,7 @@ type oauth2Config struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func oauth2Transport(c oauth2Config) *oauth2.Transport {
|
func oauth2Transport(c oauth2Config) *oauth2.Transport {
|
||||||
|
// todo: use oauth2.Config.PasswordCredentialsToken
|
||||||
params := url.Values{
|
params := url.Values{
|
||||||
"grant_type": {"password"},
|
"grant_type": {"password"},
|
||||||
"username": {c.username},
|
"username": {c.username},
|
||||||
|
|
148
search.go
148
search.go
|
@ -1,148 +0,0 @@
|
||||||
package reddit
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"net/url"
|
|
||||||
)
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
For searches to include NSFW results, the user must
|
|
||||||
enable the following setting in their preferences:
|
|
||||||
"include not safe for work (NSFW) search results in searches"
|
|
||||||
Note: The "limit" parameter in searches is prone to inconsistent
|
|
||||||
behaviour, e.g. sometimes limit=1 returns nothing when it should.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
func newSearchOptions(opts ...SearchOptionSetter) url.Values {
|
|
||||||
searchOptions := make(url.Values)
|
|
||||||
for _, opt := range opts {
|
|
||||||
opt(searchOptions)
|
|
||||||
}
|
|
||||||
return searchOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
// SearchOptionSetter sets values for the options.
|
|
||||||
type SearchOptionSetter func(opts url.Values)
|
|
||||||
|
|
||||||
// SetAfter sets the after option.
|
|
||||||
func SetAfter(v string) SearchOptionSetter {
|
|
||||||
return func(opts url.Values) {
|
|
||||||
opts.Set("after", v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetBefore sets the before option.
|
|
||||||
func SetBefore(v string) SearchOptionSetter {
|
|
||||||
return func(opts url.Values) {
|
|
||||||
opts.Set("before", v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetLimit sets the limit option.
|
|
||||||
// Warning: It seems like setting the limit to 1 sometimes returns 0 results.
|
|
||||||
func SetLimit(v int) SearchOptionSetter {
|
|
||||||
return func(opts url.Values) {
|
|
||||||
opts.Set("limit", fmt.Sprint(v))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SortByHot sets the sort option to return the hottest results first.
|
|
||||||
func SortByHot(opts url.Values) {
|
|
||||||
opts.Set("sort", "hot")
|
|
||||||
}
|
|
||||||
|
|
||||||
// SortByBest sets the sort option to return the best results first.
|
|
||||||
func SortByBest(opts url.Values) {
|
|
||||||
opts.Set("sort", "best")
|
|
||||||
}
|
|
||||||
|
|
||||||
// SortByNew sets the sort option to return the newest results first.
|
|
||||||
func SortByNew(opts url.Values) {
|
|
||||||
opts.Set("sort", "new")
|
|
||||||
}
|
|
||||||
|
|
||||||
// SortByRising sets the sort option to return the rising results first.
|
|
||||||
func SortByRising(opts url.Values) {
|
|
||||||
opts.Set("sort", "rising")
|
|
||||||
}
|
|
||||||
|
|
||||||
// SortByControversial sets the sort option to return the most controversial results first.
|
|
||||||
func SortByControversial(opts url.Values) {
|
|
||||||
opts.Set("sort", "controversial")
|
|
||||||
}
|
|
||||||
|
|
||||||
// SortByTop sets the sort option to return the top results first.
|
|
||||||
func SortByTop(opts url.Values) {
|
|
||||||
opts.Set("sort", "top")
|
|
||||||
}
|
|
||||||
|
|
||||||
// SortByRelevance sets the sort option to return the most relevant results first.
|
|
||||||
// This can be used when searching for subreddits and users.
|
|
||||||
func SortByRelevance(opts url.Values) {
|
|
||||||
opts.Set("sort", "relevance")
|
|
||||||
}
|
|
||||||
|
|
||||||
// SortByActivity sets the sort option to return results with the most activity first.
|
|
||||||
// This can be used when searching for subreddits and users.
|
|
||||||
func SortByActivity(opts url.Values) {
|
|
||||||
opts.Set("sort", "activity")
|
|
||||||
}
|
|
||||||
|
|
||||||
// SortByNumberOfComments sets the sort option to return the results with the highest
|
|
||||||
// number of comments first.
|
|
||||||
// This can be used when searching for posts within a subreddit.
|
|
||||||
func SortByNumberOfComments(opts url.Values) {
|
|
||||||
opts.Set("sort", "comments")
|
|
||||||
}
|
|
||||||
|
|
||||||
// FromThePastHour sets the timespan option to return results from the past hour.
|
|
||||||
func FromThePastHour(opts url.Values) {
|
|
||||||
opts.Set("t", "hour")
|
|
||||||
}
|
|
||||||
|
|
||||||
// FromThePastDay sets the timespan option to return results from the past day.
|
|
||||||
func FromThePastDay(opts url.Values) {
|
|
||||||
opts.Set("t", "day")
|
|
||||||
}
|
|
||||||
|
|
||||||
// FromThePastWeek sets the timespan option to return results from the past week.
|
|
||||||
func FromThePastWeek(opts url.Values) {
|
|
||||||
opts.Set("t", "week")
|
|
||||||
}
|
|
||||||
|
|
||||||
// FromThePastMonth sets the timespan option to return results from the past month.
|
|
||||||
func FromThePastMonth(opts url.Values) {
|
|
||||||
opts.Set("t", "month")
|
|
||||||
}
|
|
||||||
|
|
||||||
// FromThePastYear sets the timespan option to return results from the past year.
|
|
||||||
func FromThePastYear(opts url.Values) {
|
|
||||||
opts.Set("t", "year")
|
|
||||||
}
|
|
||||||
|
|
||||||
// FromAllTime sets the timespan option to return results from all time.
|
|
||||||
func FromAllTime(opts url.Values) {
|
|
||||||
opts.Set("t", "all")
|
|
||||||
}
|
|
||||||
|
|
||||||
// setType sets the type option.
|
|
||||||
// For mod actions, it's for the type of action (e.g. "banuser", "spamcomment").
|
|
||||||
func setType(v string) SearchOptionSetter {
|
|
||||||
return func(opts url.Values) {
|
|
||||||
opts.Set("type", v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// setQuery sets the q option.
|
|
||||||
func setQuery(v string) SearchOptionSetter {
|
|
||||||
return func(opts url.Values) {
|
|
||||||
opts.Set("q", v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// setRestrict sets the restrict_sr option.
|
|
||||||
func setRestrict(opts url.Values) {
|
|
||||||
opts.Set("restrict_sr", "true")
|
|
||||||
}
|
|
84
subreddit.go
84
subreddit.go
|
@ -40,14 +40,16 @@ type Moderator struct {
|
||||||
Permissions []string `json:"mod_permissions"`
|
Permissions []string `json:"mod_permissions"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SubredditService) getPosts(ctx context.Context, sort string, subreddit string, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *SubredditService) getPosts(ctx context.Context, sort string, subreddit string, opts *ListPostOptions) (*Posts, *Response, error) {
|
||||||
path := sort
|
path := sort
|
||||||
if subreddit != "" {
|
if subreddit != "" {
|
||||||
path = fmt.Sprintf("r/%s/%s", subreddit, sort)
|
path = fmt.Sprintf("r/%s/%s", subreddit, sort)
|
||||||
}
|
}
|
||||||
|
|
||||||
form := newSearchOptions(opts...)
|
path, err := addOptions(path, opts)
|
||||||
path = addQuery(path, form)
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -68,36 +70,36 @@ func (s *SubredditService) getPosts(ctx context.Context, sort string, subreddit
|
||||||
// If none are defined, it returns the ones from your subscribed subreddits.
|
// If none are defined, it returns the ones from your subscribed subreddits.
|
||||||
// Note: when looking for hot posts in a subreddit, it will include the stickied
|
// Note: when looking for hot posts in a subreddit, it will include the stickied
|
||||||
// posts (if any) PLUS posts from the limit parameter (25 by default).
|
// posts (if any) PLUS posts from the limit parameter (25 by default).
|
||||||
func (s *SubredditService) HotPosts(ctx context.Context, subreddit string, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *SubredditService) HotPosts(ctx context.Context, subreddit string, opts *ListPostOptions) (*Posts, *Response, error) {
|
||||||
return s.getPosts(ctx, "hot", subreddit, opts...)
|
return s.getPosts(ctx, "hot", subreddit, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewPosts returns the newest posts from the specified subreddit.
|
// NewPosts returns the newest posts from the specified subreddit.
|
||||||
// To search through multiple, separate the names with a plus (+), e.g. "golang+test".
|
// To search through multiple, separate the names with a plus (+), e.g. "golang+test".
|
||||||
// If none are defined, it returns the ones from your subscribed subreddits.
|
// If none are defined, it returns the ones from your subscribed subreddits.
|
||||||
func (s *SubredditService) NewPosts(ctx context.Context, subreddit string, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *SubredditService) NewPosts(ctx context.Context, subreddit string, opts *ListPostOptions) (*Posts, *Response, error) {
|
||||||
return s.getPosts(ctx, "new", subreddit, opts...)
|
return s.getPosts(ctx, "new", subreddit, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RisingPosts returns the rising posts from the specified subreddit.
|
// RisingPosts returns the rising posts from the specified subreddit.
|
||||||
// To search through multiple, separate the names with a plus (+), e.g. "golang+test".
|
// To search through multiple, separate the names with a plus (+), e.g. "golang+test".
|
||||||
// If none are defined, it returns the ones from your subscribed subreddits.
|
// If none are defined, it returns the ones from your subscribed subreddits.
|
||||||
func (s *SubredditService) RisingPosts(ctx context.Context, subreddit string, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *SubredditService) RisingPosts(ctx context.Context, subreddit string, opts *ListPostOptions) (*Posts, *Response, error) {
|
||||||
return s.getPosts(ctx, "rising", subreddit, opts...)
|
return s.getPosts(ctx, "rising", subreddit, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ControversialPosts returns the most controversial posts from the specified subreddit.
|
// ControversialPosts returns the most controversial posts from the specified subreddit.
|
||||||
// To search through multiple, separate the names with a plus (+), e.g. "golang+test".
|
// To search through multiple, separate the names with a plus (+), e.g. "golang+test".
|
||||||
// If none are defined, it returns the ones from your subscribed subreddits.
|
// If none are defined, it returns the ones from your subscribed subreddits.
|
||||||
func (s *SubredditService) ControversialPosts(ctx context.Context, subreddit string, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *SubredditService) ControversialPosts(ctx context.Context, subreddit string, opts *ListPostOptions) (*Posts, *Response, error) {
|
||||||
return s.getPosts(ctx, "controversial", subreddit, opts...)
|
return s.getPosts(ctx, "controversial", subreddit, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TopPosts returns the top posts from the specified subreddit.
|
// TopPosts returns the top posts from the specified subreddit.
|
||||||
// To search through multiple, separate the names with a plus (+), e.g. "golang+test".
|
// To search through multiple, separate the names with a plus (+), e.g. "golang+test".
|
||||||
// If none are defined, it returns the ones from your subscribed subreddits.
|
// If none are defined, it returns the ones from your subscribed subreddits.
|
||||||
func (s *SubredditService) TopPosts(ctx context.Context, subreddit string, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *SubredditService) TopPosts(ctx context.Context, subreddit string, opts *ListPostOptions) (*Posts, *Response, error) {
|
||||||
return s.getPosts(ctx, "top", subreddit, opts...)
|
return s.getPosts(ctx, "top", subreddit, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get gets a subreddit by name.
|
// Get gets a subreddit by name.
|
||||||
|
@ -122,38 +124,38 @@ func (s *SubredditService) Get(ctx context.Context, name string) (*Subreddit, *R
|
||||||
}
|
}
|
||||||
|
|
||||||
// Popular returns popular subreddits.
|
// Popular returns popular subreddits.
|
||||||
func (s *SubredditService) Popular(ctx context.Context, opts *ListOptions) (*Subreddits, *Response, error) {
|
func (s *SubredditService) Popular(ctx context.Context, opts *ListSubredditOptions) (*Subreddits, *Response, error) {
|
||||||
return s.getSubreddits(ctx, "subreddits/popular", opts)
|
return s.getSubreddits(ctx, "subreddits/popular", opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// New returns new subreddits.
|
// New returns new subreddits.
|
||||||
func (s *SubredditService) New(ctx context.Context, opts *ListOptions) (*Subreddits, *Response, error) {
|
func (s *SubredditService) New(ctx context.Context, opts *ListSubredditOptions) (*Subreddits, *Response, error) {
|
||||||
return s.getSubreddits(ctx, "subreddits/new", opts)
|
return s.getSubreddits(ctx, "subreddits/new", opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gold returns gold subreddits (i.e. only accessible to users with gold).
|
// Gold returns gold subreddits (i.e. only accessible to users with gold).
|
||||||
// It seems like it returns an empty list if you don't have gold.
|
// It seems like it returns an empty list if you don't have gold.
|
||||||
func (s *SubredditService) Gold(ctx context.Context, opts *ListOptions) (*Subreddits, *Response, error) {
|
func (s *SubredditService) Gold(ctx context.Context, opts *ListSubredditOptions) (*Subreddits, *Response, error) {
|
||||||
return s.getSubreddits(ctx, "subreddits/gold", opts)
|
return s.getSubreddits(ctx, "subreddits/gold", opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default returns default subreddits.
|
// Default returns default subreddits.
|
||||||
func (s *SubredditService) Default(ctx context.Context, opts *ListOptions) (*Subreddits, *Response, error) {
|
func (s *SubredditService) Default(ctx context.Context, opts *ListSubredditOptions) (*Subreddits, *Response, error) {
|
||||||
return s.getSubreddits(ctx, "subreddits/default", opts)
|
return s.getSubreddits(ctx, "subreddits/default", opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Subscribed returns the list of subreddits you are subscribed to.
|
// Subscribed returns the list of subreddits you are subscribed to.
|
||||||
func (s *SubredditService) Subscribed(ctx context.Context, opts *ListOptions) (*Subreddits, *Response, error) {
|
func (s *SubredditService) Subscribed(ctx context.Context, opts *ListSubredditOptions) (*Subreddits, *Response, error) {
|
||||||
return s.getSubreddits(ctx, "subreddits/mine/subscriber", opts)
|
return s.getSubreddits(ctx, "subreddits/mine/subscriber", opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Approved returns the list of subreddits you are an approved user in.
|
// Approved returns the list of subreddits you are an approved user in.
|
||||||
func (s *SubredditService) Approved(ctx context.Context, opts *ListOptions) (*Subreddits, *Response, error) {
|
func (s *SubredditService) Approved(ctx context.Context, opts *ListSubredditOptions) (*Subreddits, *Response, error) {
|
||||||
return s.getSubreddits(ctx, "subreddits/mine/contributor", opts)
|
return s.getSubreddits(ctx, "subreddits/mine/contributor", opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Moderated returns the list of subreddits you are a moderator of.
|
// Moderated returns the list of subreddits you are a moderator of.
|
||||||
func (s *SubredditService) Moderated(ctx context.Context, opts *ListOptions) (*Subreddits, *Response, error) {
|
func (s *SubredditService) Moderated(ctx context.Context, opts *ListSubredditOptions) (*Subreddits, *Response, error) {
|
||||||
return s.getSubreddits(ctx, "subreddits/mine/moderator", opts)
|
return s.getSubreddits(ctx, "subreddits/mine/moderator", opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,11 +213,21 @@ func (s *SubredditService) UnsubscribeByID(ctx context.Context, ids ...string) (
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search searches for subreddits.
|
// Search searches for subreddits.
|
||||||
func (s *SubredditService) Search(ctx context.Context, query string, opts ...SearchOptionSetter) (*Subreddits, *Response, error) {
|
func (s *SubredditService) Search(ctx context.Context, query string, opts *ListSubredditOptions) (*Subreddits, *Response, error) {
|
||||||
opts = append(opts, setQuery(query))
|
path := "subreddits/search"
|
||||||
form := newSearchOptions(opts...)
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
type params struct {
|
||||||
|
Query string `url:"q"`
|
||||||
|
}
|
||||||
|
path, err = addOptions(path, params{query})
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
path := addQuery("subreddits/search", form)
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
|
@ -251,21 +263,27 @@ func (s *SubredditService) SearchNames(ctx context.Context, query string) ([]str
|
||||||
// SearchPosts searches for posts in the specified subreddit.
|
// SearchPosts searches for posts in the specified subreddit.
|
||||||
// To search through multiple, separate the names with a plus (+), e.g. "golang+test".
|
// To search through multiple, separate the names with a plus (+), e.g. "golang+test".
|
||||||
// If no subreddit is provided, the search is run against r/all.
|
// If no subreddit is provided, the search is run against r/all.
|
||||||
func (s *SubredditService) SearchPosts(ctx context.Context, query string, subreddit string, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *SubredditService) SearchPosts(ctx context.Context, query string, subreddit string, opts *ListPostSearchOptions) (*Posts, *Response, error) {
|
||||||
if subreddit == "" {
|
if subreddit == "" {
|
||||||
subreddit = "all"
|
subreddit = "all"
|
||||||
}
|
}
|
||||||
|
|
||||||
notAll := !strings.EqualFold(subreddit, "all")
|
path := fmt.Sprintf("r/%s/search", subreddit)
|
||||||
if notAll {
|
path, err := addOptions(path, opts)
|
||||||
opts = append(opts, setRestrict)
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
opts = append(opts, setQuery(query))
|
type params struct {
|
||||||
form := newSearchOptions(opts...)
|
Query string `url:"q"`
|
||||||
|
RestrictSubreddits bool `url:"restrict_sr,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
path := fmt.Sprintf("r/%s/search", subreddit)
|
notAll := !strings.EqualFold(subreddit, "all")
|
||||||
path = addQuery(path, form)
|
path, err = addOptions(path, params{query, notAll})
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -281,7 +299,7 @@ func (s *SubredditService) SearchPosts(ctx context.Context, query string, subred
|
||||||
return root.getPosts(), resp, nil
|
return root.getPosts(), resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SubredditService) getSubreddits(ctx context.Context, path string, opts *ListOptions) (*Subreddits, *Response, error) {
|
func (s *SubredditService) getSubreddits(ctx context.Context, path string, opts *ListSubredditOptions) (*Subreddits, *Response, error) {
|
||||||
path, err := addOptions(path, opts)
|
path, err := addOptions(path, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
|
|
|
@ -219,7 +219,7 @@ var expectedRandomSubreddit = &Subreddit{
|
||||||
Subscribers: 52357,
|
Subscribers: 52357,
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubredditService_Hot(t *testing.T) {
|
func TestSubredditService_HotPosts(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
|
||||||
|
@ -231,12 +231,12 @@ func TestSubredditService_Hot(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.Subreddit.HotPosts(ctx, "test")
|
posts, _, err := client.Subreddit.HotPosts(ctx, "test", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedPosts, posts)
|
assert.Equal(t, expectedPosts, posts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubredditService_New(t *testing.T) {
|
func TestSubredditService_NewPosts(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
|
||||||
|
@ -248,12 +248,12 @@ func TestSubredditService_New(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.Subreddit.NewPosts(ctx, "test")
|
posts, _, err := client.Subreddit.NewPosts(ctx, "test", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedPosts, posts)
|
assert.Equal(t, expectedPosts, posts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubredditService_Rising(t *testing.T) {
|
func TestSubredditService_RisingPosts(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
|
||||||
|
@ -265,12 +265,12 @@ func TestSubredditService_Rising(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.Subreddit.RisingPosts(ctx, "test")
|
posts, _, err := client.Subreddit.RisingPosts(ctx, "test", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedPosts, posts)
|
assert.Equal(t, expectedPosts, posts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubredditService_Controversial(t *testing.T) {
|
func TestSubredditService_ControversialPosts(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
|
||||||
|
@ -282,12 +282,12 @@ func TestSubredditService_Controversial(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.Subreddit.ControversialPosts(ctx, "test")
|
posts, _, err := client.Subreddit.ControversialPosts(ctx, "test", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedPosts, posts)
|
assert.Equal(t, expectedPosts, posts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubredditService_Top(t *testing.T) {
|
func TestSubredditService_TopPosts(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
|
||||||
|
@ -299,7 +299,7 @@ func TestSubredditService_Top(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.Subreddit.TopPosts(ctx, "test")
|
posts, _, err := client.Subreddit.TopPosts(ctx, "test", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedPosts, posts)
|
assert.Equal(t, expectedPosts, posts)
|
||||||
}
|
}
|
||||||
|
@ -324,7 +324,7 @@ func TestSubredditService_Get(t *testing.T) {
|
||||||
assert.Equal(t, expectedSubreddit, subreddit)
|
assert.Equal(t, expectedSubreddit, subreddit)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubredditService_GetPopular(t *testing.T) {
|
func TestSubredditService_Popular(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
|
||||||
|
@ -341,7 +341,7 @@ func TestSubredditService_GetPopular(t *testing.T) {
|
||||||
assert.Equal(t, expectedSubreddits, subreddits)
|
assert.Equal(t, expectedSubreddits, subreddits)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubredditService_GetNew(t *testing.T) {
|
func TestSubredditService_New(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
|
||||||
|
@ -358,7 +358,7 @@ func TestSubredditService_GetNew(t *testing.T) {
|
||||||
assert.Equal(t, expectedSubreddits, subreddits)
|
assert.Equal(t, expectedSubreddits, subreddits)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubredditService_GetGold(t *testing.T) {
|
func TestSubredditService_Gold(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
|
||||||
|
@ -375,7 +375,7 @@ func TestSubredditService_GetGold(t *testing.T) {
|
||||||
assert.Equal(t, expectedSubreddits, subreddits)
|
assert.Equal(t, expectedSubreddits, subreddits)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubredditService_GetDefault(t *testing.T) {
|
func TestSubredditService_Default(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
|
||||||
|
@ -392,7 +392,7 @@ func TestSubredditService_GetDefault(t *testing.T) {
|
||||||
assert.Equal(t, expectedSubreddits, subreddits)
|
assert.Equal(t, expectedSubreddits, subreddits)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubredditService_GetSubscribed(t *testing.T) {
|
func TestSubredditService_Subscribed(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
|
||||||
|
@ -409,7 +409,7 @@ func TestSubredditService_GetSubscribed(t *testing.T) {
|
||||||
assert.Equal(t, expectedSubreddits, subreddits)
|
assert.Equal(t, expectedSubreddits, subreddits)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubredditService_GetApproved(t *testing.T) {
|
func TestSubredditService_Approved(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
|
||||||
|
@ -426,7 +426,7 @@ func TestSubredditService_GetApproved(t *testing.T) {
|
||||||
assert.Equal(t, expectedSubreddits, subreddits)
|
assert.Equal(t, expectedSubreddits, subreddits)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubredditService_GetModerated(t *testing.T) {
|
func TestSubredditService_Moderated(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
|
||||||
|
@ -579,6 +579,8 @@ func TestSubredditService_Search(t *testing.T) {
|
||||||
|
|
||||||
form := url.Values{}
|
form := url.Values{}
|
||||||
form.Set("q", "golang")
|
form.Set("q", "golang")
|
||||||
|
form.Set("limit", "10")
|
||||||
|
form.Set("sort", "activity")
|
||||||
|
|
||||||
err := r.ParseForm()
|
err := r.ParseForm()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
@ -587,7 +589,12 @@ func TestSubredditService_Search(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
subreddits, _, err := client.Subreddit.Search(ctx, "golang")
|
subreddits, _, err := client.Subreddit.Search(ctx, "golang", &ListSubredditOptions{
|
||||||
|
ListOptions: ListOptions{
|
||||||
|
Limit: 10,
|
||||||
|
},
|
||||||
|
Sort: "activity",
|
||||||
|
})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedSubreddits, subreddits)
|
assert.Equal(t, expectedSubreddits, subreddits)
|
||||||
}
|
}
|
||||||
|
@ -629,7 +636,6 @@ func TestSubredditService_SearchPosts(t *testing.T) {
|
||||||
|
|
||||||
form := url.Values{}
|
form := url.Values{}
|
||||||
form.Set("q", "test")
|
form.Set("q", "test")
|
||||||
form.Set("after", "t3_testpost")
|
|
||||||
|
|
||||||
err := r.ParseForm()
|
err := r.ParseForm()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
@ -638,7 +644,7 @@ func TestSubredditService_SearchPosts(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.Subreddit.SearchPosts(ctx, "test", "", SetAfter("t3_testpost"))
|
posts, _, err := client.Subreddit.SearchPosts(ctx, "test", "", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedSearchPosts, posts)
|
assert.Equal(t, expectedSearchPosts, posts)
|
||||||
}
|
}
|
||||||
|
@ -656,7 +662,6 @@ func TestSubredditService_SearchPosts_InSubreddit(t *testing.T) {
|
||||||
form := url.Values{}
|
form := url.Values{}
|
||||||
form.Set("q", "test")
|
form.Set("q", "test")
|
||||||
form.Set("restrict_sr", "true")
|
form.Set("restrict_sr", "true")
|
||||||
form.Set("after", "t3_testpost")
|
|
||||||
|
|
||||||
err := r.ParseForm()
|
err := r.ParseForm()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
@ -665,7 +670,7 @@ func TestSubredditService_SearchPosts_InSubreddit(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.Subreddit.SearchPosts(ctx, "test", "test", SetAfter("t3_testpost"))
|
posts, _, err := client.Subreddit.SearchPosts(ctx, "test", "test", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedSearchPosts, posts)
|
assert.Equal(t, expectedSearchPosts, posts)
|
||||||
}
|
}
|
||||||
|
@ -683,7 +688,6 @@ func TestSubredditService_SearchPosts_InSubreddits(t *testing.T) {
|
||||||
form := url.Values{}
|
form := url.Values{}
|
||||||
form.Set("q", "test")
|
form.Set("q", "test")
|
||||||
form.Set("restrict_sr", "true")
|
form.Set("restrict_sr", "true")
|
||||||
form.Set("after", "t3_testpost")
|
|
||||||
|
|
||||||
err := r.ParseForm()
|
err := r.ParseForm()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
@ -692,7 +696,7 @@ func TestSubredditService_SearchPosts_InSubreddits(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.Subreddit.SearchPosts(ctx, "test", "test+golang+nba", SetAfter("t3_testpost"))
|
posts, _, err := client.Subreddit.SearchPosts(ctx, "test", "test+golang+nba", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedSearchPosts, posts)
|
assert.Equal(t, expectedSearchPosts, posts)
|
||||||
}
|
}
|
||||||
|
|
132
user.go
132
user.go
|
@ -154,16 +154,17 @@ func (s *UserService) UsernameAvailable(ctx context.Context, username string) (b
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overview returns a list of your posts and comments.
|
// Overview returns a list of your posts and comments.
|
||||||
func (s *UserService) Overview(ctx context.Context, opts ...SearchOptionSetter) (*Posts, *Comments, *Response, error) {
|
func (s *UserService) Overview(ctx context.Context, opts *ListUserOverviewOptions) (*Posts, *Comments, *Response, error) {
|
||||||
return s.OverviewOf(ctx, s.client.Username, opts...)
|
return s.OverviewOf(ctx, s.client.Username, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OverviewOf returns a list of the user's posts and comments.
|
// OverviewOf returns a list of the user's posts and comments.
|
||||||
func (s *UserService) OverviewOf(ctx context.Context, username string, opts ...SearchOptionSetter) (*Posts, *Comments, *Response, error) {
|
func (s *UserService) OverviewOf(ctx context.Context, username string, opts *ListUserOverviewOptions) (*Posts, *Comments, *Response, error) {
|
||||||
form := newSearchOptions(opts...)
|
|
||||||
|
|
||||||
path := fmt.Sprintf("user/%s/overview", username)
|
path := fmt.Sprintf("user/%s/overview", username)
|
||||||
path = addQuery(path, form)
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -180,16 +181,17 @@ func (s *UserService) OverviewOf(ctx context.Context, username string, opts ...S
|
||||||
}
|
}
|
||||||
|
|
||||||
// Posts returns a list of your posts.
|
// Posts returns a list of your posts.
|
||||||
func (s *UserService) Posts(ctx context.Context, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *UserService) Posts(ctx context.Context, opts *ListUserOverviewOptions) (*Posts, *Response, error) {
|
||||||
return s.PostsOf(ctx, s.client.Username, opts...)
|
return s.PostsOf(ctx, s.client.Username, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PostsOf returns a list of the user's posts.
|
// PostsOf returns a list of the user's posts.
|
||||||
func (s *UserService) PostsOf(ctx context.Context, username string, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *UserService) PostsOf(ctx context.Context, username string, opts *ListUserOverviewOptions) (*Posts, *Response, error) {
|
||||||
form := newSearchOptions(opts...)
|
|
||||||
|
|
||||||
path := fmt.Sprintf("user/%s/submitted", username)
|
path := fmt.Sprintf("user/%s/submitted", username)
|
||||||
path = addQuery(path, form)
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -206,16 +208,17 @@ func (s *UserService) PostsOf(ctx context.Context, username string, opts ...Sear
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comments returns a list of your comments.
|
// Comments returns a list of your comments.
|
||||||
func (s *UserService) Comments(ctx context.Context, opts ...SearchOptionSetter) (*Comments, *Response, error) {
|
func (s *UserService) Comments(ctx context.Context, opts *ListUserOverviewOptions) (*Comments, *Response, error) {
|
||||||
return s.CommentsOf(ctx, s.client.Username, opts...)
|
return s.CommentsOf(ctx, s.client.Username, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CommentsOf returns a list of the user's comments.
|
// CommentsOf returns a list of the user's comments.
|
||||||
func (s *UserService) CommentsOf(ctx context.Context, username string, opts ...SearchOptionSetter) (*Comments, *Response, error) {
|
func (s *UserService) CommentsOf(ctx context.Context, username string, opts *ListUserOverviewOptions) (*Comments, *Response, error) {
|
||||||
form := newSearchOptions(opts...)
|
|
||||||
|
|
||||||
path := fmt.Sprintf("user/%s/comments", username)
|
path := fmt.Sprintf("user/%s/comments", username)
|
||||||
path = addQuery(path, form)
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -232,11 +235,12 @@ func (s *UserService) CommentsOf(ctx context.Context, username string, opts ...S
|
||||||
}
|
}
|
||||||
|
|
||||||
// Saved returns a list of the user's saved posts and comments.
|
// Saved returns a list of the user's saved posts and comments.
|
||||||
func (s *UserService) Saved(ctx context.Context, opts ...SearchOptionSetter) (*Posts, *Comments, *Response, error) {
|
func (s *UserService) Saved(ctx context.Context, opts *ListUserOverviewOptions) (*Posts, *Comments, *Response, error) {
|
||||||
form := newSearchOptions(opts...)
|
|
||||||
|
|
||||||
path := fmt.Sprintf("user/%s/saved", s.client.Username)
|
path := fmt.Sprintf("user/%s/saved", s.client.Username)
|
||||||
path = addQuery(path, form)
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -253,17 +257,18 @@ func (s *UserService) Saved(ctx context.Context, opts ...SearchOptionSetter) (*P
|
||||||
}
|
}
|
||||||
|
|
||||||
// Upvoted returns a list of your upvoted posts.
|
// Upvoted returns a list of your upvoted posts.
|
||||||
func (s *UserService) Upvoted(ctx context.Context, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *UserService) Upvoted(ctx context.Context, opts *ListUserOverviewOptions) (*Posts, *Response, error) {
|
||||||
return s.UpvotedOf(ctx, s.client.Username, opts...)
|
return s.UpvotedOf(ctx, s.client.Username, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpvotedOf returns a list of the user's upvoted posts.
|
// UpvotedOf returns a list of the user's upvoted posts.
|
||||||
// The user's votes must be public for this to work.
|
// The user's votes must be public for this to work (unless the user is you).
|
||||||
func (s *UserService) UpvotedOf(ctx context.Context, username string, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *UserService) UpvotedOf(ctx context.Context, username string, opts *ListUserOverviewOptions) (*Posts, *Response, error) {
|
||||||
form := newSearchOptions(opts...)
|
|
||||||
|
|
||||||
path := fmt.Sprintf("user/%s/upvoted", username)
|
path := fmt.Sprintf("user/%s/upvoted", username)
|
||||||
path = addQuery(path, form)
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -280,17 +285,18 @@ func (s *UserService) UpvotedOf(ctx context.Context, username string, opts ...Se
|
||||||
}
|
}
|
||||||
|
|
||||||
// Downvoted returns a list of your downvoted posts.
|
// Downvoted returns a list of your downvoted posts.
|
||||||
func (s *UserService) Downvoted(ctx context.Context, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *UserService) Downvoted(ctx context.Context, opts *ListUserOverviewOptions) (*Posts, *Response, error) {
|
||||||
return s.DownvotedOf(ctx, s.client.Username, opts...)
|
return s.DownvotedOf(ctx, s.client.Username, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DownvotedOf returns a list of the user's downvoted posts.
|
// DownvotedOf returns a list of the user's downvoted posts.
|
||||||
// The user's votes must be public for this to work.
|
// The user's votes must be public for this to work (unless the user is you).
|
||||||
func (s *UserService) DownvotedOf(ctx context.Context, username string, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *UserService) DownvotedOf(ctx context.Context, username string, opts *ListUserOverviewOptions) (*Posts, *Response, error) {
|
||||||
form := newSearchOptions(opts...)
|
|
||||||
|
|
||||||
path := fmt.Sprintf("user/%s/downvoted", username)
|
path := fmt.Sprintf("user/%s/downvoted", username)
|
||||||
path = addQuery(path, form)
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -307,11 +313,12 @@ func (s *UserService) DownvotedOf(ctx context.Context, username string, opts ...
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hidden returns a list of the user's hidden posts.
|
// Hidden returns a list of the user's hidden posts.
|
||||||
func (s *UserService) Hidden(ctx context.Context, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *UserService) Hidden(ctx context.Context, opts *ListUserOverviewOptions) (*Posts, *Response, error) {
|
||||||
form := newSearchOptions(opts...)
|
|
||||||
|
|
||||||
path := fmt.Sprintf("user/%s/hidden", s.client.Username)
|
path := fmt.Sprintf("user/%s/hidden", s.client.Username)
|
||||||
path = addQuery(path, form)
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -328,11 +335,12 @@ func (s *UserService) Hidden(ctx context.Context, opts ...SearchOptionSetter) (*
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gilded returns a list of the user's gilded posts.
|
// Gilded returns a list of the user's gilded posts.
|
||||||
func (s *UserService) Gilded(ctx context.Context, opts ...SearchOptionSetter) (*Posts, *Response, error) {
|
func (s *UserService) Gilded(ctx context.Context, opts *ListUserOverviewOptions) (*Posts, *Response, error) {
|
||||||
form := newSearchOptions(opts...)
|
|
||||||
|
|
||||||
path := fmt.Sprintf("user/%s/gilded", s.client.Username)
|
path := fmt.Sprintf("user/%s/gilded", s.client.Username)
|
||||||
path = addQuery(path, form)
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -517,9 +525,12 @@ func (s *UserService) TrophiesOf(ctx context.Context, username string) ([]Trophy
|
||||||
}
|
}
|
||||||
|
|
||||||
// Popular gets the user subreddits with the most activity.
|
// Popular gets the user subreddits with the most activity.
|
||||||
func (s *UserService) Popular(ctx context.Context, opts ...SearchOptionSetter) (*Subreddits, *Response, error) {
|
func (s *UserService) Popular(ctx context.Context, opts *ListOptions) (*Subreddits, *Response, error) {
|
||||||
form := newSearchOptions(opts...)
|
path := "users/popular"
|
||||||
path := addQuery("users/popular", form)
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -536,9 +547,12 @@ func (s *UserService) Popular(ctx context.Context, opts ...SearchOptionSetter) (
|
||||||
}
|
}
|
||||||
|
|
||||||
// New gets the most recently created user subreddits.
|
// New gets the most recently created user subreddits.
|
||||||
func (s *UserService) New(ctx context.Context, opts ...SearchOptionSetter) (*Subreddits, *Response, error) {
|
func (s *UserService) New(ctx context.Context, opts *ListUserOverviewOptions) (*Subreddits, *Response, error) {
|
||||||
form := newSearchOptions(opts...)
|
path := "users/new"
|
||||||
path := addQuery("users/new", form)
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -555,11 +569,21 @@ func (s *UserService) New(ctx context.Context, opts ...SearchOptionSetter) (*Sub
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search searches for users.
|
// Search searches for users.
|
||||||
func (s *UserService) Search(ctx context.Context, query string, opts ...SearchOptionSetter) (*Users, *Response, error) {
|
// todo: maybe include the sort option? (relevance, activity)
|
||||||
opts = append(opts, setQuery(query))
|
func (s *UserService) Search(ctx context.Context, query string, opts *ListOptions) (*Users, *Response, error) {
|
||||||
form := newSearchOptions(opts...)
|
path := "users/search"
|
||||||
|
path, err := addOptions(path, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
path := addQuery("users/search", form)
|
type params struct {
|
||||||
|
Query string `url:"q"`
|
||||||
|
}
|
||||||
|
path, err = addOptions(path, params{query})
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
75
user_test.go
75
user_test.go
|
@ -263,7 +263,7 @@ func TestUserService_Overview(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, comments, _, err := client.User.Overview(ctx)
|
posts, comments, _, err := client.User.Overview(ctx, nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, posts.Posts, 1)
|
assert.Len(t, posts.Posts, 1)
|
||||||
|
@ -289,7 +289,7 @@ func TestUserService_OverviewOf(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, comments, _, err := client.User.OverviewOf(ctx, "user2")
|
posts, comments, _, err := client.User.OverviewOf(ctx, "user2", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, posts.Posts, 1)
|
assert.Len(t, posts.Posts, 1)
|
||||||
|
@ -325,7 +325,13 @@ func TestUserService_Overview_Options(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
_, _, _, err = client.User.Overview(ctx, SetLimit(5), SetAfter("t3_after"), SortByTop)
|
_, _, _, err = client.User.Overview(ctx, &ListUserOverviewOptions{
|
||||||
|
ListOptions: ListOptions{
|
||||||
|
Limit: 5,
|
||||||
|
After: "t3_after",
|
||||||
|
},
|
||||||
|
Sort: "top",
|
||||||
|
})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,7 +347,7 @@ func TestUserService_Posts(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.User.Posts(ctx)
|
posts, _, err := client.User.Posts(ctx, nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, posts.Posts, 1)
|
assert.Len(t, posts.Posts, 1)
|
||||||
|
@ -362,7 +368,7 @@ func TestUserService_PostsOf(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.User.PostsOf(ctx, "user2")
|
posts, _, err := client.User.PostsOf(ctx, "user2", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, posts.Posts, 1)
|
assert.Len(t, posts.Posts, 1)
|
||||||
|
@ -392,7 +398,12 @@ func TestUserService_Posts_Options(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
_, _, err = client.User.Posts(ctx, SetLimit(10), SortByNew)
|
_, _, err = client.User.Posts(ctx, &ListUserOverviewOptions{
|
||||||
|
ListOptions: ListOptions{
|
||||||
|
Limit: 10,
|
||||||
|
},
|
||||||
|
Sort: "new",
|
||||||
|
})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -408,7 +419,7 @@ func TestUserService_Comments(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
comments, _, err := client.User.Comments(ctx)
|
comments, _, err := client.User.Comments(ctx, nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, comments.Comments, 1)
|
assert.Len(t, comments.Comments, 1)
|
||||||
|
@ -429,7 +440,7 @@ func TestUserService_CommentsOf(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
comments, _, err := client.User.CommentsOf(ctx, "user2")
|
comments, _, err := client.User.CommentsOf(ctx, "user2", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, comments.Comments, 1)
|
assert.Len(t, comments.Comments, 1)
|
||||||
|
@ -459,7 +470,12 @@ func TestUserService_Comments_Options(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
_, _, err = client.User.Comments(ctx, SetLimit(100), SetBefore("t1_before"))
|
_, _, err = client.User.Comments(ctx, &ListUserOverviewOptions{
|
||||||
|
ListOptions: ListOptions{
|
||||||
|
Limit: 100,
|
||||||
|
Before: "t1_before",
|
||||||
|
},
|
||||||
|
})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -476,7 +492,7 @@ func TestUserService_Saved(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, comments, _, err := client.User.Saved(ctx)
|
posts, comments, _, err := client.User.Saved(ctx, nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, posts.Posts, 1)
|
assert.Len(t, posts.Posts, 1)
|
||||||
|
@ -512,7 +528,12 @@ func TestUserService_Saved_Options(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
_, _, _, err = client.User.Saved(ctx, SetLimit(50), SortByControversial)
|
_, _, _, err = client.User.Saved(ctx, &ListUserOverviewOptions{
|
||||||
|
ListOptions: ListOptions{
|
||||||
|
Limit: 50,
|
||||||
|
},
|
||||||
|
Sort: "controversial",
|
||||||
|
})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
func TestUserService_Upvoted(t *testing.T) {
|
func TestUserService_Upvoted(t *testing.T) {
|
||||||
|
@ -528,7 +549,7 @@ func TestUserService_Upvoted(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.User.Upvoted(ctx)
|
posts, _, err := client.User.Upvoted(ctx, nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, posts.Posts, 1)
|
assert.Len(t, posts.Posts, 1)
|
||||||
|
@ -559,7 +580,12 @@ func TestUserService_Upvoted_Options(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
_, _, err = client.User.Upvoted(ctx, SetLimit(30), SetAfter("t3_after"))
|
_, _, err = client.User.Upvoted(ctx, &ListUserOverviewOptions{
|
||||||
|
ListOptions: ListOptions{
|
||||||
|
Limit: 30,
|
||||||
|
After: "t3_after",
|
||||||
|
},
|
||||||
|
})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -576,7 +602,7 @@ func TestUserService_UpvotedOf(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.User.UpvotedOf(ctx, "user2")
|
posts, _, err := client.User.UpvotedOf(ctx, "user2", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, posts.Posts, 1)
|
assert.Len(t, posts.Posts, 1)
|
||||||
|
@ -598,7 +624,7 @@ func TestUserService_Downvoted(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.User.Downvoted(ctx)
|
posts, _, err := client.User.Downvoted(ctx, nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, posts.Posts, 1)
|
assert.Len(t, posts.Posts, 1)
|
||||||
|
@ -629,7 +655,12 @@ func TestUserService_Downvoted_Options(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
_, _, err = client.User.Downvoted(ctx, SetLimit(20), SetBefore("t3_before"))
|
_, _, err = client.User.Downvoted(ctx, &ListUserOverviewOptions{
|
||||||
|
ListOptions: ListOptions{
|
||||||
|
Limit: 20,
|
||||||
|
Before: "t3_before",
|
||||||
|
},
|
||||||
|
})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -646,7 +677,7 @@ func TestUserService_DownvotedOf(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.User.DownvotedOf(ctx, "user2")
|
posts, _, err := client.User.DownvotedOf(ctx, "user2", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, posts.Posts, 1)
|
assert.Len(t, posts.Posts, 1)
|
||||||
|
@ -668,7 +699,7 @@ func TestUserService_Hidden(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.User.Hidden(ctx)
|
posts, _, err := client.User.Hidden(ctx, nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, posts.Posts, 1)
|
assert.Len(t, posts.Posts, 1)
|
||||||
|
@ -690,7 +721,7 @@ func TestUserService_Gilded(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
posts, _, err := client.User.Gilded(ctx)
|
posts, _, err := client.User.Gilded(ctx, nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, posts.Posts, 1)
|
assert.Len(t, posts.Posts, 1)
|
||||||
|
@ -899,7 +930,7 @@ func TestUserService_Popular(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
userSubreddits, _, err := client.User.Popular(ctx)
|
userSubreddits, _, err := client.User.Popular(ctx, nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedUserSubreddits, userSubreddits)
|
assert.Equal(t, expectedUserSubreddits, userSubreddits)
|
||||||
}
|
}
|
||||||
|
@ -916,7 +947,7 @@ func TestUserService_New(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
userSubreddits, _, err := client.User.New(ctx)
|
userSubreddits, _, err := client.User.New(ctx, nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedUserSubreddits, userSubreddits)
|
assert.Equal(t, expectedUserSubreddits, userSubreddits)
|
||||||
}
|
}
|
||||||
|
@ -941,7 +972,7 @@ func TestUserService_Search(t *testing.T) {
|
||||||
fmt.Fprint(w, blob)
|
fmt.Fprint(w, blob)
|
||||||
})
|
})
|
||||||
|
|
||||||
users, _, err := client.User.Search(ctx, "test")
|
users, _, err := client.User.Search(ctx, "test", nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedSearchUsers, users)
|
assert.Equal(t, expectedSearchUsers, users)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue