File size: 3,091 Bytes
fea99b3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | package models
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func Test_Annotations(t *testing.T) {
t.Run("Clone", func(t *testing.T) {
src := Annotations{
"str": "string",
"slice": []int{1, 2, 3},
"map": map[string]string{
"str": "string",
},
"struct": struct {
name string
age int
}{
name: "John",
age: 30,
},
"ptrStruct": &struct {
name string
age int
}{
name: "John",
age: 30,
},
}
dst, err := src.Clone()
require.NoErrorf(t, err, "cloning annotations must not fail")
assert.Equalf(t, src, dst, "cloned annotations must be equal")
src["str"] = "new string"
assert.Equalf(t, "string", dst["str"], "cloned annotations must be equal")
src["ptrStruct"] = nil
assert.NotNilf(t, dst["ptrStruct"], "cloned annotations must be equal")
})
t.Run("Merge", func(t *testing.T) {
left := Annotations{
"str": "string",
"slice": []int{1, 2, 3},
"map": map[string]string{
"str": "string",
},
"struct": struct {
name string
age int
}{
name: "John",
age: 30,
},
"ptrStruct": &struct {
name string
age int
}{
name: "John",
age: 30,
},
}
right := Annotations{
"str": "string2",
"slice": []int{3, 2, 1},
"map": map[string]string{
"str": "string2",
},
"ptrStruct": &struct {
name string
age int
}{
name: "John",
age: 50,
},
}
result, err := left.Merge(right)
require.NoError(t, err, "merging annotations must not fail")
require.NotNil(t, result, "result must not be nil")
expected := Annotations{
"str": "string2",
"slice": []int{3, 2, 1},
"map": map[string]string{
"str": "string2",
},
"struct": struct {
name string
age int
}{
name: "John",
age: 30,
},
"ptrStruct": &struct {
name string
age int
}{
name: "John",
age: 50,
},
}
assert.Equalf(t, expected, result, "merged annotations must be equal")
left["str"] = "new string"
right["str"] = "new string2"
assert.Equalf(t, expected["str"], result["str"], "updating source annotations must not affect the merged annotation")
})
t.Run("GetInt", func(t *testing.T) {
const value = "value"
tests := []struct {
name string
annotations Annotations
expectedValue int
expectedOk bool
}{
{
name: "Int",
annotations: Annotations{
value: 1,
},
expectedValue: 1,
expectedOk: true,
},
{
name: "Float64 - whole number",
annotations: Annotations{
value: 1.0,
},
expectedValue: 1,
expectedOk: true,
},
{
name: "Float64",
annotations: Annotations{
value: 1.5,
},
expectedValue: 0,
expectedOk: false,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
val, ok := test.annotations.GetInt(value)
assert.Equalf(t, test.expectedValue, val, "value must match")
assert.Equalf(t, test.expectedOk, ok, "ok must match")
})
}
})
}
|