package core import ( "fmt" "testing" _ "github.com/mattn/go-sqlite3" ) func AssertItemIs(t *testing.T, item Item, expected string) { actual := fmt.Sprintf( "%s/%s/%t/%s/%s/%s/%s/%d", item.Source, item.Id, item.Active, item.Title, item.Author, item.Body, item.Link, item.Time, ) if actual != expected { t.Fatalf("expected %s, got %s", expected, actual) } } func TestAddItem(t *testing.T) { db := EphemeralDb(t) if err := AddSource(db, "test"); err != nil { t.Fatalf("failed to add source: %v", err) } if err := AddItems(db, []Item{ {"test", "one", 0, true, "", "", "", "", 0, nil}, {"test", "two", 0, true, "title", "author", "body", "link", 123456, nil}, }); err != nil { t.Fatalf("failed to add items: %v", err) } items, err := GetActiveItemsForSource(db, "test") if err != nil { t.Fatalf("failed to get active items: %v", err) } if len(items) != 2 { t.Fatal("should get two items") } // order is by (time ?? created) so this ordering is correct as long as you don't run it in early 1970 AssertItemIs(t, items[0], "test/two/true/title/author/body/link/123456") AssertItemIs(t, items[1], "test/one/true/////0") if _, err = DeactivateItem(db, "test", "one"); err != nil { t.Fatal(err) } items, err = GetActiveItemsForSource(db, "test") if err != nil { t.Fatal(err) } if len(items) != 1 { t.Fatal("should get one item") } items, err = GetAllItemsForSource(db, "test") if err != nil { t.Fatal(err) } if len(items) != 2 { t.Fatal("should get two items") } deleted, err := DeleteItem(db, "test", "one") if err != nil { t.Fatal(err) } if deleted != 1 { t.Fatal("expected one deletion") } deleted, err = DeleteItem(db, "test", "one") if err != nil { t.Fatal(err) } if deleted != 0 { t.Fatal("expected no deletion") } items, err = GetAllItemsForSource(db, "test") if err != nil { t.Fatal(err) } if len(items) != 1 { t.Fatal("should get one item") } }