115 lines
2.3 KiB
Go
115 lines
2.3 KiB
Go
package ramdb
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestRecord_NewRecord(t *testing.T) {
|
|
tests := []struct {
|
|
test string
|
|
key string
|
|
keyColumn string
|
|
data interface{}
|
|
expectedRecord *record
|
|
expectedError string
|
|
}{
|
|
{
|
|
test: "it should error if json serialization fails",
|
|
key: "test-record",
|
|
keyColumn: "test-column",
|
|
data: map[string]interface{}{
|
|
"error": make(chan int),
|
|
},
|
|
expectedError: "json: unsupported type: chan int",
|
|
},
|
|
{
|
|
test: "it should return a valid record when successful",
|
|
key: "test-record",
|
|
keyColumn: "test-column",
|
|
data: struct{}{},
|
|
expectedRecord: &record{
|
|
serialized: []byte("{}"),
|
|
key: "test-record",
|
|
keyColumn: "test-column",
|
|
id: 0x267fc212f178ef79,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.test, func(t *testing.T) {
|
|
r, err := NewRecord(tc.key, tc.keyColumn, tc.data)
|
|
|
|
assert.Equal(t, tc.expectedRecord, r)
|
|
if tc.expectedError != "" {
|
|
assert.Equal(t, tc.expectedError, err.Error())
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRecord_keyHash(t *testing.T) {
|
|
tests := []struct {
|
|
test string
|
|
input string
|
|
output uint64
|
|
}{
|
|
{
|
|
test: "it should hash the input deterministically",
|
|
input: "test string",
|
|
output: 0xd5579c46dfcc7f18,
|
|
},
|
|
{
|
|
test: "it should produce an entirely different value with a small change to input",
|
|
input: "test string.",
|
|
output: 0x84083c0b244440c0,
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.test, func(t *testing.T) {
|
|
result := keyHash(tc.input)
|
|
|
|
assert.Equal(t, tc.output, result)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRecord_Deserialize(t *testing.T) {
|
|
tests := []struct {
|
|
test string
|
|
into struct{ Key string }
|
|
expectedInto struct{ Key string }
|
|
expectedError error
|
|
}{
|
|
{
|
|
test: "it should unmarshal record data into into",
|
|
into: struct {
|
|
Key string
|
|
}{},
|
|
expectedInto: struct {
|
|
Key string
|
|
}{
|
|
Key: "test string",
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.test, func(t *testing.T) {
|
|
rec, err := NewRecord("", "", struct{ Key string }{Key: "test string"})
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
into := tc.into
|
|
err = rec.Deserialize(&into)
|
|
|
|
assert.Equal(t, tc.expectedInto, into)
|
|
assert.Equal(t, tc.expectedError, err)
|
|
})
|
|
}
|
|
}
|