Update emoji permissions

Signed-off-by: Vartan Benohanian <vartanbeno@gmail.com>
This commit is contained in:
Vartan Benohanian 2020-08-10 16:40:13 -04:00
parent db8ad18bb3
commit 8f7c1b0522
2 changed files with 65 additions and 8 deletions

View file

@ -20,7 +20,7 @@ import (
// EmojiService handles communication with the emoji // EmojiService handles communication with the emoji
// related methods of the Reddit API. // related methods of the Reddit API.
// //
// Reddit API docs: https://www.reddit.com/dev/api/#section_collections // Reddit API docs: https://www.reddit.com/dev/api/#section_emoji
type EmojiService struct { type EmojiService struct {
client *Client client *Client
} }
@ -36,15 +36,15 @@ type Emoji struct {
CreatedBy string `json:"created_by,omitempty"` CreatedBy string `json:"created_by,omitempty"`
} }
// EmojiCreateRequest represents a request to copy an emoji. // EmojiCreateOrUpdateRequest represents a request to create/update an emoji.
type EmojiCreateRequest struct { type EmojiCreateOrUpdateRequest struct {
Name string `url:"name"` Name string `url:"name"`
UserFlairAllowed *bool `url:"user_flair_allowed,omitempty"` UserFlairAllowed *bool `url:"user_flair_allowed,omitempty"`
PostFlairAllowed *bool `url:"post_flair_allowed,omitempty"` PostFlairAllowed *bool `url:"post_flair_allowed,omitempty"`
ModFlairOnly *bool `url:"mod_flair_only,omitempty"` ModFlairOnly *bool `url:"mod_flair_only,omitempty"`
} }
func (r *EmojiCreateRequest) validate() error { func (r *EmojiCreateOrUpdateRequest) validate() error {
if r.Name == "" { if r.Name == "" {
return errors.New("name: cannot be empty") return errors.New("name: cannot be empty")
} }
@ -184,7 +184,7 @@ func (s *EmojiService) lease(ctx context.Context, subreddit, imagePath string) (
return uploadURL, fields, resp, nil return uploadURL, fields, resp, nil
} }
func (s *EmojiService) upload(ctx context.Context, createRequest *EmojiCreateRequest, subreddit, awsKey string) (*Response, error) { func (s *EmojiService) upload(ctx context.Context, subreddit string, createRequest *EmojiCreateOrUpdateRequest, awsKey string) (*Response, error) {
path := fmt.Sprintf("api/v1/%s/emoji.json", subreddit) path := fmt.Sprintf("api/v1/%s/emoji.json", subreddit)
form, err := query.Values(createRequest) form, err := query.Values(createRequest)
@ -201,8 +201,8 @@ func (s *EmojiService) upload(ctx context.Context, createRequest *EmojiCreateReq
return s.client.Do(ctx, req, nil) return s.client.Do(ctx, req, nil)
} }
// Upload uploads an emoji. // Upload uploads an emoji to the subreddit.
func (s *EmojiService) Upload(ctx context.Context, createRequest *EmojiCreateRequest, subreddit, imagePath string) (*Response, error) { func (s *EmojiService) Upload(ctx context.Context, subreddit string, createRequest *EmojiCreateOrUpdateRequest, imagePath string) (*Response, error) {
if createRequest == nil { if createRequest == nil {
return nil, errors.New("createRequest: cannot be nil") return nil, errors.New("createRequest: cannot be nil")
} }
@ -257,5 +257,31 @@ func (s *EmojiService) Upload(ctx context.Context, createRequest *EmojiCreateReq
return &Response{httpResponse}, err return &Response{httpResponse}, err
} }
return s.upload(ctx, createRequest, subreddit, fields["key"]) return s.upload(ctx, subreddit, createRequest, fields["key"])
}
// Update updates an emoji on the subreddit.
func (s *EmojiService) Update(ctx context.Context, subreddit string, updateRequest *EmojiCreateOrUpdateRequest) (*Response, error) {
if updateRequest == nil {
return nil, errors.New("updateRequest: cannot be nil")
}
err := updateRequest.validate()
if err != nil {
return nil, err
}
path := fmt.Sprintf("api/v1/%s/emoji_permissions", subreddit)
form, err := query.Values(updateRequest)
if err != nil {
return nil, err
}
req, err := s.client.NewRequestWithForm(http.MethodPost, path, form)
if err != nil {
return nil, err
}
return s.client.Do(ctx, req, nil)
} }

View file

@ -106,3 +106,34 @@ func TestEmojiService_DisableCustomSize(t *testing.T) {
_, err := client.Emoji.DisableCustomSize(ctx, "testsubreddit") _, err := client.Emoji.DisableCustomSize(ctx, "testsubreddit")
assert.NoError(t, err) assert.NoError(t, err)
} }
func TestEmojiService_Update(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/api/v1/testsubreddit/emoji_permissions", func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, http.MethodPost, r.Method)
form := url.Values{}
form.Set("name", "testemoji")
form.Set("post_flair_allowed", "false")
form.Set("mod_flair_only", "true")
err := r.ParseForm()
assert.NoError(t, err)
assert.Equal(t, form, r.Form)
})
_, err := client.Emoji.Update(ctx, "testsubreddit", nil)
assert.EqualError(t, err, "updateRequest: cannot be nil")
_, err = client.Emoji.Update(ctx, "testsubreddit", &EmojiCreateOrUpdateRequest{Name: ""})
assert.EqualError(t, err, "name: cannot be empty")
_, err = client.Emoji.Update(ctx, "testsubreddit", &EmojiCreateOrUpdateRequest{
Name: "testemoji",
PostFlairAllowed: Bool(false),
ModFlairOnly: Bool(true),
})
assert.NoError(t, err)
}