package main import ( "log" "path/filepath" "time" . "gopkg.in/check.v1" ) type AlbumDatabaseSuite struct { db *AlbumDatabase } var _ = Suite(&AlbumDatabaseSuite{}) func (s *AlbumDatabaseSuite) SetUpSuite(c *C) { s.db = OpenAlbumDatabase(filepath.Join(c.MkDir(), "satdb.bar.satellite/db")) for _, a := range albumsDataTest { //we need to copy the value to avoid aliasing aCopied := a c.Assert(s.db.AddOrUpdate(&aCopied), IsNil) } } func (s *AlbumDatabaseSuite) TestCanDelete(c *C) { defer func() { //we can always add it twice c.Assert(s.db.AddOrUpdate(&(albumsDataTest[0])), IsNil) }() c.Assert(s.db.Delete(albumsDataTest[0].ID), IsNil) } func (s *AlbumDatabaseSuite) TestCanGet(c *C) { for _, a := range albumsDataTest { fromDb, err := s.db.Get(a.ID) if c.Check(err, IsNil) == true { c.Check(*fromDb, DeepEquals, a) } } } func (s *AlbumDatabaseSuite) TestCanSort(c *C) { start := time.Now() data := []AlbumID{160366, 58595, 15875, 9935, 84448, 46005, 19762, 164, 52100, 8179, 44989, 32043, 22737, 754} sorted, err := s.db.ByPurchaseDate() log.Printf("sorting took %s", time.Since(start)) c.Assert(err, IsNil) c.Assert(len(sorted), Equals, len(data)) for i, a := range sorted { c.Check(a, Equals, data[i], Commentf("expected %d", a)) } }