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 }