From e3c51a2a76321de49f1d8e4a85279e14bedfe96b Mon Sep 17 00:00:00 2001 From: Vartan Benohanian Date: Mon, 10 Aug 2020 23:05:36 -0400 Subject: [PATCH] Add emoji upload test Signed-off-by: Vartan Benohanian --- emoji.go | 2 +- emoji_test.go | 97 ++++++++++++++++++++++++++++++++++++++- testdata/emoji/lease.json | 15 ++++++ 3 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 testdata/emoji/lease.json diff --git a/emoji.go b/emoji.go index d9c032d..9216921 100644 --- a/emoji.go +++ b/emoji.go @@ -150,7 +150,7 @@ func (s *EmojiService) lease(ctx context.Context, subreddit, imagePath string) ( form := url.Values{} form.Set("filepath", imagePath) form.Set("mimetype", "image/jpeg") - if strings.HasSuffix(strings.ToLower(path), ".png") { + if strings.HasSuffix(strings.ToLower(imagePath), ".png") { form.Set("mimetype", "image/png") } diff --git a/emoji_test.go b/emoji_test.go index 6055f11..3bc0862 100644 --- a/emoji_test.go +++ b/emoji_test.go @@ -1,9 +1,13 @@ package reddit import ( + "bytes" "fmt" + "io" + "io/ioutil" "net/http" "net/url" + "os" "testing" "github.com/stretchr/testify/assert" @@ -43,7 +47,7 @@ func TestEmojiService_Get(t *testing.T) { setup() defer teardown() - blob, err := readFileContents("./testdata/emoji/emojis.json") + blob, err := readFileContents("testdata/emoji/emojis.json") assert.NoError(t, err) mux.HandleFunc("/api/v1/test/emojis/all", func(w http.ResponseWriter, r *http.Request) { @@ -109,6 +113,97 @@ func TestEmojiService_DisableCustomSize(t *testing.T) { assert.NoError(t, err) } +func TestEmojiService_Upload(t *testing.T) { + setup() + defer teardown() + + u, err := url.Parse(server.URL) + assert.NoError(t, err) + + uploadURL := u.Host + "/api/emoji_upload" + + blob, err := readFileContents("testdata/emoji/lease.json") + assert.NoError(t, err) + blob = fmt.Sprintf(blob, uploadURL) + + emojiFile, err := ioutil.TempFile("/tmp", "emoji*.png") + assert.NoError(t, err) + defer func() { + emojiFile.Close() + os.Remove(emojiFile.Name()) + }() + + _, err = emojiFile.WriteString("this is a test") + assert.NoError(t, err) + + mux.HandleFunc("/api/v1/testsubreddit/emoji_asset_upload_s3.json", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("filepath", emojiFile.Name()) + form.Set("mimetype", "image/png") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.Form) + + fmt.Fprint(w, blob) + }) + + mux.HandleFunc("/api/emoji_upload", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodPost, r.Method) + + _, file, err := r.FormFile("file") + assert.NoError(t, err) + + rdr, err := file.Open() + assert.NoError(t, err) + + buf := new(bytes.Buffer) + _, err = io.Copy(buf, rdr) + assert.NoError(t, err) + assert.Equal(t, "this is a test", buf.String()) + + form := url.Values{} + form.Set("key", "t5_2uquw1/t2_164ab8/a94a8f45ccb199a61c4c0873d391e98c982fabd3") + form.Set("test name", "test value") + + // for some reason this has to come after the FormFile call + err = r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.Form) + }) + + mux.HandleFunc("/api/v1/testsubreddit/emoji.json", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("name", "testemoji") + form.Set("user_flair_allowed", "false") + form.Set("post_flair_allowed", "true") + form.Set("mod_flair_only", "true") + form.Set("s3_key", "t5_2uquw1/t2_164ab8/a94a8f45ccb199a61c4c0873d391e98c982fabd3") + + err := r.ParseForm() + assert.NoError(t, err) + assert.Equal(t, form, r.Form) + }) + + _, err = client.Emoji.Upload(ctx, "testsubreddit", nil, emojiFile.Name()) + assert.EqualError(t, err, "createRequest: cannot be nil") + + _, err = client.Emoji.Upload(ctx, "testsubreddit", &EmojiCreateOrUpdateRequest{Name: ""}, emojiFile.Name()) + assert.EqualError(t, err, "name: cannot be empty") + + _, err = client.Emoji.Upload(ctx, "testsubreddit", &EmojiCreateOrUpdateRequest{ + Name: "testemoji", + UserFlairAllowed: Bool(false), + PostFlairAllowed: Bool(true), + ModFlairOnly: Bool(true), + }, emojiFile.Name()) + assert.NoError(t, err) +} + func TestEmojiService_Update(t *testing.T) { setup() defer teardown() diff --git a/testdata/emoji/lease.json b/testdata/emoji/lease.json new file mode 100644 index 0000000..1965ffc --- /dev/null +++ b/testdata/emoji/lease.json @@ -0,0 +1,15 @@ +{ + "s3UploadLease": { + "action": "//%s", + "fields": [ + { + "name": "key", + "value": "t5_2uquw1/t2_164ab8/a94a8f45ccb199a61c4c0873d391e98c982fabd3" + }, + { + "name": "test name", + "value": "test value" + } + ] + } +}