Files
acme-dns/vendor/github.com/gavv/httpexpect/object_test.go
2018-01-22 11:19:33 +02:00

656 lines
12 KiB
Go

package httpexpect
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestObjectFailed(t *testing.T) {
chain := makeChain(newMockReporter(t))
chain.fail("fail")
value := &Object{chain, nil}
value.chain.assertFailed(t)
value.Path("$").chain.assertFailed(t)
value.Schema("")
assert.False(t, value.Keys() == nil)
assert.False(t, value.Values() == nil)
assert.False(t, value.Value("foo") == nil)
value.Keys().chain.assertFailed(t)
value.Values().chain.assertFailed(t)
value.Value("foo").chain.assertFailed(t)
value.Empty()
value.NotEmpty()
value.Equal(nil)
value.NotEqual(nil)
value.ContainsKey("foo")
value.NotContainsKey("foo")
value.ContainsMap(nil)
value.NotContainsMap(nil)
value.ValueEqual("foo", nil)
value.ValueNotEqual("foo", nil)
}
func TestObjectGetters(t *testing.T) {
reporter := newMockReporter(t)
m := map[string]interface{}{
"foo": 123.0,
"bar": []interface{}{"456", 789.0},
"baz": map[string]interface{}{
"a": "b",
},
}
value := NewObject(reporter, m)
keys := []interface{}{"foo", "bar", "baz"}
values := []interface{}{
123.0,
[]interface{}{"456", 789.0},
map[string]interface{}{
"a": "b",
},
}
assert.Equal(t, m, value.Raw())
value.chain.assertOK(t)
value.chain.reset()
assert.Equal(t, m, value.Path("$").Raw())
value.chain.assertOK(t)
value.chain.reset()
value.Schema(`{"type": "object"}`)
value.chain.assertOK(t)
value.chain.reset()
value.Schema(`{"type": "array"}`)
value.chain.assertFailed(t)
value.chain.reset()
value.Keys().ContainsOnly(keys...)
value.chain.assertOK(t)
value.chain.reset()
value.Values().ContainsOnly(values...)
value.chain.assertOK(t)
value.chain.reset()
assert.Equal(t, m["foo"], value.Value("foo").Raw())
value.chain.assertOK(t)
value.chain.reset()
assert.Equal(t, m["bar"], value.Value("bar").Raw())
value.chain.assertOK(t)
value.chain.reset()
assert.Equal(t, m["baz"], value.Value("baz").Raw())
value.chain.assertOK(t)
value.chain.reset()
assert.Equal(t, nil, value.Value("BAZ").Raw())
value.chain.assertFailed(t)
value.chain.reset()
}
func TestObjectEmpty(t *testing.T) {
reporter := newMockReporter(t)
value1 := NewObject(reporter, nil)
_ = value1
value1.chain.assertFailed(t)
value1.chain.reset()
value2 := NewObject(reporter, map[string]interface{}{})
value2.Empty()
value2.chain.assertOK(t)
value2.chain.reset()
value2.NotEmpty()
value2.chain.assertFailed(t)
value2.chain.reset()
value3 := NewObject(reporter, map[string]interface{}{"": nil})
value3.Empty()
value3.chain.assertFailed(t)
value3.chain.reset()
value3.NotEmpty()
value3.chain.assertOK(t)
value3.chain.reset()
}
func TestObjectEqualEmpty(t *testing.T) {
reporter := newMockReporter(t)
value := NewObject(reporter, map[string]interface{}{})
assert.Equal(t, map[string]interface{}{}, value.Raw())
value.Equal(map[string]interface{}{})
value.chain.assertOK(t)
value.chain.reset()
value.NotEqual(map[string]interface{}{})
value.chain.assertFailed(t)
value.chain.reset()
value.Equal(map[string]interface{}{"": nil})
value.chain.assertFailed(t)
value.chain.reset()
value.NotEqual(map[string]interface{}{"": nil})
value.chain.assertOK(t)
value.chain.reset()
}
func TestObjectEqual(t *testing.T) {
reporter := newMockReporter(t)
value := NewObject(reporter, map[string]interface{}{"foo": 123.0})
assert.Equal(t, map[string]interface{}{"foo": 123.0}, value.Raw())
value.Equal(map[string]interface{}{})
value.chain.assertFailed(t)
value.chain.reset()
value.NotEqual(map[string]interface{}{})
value.chain.assertOK(t)
value.chain.reset()
value.Equal(map[string]interface{}{"FOO": 123.0})
value.chain.assertFailed(t)
value.chain.reset()
value.NotEqual(map[string]interface{}{"FOO": 123.0})
value.chain.assertOK(t)
value.chain.reset()
value.Equal(map[string]interface{}{"foo": 456.0})
value.chain.assertFailed(t)
value.chain.reset()
value.NotEqual(map[string]interface{}{"foo": 456.0})
value.chain.assertOK(t)
value.chain.reset()
value.Equal(map[string]interface{}{"foo": 123.0})
value.chain.assertOK(t)
value.chain.reset()
value.NotEqual(map[string]interface{}{"foo": 123.0})
value.chain.assertFailed(t)
value.chain.reset()
value.Equal(nil)
value.chain.assertFailed(t)
value.chain.reset()
value.NotEqual(nil)
value.chain.assertFailed(t)
value.chain.reset()
}
func TestObjectEqualStruct(t *testing.T) {
reporter := newMockReporter(t)
value := NewObject(reporter, map[string]interface{}{
"foo": 123,
"bar": map[string]interface{}{
"baz": []interface{}{true, false},
},
})
type (
Bar struct {
Baz []bool `json:"baz"`
}
S struct {
Foo int `json:"foo"`
Bar Bar `json:"bar"`
}
)
s := S{
Foo: 123,
Bar: Bar{
Baz: []bool{true, false},
},
}
value.Equal(s)
value.chain.assertOK(t)
value.chain.reset()
value.NotEqual(s)
value.chain.assertFailed(t)
value.chain.reset()
value.Equal(S{})
value.chain.assertFailed(t)
value.chain.reset()
value.NotEqual(S{})
value.chain.assertOK(t)
value.chain.reset()
}
func TestObjectContainsKey(t *testing.T) {
reporter := newMockReporter(t)
value := NewObject(reporter, map[string]interface{}{"foo": 123, "bar": ""})
value.ContainsKey("foo")
value.chain.assertOK(t)
value.chain.reset()
value.NotContainsKey("foo")
value.chain.assertFailed(t)
value.chain.reset()
value.ContainsKey("bar")
value.chain.assertOK(t)
value.chain.reset()
value.NotContainsKey("bar")
value.chain.assertFailed(t)
value.chain.reset()
value.ContainsKey("BAR")
value.chain.assertFailed(t)
value.chain.reset()
value.NotContainsKey("BAR")
value.chain.assertOK(t)
value.chain.reset()
}
func TestObjectContainsMapSuccess(t *testing.T) {
reporter := newMockReporter(t)
value := NewObject(reporter, map[string]interface{}{
"foo": 123,
"bar": []interface{}{"456", 789},
"baz": map[string]interface{}{
"a": map[string]interface{}{
"b": 333,
"c": 444,
},
},
})
submap1 := map[string]interface{}{
"foo": 123,
"bar": []interface{}{"456", 789},
}
value.ContainsMap(submap1)
value.chain.assertOK(t)
value.chain.reset()
value.NotContainsMap(submap1)
value.chain.assertFailed(t)
value.chain.reset()
submap2 := map[string]interface{}{
"bar": []interface{}{"456", 789},
"baz": map[string]interface{}{
"a": map[string]interface{}{
"c": 444,
},
},
}
value.ContainsMap(submap2)
value.chain.assertOK(t)
value.chain.reset()
value.NotContainsMap(submap2)
value.chain.assertFailed(t)
value.chain.reset()
}
func TestObjectContainsMapFailed(t *testing.T) {
reporter := newMockReporter(t)
value := NewObject(reporter, map[string]interface{}{
"foo": 123,
"bar": []interface{}{"456", 789},
"baz": map[string]interface{}{
"a": map[string]interface{}{
"b": 333,
"c": 444,
},
},
})
submap1 := map[string]interface{}{
"foo": 123,
"qux": 456,
}
value.ContainsMap(submap1)
value.chain.assertFailed(t)
value.chain.reset()
value.NotContainsMap(submap1)
value.chain.assertOK(t)
value.chain.reset()
submap2 := map[string]interface{}{
"foo": 123,
"bar": []interface{}{"456", "789"},
}
value.ContainsMap(submap2)
value.chain.assertFailed(t)
value.chain.reset()
value.NotContainsMap(submap2)
value.chain.assertOK(t)
value.chain.reset()
submap3 := map[string]interface{}{
"baz": map[string]interface{}{
"a": map[string]interface{}{
"b": "333",
"c": 444,
},
},
}
value.ContainsMap(submap3)
value.chain.assertFailed(t)
value.chain.reset()
value.NotContainsMap(submap3)
value.chain.assertOK(t)
value.chain.reset()
value.ContainsMap(nil)
value.chain.assertFailed(t)
value.chain.reset()
value.NotContainsMap(nil)
value.chain.assertFailed(t)
value.chain.reset()
}
func TestObjectContainsMapStruct(t *testing.T) {
reporter := newMockReporter(t)
value := NewObject(reporter, map[string]interface{}{
"foo": 123,
"bar": []interface{}{"456", 789},
"baz": map[string]interface{}{
"a": map[string]interface{}{
"b": 333,
"c": 444,
},
},
})
type (
A struct {
B int `json:"b"`
}
Baz struct {
A A `json:"a"`
}
S struct {
Foo int `json:"foo"`
Baz Baz `json:"baz"`
}
)
submap := S{
Foo: 123,
Baz: Baz{
A: A{
B: 333,
},
},
}
value.ContainsMap(submap)
value.chain.assertOK(t)
value.chain.reset()
value.NotContainsMap(submap)
value.chain.assertFailed(t)
value.chain.reset()
value.ContainsMap(S{})
value.chain.assertFailed(t)
value.chain.reset()
value.NotContainsMap(S{})
value.chain.assertOK(t)
value.chain.reset()
}
func TestObjectValueEqual(t *testing.T) {
reporter := newMockReporter(t)
value := NewObject(reporter, map[string]interface{}{
"foo": 123,
"bar": []interface{}{"456", 789},
"baz": map[string]interface{}{
"a": "b",
},
})
value.ValueEqual("foo", 123)
value.chain.assertOK(t)
value.chain.reset()
value.ValueNotEqual("foo", 123)
value.chain.assertFailed(t)
value.chain.reset()
value.ValueEqual("bar", []interface{}{"456", 789})
value.chain.assertOK(t)
value.chain.reset()
value.ValueNotEqual("bar", []interface{}{"456", 789})
value.chain.assertFailed(t)
value.chain.reset()
value.ValueEqual("baz", map[string]interface{}{"a": "b"})
value.chain.assertOK(t)
value.chain.reset()
value.ValueNotEqual("baz", map[string]interface{}{"a": "b"})
value.chain.assertFailed(t)
value.chain.reset()
value.ValueEqual("baz", func() {})
value.chain.assertFailed(t)
value.chain.reset()
value.ValueNotEqual("baz", func() {})
value.chain.assertFailed(t)
value.chain.reset()
value.ValueEqual("BAZ", 777)
value.chain.assertFailed(t)
value.chain.reset()
value.ValueNotEqual("BAZ", 777)
value.chain.assertFailed(t)
value.chain.reset()
}
func TestObjectValueEqualStruct(t *testing.T) {
reporter := newMockReporter(t)
value := NewObject(reporter, map[string]interface{}{
"foo": 123,
"bar": []interface{}{"456", 789},
"baz": map[string]interface{}{
"a": map[string]interface{}{
"b": 333,
"c": 444,
},
},
})
type (
A struct {
B int `json:"b"`
C int `json:"c"`
}
Baz struct {
A A `json:"a"`
}
)
baz := Baz{
A: A{
B: 333,
C: 444,
},
}
value.ValueEqual("baz", baz)
value.chain.assertOK(t)
value.chain.reset()
value.ValueNotEqual("baz", baz)
value.chain.assertFailed(t)
value.chain.reset()
value.ValueEqual("baz", Baz{})
value.chain.assertFailed(t)
value.chain.reset()
value.ValueNotEqual("baz", Baz{})
value.chain.assertOK(t)
value.chain.reset()
}
func TestObjectConvertEqual(t *testing.T) {
type (
myMap map[string]interface{}
myInt int
)
reporter := newMockReporter(t)
value := NewObject(reporter, map[string]interface{}{"foo": 123})
value.Equal(map[string]interface{}{"foo": "123"})
value.chain.assertFailed(t)
value.chain.reset()
value.NotEqual(map[string]interface{}{"foo": "123"})
value.chain.assertOK(t)
value.chain.reset()
value.Equal(map[string]interface{}{"foo": 123.0})
value.chain.assertOK(t)
value.chain.reset()
value.NotEqual(map[string]interface{}{"foo": 123.0})
value.chain.assertFailed(t)
value.chain.reset()
value.Equal(map[string]interface{}{"foo": 123})
value.chain.assertOK(t)
value.chain.reset()
value.NotEqual(map[string]interface{}{"foo": 123})
value.chain.assertFailed(t)
value.chain.reset()
value.Equal(myMap{"foo": myInt(123)})
value.chain.assertOK(t)
value.chain.reset()
value.NotEqual(myMap{"foo": myInt(123)})
value.chain.assertFailed(t)
value.chain.reset()
}
func TestObjectConvertContainsMap(t *testing.T) {
type (
myArray []interface{}
myMap map[string]interface{}
myInt int
)
reporter := newMockReporter(t)
value := NewObject(reporter, map[string]interface{}{
"foo": 123,
"bar": []interface{}{"456", 789},
"baz": map[string]interface{}{
"a": "b",
},
})
submap := myMap{
"foo": myInt(123),
"bar": myArray{"456", myInt(789)},
}
value.ContainsMap(submap)
value.chain.assertOK(t)
value.chain.reset()
value.NotContainsMap(submap)
value.chain.assertFailed(t)
value.chain.reset()
}
func TestObjectConvertValueEqual(t *testing.T) {
type (
myArray []interface{}
myMap map[string]interface{}
myInt int
)
reporter := newMockReporter(t)
value := NewObject(reporter, map[string]interface{}{
"foo": 123,
"bar": []interface{}{"456", 789},
"baz": map[string]interface{}{
"a": "b",
},
})
value.ValueEqual("bar", myArray{"456", myInt(789)})
value.chain.assertOK(t)
value.chain.reset()
value.ValueNotEqual("bar", myArray{"456", myInt(789)})
value.chain.assertFailed(t)
value.chain.reset()
value.ValueEqual("baz", myMap{"a": "b"})
value.chain.assertOK(t)
value.chain.reset()
value.ValueNotEqual("baz", myMap{"a": "b"})
value.chain.assertFailed(t)
value.chain.reset()
}