diff --git a/reddit/flair.go b/reddit/flair.go index 560385b..16e3611 100644 --- a/reddit/flair.go +++ b/reddit/flair.go @@ -163,3 +163,67 @@ func (s *FlairService) Disable(ctx context.Context, subreddit string) (*Response return s.client.Do(ctx, req, nil) } + +// Delete the flair of the user. +func (s *FlairService) Delete(ctx context.Context, subreddit, username string) (*Response, error) { + path := fmt.Sprintf("r/%s/api/deleteflair", subreddit) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("name", username) + + req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// DeleteTemplate deletes the flair template via its id. +func (s *FlairService) DeleteTemplate(ctx context.Context, subreddit, id string) (*Response, error) { + path := fmt.Sprintf("r/%s/api/deleteflairtemplate", subreddit) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("flair_template_id", id) + + req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// DeleteAllUserTemplates deletes all user flair templates. +func (s *FlairService) DeleteAllUserTemplates(ctx context.Context, subreddit string) (*Response, error) { + path := fmt.Sprintf("r/%s/api/clearflairtemplates", subreddit) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("flair_type", "USER_FLAIR") + + req, err := s.client.NewRequestWithForm(http.MethodPost, path, form) + if err != nil { + return nil, err + } + + return s.client.Do(ctx, req, nil) +} + +// DeleteAllPostTemplates deletes all post flair templates. +func (s *FlairService) DeleteAllPostTemplates(ctx context.Context, subreddit string) (*Response, error) { + path := fmt.Sprintf("r/%s/api/clearflairtemplates", subreddit) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("flair_type", "LINK_FLAIR") + + 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/reddit/flair_test.go b/reddit/flair_test.go index 337b494..2c7de17 100644 --- a/reddit/flair_test.go +++ b/reddit/flair_test.go @@ -185,3 +185,83 @@ func TestFlairService_Disable(t *testing.T) { _, err := client.Flair.Disable(ctx, "testsubreddit") require.NoError(t, err) } + +func TestFlairService_Delete(t *testing.T) { + client, mux, teardown := setup() + defer teardown() + + mux.HandleFunc("/r/testsubreddit/api/deleteflair", func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("name", "testuser") + + err := r.ParseForm() + require.NoError(t, err) + require.Equal(t, form, r.PostForm) + }) + + _, err := client.Flair.Delete(ctx, "testsubreddit", "testuser") + require.NoError(t, err) +} + +func TestFlairService_DeleteTemplate(t *testing.T) { + client, mux, teardown := setup() + defer teardown() + + mux.HandleFunc("/r/testsubreddit/api/deleteflairtemplate", func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("flair_template_id", "testtemplate") + + err := r.ParseForm() + require.NoError(t, err) + require.Equal(t, form, r.PostForm) + }) + + _, err := client.Flair.DeleteTemplate(ctx, "testsubreddit", "testtemplate") + require.NoError(t, err) +} + +func TestFlairService_DeleteAllUserTemplates(t *testing.T) { + client, mux, teardown := setup() + defer teardown() + + mux.HandleFunc("/r/testsubreddit/api/clearflairtemplates", func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("flair_type", "USER_FLAIR") + + err := r.ParseForm() + require.NoError(t, err) + require.Equal(t, form, r.PostForm) + }) + + _, err := client.Flair.DeleteAllUserTemplates(ctx, "testsubreddit") + require.NoError(t, err) +} + +func TestFlairService_DeleteAllPostTemplates(t *testing.T) { + client, mux, teardown := setup() + defer teardown() + + mux.HandleFunc("/r/testsubreddit/api/clearflairtemplates", func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, http.MethodPost, r.Method) + + form := url.Values{} + form.Set("api_type", "json") + form.Set("flair_type", "LINK_FLAIR") + + err := r.ParseForm() + require.NoError(t, err) + require.Equal(t, form, r.PostForm) + }) + + _, err := client.Flair.DeleteAllPostTemplates(ctx, "testsubreddit") + require.NoError(t, err) +}