diff --git a/pkg/pmapi/labels.go b/pkg/pmapi/labels.go index ad0d2133..8b8922ce 100644 --- a/pkg/pmapi/labels.go +++ b/pkg/pmapi/labels.go @@ -17,7 +17,10 @@ package pmapi -import "fmt" +import ( + "errors" + "fmt" +) // System labels const ( @@ -129,6 +132,10 @@ type LabelRes struct { // CreateLabel creates a new label. func (c *client) CreateLabel(label *Label) (created *Label, err error) { + if label.Name == "" { + return nil, errors.New("name is required") + } + labelReq := &LabelReq{label} req, err := c.NewJSONRequest("POST", "/labels", labelReq) if err != nil { @@ -146,6 +153,10 @@ func (c *client) CreateLabel(label *Label) (created *Label, err error) { // UpdateLabel updates a label. func (c *client) UpdateLabel(label *Label) (updated *Label, err error) { + if label.Name == "" { + return nil, errors.New("name is required") + } + labelReq := &LabelReq{label} req, err := c.NewJSONRequest("PUT", "/labels/"+label.ID, labelReq) if err != nil { diff --git a/pkg/pmapi/labels_test.go b/pkg/pmapi/labels_test.go index d3c556a7..82f422c5 100644 --- a/pkg/pmapi/labels_test.go +++ b/pkg/pmapi/labels_test.go @@ -147,6 +147,16 @@ func TestClient_CreateLabel(t *testing.T) { } } +func TestClient_CreateEmptyLabel(t *testing.T) { + s, c := newTestServer(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) { + r.Fail(t, "API should not be called") + })) + defer s.Close() + + _, err := c.CreateLabel(&Label{}) + r.EqualError(t, err, "name is required") +} + func TestClient_UpdateLabel(t *testing.T) { s, c := newTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { Ok(t, checkMethodAndPath(r, "PUT", "/labels/"+testLabelCreated.ID)) @@ -173,6 +183,16 @@ func TestClient_UpdateLabel(t *testing.T) { } } +func TestClient_UpdateLabelToEmptyName(t *testing.T) { + s, c := newTestServer(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) { + r.Fail(t, "API should not be called") + })) + defer s.Close() + + _, err := c.UpdateLabel(&Label{ID: "label"}) + r.EqualError(t, err, "name is required") +} + func TestClient_DeleteLabel(t *testing.T) { s, c := newTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { Ok(t, checkMethodAndPath(r, "DELETE", "/labels/"+testLabelCreated.ID)) diff --git a/unreleased.md b/unreleased.md index 42167d67..e53abaf2 100644 --- a/unreleased.md +++ b/unreleased.md @@ -22,3 +22,4 @@ Changelog [format](http://keepachangelog.com/en/1.0.0/) * GODT-389 Prefer `From` header instead of `MAIL FROM` address. * GODT-898 Only set ContentID for inline attachments. * GODT-773 Replace `INTERNALDATE` older than birthday of RFC822 by birthday of RFC822 to not crash Apple Mail. +* GODT-927 Avoid to call API with empty label name.