package main import ( "sort" "testing" "time" "go-mod.ewintr.nl/planner/item" ) func TestMemoryItem(t *testing.T) { t.Parallel() mem := NewMemory() t.Log("start empty") actItems, actErr := mem.Updated([]item.Kind{}, time.Time{}) if actErr != nil { t.Errorf("exp nil, got %v", actErr) } if len(actItems) != 0 { t.Errorf("exp 0, got %d", len(actItems)) } t.Log("add one") t1 := item.NewItem(item.Kind("kinda"), "test") if actErr := mem.Update(t1); actErr != nil { t.Errorf("exp nil, got %v", actErr) } actItems, actErr = mem.Updated([]item.Kind{}, time.Time{}) if actErr != nil { t.Errorf("exp nil, got %v", actErr) } if len(actItems) != 1 { t.Errorf("exp 1, gor %d", len(actItems)) } if actItems[0].ID != t1.ID { t.Errorf("exp %v, got %v", actItems[0].ID, t1.ID) } before := time.Now() t.Log("add second") t2 := item.NewItem(item.Kind("kindb"), "test 2") if actErr := mem.Update(t2); actErr != nil { t.Errorf("exp nil, got %v", actErr) } actItems, actErr = mem.Updated([]item.Kind{}, time.Time{}) if actErr != nil { t.Errorf("exp nil, got %v", actErr) } if len(actItems) != 2 { t.Errorf("exp 2, gor %d", len(actItems)) } if actItems[0].ID != t1.ID { t.Errorf("exp %v, got %v", actItems[0].ID, t1.ID) } if actItems[1].ID != t2.ID { t.Errorf("exp %v, got %v", actItems[1].ID, t2.ID) } actItems, actErr = mem.Updated([]item.Kind{}, before) if actErr != nil { t.Errorf("exp nil, got %v", actErr) } if len(actItems) != 1 { t.Errorf("exp 1, gor %d", len(actItems)) } if actItems[0].ID != t2.ID { t.Errorf("exp %v, got %v", actItems[0].ID, t2.ID) } t.Log("update first") t1.Updated = time.Now() if actErr := mem.Update(t1); actErr != nil { t.Errorf("exp nil, got %v", actErr) } actItems, actErr = mem.Updated([]item.Kind{}, before) if actErr != nil { t.Errorf("exp nil, got %v", actErr) } if len(actItems) != 2 { t.Errorf("exp 2, gor %d", len(actItems)) } sort.Slice(actItems, func(i, j int) bool { return actItems[i].ID < actItems[j].ID }) expItems := []item.Item{t1, t2} sort.Slice(expItems, func(i, j int) bool { return expItems[i].ID < expItems[j].ID }) if actItems[0].ID != expItems[0].ID { t.Errorf("exp %v, got %v", actItems[0].ID, expItems[0].ID) } if actItems[1].ID != expItems[1].ID { t.Errorf("exp %v, got %v", actItems[1].ID, expItems[1].ID) } t.Log("select kind") actItems, actErr = mem.Updated([]item.Kind{"kinda"}, time.Time{}) if actErr != nil { t.Errorf("exp nil, got %v", actErr) } if len(actItems) != 1 { t.Errorf("exp 1, got %d", len(actItems)) } if actItems[0].ID != t1.ID { t.Errorf("exp %v, got %v", t1.ID, actItems[0].ID) } }