Add subreddit service tests

Signed-off-by: Vartan Benohanian <vartanbeno@gmail.com>
This commit is contained in:
Vartan Benohanian 2020-06-20 23:04:01 -04:00
parent 5f56273e2e
commit bbf7de995d
4 changed files with 559 additions and 1 deletions

162
subreddit_test.go Normal file
View File

@ -0,0 +1,162 @@
package geddit
import (
"fmt"
"net/http"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
var expectedSubreddit = &Subreddit{
ID: "2rc7j",
FullID: "t5_2rc7j",
Created: &Timestamp{time.Date(2009, 11, 11, 0, 54, 28, 0, time.UTC)},
URL: "/r/golang/",
Name: "golang",
NamePrefixed: "r/golang",
Title: "The Go Programming Language",
Description: "Ask questions and post articles about the Go programming language and related tools, events etc.",
Type: "public",
Subscribers: 116532,
ActiveUserCount: Int(386),
NSFW: false,
UserIsMod: false,
}
var expectedSubreddits = &Subreddits{
After: "t5_2qh0u",
Before: "",
Subreddits: []Subreddit{
{
ID: "2qs0k",
FullID: "t5_2qs0k",
Created: &Timestamp{time.Date(2009, 1, 25, 2, 25, 57, 0, time.UTC)},
URL: "/r/Home/",
Name: "Home",
NamePrefixed: "r/Home",
Title: "Home",
Type: "public",
Subscribers: 15336,
NSFW: false,
UserIsMod: false,
},
{
ID: "2qh1i",
FullID: "t5_2qh1i",
Created: &Timestamp{time.Date(2008, 1, 25, 3, 52, 15, 0, time.UTC)},
URL: "/r/AskReddit/",
Name: "AskReddit",
NamePrefixed: "r/AskReddit",
Title: "Ask Reddit...",
Description: "r/AskReddit is the place to ask and answer thought-provoking questions.",
Type: "public",
Subscribers: 28449174,
NSFW: false,
UserIsMod: false,
},
{
ID: "2qh0u",
FullID: "t5_2qh0u",
Created: &Timestamp{time.Date(2008, 1, 25, 0, 31, 9, 0, time.UTC)},
URL: "/r/pics/",
Name: "pics",
NamePrefixed: "r/pics",
Title: "Reddit Pics",
Description: "A place for pictures and photographs.",
Type: "public",
Subscribers: 24987753,
NSFW: false,
UserIsMod: false,
},
},
}
func TestSubredditServiceOp_GetByName(t *testing.T) {
setup()
defer teardown()
blob := readFileContents(t, "testdata/subreddit/about.json")
mux.HandleFunc("/r/golang/about", func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, http.MethodGet, r.Method)
fmt.Fprint(w, blob)
})
subreddit, _, err := client.Subreddit.GetByName(ctx, "golang")
assert.NoError(t, err)
assert.Equal(t, expectedSubreddit, subreddit)
}
func TestSubredditServiceOp_GetPopular(t *testing.T) {
setup()
defer teardown()
blob := readFileContents(t, "testdata/subreddit/list.json")
mux.HandleFunc("/subreddits/popular", func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, http.MethodGet, r.Method)
fmt.Fprint(w, blob)
})
subreddits, _, err := client.Subreddit.GetPopular(ctx, nil)
assert.NoError(t, err)
assert.Equal(t, expectedSubreddits, subreddits)
}
func TestSubredditServiceOp_GetNew(t *testing.T) {
setup()
defer teardown()
blob := readFileContents(t, "testdata/subreddit/list.json")
mux.HandleFunc("/subreddits/new", func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, http.MethodGet, r.Method)
fmt.Fprint(w, blob)
})
subreddits, _, err := client.Subreddit.GetNew(ctx, nil)
assert.NoError(t, err)
assert.Equal(t, expectedSubreddits, subreddits)
}
func TestSubredditServiceOp_GetGold(t *testing.T) {
setup()
defer teardown()
blob := readFileContents(t, "testdata/subreddit/list.json")
mux.HandleFunc("/subreddits/gold", func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, http.MethodGet, r.Method)
fmt.Fprint(w, blob)
})
subreddits, _, err := client.Subreddit.GetGold(ctx, nil)
assert.NoError(t, err)
assert.Equal(t, expectedSubreddits, subreddits)
}
func TestSubredditServiceOp_GetDefault(t *testing.T) {
setup()
defer teardown()
blob := readFileContents(t, "testdata/subreddit/list.json")
mux.HandleFunc("/subreddits/default", func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, http.MethodGet, r.Method)
fmt.Fprint(w, blob)
})
subreddits, _, err := client.Subreddit.GetDefault(ctx, nil)
assert.NoError(t, err)
assert.Equal(t, expectedSubreddits, subreddits)
}

