package core import ( "fmt" "slices" "testing" _ "github.com/mattn/go-sqlite3" ) func TestCreateSource(t *testing.T) { db := EphemeralDb(t) defer db.Close() if err := AddSource(db, "one"); err != nil { t.Fatal(err) } if err := AddSource(db, "two"); err != nil { t.Fatal(err) } if err := AddSource(db, "three"); err != nil { t.Fatal(err) } if err := DeleteSource(db, "two"); err != nil { t.Fatal(err) } rows, err := db.Query("select name from sources") if err != nil { t.Fatal(err) } var names []string expected := []string{"one", "three"} for rows.Next() { var name string rows.Scan(&name) names = append(names, name) } for i := 0; i < len(expected); i += 1 { if !slices.Contains(names, expected[i]) { t.Fatalf("missing %s, have: %v", expected[i], names) } } } 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) defer db.Close() if err := AddSource(db, "test"); err != nil { t.Fatal(err) } if err := AddItem(db, "test", "one", "", "", "", "", 0); err != nil { t.Fatal(err) } if err := AddItem(db, "test", "two", "title", "author", "body", "link", 123456); err != nil { t.Fatal(err) } items, err := GetActiveItemsForSource(db, "test") if err != nil { t.Fatal(err) } if len(items) != 2 { t.Fatal("should get two items") } AssertItemIs(t, items[0], "test/one/true/////0") AssertItemIs(t, items[1], "test/two/true/title/author/body/link/123456") 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") } }