From 67cedb1f819c04d7bb966dbacc44cfa2f1eb1feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Garcia?= Date: Fri, 11 Sep 2020 18:59:55 -0300 Subject: [PATCH] Add delete operation --- postgres.go | 15 ++++++++++++++ postgres_test.go | 53 ++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/postgres.go b/postgres.go index 39cf009..fcc562f 100644 --- a/postgres.go +++ b/postgres.go @@ -52,3 +52,18 @@ func (c Client) Insert( return nil } + +// Delete deletes one or more instances from the database by id +func (c Client) Delete( + ctx context.Context, + entities ...interface{}, +) error { + for _, entity := range entities { + r := c.db.Table(c.tableName).Delete(entity) + if r.Error != nil { + return r.Error + } + } + + return nil +} diff --git a/postgres_test.go b/postgres_test.go index 2f5bb29..1a06958 100644 --- a/postgres_test.go +++ b/postgres_test.go @@ -75,8 +75,7 @@ func TestInsert(t *testing.T) { tableName: "users", } - user := User{} - err = c.Insert(ctx, &user) + err = c.Insert(ctx) assert.Equal(t, err, nil) }) @@ -106,6 +105,56 @@ func TestInsert(t *testing.T) { }) } +func TestDelete(t *testing.T) { + err := createTable() + if err != nil { + t.Fatal("could not create test table!") + } + + t.Run("should ignore empty lists of users", func(t *testing.T) { + db := connectDB(t) + defer db.Close() + + ctx := context.Background() + c := Client{ + db: db, + tableName: "users", + } + + err = c.Delete(ctx) + assert.Equal(t, err, nil) + }) + + t.Run("should delete one user correctly", func(t *testing.T) { + db := connectDB(t) + defer db.Close() + + ctx := context.Background() + c := Client{ + db: db, + tableName: "users", + } + + u := User{ + Name: "Fernanda", + } + + err := c.Insert(ctx, &u) + assert.Equal(t, err, nil) + + err = c.Delete(ctx, &u) + assert.Equal(t, err, nil) + + result := User{} + it := c.db.Raw("SELECT * FROM users WHERE id=?", u.ID) + it.Scan(&result) + + assert.Equal(t, it.Error, nil) + assert.Equal(t, uint(0), result.ID) + assert.Equal(t, "", result.Name) + }) +} + func createTable() error { db, err := gorm.Open("sqlite3", "/tmp/test.db") if err != nil {