From 0206d6e63427c168fe6f0fcdf2bee17e964a3d65 Mon Sep 17 00:00:00 2001 From: siddharth Date: Sun, 28 Nov 2021 17:55:37 -0500 Subject: db: add FernDB.Add --- db/db.go | 14 +++++++++++++ db/db_test.go | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) (limited to 'db') diff --git a/db/db.go b/db/db.go index 6dfda22..bbe5b36 100644 --- a/db/db.go +++ b/db/db.go @@ -82,3 +82,17 @@ func (fdb *FernDB) Exists(feed, entry string) bool { } +func (fdb *FernDB) Add(feed, entry string) { + // Check if entry already exist for feed. + if fdb.Exists(feed, entry) { + return + } + + // Add entry. + fdb.mutex.Lock() + if _, ok := fdb.downloaded[feed]; !ok { + fdb.downloaded[feed] = make([]string, 0) + } + fdb.downloaded[feed] = append(fdb.downloaded[feed], entry) + fdb.mutex.Unlock() +} diff --git a/db/db_test.go b/db/db_test.go index 9a8642a..8fc9fed 100644 --- a/db/db_test.go +++ b/db/db_test.go @@ -182,3 +182,69 @@ func TestExists(t *testing.T) { return } } + +func TestAdd(t *testing.T) { + // Set custom path for db. + dbPath = path.Join(os.TempDir(), "fern-db.json") + defer os.Remove(dbPath) + + // Write a sample test db to fern-db.json + testDBJSON := []byte(`{"npr":["william-prince","joy-oladokun"]}`) + dbFile, err := os.Create(dbPath) + defer dbFile.Close() + if err != nil { + t.Errorf("Unable to create fern-db.json: %v", err.Error()) + return + } + n, err := dbFile.Write(testDBJSON) + if len(testDBJSON) != n { + t.Errorf("Write to fern-db.json failed: %v", err.Error()) + return + } + + // Open the db. + db, err := Open() + if err != nil { + t.Errorf("db.Open failed: %v", err.Error()) + return + } + + // Test `Add` for an existing feed. + db.Add("npr", "julian-baker") + if len(db.downloaded["npr"]) != 3 { + t.Errorf("db.Add failed: expected 3 entries for 'npr'") + return + } + if !db.Exists("npr", "julian-baker") { + t.Errorf("db.Add failed: expected %s in 'npr' feed", + "julian-baker") + return + } + db.Add("npr", "julian-baker") + if len(db.downloaded["npr"]) != 3 { + t.Errorf("db.Add failed: expected 3 entries for 'npr'") + return + } + + // Test `Add` for nonexistent feed. + db.Add("mark-rober", "glitter-bomb") + if len(db.downloaded["mark-rober"]) != 1 { + t.Errorf("db.Add failed: expected 1 entry for 'mark-rober'") + return + } + if !db.Exists("mark-rober", "glitter-bomb") { + t.Errorf("db.Add failed: expected %s in 'mark-rober' feed", + "glitter-bomb") + return + } + db.Add("mark-rober", "squirrel-maze") + if len(db.downloaded["mark-rober"]) != 2 { + t.Errorf("db.Add failed: expected 2 entries for 'mark-rober'") + return + } + if !db.Exists("mark-rober", "squirrel-maze") { + t.Errorf("db.Add failed: expected %s in 'mark-rober' feed", + "squirrel-maze") + return + } +} -- cgit v1.2.3