Get new and popular users
Signed-off-by: Vartan Benohanian <vartanbeno@gmail.com>
This commit is contained in:
parent
dad9def22c
commit
94f27f9e04
3 changed files with 310 additions and 0 deletions
207
testdata/user/user-subreddits.json
vendored
Normal file
207
testdata/user/user-subreddits.json
vendored
Normal file
|
@ -0,0 +1,207 @@
|
||||||
|
{
|
||||||
|
"kind": "Listing",
|
||||||
|
"data": {
|
||||||
|
"modhash": null,
|
||||||
|
"dist": 2,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"kind": "t5",
|
||||||
|
"data": {
|
||||||
|
"user_flair_background_color": null,
|
||||||
|
"submit_text_html": null,
|
||||||
|
"restrict_posting": true,
|
||||||
|
"user_flair_enabled_in_sr": false,
|
||||||
|
"user_is_banned": false,
|
||||||
|
"free_form_reports": true,
|
||||||
|
"wiki_enabled": null,
|
||||||
|
"user_is_muted": false,
|
||||||
|
"user_can_flair_in_sr": null,
|
||||||
|
"display_name": "u_nickofnight",
|
||||||
|
"header_img": null,
|
||||||
|
"title": "nickofnight",
|
||||||
|
"allow_galleries": true,
|
||||||
|
"icon_size": [256, 256],
|
||||||
|
"primary_color": "",
|
||||||
|
"active_user_count": null,
|
||||||
|
"icon_img": "https://styles.redditmedia.com/t5_3kefx/styles/profileIcon_w1vytyimts541.png?width=256&height=256&crop=256:256,smart&s=e722798c6253d3ae3990bf42c3ae844d7c2a924b",
|
||||||
|
"display_name_prefixed": "u/nickofnight",
|
||||||
|
"accounts_active": null,
|
||||||
|
"public_traffic": false,
|
||||||
|
"subscribers": 0,
|
||||||
|
"user_flair_richtext": [],
|
||||||
|
"videostream_links_count": 0,
|
||||||
|
"name": "t5_3kefx",
|
||||||
|
"quarantine": false,
|
||||||
|
"hide_ads": false,
|
||||||
|
"emojis_enabled": false,
|
||||||
|
"advertiser_category": "",
|
||||||
|
"public_description": "Stories written for Writing Prompts, NoSleep, and originals. Current series: The Carnival of Night ",
|
||||||
|
"comment_score_hide_mins": 0,
|
||||||
|
"user_has_favorited": false,
|
||||||
|
"user_flair_template_id": null,
|
||||||
|
"community_icon": "",
|
||||||
|
"banner_background_image": "",
|
||||||
|
"original_content_tag_enabled": false,
|
||||||
|
"submit_text": "",
|
||||||
|
"description_html": "<!-- SC_OFF --><div class=\"md\"><p>Stories from Writing Prompts, and a carefully curated selection of other works.</p>\n</div><!-- SC_ON -->",
|
||||||
|
"spoilers_enabled": true,
|
||||||
|
"header_title": null,
|
||||||
|
"header_size": null,
|
||||||
|
"user_flair_position": "right",
|
||||||
|
"is_default_icon": false,
|
||||||
|
"all_original_content": false,
|
||||||
|
"has_menu_widget": false,
|
||||||
|
"is_enrolled_in_new_modmail": null,
|
||||||
|
"key_color": "#222222",
|
||||||
|
"can_assign_user_flair": false,
|
||||||
|
"created": 1494549436.0,
|
||||||
|
"wls": null,
|
||||||
|
"show_media_preview": true,
|
||||||
|
"submission_type": "any",
|
||||||
|
"user_is_subscriber": false,
|
||||||
|
"disable_contributor_requests": false,
|
||||||
|
"allow_videogifs": true,
|
||||||
|
"user_flair_type": "text",
|
||||||
|
"allow_polls": true,
|
||||||
|
"collapse_deleted_comments": false,
|
||||||
|
"emojis_custom_size": null,
|
||||||
|
"public_description_html": "<!-- SC_OFF --><div class=\"md\"><p>Stories written for Writing Prompts, NoSleep, and originals. Current series: The Carnival of Night </p>\n</div><!-- SC_ON -->",
|
||||||
|
"allow_videos": true,
|
||||||
|
"is_crosspostable_subreddit": false,
|
||||||
|
"suggested_comment_sort": null,
|
||||||
|
"can_assign_link_flair": false,
|
||||||
|
"accounts_active_is_fuzzed": false,
|
||||||
|
"submit_text_label": null,
|
||||||
|
"link_flair_position": "",
|
||||||
|
"user_sr_flair_enabled": null,
|
||||||
|
"is_default_banner": false,
|
||||||
|
"allow_discovery": true,
|
||||||
|
"user_sr_theme_enabled": true,
|
||||||
|
"link_flair_enabled": false,
|
||||||
|
"subreddit_type": "user",
|
||||||
|
"notification_level": null,
|
||||||
|
"banner_img": "https://b.thumbs.redditmedia.com/9KgnD8_adeV_jCLhObwY-rhHrESHgTP9_JQLmIH_GWQ.png",
|
||||||
|
"user_flair_text": null,
|
||||||
|
"banner_background_color": "",
|
||||||
|
"show_media": true,
|
||||||
|
"id": "3kefx",
|
||||||
|
"user_is_contributor": false,
|
||||||
|
"over18": false,
|
||||||
|
"description": "Stories from Writing Prompts, and a carefully curated selection of other works.",
|
||||||
|
"submit_link_label": null,
|
||||||
|
"user_flair_text_color": null,
|
||||||
|
"restrict_commenting": false,
|
||||||
|
"user_flair_css_class": null,
|
||||||
|
"allow_images": true,
|
||||||
|
"lang": "en",
|
||||||
|
"whitelist_status": null,
|
||||||
|
"url": "/user/nickofnight/",
|
||||||
|
"created_utc": 1494520636.0,
|
||||||
|
"banner_size": [900, 270],
|
||||||
|
"mobile_banner_image": "",
|
||||||
|
"user_is_moderator": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "t5",
|
||||||
|
"data": {
|
||||||
|
"user_flair_background_color": null,
|
||||||
|
"submit_text_html": null,
|
||||||
|
"restrict_posting": true,
|
||||||
|
"user_flair_enabled_in_sr": false,
|
||||||
|
"user_is_banned": false,
|
||||||
|
"free_form_reports": true,
|
||||||
|
"wiki_enabled": null,
|
||||||
|
"user_is_muted": false,
|
||||||
|
"user_can_flair_in_sr": null,
|
||||||
|
"display_name": "u_shittymorph",
|
||||||
|
"header_img": null,
|
||||||
|
"title": "shittymorph",
|
||||||
|
"allow_galleries": true,
|
||||||
|
"icon_size": [256, 256],
|
||||||
|
"primary_color": "",
|
||||||
|
"active_user_count": null,
|
||||||
|
"icon_img": "https://styles.redditmedia.com/t5_3knn1/styles/profileIcon_b51xzp4vbvs41.jpg?width=256&height=256&crop=256:256,smart&s=6535d6f05d037d43d72217899d3f81aba4fb442d",
|
||||||
|
"display_name_prefixed": "u/shittymorph",
|
||||||
|
"accounts_active": null,
|
||||||
|
"public_traffic": false,
|
||||||
|
"subscribers": 0,
|
||||||
|
"user_flair_richtext": [],
|
||||||
|
"videostream_links_count": 0,
|
||||||
|
"name": "t5_3knn1",
|
||||||
|
"quarantine": false,
|
||||||
|
"hide_ads": false,
|
||||||
|
"emojis_enabled": false,
|
||||||
|
"advertiser_category": "",
|
||||||
|
"public_description": "In nineteen ninety eight the undertaker threw mankind off hеll in a cell, and plummeted sixteen feet through an announcer's table.",
|
||||||
|
"comment_score_hide_mins": 0,
|
||||||
|
"user_has_favorited": false,
|
||||||
|
"user_flair_template_id": null,
|
||||||
|
"community_icon": "",
|
||||||
|
"banner_background_image": "",
|
||||||
|
"original_content_tag_enabled": false,
|
||||||
|
"submit_text": "",
|
||||||
|
"description_html": null,
|
||||||
|
"spoilers_enabled": true,
|
||||||
|
"header_title": "",
|
||||||
|
"header_size": null,
|
||||||
|
"user_flair_position": "right",
|
||||||
|
"is_default_icon": false,
|
||||||
|
"all_original_content": false,
|
||||||
|
"has_menu_widget": false,
|
||||||
|
"is_enrolled_in_new_modmail": null,
|
||||||
|
"key_color": "",
|
||||||
|
"can_assign_user_flair": false,
|
||||||
|
"created": 1495102555.0,
|
||||||
|
"wls": null,
|
||||||
|
"show_media_preview": true,
|
||||||
|
"submission_type": "any",
|
||||||
|
"user_is_subscriber": false,
|
||||||
|
"disable_contributor_requests": false,
|
||||||
|
"allow_videogifs": true,
|
||||||
|
"user_flair_type": "text",
|
||||||
|
"allow_polls": true,
|
||||||
|
"collapse_deleted_comments": true,
|
||||||
|
"emojis_custom_size": null,
|
||||||
|
"public_description_html": "<!-- SC_OFF --><div class=\"md\"><p>In nineteen ninety eight the undertaker threw mankind off hеll in a cell, and plummeted sixteen feet through an announcer&#39;s table.</p>\n</div><!-- SC_ON -->",
|
||||||
|
"allow_videos": true,
|
||||||
|
"is_crosspostable_subreddit": false,
|
||||||
|
"suggested_comment_sort": "qa",
|
||||||
|
"can_assign_link_flair": false,
|
||||||
|
"accounts_active_is_fuzzed": false,
|
||||||
|
"submit_text_label": "",
|
||||||
|
"link_flair_position": "",
|
||||||
|
"user_sr_flair_enabled": null,
|
||||||
|
"is_default_banner": false,
|
||||||
|
"allow_discovery": true,
|
||||||
|
"user_sr_theme_enabled": true,
|
||||||
|
"link_flair_enabled": false,
|
||||||
|
"subreddit_type": "user",
|
||||||
|
"notification_level": null,
|
||||||
|
"banner_img": "https://b.thumbs.redditmedia.com/VjGAJxyj4OL3Ghb1TzrGFtf1QT3D-r1kX72q7uSv8iA.png",
|
||||||
|
"user_flair_text": null,
|
||||||
|
"banner_background_color": "",
|
||||||
|
"show_media": true,
|
||||||
|
"id": "3knn1",
|
||||||
|
"user_is_contributor": false,
|
||||||
|
"over18": false,
|
||||||
|
"description": "",
|
||||||
|
"submit_link_label": "",
|
||||||
|
"user_flair_text_color": null,
|
||||||
|
"restrict_commenting": false,
|
||||||
|
"user_flair_css_class": null,
|
||||||
|
"allow_images": true,
|
||||||
|
"lang": "en",
|
||||||
|
"whitelist_status": null,
|
||||||
|
"url": "/user/shittymorph/",
|
||||||
|
"created_utc": 1495073755.0,
|
||||||
|
"banner_size": [1280, 384],
|
||||||
|
"mobile_banner_image": "",
|
||||||
|
"user_is_moderator": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"after": "t5_3knn1",
|
||||||
|
"before": null
|
||||||
|
}
|
||||||
|
}
|
38
user.go
38
user.go
|
@ -515,3 +515,41 @@ func (s *UserService) TrophiesOf(ctx context.Context, username string) ([]Trophy
|
||||||
|
|
||||||
return trophies, resp, nil
|
return trophies, resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Popular gets the user subreddits with the most activity.
|
||||||
|
func (s *UserService) Popular(ctx context.Context, opts ...SearchOptionSetter) (*Subreddits, *Response, error) {
|
||||||
|
form := newSearchOptions(opts...)
|
||||||
|
path := addQuery("users/popular", form)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
root := new(rootListing)
|
||||||
|
resp, err := s.client.Do(ctx, req, root)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return root.getSubreddits(), resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// New gets the most recently created user subreddits.
|
||||||
|
func (s *UserService) New(ctx context.Context, opts ...SearchOptionSetter) (*Subreddits, *Response, error) {
|
||||||
|
form := newSearchOptions(opts...)
|
||||||
|
path := addQuery("users/new", form)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
root := new(rootListing)
|
||||||
|
resp, err := s.client.Do(ctx, req, root)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return root.getSubreddits(), resp, nil
|
||||||
|
}
|
||||||
|
|
65
user_test.go
65
user_test.go
|
@ -129,6 +129,37 @@ var expectedTrophies = []Trophy{
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var expectedUserSubreddits = &Subreddits{
|
||||||
|
Subreddits: []*Subreddit{
|
||||||
|
{
|
||||||
|
ID: "3kefx",
|
||||||
|
FullID: "t5_3kefx",
|
||||||
|
Created: &Timestamp{time.Date(2017, 5, 11, 16, 37, 16, 0, time.UTC)},
|
||||||
|
|
||||||
|
URL: "/user/nickofnight/",
|
||||||
|
Name: "u_nickofnight",
|
||||||
|
NamePrefixed: "u/nickofnight",
|
||||||
|
Title: "nickofnight",
|
||||||
|
Description: "Stories written for Writing Prompts, NoSleep, and originals. Current series: The Carnival of Night ",
|
||||||
|
Type: "user",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ID: "3knn1",
|
||||||
|
FullID: "t5_3knn1",
|
||||||
|
Created: &Timestamp{time.Date(2017, 5, 18, 2, 15, 55, 0, time.UTC)},
|
||||||
|
|
||||||
|
URL: "/user/shittymorph/",
|
||||||
|
Name: "u_shittymorph",
|
||||||
|
NamePrefixed: "u/shittymorph",
|
||||||
|
Title: "shittymorph",
|
||||||
|
Description: "In nineteen ninety eight the undertaker threw mankind off hеll in a cell, and plummeted sixteen feet through an announcer's table.",
|
||||||
|
Type: "user",
|
||||||
|
SuggestedCommentSort: "qa",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
After: "t5_3knn1",
|
||||||
|
}
|
||||||
|
|
||||||
func TestUserService_Get(t *testing.T) {
|
func TestUserService_Get(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
@ -829,3 +860,37 @@ func TestUserService_TrophiesOf(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expectedTrophies, trophies)
|
assert.Equal(t, expectedTrophies, trophies)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUserService_Popular(t *testing.T) {
|
||||||
|
setup()
|
||||||
|
defer teardown()
|
||||||
|
|
||||||
|
blob, err := readFileContents("testdata/user/user-subreddits.json")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
mux.HandleFunc("/users/popular", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
assert.Equal(t, http.MethodGet, r.Method)
|
||||||
|
fmt.Fprint(w, blob)
|
||||||
|
})
|
||||||
|
|
||||||
|
userSubreddits, _, err := client.User.Popular(ctx)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, expectedUserSubreddits, userSubreddits)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUserService_New(t *testing.T) {
|
||||||
|
setup()
|
||||||
|
defer teardown()
|
||||||
|
|
||||||
|
blob, err := readFileContents("testdata/user/user-subreddits.json")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
mux.HandleFunc("/users/new", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
assert.Equal(t, http.MethodGet, r.Method)
|
||||||
|
fmt.Fprint(w, blob)
|
||||||
|
})
|
||||||
|
|
||||||
|
userSubreddits, _, err := client.User.New(ctx)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, expectedUserSubreddits, userSubreddits)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue