Finish some todos

Signed-off-by: Vartan Benohanian <vartanbeno@gmail.com>
This commit is contained in:
Vartan Benohanian 2020-08-17 22:01:04 -04:00
parent ac2fe30647
commit 29fdb0fa19
10 changed files with 103 additions and 81 deletions

View file

@ -223,15 +223,29 @@ func (s *CollectionService) UpdateDescription(ctx context.Context, id string, de
return s.client.Do(ctx, req, nil)
}
// UpdateLayout updates a collection's layout.
// layout is one of: TIMELINE, GALLERY.
func (s *CollectionService) UpdateLayout(ctx context.Context, id string, layout string) (*Response, error) {
// todo: should we validate layout?
// UpdateLayoutTimeline updates a collection's layout to the timeline format.
func (s *CollectionService) UpdateLayoutTimeline(ctx context.Context, id string) (*Response, error) {
path := "api/v1/collections/update_collection_display_layout"
form := url.Values{}
form.Set("collection_id", id)
form.Set("display_layout", layout)
form.Set("display_layout", "TIMELINE")
req, err := s.client.NewRequestWithForm(http.MethodPost, path, form)
if err != nil {
return nil, err
}
return s.client.Do(ctx, req, nil)
}
// UpdateLayoutGallery updates a collection's layout to the gallery format.
func (s *CollectionService) UpdateLayoutGallery(ctx context.Context, id string) (*Response, error) {
path := "api/v1/collections/update_collection_display_layout"
form := url.Values{}
form.Set("collection_id", id)
form.Set("display_layout", "GALLERY")
req, err := s.client.NewRequestWithForm(http.MethodPost, path, form)
if err != nil {

View file

@ -274,7 +274,7 @@ func TestCollectionService_UpdateDescription(t *testing.T) {
require.NoError(t, err)
}
func TestCollectionService_UpdateLayout(t *testing.T) {
func TestCollectionService_UpdateLayoutTimeline(t *testing.T) {
setup()
defer teardown()
@ -290,7 +290,27 @@ func TestCollectionService_UpdateLayout(t *testing.T) {
require.Equal(t, form, r.Form)
})
_, err := client.Collection.UpdateLayout(ctx, "37f1e52d-7ec9-466b-b4cc-59e86e071ed7", "TIMELINE")
_, err := client.Collection.UpdateLayoutTimeline(ctx, "37f1e52d-7ec9-466b-b4cc-59e86e071ed7")
require.NoError(t, err)
}
func TestCollectionService_UpdateLayoutGallery(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/api/v1/collections/update_collection_display_layout", func(w http.ResponseWriter, r *http.Request) {
require.Equal(t, http.MethodPost, r.Method)
form := url.Values{}
form.Set("collection_id", "37f1e52d-7ec9-466b-b4cc-59e86e071ed7")
form.Set("display_layout", "GALLERY")
err := r.ParseForm()
require.NoError(t, err)
require.Equal(t, form, r.Form)
})
_, err := client.Collection.UpdateLayoutGallery(ctx, "37f1e52d-7ec9-466b-b4cc-59e86e071ed7")
require.NoError(t, err)
}

View file

@ -22,7 +22,7 @@ var expectedCommentSubmitOrEdit = &Comment{
AuthorFlairText: "Flair",
AuthorFlairID: "024b2b66-05ca-11e1-96f4-12313d096aae",
Subreddit: "subreddit",
SubredditName: "subreddit",
SubredditNamePrefixed: "r/subreddit",
SubredditID: "t5_test",

View file

@ -38,23 +38,19 @@ type JSONErrorResponse struct {
// HTTP response that caused this error.
Response *http.Response `json:"-"`
JSON *struct {
JSON struct {
Errors []APIError `json:"errors,omitempty"`
} `json:"json,omitempty"`
} `json:"json"`
}
func (r *JSONErrorResponse) Error() string {
var message string
if r.JSON != nil && len(r.JSON.Errors) > 0 {
for i, err := range r.JSON.Errors {
message += err.Error()
if i < len(r.JSON.Errors)-1 {
message += ";"
}
}
if len(r.JSON.Errors) > 0 {
message = r.JSON.Errors[0].Error()
}
return fmt.Sprintf(
"%v %v: %d %v",
"%s %s: %d %s",
r.Response.Request.Method, r.Response.Request.URL, r.Response.StatusCode, message,
)
}
@ -70,7 +66,7 @@ type ErrorResponse struct {
func (r *ErrorResponse) Error() string {
return fmt.Sprintf(
"%v %v: %d %v",
"%s %s: %d %s",
r.Response.Request.Method, r.Response.Request.URL, r.Response.StatusCode, r.Message,
)
}

View file

@ -28,12 +28,12 @@ var expectedListingPosts = []*Post{
UpvoteRatio: 1,
NumberOfComments: 1,
SubredditID: "t5_2qh23",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
Author: "v_95",
AuthorID: "t2_164ab8",
AuthorName: "v_95",
IsSelfPost: true,
},
@ -49,13 +49,11 @@ var expectedListingComments = []*Comment{
ParentID: "t3_i2gvg4",
Permalink: "https://www.reddit.com/r/test/comments/i2gvg4/this_is_a_title/g05v931/",
// todo fix naming
Body: "Test comment",
Author: "v_95",
AuthorID: "t2_164ab8",
// todo fix naming
Subreddit: "test",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
@ -104,12 +102,12 @@ var expectedListingPosts2 = []*Post{
UpvoteRatio: 1,
NumberOfComments: 1,
SubredditID: "t5_2qh23",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
Author: "v_95",
AuthorID: "t2_164ab8",
AuthorName: "v_95",
IsSelfPost: true,
},
@ -129,12 +127,12 @@ var expectedListingPosts2 = []*Post{
UpvoteRatio: 1,
NumberOfComments: 0,
SubredditID: "t5_2qh23",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
Author: "v_95",
AuthorID: "t2_164ab8",
AuthorName: "v_95",
},
}

View file

@ -27,12 +27,12 @@ var expectedPostAndComments = &PostAndComments{
UpvoteRatio: 1,
NumberOfComments: 2,
SubredditID: "t5_2qh23",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
Author: "testuser",
AuthorID: "t2_testuser",
AuthorName: "testuser",
IsSelfPost: true,
},
@ -50,7 +50,7 @@ var expectedPostAndComments = &PostAndComments{
Author: "testuser",
AuthorID: "t2_testuser",
Subreddit: "test",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
@ -77,7 +77,7 @@ var expectedPostAndComments = &PostAndComments{
Author: "testuser",
AuthorID: "t2_testuser",
Subreddit: "test",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
@ -119,12 +119,12 @@ var expectedEditedPost = &Post{
UpvoteRatio: 1,
NumberOfComments: 0,
SubredditID: "t5_2qh23",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
Author: "v_95",
AuthorID: "t2_164ab8",
AuthorName: "v_95",
Spoiler: true,
IsSelfPost: true,
@ -147,12 +147,12 @@ var expectedPost2 = &Post{
UpvoteRatio: 1,
NumberOfComments: 0,
SubredditID: "t5_2qh23",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
Author: "v_95",
AuthorID: "t2_164ab8",
AuthorName: "v_95",
}
var expectedPostDuplicates = &Posts{
@ -174,12 +174,12 @@ var expectedPostDuplicates = &Posts{
UpvoteRatio: 0.66,
NumberOfComments: 1,
SubredditID: "t5_2qh23",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
Author: "GarlicoinAccount",
AuthorID: "t2_d2v1r90",
AuthorName: "GarlicoinAccount",
},
{
ID: "le1tc",
@ -198,12 +198,12 @@ var expectedPostDuplicates = &Posts{
UpvoteRatio: 1,
NumberOfComments: 1,
SubredditID: "t5_2qh23",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
Author: "prog101",
AuthorID: "t2_8dyo",
AuthorName: "prog101",
},
},
After: "t3_le1tc",

View file

@ -320,7 +320,7 @@ func CheckResponse(r *http.Response) error {
data, err := ioutil.ReadAll(r.Body)
if err == nil && len(data) > 0 {
json.Unmarshal(data, jsonErrorResponse)
if jsonErrorResponse.JSON != nil && len(jsonErrorResponse.JSON.Errors) > 0 {
if len(jsonErrorResponse.JSON.Errors) > 0 {
return jsonErrorResponse
}
}

View file

@ -28,12 +28,12 @@ var expectedPosts = &Posts{
UpvoteRatio: 0.99,
NumberOfComments: 1634,
SubredditID: "t5_2qh23",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
Author: "kmiller0112",
AuthorID: "t2_30a5ktgt",
AuthorName: "kmiller0112",
IsSelfPost: true,
Stickied: true,
@ -53,12 +53,12 @@ var expectedPosts = &Posts{
UpvoteRatio: 1,
NumberOfComments: 0,
SubredditID: "t5_2qh23",
SubredditName: "test",
SubredditNamePrefixed: "r/test",
SubredditID: "t5_2qh23",
Author: "MuckleMcDuckle",
AuthorID: "t2_6fqntbwq",
AuthorName: "MuckleMcDuckle",
},
},
After: "t3_hyhquk",
@ -167,12 +167,12 @@ var expectedSearchPosts = &Posts{
UpvoteRatio: 0.88,
NumberOfComments: 3748,
SubredditID: "t5_3h4zq",
SubredditName: "WatchPeopleDieInside",
SubredditNamePrefixed: "r/WatchPeopleDieInside",
SubredditID: "t5_3h4zq",
Author: "chocolat_ice_cream",
AuthorID: "t2_3p32m02",
AuthorName: "chocolat_ice_cream",
},
{
ID: "hmwhd7",
@ -189,12 +189,12 @@ var expectedSearchPosts = &Posts{
UpvoteRatio: 0.94,
NumberOfComments: 7415,
SubredditID: "t5_2qh13",
SubredditName: "worldnews",
SubredditNamePrefixed: "r/worldnews",
SubredditID: "t5_2qh13",
Author: "Jeremy_Martin",
AuthorID: "t2_wgrkg",
AuthorName: "Jeremy_Martin",
},
},
After: "t3_hmwhd7",

View file

@ -62,7 +62,6 @@ type things struct {
Posts []*Post
Subreddits []*Subreddit
ModActions []*ModAction
// todo: add the other kinds of things
}
// init initializes or clears the listing.
@ -111,7 +110,6 @@ func (t *things) UnmarshalJSON(b []byte) error {
if err := json.Unmarshal(thing.Data, v); err == nil {
t.Subreddits = append(t.Subreddits, v)
}
case kindAward:
case kindModAction:
v := new(ModAction)
if err := json.Unmarshal(thing.Data, v); err == nil {
@ -123,7 +121,7 @@ func (t *things) UnmarshalJSON(b []byte) error {
return nil
}
// Comment is a comment posted by a user
// Comment is a comment posted by a user.
type Comment struct {
ID string `json:"id,omitempty"`
FullID string `json:"name,omitempty"`
@ -139,7 +137,7 @@ type Comment struct {
AuthorFlairText string `json:"author_flair_text,omitempty"`
AuthorFlairID string `json:"author_flair_template_id,omitempty"`
Subreddit string `json:"subreddit,omitempty"`
SubredditName string `json:"subreddit,omitempty"`
SubredditNamePrefixed string `json:"subreddit_name_prefixed,omitempty"`
SubredditID string `json:"subreddit_id,omitempty"`
@ -150,16 +148,14 @@ type Comment struct {
Score int `json:"score"`
Controversiality int `json:"controversiality"`
// todo: check the validity of these comments
PostID string `json:"link_id,omitempty"`
// This doesn't appear when submitting a comment.
// This doesn't appear consistently.
PostTitle string `json:"link_title,omitempty"`
// This doesn't appear when submitting a comment.
// This doesn't appear consistently.
PostPermalink string `json:"link_permalink,omitempty"`
// This doesn't appear when submitting a comment.
// This doesn't appear consistently.
PostAuthor string `json:"link_author,omitempty"`
// This doesn't appear when submitting a comment
// or when getting a post with its comments.
// This doesn't appear consistently.
PostNumComments *int `json:"num_comments,omitempty"`
IsSubmitter bool `json:"is_submitter"`
@ -238,9 +234,7 @@ func (r *Replies) MarshalJSON() ([]byte, error) {
return json.Marshal(r.Comments)
}
// todo: should we implement json.Marshaler?
// More holds information
// More holds information used to retrieve additional comments omitted from a base comment tree.
type More struct {
ID string `json:"id"`
FullID string `json:"name"`
@ -273,12 +267,12 @@ type Post struct {
UpvoteRatio float32 `json:"upvote_ratio"`
NumberOfComments int `json:"num_comments"`
SubredditID string `json:"subreddit_id,omitempty"`
SubredditName string `json:"subreddit,omitempty"`
SubredditNamePrefixed string `json:"subreddit_name_prefixed,omitempty"`
SubredditID string `json:"subreddit_id,omitempty"`
Author string `json:"author,omitempty"`
AuthorID string `json:"author_fullname,omitempty"`
AuthorName string `json:"author,omitempty"`
Spoiler bool `json:"spoiler"`
Locked bool `json:"locked"`

View file

@ -64,12 +64,12 @@ var expectedPost = &Post{
UpvoteRatio: 0.86,
NumberOfComments: 2,
SubredditID: "t5_2qizd",
SubredditName: "redditdev",
SubredditNamePrefixed: "r/redditdev",
SubredditID: "t5_2qizd",
Author: "v_95",
AuthorID: "t2_164ab8",
AuthorName: "v_95",
IsSelfPost: true,
}
@ -87,7 +87,7 @@ var expectedComment = &Comment{
Author: "v_95",
AuthorID: "t2_164ab8",
Subreddit: "apple",
SubredditName: "apple",
SubredditNamePrefixed: "r/apple",
SubredditID: "t5_2qh1f",