2020-07-11 13:49:07 -04:00
|
|
|
package reddit
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"net/http"
|
|
|
|
"net/url"
|
|
|
|
"testing"
|
2020-05-03 17:31:35 -04:00
|
|
|
"time"
|
2020-05-29 19:50:52 -04:00
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
2020-04-29 15:59:18 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
var expectedCommentSubmitOrEdit = &Comment{
|
|
|
|
ID: "test2",
|
|
|
|
FullID: "t1_test2",
|
|
|
|
ParentID: "t1_test",
|
2020-06-27 23:15:27 -04:00
|
|
|
Permalink: "https://www.reddit.com/r/subreddit/comments/test1/some_thread/test2/",
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
Body: "test comment",
|
|
|
|
Author: "reddit_username",
|
|
|
|
AuthorID: "t2_user1",
|
|
|
|
AuthorFlairText: "Flair",
|
2020-05-29 19:50:52 -04:00
|
|
|
AuthorFlairID: "024b2b66-05ca-11e1-96f4-12313d096aae",
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
Subreddit: "subreddit",
|
|
|
|
SubredditNamePrefixed: "r/subreddit",
|
|
|
|
SubredditID: "t5_test",
|
|
|
|
|
2020-05-29 19:50:52 -04:00
|
|
|
Likes: Bool(true),
|
|
|
|
|
2020-04-29 15:59:18 -04:00
|
|
|
Score: 1,
|
|
|
|
Controversiality: 0,
|
|
|
|
|
2020-05-29 19:50:52 -04:00
|
|
|
Created: &Timestamp{time.Date(2020, 4, 29, 0, 9, 47, 0, time.UTC)},
|
2020-06-22 21:52:34 -04:00
|
|
|
// todo: this should just be nil
|
|
|
|
Edited: &Timestamp{time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC)},
|
2020-04-29 15:59:18 -04:00
|
|
|
|
2020-06-22 21:52:34 -04:00
|
|
|
PostID: "t3_link1",
|
2020-04-29 15:59:18 -04:00
|
|
|
}
|
|
|
|
|
2020-06-27 23:53:59 -04:00
|
|
|
func TestCommentService_Submit(t *testing.T) {
|
2020-04-29 15:59:18 -04:00
|
|
|
setup()
|
|
|
|
defer teardown()
|
|
|
|
|
2020-06-27 23:53:59 -04:00
|
|
|
blob := readFileContents(t, "testdata/comment-submit-edit.json")
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
mux.HandleFunc("/api/comment", func(w http.ResponseWriter, r *http.Request) {
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.Equal(t, http.MethodPost, r.Method)
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
form := url.Values{}
|
|
|
|
form.Set("api_type", "json")
|
|
|
|
form.Set("return_rtjson", "true")
|
|
|
|
form.Set("parent", "t1_test")
|
|
|
|
form.Set("text", "test comment")
|
|
|
|
|
2020-05-29 19:50:52 -04:00
|
|
|
err := r.ParseForm()
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, form, r.PostForm)
|
2020-04-29 15:59:18 -04:00
|
|
|
|
2020-06-27 23:53:59 -04:00
|
|
|
fmt.Fprint(w, blob)
|
2020-04-29 15:59:18 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
comment, _, err := client.Comment.Submit(ctx, "t1_test", "test comment")
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, expectedCommentSubmitOrEdit, comment)
|
2020-04-29 15:59:18 -04:00
|
|
|
}
|
|
|
|
|
2020-06-27 23:53:59 -04:00
|
|
|
func TestCommentService_Edit(t *testing.T) {
|
2020-04-29 15:59:18 -04:00
|
|
|
setup()
|
|
|
|
defer teardown()
|
|
|
|
|
2020-06-27 23:53:59 -04:00
|
|
|
blob := readFileContents(t, "testdata/comment-submit-edit.json")
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
mux.HandleFunc("/api/editusertext", func(w http.ResponseWriter, r *http.Request) {
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.Equal(t, http.MethodPost, r.Method)
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
form := url.Values{}
|
|
|
|
form.Set("api_type", "json")
|
|
|
|
form.Set("return_rtjson", "true")
|
|
|
|
form.Set("thing_id", "t1_test")
|
|
|
|
form.Set("text", "test comment")
|
|
|
|
|
2020-05-29 19:50:52 -04:00
|
|
|
err := r.ParseForm()
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, form, r.PostForm)
|
2020-04-29 15:59:18 -04:00
|
|
|
|
2020-06-27 23:53:59 -04:00
|
|
|
fmt.Fprint(w, blob)
|
2020-04-29 15:59:18 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
_, _, err := client.Comment.Edit(ctx, "t3_test", "test comment")
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.EqualError(t, err, `must provide comment id (starting with t1_); id provided: "t3_test"`)
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
comment, _, err := client.Comment.Edit(ctx, "t1_test", "test comment")
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, expectedCommentSubmitOrEdit, comment)
|
2020-04-29 15:59:18 -04:00
|
|
|
}
|
|
|
|
|
2020-06-27 23:53:59 -04:00
|
|
|
func TestCommentService_Delete(t *testing.T) {
|
2020-04-29 15:59:18 -04:00
|
|
|
setup()
|
|
|
|
defer teardown()
|
|
|
|
|
|
|
|
mux.HandleFunc("/api/del", func(w http.ResponseWriter, r *http.Request) {
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.Equal(t, http.MethodPost, r.Method)
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
form := url.Values{}
|
|
|
|
form.Set("id", "t1_test")
|
|
|
|
|
2020-05-29 19:50:52 -04:00
|
|
|
err := r.ParseForm()
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, form, r.PostForm)
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
fmt.Fprint(w, `{}`)
|
|
|
|
})
|
|
|
|
|
|
|
|
_, err := client.Comment.Delete(ctx, "t3_test")
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.EqualError(t, err, `must provide comment id (starting with t1_); id provided: "t3_test"`)
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
res, err := client.Comment.Delete(ctx, "t1_test")
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, http.StatusOK, res.StatusCode)
|
2020-04-29 15:59:18 -04:00
|
|
|
}
|
|
|
|
|
2020-06-27 23:53:59 -04:00
|
|
|
func TestCommentService_Save(t *testing.T) {
|
2020-04-29 15:59:18 -04:00
|
|
|
setup()
|
|
|
|
defer teardown()
|
|
|
|
|
|
|
|
mux.HandleFunc("/api/save", func(w http.ResponseWriter, r *http.Request) {
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.Equal(t, http.MethodPost, r.Method)
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
form := url.Values{}
|
|
|
|
form.Set("id", "t1_test")
|
|
|
|
|
2020-05-29 19:50:52 -04:00
|
|
|
err := r.ParseForm()
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, form, r.PostForm)
|
2020-04-29 15:59:18 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
_, err := client.Comment.Save(ctx, "t3_test")
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.EqualError(t, err, `must provide comment id (starting with t1_); id provided: "t3_test"`)
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
res, err := client.Comment.Save(ctx, "t1_test")
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, http.StatusOK, res.StatusCode)
|
2020-04-29 15:59:18 -04:00
|
|
|
}
|
|
|
|
|
2020-06-27 23:53:59 -04:00
|
|
|
func TestCommentService_Unsave(t *testing.T) {
|
2020-04-29 15:59:18 -04:00
|
|
|
setup()
|
|
|
|
defer teardown()
|
|
|
|
|
|
|
|
mux.HandleFunc("/api/unsave", func(w http.ResponseWriter, r *http.Request) {
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.Equal(t, http.MethodPost, r.Method)
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
form := url.Values{}
|
|
|
|
form.Set("id", "t1_test")
|
|
|
|
|
2020-05-29 19:50:52 -04:00
|
|
|
err := r.ParseForm()
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, form, r.PostForm)
|
2020-04-29 15:59:18 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
_, err := client.Comment.Unsave(ctx, "t3_test")
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.EqualError(t, err, `must provide comment id (starting with t1_); id provided: "t3_test"`)
|
2020-04-29 15:59:18 -04:00
|
|
|
|
|
|
|
res, err := client.Comment.Unsave(ctx, "t1_test")
|
2020-05-29 19:50:52 -04:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, http.StatusOK, res.StatusCode)
|
2020-04-29 15:59:18 -04:00
|
|
|
}
|