96
testdata/subreddit/about.json vendored Normal file
View File

@ -0,0 +1,96 @@
{
"kind": "t5",
"data": {
"user_flair_background_color": null,
"submit_text_html": null,
"restrict_posting": true,
"user_is_banned": false,
"free_form_reports": true,
"wiki_enabled": null,
"user_is_muted": false,
"user_can_flair_in_sr": null,
"display_name": "golang",
"header_img": "https://b.thumbs.redditmedia.com/7BDtSXbohQaPFuaa6oCA5HtE53Flgld6rj3G7-TavDs.png",
"title": "The Go Programming Language",
"allow_galleries": true,
"icon_size": null,
"primary_color": "",
"active_user_count": 386,
"icon_img": "",
"display_name_prefixed": "r/golang",
"accounts_active": 386,
"public_traffic": false,
"subscribers": 116532,
"user_flair_richtext": [],
"videostream_links_count": 0,
"name": "t5_2rc7j",
"quarantine": false,
"hide_ads": false,
"emojis_enabled": false,
"advertiser_category": "",
"public_description": "Ask questions and post articles about the Go programming language and related tools, events etc.",
"comment_score_hide_mins": 0,
"user_has_favorited": false,
"user_flair_template_id": null,
"community_icon": "https://styles.redditmedia.com/t5_2rc7j/styles/communityIcon_wy4riduoe9k11.png?width=256&amp;s=0d681daaa8d4b6271e6be788d0f9379f0661e04a",
"banner_background_image": "https://styles.redditmedia.com/t5_2rc7j/styles/bannerBackgroundImage_k15p9ugyd9k11.png?width=4000&amp;s=dc19f23446f14c3dee0ab59c538fd5dfb243eeb9",
"original_content_tag_enabled": false,
"submit_text": "",
"description_html": "&lt;!-- SC_OFF --&gt;&lt;div class=\"md\"&gt;&lt;p&gt;Please follow the &lt;a href=\"https://golang.org/conduct\"&gt;Go Community Code of Conduct&lt;/a&gt; while posting here. In short:&lt;/p&gt;\n\n&lt;ul&gt;\n&lt;li&gt;Treat everyone with respect and kindness.&lt;/li&gt;\n&lt;li&gt;Be thoughtful in how you communicate.&lt;/li&gt;\n&lt;li&gt;Dont be destructive or inflammatory.&lt;/li&gt;\n&lt;li&gt;If you encounter an issue, please contact the moderators.&lt;/li&gt;\n&lt;/ul&gt;\n\n&lt;p&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;/p&gt;\n\n&lt;ul&gt;\n&lt;li&gt;&lt;a href=\"http://golang.org/doc/\"&gt;Official Go Documentation&lt;/a&gt;&lt;/li&gt;\n&lt;li&gt;&lt;a href=\"http://golang.org/pkg/\"&gt;Standard Library Docs&lt;/a&gt;&lt;/li&gt;\n&lt;li&gt;&lt;a href=\"http://godoc.org/\"&gt;Other Package Docs&lt;/a&gt;&lt;/li&gt;\n&lt;/ul&gt;\n\n&lt;p&gt;&lt;strong&gt;Community&lt;/strong&gt;&lt;/p&gt;\n\n&lt;ul&gt;\n&lt;li&gt;&lt;a href=\"http://groups.google.com/group/golang-nuts\"&gt;Go Nuts Mailing List&lt;/a&gt;&lt;/li&gt;\n&lt;li&gt;&lt;a href=\"http://stackoverflow.com/questions/tagged/go\"&gt;Go questions in Stackoverflow&lt;/a&gt;&lt;/li&gt;\n&lt;li&gt;#go-nuts in irc.freenode.org&lt;/li&gt;\n&lt;li&gt;&lt;a href=\"http://dave.cheney.net/resources-for-new-go-programmers\"&gt;Resources for new Go programmers&lt;/a&gt;&lt;/li&gt;\n&lt;/ul&gt;\n\n&lt;p&gt;&lt;strong&gt;Other Resources&lt;/strong&gt;&lt;/p&gt;\n\n&lt;ul&gt;\n&lt;li&gt;&lt;a href=\"https://developers.google.com/appengine/docs/go/\"&gt;Go for App Engine&lt;/a&gt;!&lt;/li&gt;\n&lt;/ul&gt;\n&lt;/div&gt;&lt;!-- SC_ON --&gt;",
"spoilers_enabled": true,
"header_title": null,
"header_size": [153, 55],
"user_flair_position": "left",
"all_original_content": false,
"has_menu_widget": false,
"is_enrolled_in_new_modmail": null,
"key_color": "",
"can_assign_user_flair": false,
"created": 1257929668.0,
"wls": 6,
"show_media_preview": true,
"submission_type": "any",
"user_is_subscriber": true,
"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": "&lt;!-- SC_OFF --&gt;&lt;div class=\"md\"&gt;&lt;p&gt;Ask questions and post articles about the Go programming language and related tools, events etc.&lt;/p&gt;\n&lt;/div&gt;&lt;!-- SC_ON --&gt;",
"allow_videos": true,
"is_crosspostable_subreddit": true,
"notification_level": "low",
"can_assign_link_flair": false,
"accounts_active_is_fuzzed": false,
"submit_text_label": null,
"link_flair_position": "left",
"user_sr_flair_enabled": true,
"user_flair_enabled_in_sr": false,
"allow_discovery": true,
"user_sr_theme_enabled": true,
"link_flair_enabled": true,
"subreddit_type": "public",
"suggested_comment_sort": null,
"banner_img": "",
"user_flair_text": null,
"banner_background_color": "",
"show_media": false,
"id": "2rc7j",
"user_is_moderator": false,
"over18": false,
"description": "Please follow the [Go Community Code of Conduct](https://golang.org/conduct) while posting here. In short:\n\n* Treat everyone with respect and kindness.\n* Be thoughtful in how you communicate.\n* Dont be destructive or inflammatory.\n* If you encounter an issue, please contact the moderators.\n\n**Documentation**\n\n* [Official Go Documentation](http://golang.org/doc/)\n* [Standard Library Docs](http://golang.org/pkg/)\n* [Other Package Docs](http://godoc.org/)\n\n**Community**\n\n* [Go Nuts Mailing List](http://groups.google.com/group/golang-nuts)\n* [Go questions in Stackoverflow](http://stackoverflow.com/questions/tagged/go)\n* #go-nuts in irc.freenode.org\n* [Resources for new Go programmers](http://dave.cheney.net/resources-for-new-go-programmers)\n\n**Other Resources**\n\n* [Go for App Engine](https://developers.google.com/appengine/docs/go/)!",
"submit_link_label": null,
"user_flair_text_color": null,
"restrict_commenting": false,
"user_flair_css_class": null,
"allow_images": true,
"lang": "en",
"whitelist_status": "all_ads",
"url": "/r/golang/",
"created_utc": 1257900868.0,
"banner_size": null,
"mobile_banner_image": "",
"user_is_contributor": false
}
}

300
testdata/subreddit/list.json vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -287,7 +287,7 @@ type Subreddit struct {
Name string `json:"display_name,omitempty"`
NamePrefixed string `json:"display_name_prefixed,omitempty"`
Title string `json:"title,omitempty"`
PublicDescription string `json:"public_description,omitempty"`
Description string `json:"public_description,omitempty"`
Type string `json:"subreddit_type,omitempty"`
SuggestedCommentSort string `json:"suggested_comment_sort,omitempty"`