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  }