start storage tests

This commit is contained in:
Nazar Kanaev 2021-04-05 19:02:31 +01:00
parent 2e5ccc3158
commit 09bfc47ef0
3 changed files with 85 additions and 20 deletions

View File

@ -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
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,
err := s.db.QueryRow(`
select
id, folder_id, title, link, feed_link,
icon, ifnull(icon, '') != '' as has_icon
from feeds where id = ?
`, id).Scan(
&f.Id, &f.FolderId, &f.Title, &f.Link, &f.FeedLink,
&f.Icon, &f.HasIcon,
)
return &f
if err != nil {
if err != sql.ErrNoRows {
log.Print(err)
}
return nil
}
return &f
}
func (s *Storage) ResetFeedErrors() {

41
src/storage/feed_test.go Normal file
View File

@ -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")
}
}

View File

@ -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
}