From 09bfc47ef003297fd62ae4e73da7189a34fb33ba Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Mon, 5 Apr 2021 19:02:31 +0100 Subject: [PATCH] start storage tests --- src/storage/feed.go | 46 +++++++++++++++++++++---------------- src/storage/feed_test.go | 41 +++++++++++++++++++++++++++++++++ src/storage/storage_test.go | 18 +++++++++++++++ 3 files changed, 85 insertions(+), 20 deletions(-) create mode 100644 src/storage/feed_test.go create mode 100644 src/storage/storage_test.go diff --git a/src/storage/feed.go b/src/storage/feed.go index 03694c1..7c49a8c 100644 --- a/src/storage/feed.go +++ b/src/storage/feed.go @@ -1,6 +1,7 @@ package storage import ( + "database/sql" "html" "log" "net/url" @@ -59,11 +60,19 @@ func (s *Storage) CreateFeed(title, description, link, feedLink string, folderId } func (s *Storage) DeleteFeed(feedId int64) bool { - _, err := s.db.Exec(`delete from feeds where id = ?`, feedId) + result, err := s.db.Exec(`delete from feeds where id = ?`, feedId) if err != nil { log.Print(err) + return false } - return err == nil + nrows, err := result.RowsAffected() + if err != nil { + if err != sql.ErrNoRows { + log.Print(err) + } + return false + } + return nrows == 1 } func (s *Storage) RenameFeed(feedId int64, newTitle string) bool { @@ -114,26 +123,23 @@ func (s *Storage) ListFeeds() []Feed { } func (s *Storage) GetFeed(id int64) *Feed { - row := s.db.QueryRow(` - select id, folder_id, title, description, link, feed_link, icon, - ifnull(icon, '') != '' as has_icon + var f Feed + err := s.db.QueryRow(` + select + id, folder_id, title, link, feed_link, + icon, ifnull(icon, '') != '' as has_icon from feeds where id = ? - `, id) - if row != nil { - var f Feed - row.Scan( - &f.Id, - &f.FolderId, - &f.Title, - &f.Description, - &f.Link, - &f.FeedLink, - &f.Icon, - &f.HasIcon, - ) - return &f + `, id).Scan( + &f.Id, &f.FolderId, &f.Title, &f.Link, &f.FeedLink, + &f.Icon, &f.HasIcon, + ) + if err != nil { + if err != sql.ErrNoRows { + log.Print(err) + } + return nil } - return nil + return &f } func (s *Storage) ResetFeedErrors() { diff --git a/src/storage/feed_test.go b/src/storage/feed_test.go new file mode 100644 index 0000000..e22d974 --- /dev/null +++ b/src/storage/feed_test.go @@ -0,0 +1,41 @@ +package storage + +import ( + "reflect" + "testing" +) + +func TestCreateFeed(t *testing.T) { + db := testDB() + feed1 := db.CreateFeed("title", "", "http://example.com", "http://example.com/feed.xml", nil) + if feed1 == nil || feed1.Id == 0 { + t.Fatal("expected feed") + } + feed2 := db.GetFeed(feed1.Id) + if feed2 == nil || !reflect.DeepEqual(feed1, feed2) { + t.Fatal("invalid feed") + } +} + +func TestReadFeed(t *testing.T) { + db := testDB() + if db.GetFeed(100500) != nil { + t.Fatal("cannot get nonexistent feed") + } +} + +func TestDeleteFeed(t *testing.T) { + db := testDB() + feed1 := db.CreateFeed("title", "", "http://example.com", "http://example.com/feed.xml", nil) + + if db.DeleteFeed(100500) { + t.Error("cannot delete what does not exist") + } + + if !db.DeleteFeed(feed1.Id) { + t.Fatal("did not delete existing feed") + } + if db.GetFeed(feed1.Id) != nil { + t.Fatal("feed still exists") + } +} diff --git a/src/storage/storage_test.go b/src/storage/storage_test.go new file mode 100644 index 0000000..0e05281 --- /dev/null +++ b/src/storage/storage_test.go @@ -0,0 +1,18 @@ +package storage + +import ( + "io" + "log" + "os" +) + +func testDB() *Storage { + log.SetOutput(io.Discard) + db, err := New(":memory:") + if err != nil { + os.Stderr.WriteString(err.Error()) + os.Exit(1) + } + log.SetOutput(os.Stderr) + return db +}