diff --git a/private-message.go b/message.go similarity index 72% rename from private-message.go rename to message.go index e16dc5b..4b027cf 100644 --- a/private-message.go +++ b/message.go @@ -8,18 +8,18 @@ import ( "strings" ) -// PrivateMessageService handles communication with the private message +// MessageService handles communication with the message // related methods of the Reddit API. // // Reddit API docs: https://www.reddit.com/dev/api/#section_messages -type PrivateMessageService struct { +type MessageService struct { client *Client } // ReadAll marks all messages/comments as read. It queues up the task on Reddit's end. // A successful response returns 202 to acknowledge acceptance of the request. // This endpoint is heavily rate limited. -func (s *PrivateMessageService) ReadAll(ctx context.Context) (*Response, error) { +func (s *MessageService) ReadAll(ctx context.Context) (*Response, error) { path := "api/read_all_messages" req, err := s.client.NewRequest(http.MethodPost, path, nil) @@ -31,7 +31,7 @@ func (s *PrivateMessageService) ReadAll(ctx context.Context) (*Response, error) } // Read marks a message/comment as read via its full ID. -func (s *PrivateMessageService) Read(ctx context.Context, ids ...string) (*Response, error) { +func (s *MessageService) Read(ctx context.Context, ids ...string) (*Response, error) { if len(ids) == 0 { return nil, errors.New("must provide at least 1 id") } @@ -50,7 +50,7 @@ func (s *PrivateMessageService) Read(ctx context.Context, ids ...string) (*Respo } // Unread marks a message/comment as unread via its full ID. -func (s *PrivateMessageService) Unread(ctx context.Context, ids ...string) (*Response, error) { +func (s *MessageService) Unread(ctx context.Context, ids ...string) (*Response, error) { if len(ids) == 0 { return nil, errors.New("must provide at least 1 id") } @@ -70,7 +70,7 @@ func (s *PrivateMessageService) Unread(ctx context.Context, ids ...string) (*Res // Block blocks the author of a thing via the thing's full ID. // The thing can be a post, comment or message. -func (s *PrivateMessageService) Block(ctx context.Context, id string) (*Response, error) { +func (s *MessageService) Block(ctx context.Context, id string) (*Response, error) { path := "api/block" form := url.Values{} @@ -85,7 +85,7 @@ func (s *PrivateMessageService) Block(ctx context.Context, id string) (*Response } // Collapse collapses messages. -func (s *PrivateMessageService) Collapse(ctx context.Context, ids ...string) (*Response, error) { +func (s *MessageService) Collapse(ctx context.Context, ids ...string) (*Response, error) { if len(ids) == 0 { return nil, errors.New("must provide at least 1 id") } @@ -104,7 +104,7 @@ func (s *PrivateMessageService) Collapse(ctx context.Context, ids ...string) (*R } // Uncollapse uncollapses messages. -func (s *PrivateMessageService) Uncollapse(ctx context.Context, ids ...string) (*Response, error) { +func (s *MessageService) Uncollapse(ctx context.Context, ids ...string) (*Response, error) { if len(ids) == 0 { return nil, errors.New("must provide at least 1 id") } @@ -121,3 +121,18 @@ func (s *PrivateMessageService) Uncollapse(ctx context.Context, ids ...string) ( return s.client.Do(ctx, req, nil) } + +// Delete deletes a message. +func (s *MessageService) Delete(ctx context.Context, id string) (*Response, error) { + path := "api/del_msg" + + form := url.Values{} + form.Set("id", id) + + req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} diff --git a/private-message_test.go b/message_test.go similarity index 65% rename from private-message_test.go rename to message_test.go index 9ec7b6a..93015c9 100644 --- a/private-message_test.go +++ b/message_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/require" ) -func TestPrivateMessageService_ReadAll(t *testing.T) { +func TestMessageService_ReadAll(t *testing.T) { setup() defer teardown() @@ -17,12 +17,12 @@ func TestPrivateMessageService_ReadAll(t *testing.T) { w.WriteHeader(http.StatusAccepted) }) - res, err := client.PrivateMessage.ReadAll(ctx) + res, err := client.Message.ReadAll(ctx) require.NoError(t, err) require.Equal(t, http.StatusAccepted, res.StatusCode) } -func TestPrivateMessageService_Read(t *testing.T) { +func TestMessageService_Read(t *testing.T) { setup() defer teardown() @@ -37,14 +37,14 @@ func TestPrivateMessageService_Read(t *testing.T) { require.Equal(t, form, r.Form) }) - _, err := client.PrivateMessage.Read(ctx) + _, err := client.Message.Read(ctx) require.EqualError(t, err, "must provide at least 1 id") - _, err = client.PrivateMessage.Read(ctx, "test1", "test2", "test3") + _, err = client.Message.Read(ctx, "test1", "test2", "test3") require.NoError(t, err) } -func TestPrivateMessageService_Unread(t *testing.T) { +func TestMessageService_Unread(t *testing.T) { setup() defer teardown() @@ -59,14 +59,14 @@ func TestPrivateMessageService_Unread(t *testing.T) { require.Equal(t, form, r.Form) }) - _, err := client.PrivateMessage.Unread(ctx) + _, err := client.Message.Unread(ctx) require.EqualError(t, err, "must provide at least 1 id") - _, err = client.PrivateMessage.Unread(ctx, "test1", "test2", "test3") + _, err = client.Message.Unread(ctx, "test1", "test2", "test3") require.NoError(t, err) } -func TestPrivateMessageService_Block(t *testing.T) { +func TestMessageService_Block(t *testing.T) { setup() defer teardown() @@ -81,11 +81,11 @@ func TestPrivateMessageService_Block(t *testing.T) { require.Equal(t, form, r.Form) }) - _, err := client.PrivateMessage.Block(ctx, "test") + _, err := client.Message.Block(ctx, "test") require.NoError(t, err) } -func TestPrivateMessageService_Collapse(t *testing.T) { +func TestMessageService_Collapse(t *testing.T) { setup() defer teardown() @@ -100,14 +100,14 @@ func TestPrivateMessageService_Collapse(t *testing.T) { require.Equal(t, form, r.Form) }) - _, err := client.PrivateMessage.Collapse(ctx) + _, err := client.Message.Collapse(ctx) require.EqualError(t, err, "must provide at least 1 id") - _, err = client.PrivateMessage.Collapse(ctx, "test1", "test2", "test3") + _, err = client.Message.Collapse(ctx, "test1", "test2", "test3") require.NoError(t, err) } -func TestPrivateMessageService_Uncollapse(t *testing.T) { +func TestMessageService_Uncollapse(t *testing.T) { setup() defer teardown() @@ -122,9 +122,28 @@ func TestPrivateMessageService_Uncollapse(t *testing.T) { require.Equal(t, form, r.Form) }) - _, err := client.PrivateMessage.Uncollapse(ctx) + _, err := client.Message.Uncollapse(ctx) require.EqualError(t, err, "must provide at least 1 id") - _, err = client.PrivateMessage.Uncollapse(ctx, "test1", "test2", "test3") + _, err = client.Message.Uncollapse(ctx, "test1", "test2", "test3") + require.NoError(t, err) +} + +func TestMessageService_Delete(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/api/del_msg", func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("id", "test") + + err := r.ParseForm() + require.NoError(t, err) + require.Equal(t, form, r.Form) + }) + + _, err := client.Message.Delete(ctx, "test") require.NoError(t, err) } diff --git a/multi.go b/multi.go index ce7958a..0f31d07 100644 --- a/multi.go +++ b/multi.go @@ -101,7 +101,7 @@ type MultiCreateOrUpdateRequest struct { Name string `json:"display_name,omitempty"` Description string `json:"description_md,omitempty"` Subreddits SubredditNames `json:"subreddits,omitempty"` - // One of: private, public, hidden + // One of: private, public, hidden. Visibility string `json:"visibility,omitempty"` } diff --git a/reddit.go b/reddit.go index 05e8ed6..299bc35 100644 --- a/reddit.go +++ b/reddit.go @@ -91,18 +91,18 @@ type Client struct { // This is the client's user ID in Reddit's database. redditID string - Account *AccountService - Collection *CollectionService - Comment *CommentService - Emoji *EmojiService - Flair *FlairService - Listings *ListingsService - Moderation *ModerationService - Multi *MultiService - Post *PostService - PrivateMessage *PrivateMessageService - Subreddit *SubredditService - User *UserService + Account *AccountService + Collection *CollectionService + Comment *CommentService + Emoji *EmojiService + Flair *FlairService + Listings *ListingsService + Message *MessageService + Moderation *ModerationService + Multi *MultiService + Post *PostService + Subreddit *SubredditService + User *UserService oauth2Transport *oauth2.Transport @@ -146,9 +146,9 @@ func newClient(httpClient *http.Client) *Client { c.Emoji = &EmojiService{client: c} c.Flair = &FlairService{client: c} c.Listings = &ListingsService{client: c} + c.Message = &MessageService{client: c} c.Moderation = &ModerationService{client: c} c.Multi = &MultiService{client: c} - c.PrivateMessage = &PrivateMessageService{client: c} c.Subreddit = &SubredditService{client: c} c.User = &UserService{client: c} diff --git a/reddit_test.go b/reddit_test.go index bf0b7cd..ff05254 100644 --- a/reddit_test.go +++ b/reddit_test.go @@ -72,10 +72,10 @@ func testClientServices(t *testing.T, c *Client) { "Emoji", "Flair", "Listings", + "Message", "Moderation", "Multi", "Post", - "PrivateMessage", "Subreddit", "User", }