package mdb import ( "fmt" "reflect" "testing" ) func TestItemMap(t *testing.T) { // expected is a map of users. run := func(name string, inner func(t *testing.T, db *DB) (expected map[uint64]*User)) { testWithDB(t, name, func(t *testing.T, db *DB) { expected := inner(t, db) if err := db.Users.c.items.EqualsMap(expected); err != nil { t.Fatal(err) } if err := db.Users.c.items.EqualsKV(); err != nil { t.Fatal(err) } db.Close() db = OpenDB(db.root, true) if err := db.Users.c.items.EqualsMap(expected); err != nil { t.Fatal(err) } if err := db.Users.c.items.EqualsKV(); err != nil { t.Fatal(err) } }) } run("simple", func(t *testing.T, db *DB) (expected map[uint64]*User) { users := map[uint64]*User{} c := db.Users.c for i := uint64(1); i < 10; i++ { id := c.NextID() users[id] = &User{ ID: id, Email: fmt.Sprintf("a.%d@c.com", i), Name: fmt.Sprintf("name.%d", i), ExtID: fmt.Sprintf("EXTID.%d", i), } user, err := c.Insert(*users[id]) if err != nil { t.Fatal(err) } if !reflect.DeepEqual(user, *users[id]) { t.Fatal(user, *users[id]) } } return users }) run("insert and delete", func(t *testing.T, db *DB) (expected map[uint64]*User) { users := map[uint64]*User{} c := db.Users.c for x := uint64(1); x < 10; x++ { id := c.NextID() users[id] = &User{ ID: id, Email: fmt.Sprintf("a.%d@c.com", x), Name: fmt.Sprintf("name.%d", x), ExtID: fmt.Sprintf("EXTID.%d", x), } user, err := c.Insert(*users[id]) if err != nil { t.Fatal(err) } if !reflect.DeepEqual(user, *users[id]) { t.Fatal(user, *users[id]) } } var id uint64 for key := range users { id = key } delete(users, id) c.Delete(id) return users }) run("update", func(t *testing.T, db *DB) (expected map[uint64]*User) { users := map[uint64]*User{} c := db.Users.c for x := uint64(1); x < 10; x++ { id := c.NextID() users[id] = &User{ ID: id, Email: fmt.Sprintf("a.%d@c.com", x), Name: fmt.Sprintf("name.%d", x), ExtID: fmt.Sprintf("EXTID.%d", x), } user, err := c.Insert(*users[id]) if err != nil { t.Fatal(err) } if !reflect.DeepEqual(user, *users[id]) { t.Fatal(user, *users[id]) } } var id uint64 for key := range users { id = key } err := c.Update(id, func(u User) (User, error) { u.Name = "Hello" return u, nil }) if err != nil { t.Fatal(err) } users[id].Name = "Hello" return users }) }