diff --git a/emoji.go b/emoji.go index 2781ed8..523923d 100644 --- a/emoji.go +++ b/emoji.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "net/http" + "net/url" "strings" ) @@ -70,6 +71,13 @@ func (s *EmojiService) Get(ctx context.Context, subreddit string) ([]*Emoji, []* return nil, nil, resp, err } + /* + The response to this request is something like: + { + "snoomojis": { ... }, + "t5_subredditId": { ... } + } + */ defaultEmojis := root["snoomojis"] var subredditEmojis []*Emoji @@ -82,3 +90,46 @@ func (s *EmojiService) Get(ctx context.Context, subreddit string) ([]*Emoji, []* return defaultEmojis, subredditEmojis, resp, nil } + +// Delete deletes the emoji from the subreddit. +func (s *EmojiService) Delete(ctx context.Context, subreddit string, emoji string) (*Response, error) { + path := fmt.Sprintf("api/v1/%s/emoji/%s", subreddit, emoji) + + req, err := s.client.NewRequest(http.MethodDelete, path, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +//todo: fav subreddits + +// SetSize sets the custom emoji size in the subreddit. +// Both height and width must be between 1 and 40 (inclusive). +func (s *EmojiService) SetSize(ctx context.Context, subreddit string, height, width int) (*Response, error) { + path := fmt.Sprintf("api/v1/%s/emoji_custom_size", subreddit) + + form := url.Values{} + form.Set("height", fmt.Sprint(height)) + form.Set("width", fmt.Sprint(width)) + + req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// DisableCustomSize disables the custom emoji size in the subreddit. +func (s *EmojiService) DisableCustomSize(ctx context.Context, subreddit string) (*Response, error) { + path := fmt.Sprintf("api/v1/%s/emoji_custom_size", subreddit) + + req, err := s.client.NewRequestWithForm(http.MethodPost, path, nil) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/emoji_test.go b/emoji_test.go index 918d06b..d7b8d98 100644 --- a/emoji_test.go +++ b/emoji_test.go @@ -3,6 +3,7 @@ package reddit import ( "fmt" "net/http" + "net/url" "testing" "github.com/stretchr/testify/assert" @@ -55,3 +56,53 @@ func TestEmojiService_Get(t *testing.T) { assert.Equal(t, expectedDefaultEmojis, defaultEmojis) assert.Equal(t, expectedSubredditEmojis, subredditEmojis) } + +func TestEmojiService_Delete(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/v1/testsubreddit/emoji/testemoji", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodDelete, r.Method) + }) + + _, err := client.Emoji.Delete(ctx, "testsubreddit", "testemoji") + assert.NoError(t, err) +} + +func TestEmojiService_SetSize(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/v1/testsubreddit/emoji_custom_size", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("height", "20") + form.Set("width", "20") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.Form) + }) + + _, err := client.Emoji.SetSize(ctx, "testsubreddit", 20, 20) + assert.NoError(t, err) +} + +func TestEmojiService_DisableCustomSize(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/v1/testsubreddit/emoji_custom_size", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.Form) + }) + + _, err := client.Emoji.DisableCustomSize(ctx, "testsubreddit") + assert.NoError(t, err) +}