github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/pkg/ev/contains/in_strings_test.go (about)

     1  package contains
     2  
     3  import (
     4  	"github.com/emirpasic/gods/sets/hashset"
     5  	"reflect"
     6  	"testing"
     7  )
     8  
     9  const (
    10  	firstValue   = "first"
    11  	longValue    = "very_long_value_which_we_can_find_in_email"
    12  	missingValue = "missing"
    13  )
    14  
    15  var twoStrings = []string{firstValue, longValue}
    16  var twoStringsInterface = []interface{}{firstValue, longValue}
    17  var setTwoStrings = NewSet(hashset.New(twoStringsInterface...))
    18  
    19  func TestNewInStringsFromArray(t *testing.T) {
    20  	type args struct {
    21  		elements []string
    22  	}
    23  
    24  	tests := []struct {
    25  		name string
    26  		args args
    27  		want InStrings
    28  	}{
    29  		{
    30  			name: "success",
    31  			args: args{
    32  				elements: twoStrings,
    33  			},
    34  			want: inStrings{setTwoStrings, len(longValue)},
    35  		},
    36  	}
    37  	for _, tt := range tests {
    38  		t.Run(tt.name, func(t *testing.T) {
    39  			if got := NewInStringsFromArray(tt.args.elements); !reflect.DeepEqual(got, tt.want) {
    40  				t.Errorf("NewInStringsFromArray() = %v, want %v", got, tt.want)
    41  			}
    42  		})
    43  	}
    44  }
    45  
    46  func Test_inStrings_Contains(t *testing.T) {
    47  	type fields struct {
    48  		contains InSet
    49  		maxLen   int
    50  	}
    51  	type args struct {
    52  		value string
    53  	}
    54  	tests := []struct {
    55  		name   string
    56  		fields fields
    57  		args   args
    58  		want   bool
    59  	}{
    60  		{
    61  			name: "has equivalent of " + firstValue,
    62  			fields: fields{
    63  				contains: setTwoStrings,
    64  				maxLen:   len(longValue),
    65  			},
    66  			args: args{
    67  				value: firstValue,
    68  			},
    69  			want: true,
    70  		},
    71  		{
    72  			name: "has " + firstValue,
    73  			fields: fields{
    74  				contains: setTwoStrings,
    75  				maxLen:   len(longValue),
    76  			},
    77  			args: args{
    78  				value: missingValue + firstValue + missingValue,
    79  			},
    80  			want: true,
    81  		},
    82  		{
    83  			name: "has " + longValue + "in start",
    84  			fields: fields{
    85  				contains: setTwoStrings,
    86  				maxLen:   len(longValue),
    87  			},
    88  			args: args{
    89  				value: longValue + missingValue,
    90  			},
    91  			want: true,
    92  		},
    93  		{
    94  			name: "has " + longValue + "in end",
    95  			fields: fields{
    96  				contains: setTwoStrings,
    97  				maxLen:   len(longValue),
    98  			},
    99  			args: args{
   100  				value: missingValue + longValue,
   101  			},
   102  			want: true,
   103  		},
   104  		{
   105  			name: "missing of " + missingValue,
   106  			fields: fields{
   107  				contains: setTwoStrings,
   108  				maxLen:   len(longValue),
   109  			},
   110  			args: args{
   111  				value: missingValue,
   112  			},
   113  			want: false,
   114  		},
   115  		{
   116  			name: "empty value",
   117  			fields: fields{
   118  				contains: setTwoStrings,
   119  				maxLen:   len(longValue),
   120  			},
   121  			args: args{
   122  				value: "",
   123  			},
   124  			want: false,
   125  		},
   126  	}
   127  	for _, tt := range tests {
   128  		t.Run(tt.name, func(t *testing.T) {
   129  			is := NewInStrings(tt.fields.contains, tt.fields.maxLen)
   130  			if got := is.Contains(tt.args.value); got != tt.want {
   131  				t.Errorf("Contains() = %v, want %v", got, tt.want)
   132  			}
   133  		})
   134  	}
   135  }