func TestPutInDateOrder(t *testing.T) { defer tearDown() var store = new(FileStore) store.ClearMessages() var mess = store.GetToMessage() if len(mess) != 0 { fmt.Println(mess) t.Error("Should have no new result to message but has", len(mess)) } var data = new(feeds.RssResult) data.Item.Title = "Golang content two hours ahead" data.Date = time.Now().Add(time.Hour) var link = "http://one" store.Save(*data, link, filename) mess = store.GetToMessage() if len(mess) != 1 { t.Error("Should have one new result to message but has", len(mess)) } var data2 = new(feeds.RssResult) data2.Item.Title = "Golang content one hour ahead" data2.Date = time.Now().Add(time.Hour).Add(time.Hour) var link2 = "http://two" store.Save(*data2, link2, filename) mess = store.GetToMessage() if len(mess) != 2 { t.Error("Should have two new result to message but has", len(mess)) } var gotit = store.AlreadyHave(link2, filename) if !gotit { t.Error(link2, " has been stored but isn't") } var data3 = new(feeds.RssResult) data3.Item.Title = "Golang content now" data3.Date = time.Now() var link3 = "http://three" store.Save(*data3, link3, filename) mess = store.GetToMessage() if len(mess) != 3 { t.Error("Should have three new result to message but has", len(mess)) } var data4 = new(feeds.RssResult) data4.Item.Title = "Golang content one hour behind" data4.Date = time.Now().Add(-time.Hour) data4.Failed = true var link4 = "http://four" store.Save(*data4, link4, filename) mess = store.GetToMessage() if len(mess) != 3 { t.Error("Should still have three new result to message but has", len(mess)) } var data5 = new(feeds.RssResult) data5.Item.Title = "Golang content two hours behind" data5.Date = time.Now().Add(-time.Hour).Add(-time.Hour) data5.Failed = false var link5 = "http://five.rss" store.Save(*data5, link5, filename) mess = store.GetToMessage() if len(mess) != 4 { t.Error("Should have four new result to message but has", len(mess)) } var res = store.GetLast(10, filename) if len(res) != 5 { t.Error("Should have five results with a title") } var check = func(no int, title string) { if res[no].Item.Title != title { fmt.Println(res[no]) t.Error("Expected '" + res[no].Item.Title + "' to equal '" + title + "'") } } check(0, data2.Item.Title) check(1, data.Item.Title) check(2, data3.Item.Title) check(3, data4.Item.Title) check(4, data5.Item.Title) gotit = store.AlreadyHave(link, filename) if !gotit { t.Error(link, " has been stored but isn't") } gotit = store.AlreadyHave(link3, filename) if !gotit { t.Error(link3, " has been stored but isn't") } gotit = store.AlreadyHave(link4, filename) if !gotit { t.Error(link4, " has been stored but isn't") } gotit = store.AlreadyHave(link5, filename) if !gotit { t.Error(link5, " has been stored but isn't") } gotit = store.AlreadyHave("no not yet rss feed link result", filename) if gotit { t.Error("This has not been stored but is") } res = store.GetLast(4, filename) if len(res) != 4 { t.Error("Should be restricted to four results with a title") } }