github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/pkg/ev/evcache/evcache_test.go (about) 1 package evcache 2 3 import ( 4 "errors" 5 "github.com/eko/gocache/cache" 6 "github.com/eko/gocache/store" 7 mocks "github.com/eko/gocache/test/mocks/cache" 8 "github.com/go-email-validator/go-email-validator/pkg/ev/evtests" 9 mockevcache "github.com/go-email-validator/go-email-validator/test/mock/ev/evcache" 10 "github.com/golang/mock/gomock" 11 "reflect" 12 "testing" 13 ) 14 15 const key = "key" 16 17 var ( 18 simpleValue = map[int]string{0: "123"} 19 errorSimple = errors.New("errorSimple") 20 emptyOptions = &store.Options{} 21 ) 22 23 func TestMain(m *testing.M) { 24 evtests.TestMain(m) 25 } 26 27 func Test_gocacheAdapter_Get(t *testing.T) { 28 ctrl := gomock.NewController(t) 29 defer ctrl.Finish() 30 31 type fields struct { 32 cache func() cache.CacheInterface 33 } 34 type args struct { 35 key interface{} 36 } 37 tests := []struct { 38 name string 39 fields fields 40 args args 41 want interface{} 42 wantErr bool 43 }{ 44 { 45 name: "success get", 46 fields: fields{ 47 cache: func() cache.CacheInterface { 48 cacheMock := mocks.NewMockCacheInterface(ctrl) 49 cacheMock.EXPECT().Get(key).Return(simpleValue, nil).Times(1) 50 51 return cacheMock 52 }, 53 }, 54 args: args{ 55 key: key, 56 }, 57 want: simpleValue, 58 wantErr: false, 59 }, 60 { 61 name: "error get", 62 fields: fields{ 63 cache: func() cache.CacheInterface { 64 cacheMock := mocks.NewMockCacheInterface(ctrl) 65 cacheMock.EXPECT().Get(key).Return(nil, errorSimple).Times(1) 66 67 return cacheMock 68 }, 69 }, 70 args: args{ 71 key: key, 72 }, 73 want: nil, 74 wantErr: true, 75 }, 76 } 77 for _, tt := range tests { 78 t.Run(tt.name, func(t *testing.T) { 79 c := NewCache(tt.fields.cache(), nil) 80 got, err := c.Get(tt.args.key) 81 if (err != nil) != tt.wantErr { 82 t.Errorf("Get() error = %v, wantErr %v", err, tt.wantErr) 83 return 84 } 85 if !reflect.DeepEqual(got, tt.want) { 86 t.Errorf("Get() got = %v, want %v", got, tt.want) 87 } 88 }) 89 } 90 } 91 92 func Test_gocacheAdapter_Set(t *testing.T) { 93 ctrl := gomock.NewController(t) 94 defer ctrl.Finish() 95 96 type fields struct { 97 cache func() cache.CacheInterface 98 option *store.Options 99 } 100 type args struct { 101 key interface{} 102 object interface{} 103 } 104 tests := []struct { 105 name string 106 fields fields 107 args args 108 wantErr bool 109 }{ 110 { 111 name: "success", 112 fields: fields{ 113 cache: func() cache.CacheInterface { 114 cacheMock := mocks.NewMockCacheInterface(ctrl) 115 cacheMock.EXPECT().Set(key, simpleValue, emptyOptions).Return(nil).Times(1) 116 117 return cacheMock 118 }, 119 option: emptyOptions, 120 }, 121 args: args{ 122 key: key, 123 object: simpleValue, 124 }, 125 wantErr: false, 126 }, 127 { 128 name: "error", 129 fields: fields{ 130 cache: func() cache.CacheInterface { 131 cacheMock := mocks.NewMockCacheInterface(ctrl) 132 cacheMock.EXPECT().Set(key, simpleValue, emptyOptions).Return(errorSimple).Times(1) 133 134 return cacheMock 135 }, 136 option: emptyOptions, 137 }, 138 args: args{ 139 key: key, 140 object: simpleValue, 141 }, 142 wantErr: true, 143 }, 144 } 145 for _, tt := range tests { 146 t.Run(tt.name, func(t *testing.T) { 147 c := NewCache(tt.fields.cache(), tt.fields.option) 148 if err := c.Set(tt.args.key, tt.args.object); (err != nil) != tt.wantErr { 149 t.Errorf("Set() error = %v, wantErr %v", err, tt.wantErr) 150 } 151 }) 152 } 153 } 154 155 var returnObj = func() interface{} { 156 return make(map[int]string) 157 } 158 159 func Test_gocacheMarshallerAdapter_Get(t *testing.T) { 160 ctrl := gomock.NewController(t) 161 defer ctrl.Finish() 162 163 type fields struct { 164 marshaller func() Marshaler 165 returnObj MarshallerReturnObj 166 option *store.Options 167 } 168 type args struct { 169 key interface{} 170 } 171 tests := []struct { 172 name string 173 fields fields 174 args args 175 want interface{} 176 wantErr bool 177 }{ 178 { 179 name: "success get", 180 fields: fields{ 181 marshaller: func() Marshaler { 182 cacheMock := mockevcache.NewMockMarshaler(ctrl) 183 cacheMock.EXPECT().Get(key, returnObj()).Return(simpleValue, nil).Times(1) 184 185 return cacheMock 186 }, 187 returnObj: returnObj, 188 }, 189 args: args{ 190 key: key, 191 }, 192 want: simpleValue, 193 wantErr: false, 194 }, 195 { 196 name: "error get", 197 fields: fields{ 198 marshaller: func() Marshaler { 199 cacheMock := mockevcache.NewMockMarshaler(ctrl) 200 cacheMock.EXPECT().Get(key, returnObj()).Return(nil, errorSimple).Times(1) 201 202 return cacheMock 203 }, 204 returnObj: returnObj, 205 }, 206 args: args{ 207 key: key, 208 }, 209 want: nil, 210 wantErr: true, 211 }, 212 } 213 for _, tt := range tests { 214 t.Run(tt.name, func(t *testing.T) { 215 c := NewCacheMarshaller(tt.fields.marshaller(), tt.fields.returnObj, tt.fields.option) 216 got, err := c.Get(tt.args.key) 217 if (err != nil) != tt.wantErr { 218 t.Errorf("Get() error = %v, wantErr %v", err, tt.wantErr) 219 return 220 } 221 if !reflect.DeepEqual(got, tt.want) { 222 t.Errorf("Get() got = %v, want %v", got, tt.want) 223 } 224 }) 225 } 226 } 227 228 func Test_gocacheMarshallerAdapter_Set(t *testing.T) { 229 ctrl := gomock.NewController(t) 230 defer ctrl.Finish() 231 232 type fields struct { 233 marshaller func() Marshaler 234 returnObj MarshallerReturnObj 235 option *store.Options 236 } 237 type args struct { 238 key interface{} 239 object interface{} 240 } 241 tests := []struct { 242 name string 243 fields fields 244 args args 245 wantErr bool 246 }{ 247 { 248 name: "success", 249 fields: fields{ 250 marshaller: func() Marshaler { 251 cacheMock := mockevcache.NewMockMarshaler(ctrl) 252 cacheMock.EXPECT().Set(key, simpleValue, emptyOptions).Return(nil).Times(1) 253 254 return cacheMock 255 }, 256 option: emptyOptions, 257 }, 258 args: args{ 259 key: key, 260 object: simpleValue, 261 }, 262 wantErr: false, 263 }, 264 { 265 name: "error", 266 fields: fields{ 267 marshaller: func() Marshaler { 268 cacheMock := mockevcache.NewMockMarshaler(ctrl) 269 cacheMock.EXPECT().Set(key, simpleValue, emptyOptions).Return(errorSimple).Times(1) 270 271 return cacheMock 272 }, 273 option: emptyOptions, 274 }, 275 args: args{ 276 key: key, 277 object: simpleValue, 278 }, 279 wantErr: true, 280 }, 281 } 282 for _, tt := range tests { 283 t.Run(tt.name, func(t *testing.T) { 284 c := NewCacheMarshaller(tt.fields.marshaller(), tt.fields.returnObj, tt.fields.option) 285 if err := c.Set(tt.args.key, tt.args.object); (err != nil) != tt.wantErr { 286 t.Errorf("Set() error = %v, wantErr %v", err, tt.wantErr) 287 } 288 }) 289 } 290 }