85 lines
2.2 KiB
Go
85 lines
2.2 KiB
Go
package core
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestItemFormatsExist(t *testing.T) {
|
|
for name := range AvailableFormats {
|
|
formatter, err := FormatAs(name)
|
|
if err != nil {
|
|
t.Fatalf("error getting formatter for available format %s: %v", name, err)
|
|
}
|
|
if formatter == nil {
|
|
t.Fatalf("formatter %s is nil", name)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestItemRoundTrip(t *testing.T) {
|
|
db := EphemeralDb(t)
|
|
if err := AddSource(db, "_"); err != nil {
|
|
t.Fatalf("failed to create source: %v", err)
|
|
}
|
|
|
|
item1 := Item{
|
|
Source: "_",
|
|
Id: "a",
|
|
Created: 0,
|
|
Active: true,
|
|
Title: "title",
|
|
Author: "author",
|
|
Body: "body",
|
|
Link: "link",
|
|
Time: 123456,
|
|
Action: map[string]json.RawMessage{
|
|
"hello": json.RawMessage(`"world"`),
|
|
},
|
|
}
|
|
if err := AddItems(db, []Item{item1}); err != nil {
|
|
t.Fatalf("update failed: %v", err)
|
|
}
|
|
item2, err := GetItem(db, item1.Source, item1.Id)
|
|
if err != nil {
|
|
t.Fatalf("could not get item: %v", err)
|
|
}
|
|
item2.Created = 0 // automatically set by db
|
|
if !ItemsAreEqual(item1, item2) {
|
|
t.Fatalf("items are not equal, err %v", err)
|
|
}
|
|
}
|
|
|
|
func TestItemLifecycleTimes(t *testing.T) {
|
|
db := EphemeralDb(t)
|
|
if err := AddSource(db, "_"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
now := time.Now()
|
|
|
|
// active item with expired ttd is deleted
|
|
add, del, err := UpdateWithFetchedItems(db, "_", nil, []Item{{Source: "_", Id: "_", Ttd: 1}}, now)
|
|
if add != 1 || del != 0 || err != nil {
|
|
t.Fatalf("unexpected update result: %d %d %v", add, del, err)
|
|
}
|
|
add, del, err = UpdateWithFetchedItems(db, "_", nil, []Item{}, now.Add(time.Second*5))
|
|
if add != 0 || del != 1 || err != nil {
|
|
t.Fatalf("unexpected update result: %d %d %v", add, del, err)
|
|
}
|
|
|
|
// inactive item with live ttl is kept
|
|
add, del, err = UpdateWithFetchedItems(db, "_", nil, []Item{{Source: "_", Id: "_", Ttl: 60}}, now)
|
|
if add != 1 || del != 0 || err != nil {
|
|
t.Fatalf("unexpected update result: %d %d %v", add, del, err)
|
|
}
|
|
if _, err = DeactivateItem(db, "_", "_"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
add, del, err = UpdateWithFetchedItems(db, "_", nil, []Item{}, now.Add(time.Second*5))
|
|
if add != 0 || del != 0 || err != nil {
|
|
t.Fatalf("unexpected update result: %d %d %v", add, del, err)
|
|
}
|
|
}
|