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

     1  package evmail
     2  
     3  import (
     4  	"github.com/go-email-validator/go-email-validator/pkg/ev/evtests"
     5  	"reflect"
     6  	"testing"
     7  )
     8  
     9  const (
    10  	defaultDomainInput   = "Domain"
    11  	defaultDomain        = "domain"
    12  	defaultUsernameInput = "Username"
    13  	defaultUsername      = "username"
    14  )
    15  
    16  func defaultEmailString() string {
    17  	return defaultUsername + AT + defaultDomain
    18  }
    19  
    20  func defaultEmailInputString() string {
    21  	return defaultUsernameInput + AT + defaultDomainInput
    22  }
    23  
    24  func defaultEmail() Address {
    25  	return NewEmailAddress(defaultUsername, defaultDomain)
    26  }
    27  
    28  const (
    29  	emptyDomain   = ""
    30  	emptyUsername = ""
    31  )
    32  
    33  func defaultFields() fields {
    34  	return fields{username: defaultUsernameInput, domain: defaultDomainInput}
    35  }
    36  
    37  func emptyEmailString() string {
    38  	return emptyUsername + AT + emptyDomain
    39  }
    40  
    41  func emptyEmail() Address {
    42  	return NewEmailAddress(emptyUsername, emptyDomain)
    43  }
    44  
    45  type fields struct {
    46  	username string
    47  	domain   string
    48  }
    49  
    50  func emptyFields() fields { return fields{username: emptyUsername, domain: emptyDomain} }
    51  
    52  func TestMain(m *testing.M) {
    53  	evtests.TestMain(m)
    54  }
    55  
    56  func TestEmailAddress_Domain(t *testing.T) {
    57  	tests := []struct {
    58  		name   string
    59  		fields fields
    60  		want   string
    61  	}{
    62  		{
    63  			name:   "with domain",
    64  			fields: defaultFields(),
    65  			want:   defaultDomain,
    66  		},
    67  		{
    68  			name:   "empty domain",
    69  			fields: emptyFields(),
    70  			want:   emptyDomain,
    71  		},
    72  	}
    73  	for _, tt := range tests {
    74  		t.Run(tt.name, func(t *testing.T) {
    75  			e := NewEmailAddress(tt.fields.username, tt.fields.domain)
    76  			if got := e.Domain(); got != tt.want {
    77  				t.Errorf("Domain() = %v, want %v", got, tt.want)
    78  			}
    79  		})
    80  	}
    81  }
    82  
    83  func TestEmailAddress_String(t *testing.T) {
    84  	tests := []struct {
    85  		name   string
    86  		fields fields
    87  		want   string
    88  	}{
    89  		{
    90  			name:   "with email",
    91  			fields: defaultFields(),
    92  			want:   defaultEmailString(),
    93  		},
    94  		{
    95  			name:   "empty email",
    96  			fields: emptyFields(),
    97  			want:   emptyEmailString(),
    98  		},
    99  	}
   100  	for _, tt := range tests {
   101  		t.Run(tt.name, func(t *testing.T) {
   102  			e := NewEmailAddress(tt.fields.username, tt.fields.domain)
   103  			if got := e.String(); got != tt.want {
   104  				t.Errorf("String() = %v, want %v", got, tt.want)
   105  			}
   106  		})
   107  	}
   108  }
   109  
   110  func TestEmailAddress_Username(t *testing.T) {
   111  	tests := []struct {
   112  		name   string
   113  		fields fields
   114  		want   string
   115  	}{
   116  		{
   117  			name:   "with username",
   118  			fields: defaultFields(),
   119  			want:   defaultUsername,
   120  		},
   121  		{
   122  			name:   "empty username",
   123  			fields: emptyFields(),
   124  			want:   emptyUsername,
   125  		},
   126  	}
   127  	for _, tt := range tests {
   128  		t.Run(tt.name, func(t *testing.T) {
   129  			e := NewEmailAddress(tt.fields.username, tt.fields.domain)
   130  			if got := e.Username(); got != tt.want {
   131  				t.Errorf("Username() = %v, want %v", got, tt.want)
   132  			}
   133  		})
   134  	}
   135  }
   136  
   137  func TestEmailFromString(t *testing.T) {
   138  	type args struct {
   139  		email string
   140  	}
   141  	tests := []struct {
   142  		name string
   143  		args args
   144  		want Address
   145  	}{
   146  		{
   147  			name: "email",
   148  			args: args{defaultEmailInputString()},
   149  			want: defaultEmail(),
   150  		},
   151  		{
   152  			name: "empty email",
   153  			args: args{emptyEmailString()},
   154  			want: emptyEmail(),
   155  		},
   156  	}
   157  	for _, tt := range tests {
   158  		t.Run(tt.name, func(t *testing.T) {
   159  			if got := FromString(tt.args.email); !reflect.DeepEqual(got, tt.want) {
   160  				t.Errorf("FromString() = %v, want %v", got, tt.want)
   161  			}
   162  		})
   163  	}
   164  }
   165  
   166  func TestSeparatedEmail(t *testing.T) {
   167  	type args struct {
   168  		email string
   169  	}
   170  	tests := []struct {
   171  		name  string
   172  		args  args
   173  		want  string
   174  		want1 string
   175  	}{
   176  		{
   177  			name:  "email",
   178  			args:  args{defaultEmailString()},
   179  			want:  defaultUsername,
   180  			want1: defaultDomain,
   181  		},
   182  		{
   183  			name:  "empty email",
   184  			args:  args{emptyEmailString()},
   185  			want:  emptyUsername,
   186  			want1: emptyDomain,
   187  		},
   188  	}
   189  	for _, tt := range tests {
   190  		t.Run(tt.name, func(t *testing.T) {
   191  			got, got1 := SeparateEmail(tt.args.email)
   192  			if got != tt.want {
   193  				t.Errorf("SeparateEmail() got = %v, want %v", got, tt.want)
   194  			}
   195  			if got1 != tt.want1 {
   196  				t.Errorf("SeparateEmail() got1 = %v, want %v", got1, tt.want1)
   197  			}
   198  		})
   199  	}
   200  }
   201  
   202  func TestEmptyEmail(t *testing.T) {
   203  	type args struct {
   204  		val        Address
   205  		defaultVal Address
   206  	}
   207  
   208  	emailTest := FromString("some@email.com")
   209  
   210  	tests := []struct {
   211  		name string
   212  		args args
   213  		want Address
   214  	}{
   215  		{
   216  			name: "value",
   217  			args: args{
   218  				val:        defaultEmail(),
   219  				defaultVal: emailTest,
   220  			},
   221  			want: defaultEmail(),
   222  		},
   223  		{
   224  			name: "default",
   225  			args: args{
   226  				val:        nil,
   227  				defaultVal: emailTest,
   228  			},
   229  			want: emailTest,
   230  		},
   231  		{
   232  			name: "default nil",
   233  			args: args{
   234  				val:        nil,
   235  				defaultVal: nil,
   236  			},
   237  			want: nil,
   238  		},
   239  	}
   240  	for _, tt := range tests {
   241  		t.Run(tt.name, func(t *testing.T) {
   242  			if got := EmptyEmail(tt.args.val, tt.args.defaultVal); !reflect.DeepEqual(got, tt.want) {
   243  				t.Errorf("EmptyEmail() = %v, want %v", got, tt.want)
   244  			}
   245  		})
   246  	}
   247  }