From d398d8231f03a6ef3754db710338fd28405edd46 Mon Sep 17 00:00:00 2001 From: Vartan Benohanian Date: Wed, 22 Jul 2020 21:54:19 -0400 Subject: [PATCH] Add tests for submitting/editing a post Signed-off-by: Vartan Benohanian --- post_test.go | 137 ++++++++++++++++++++++++++++++++++++++ testdata/post/edit.json | 107 +++++++++++++++++++++++++++++ testdata/post/submit.json | 11 +++ 3 files changed, 255 insertions(+) create mode 100644 testdata/post/edit.json create mode 100644 testdata/post/submit.json diff --git a/post_test.go b/post_test.go index 759636a..5a1fd67 100644 --- a/post_test.go +++ b/post_test.go @@ -94,6 +94,41 @@ var expectedComments = []*Comment{ }, } +var expectedSubmittedPost = &Submitted{ + ID: "hw6l6a", + FullID: "t3_hw6l6a", + URL: "https://www.reddit.com/r/test/comments/hw6l6a/test_title/", +} + +var expectedEditedPost = &Post{ + ID: "hw6l6a", + FullID: "t3_hw6l6a", + Created: &Timestamp{time.Date(2020, 7, 23, 1, 24, 55, 0, time.UTC)}, + Edited: &Timestamp{time.Date(2020, 7, 23, 1, 42, 44, 0, time.UTC)}, + + Permalink: "https://www.reddit.com/r/test/comments/hw6l6a/test_title/", + URL: "https://www.reddit.com/r/test/comments/hw6l6a/test_title/", + + Title: "Test Title", + Body: "this is edited", + + Likes: Bool(true), + + Score: 1, + UpvoteRatio: 1, + NumberOfComments: 0, + + SubredditID: "t5_2qh23", + SubredditName: "test", + SubredditNamePrefixed: "r/test", + + AuthorID: "t2_164ab8", + AuthorName: "v_95", + + Spoiler: true, + IsSelfPost: true, +} + func TestPostService_Get(t *testing.T) { setup() defer teardown() @@ -112,6 +147,108 @@ func TestPostService_Get(t *testing.T) { assert.Equal(t, expectedComments, comments) } +func TestPostService_SubmitText(t *testing.T) { + setup() + defer teardown() + + blob, err := readFileContents("testdata/post/submit.json") + assert.NoError(t, err) + + mux.HandleFunc("/api/submit", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("kind", "self") + form.Set("sr", "test") + form.Set("title", "Test Title") + form.Set("text", "Test Text") + form.Set("spoiler", "true") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.Form) + + fmt.Fprint(w, blob) + }) + + submittedPost, _, err := client.Post.SubmitText(ctx, SubmitTextOptions{ + Subreddit: "test", + Title: "Test Title", + Text: "Test Text", + Spoiler: true, + }) + assert.NoError(t, err) + assert.Equal(t, expectedSubmittedPost, submittedPost) +} + +func TestPostService_SubmitLink(t *testing.T) { + setup() + defer teardown() + + blob, err := readFileContents("testdata/post/submit.json") + assert.NoError(t, err) + + mux.HandleFunc("/api/submit", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("kind", "link") + form.Set("sr", "test") + form.Set("title", "Test Title") + form.Set("url", "https://www.example.com") + form.Set("sendreplies", "false") + form.Set("resubmit", "true") + form.Set("nsfw", "true") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.Form) + + fmt.Fprint(w, blob) + }) + + submittedPost, _, err := client.Post.SubmitLink(ctx, SubmitLinkOptions{ + Subreddit: "test", + Title: "Test Title", + URL: "https://www.example.com", + SendReplies: Bool(false), + Resubmit: true, + NSFW: true, + }) + assert.NoError(t, err) + assert.Equal(t, expectedSubmittedPost, submittedPost) +} + +func TestPostService_Edit(t *testing.T) { + setup() + defer teardown() + + blob, err := readFileContents("testdata/post/edit.json") + assert.NoError(t, err) + + mux.HandleFunc("/api/editusertext", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("return_rtjson", "true") + form.Set("thing_id", "t3_test") + form.Set("text", "test edit") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.Form) + + fmt.Fprint(w, blob) + }) + + editedPost, _, err := client.Post.Edit(ctx, "t3_test", "test edit") + assert.NoError(t, err) + assert.Equal(t, expectedEditedPost, editedPost) +} + func TestPostService_Hide(t *testing.T) { setup() defer teardown() diff --git a/testdata/post/edit.json b/testdata/post/edit.json new file mode 100644 index 0000000..390b182 --- /dev/null +++ b/testdata/post/edit.json @@ -0,0 +1,107 @@ +{ + "removed_by_category": null, + "approved_at_utc": null, + "banned_by": null, + "author_flair_type": "text", + "domain": "self.test", + "allow_live_comments": false, + "subreddit": "test", + "selftext_html": "

this is edited

\n
", + "content_categories": null, + "selftext": "this is edited", + "likes": true, + "suggested_sort": null, + "user_reports": [], + "saved": false, + "banned_at_utc": null, + "mod_reason_title": null, + "gilded": 0, + "archived": false, + "clicked": false, + "no_follow": false, + "title": "Test Title", + "link_flair_richtext": [], + "is_crosspostable": true, + "pinned": false, + "subreddit_name_prefixed": "r/test", + "over_18": false, + "hidden": false, + "pwls": 6, + "all_awardings": [], + "subreddit_id": "t5_2qh23", + "awarders": [], + "link_flair_css_class": null, + "discussion_type": null, + "downs": 0, + "removal_reason": null, + "can_gild": false, + "thumbnail_height": null, + "top_awarded_type": null, + "hide_score": false, + "spoiler": true, + "locked": false, + "name": "t3_hw6l6a", + "author_flair_text": null, + "quarantine": false, + "rte_mode": "markdown", + "link_flair_text_color": "dark", + "upvote_ratio": 1.0, + "author_flair_background_color": null, + "link_flair_type": "text", + "visited": false, + "removed_by": null, + "mod_note": null, + "distinguished": null, + "total_awards_received": 0, + "wls": 6, + "mod_reason_by": null, + "media_embed": {}, + "thumbnail_width": null, + "author_flair_template_id": null, + "is_original_content": false, + "author_fullname": "t2_164ab8", + "link_flair_background_color": "", + "secure_media": null, + "is_reddit_media_domain": false, + "id": "hw6l6a", + "is_robot_indexable": true, + "is_meta": false, + "category": null, + "secure_media_embed": {}, + "report_reasons": null, + "author": "v_95", + "num_crossposts": 0, + "num_comments": 0, + "can_mod_post": false, + "send_replies": true, + "score": 1, + "approved_by": null, + "author_premium": false, + "thumbnail": "spoiler", + "edited": 1595468564.0, + "author_flair_css_class": null, + "contest_mode": false, + "view_count": null, + "author_flair_richtext": [], + "author_patreon_flair": false, + "gildings": {}, + "subreddit_type": "public", + "is_self": true, + "author_flair_text_color": null, + "permalink": "/r/test/comments/hw6l6a/test_title/", + "num_reports": null, + "parent_whitelist_status": "all_ads", + "stickied": false, + "created": 1595496295.0, + "url": "https://www.reddit.com/r/test/comments/hw6l6a/test_title/", + "whitelist_status": "all_ads", + "media_only": false, + "subreddit_subscribers": 8128, + "created_utc": 1595467495.0, + "link_flair_text": null, + "ups": 1, + "media": null, + "mod_reports": [], + "treatment_tags": [], + "is_video": false +} diff --git a/testdata/post/submit.json b/testdata/post/submit.json new file mode 100644 index 0000000..30317bd --- /dev/null +++ b/testdata/post/submit.json @@ -0,0 +1,11 @@ +{ + "json": { + "errors": [], + "data": { + "url": "https://www.reddit.com/r/test/comments/hw6l6a/test_title/", + "drafts_count": 0, + "id": "hw6l6a", + "name": "t3_hw6l6a" + } + } +}