This repository has been archived on 2022-07-30. You can view files and clone it, but cannot push or open issues/pull-requests.
mdb/itemmap_test.go

128 lines
2.5 KiB
Go

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
})
}