From c3cfc73840dbbae3fd2f787310eb32de07d2ed19 Mon Sep 17 00:00:00 2001 From: konrad Date: Wed, 24 Jan 2018 13:04:47 +0100 Subject: [PATCH] Added error type for no item title --- models/error.go | 13 +++++++++++++ models/item_test.go | 1 + models/items_add_update.go | 4 +--- routes/api/v1/items_add_update.go | 3 +++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/models/error.go b/models/error.go index 70674f4..89aad21 100644 --- a/models/error.go +++ b/models/error.go @@ -78,4 +78,17 @@ func (err ErrAuthorCannotBeEmpty) Error() string { return fmt.Sprintf("author cannot be empty") } +// ErrItemTitleCannotBeEmpty represents a "ErrItemTitleCannotBeEmpty" kind of error. +type ErrItemTitleCannotBeEmpty struct {} + +// IsErrItemTitleCannotBeEmpty checks if an error is a ErrItemTitleCannotBeEmpty. +func IsErrItemTitleCannotBeEmpty(err error) bool { + _, ok := err.(ErrItemTitleCannotBeEmpty) + return ok +} + +func (err ErrItemTitleCannotBeEmpty) Error() string { + return fmt.Sprintf("title cannot be empty") +} + diff --git a/models/item_test.go b/models/item_test.go index 1a1f801..478387a 100644 --- a/models/item_test.go +++ b/models/item_test.go @@ -53,6 +53,7 @@ func TestAddOrUpdateItem(t *testing.T) { // Pass an empty item to see if it fails _, err = AddOrUpdateItem(Item{}) assert.Error(t, err) + assert.True(t, IsErrItemTitleCannotBeEmpty(err)) // Update the item testitem.ID = item1.ID diff --git a/models/items_add_update.go b/models/items_add_update.go index 77e9013..efe94f2 100644 --- a/models/items_add_update.go +++ b/models/items_add_update.go @@ -1,7 +1,5 @@ package models -import "fmt" - // AddOrUpdateItem adds or updates a item from a item struct func AddOrUpdateItem(item Item) (newItem Item, err error) { // save the quantity for later use @@ -9,7 +7,7 @@ func AddOrUpdateItem(item Item) (newItem Item, err error) { if item.ID == 0 { if item.Title == "" { // Only insert it if the title is not empty - return Item{}, fmt.Errorf("You need at least a title to create an item") + return Item{}, ErrItemTitleCannotBeEmpty{} } _, err = x.Insert(&item) diff --git a/routes/api/v1/items_add_update.go b/routes/api/v1/items_add_update.go index de07876..6fbb927 100644 --- a/routes/api/v1/items_add_update.go +++ b/routes/api/v1/items_add_update.go @@ -57,6 +57,9 @@ func ItemAddOrUpdate(c echo.Context) error { newItem, err := models.AddOrUpdateItem(*datItem) if err != nil { + if models.IsErrItemTitleCannotBeEmpty(err) { + return c.JSON(http.StatusInternalServerError, models.Message{"Please provide at least a title for the item."}) + } return c.JSON(http.StatusInternalServerError, models.Message{"Error"}) }