refactor: [shitty claude AI first try] restructure server and user services, add new test cases, and improve error handling
This commit is contained in:
129
internal/phoneutil/phoneutil_test.go
Normal file
129
internal/phoneutil/phoneutil_test.go
Normal file
@ -0,0 +1,129 @@
|
||||
package phoneutil
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestParseAndFormatPhoneNumber(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
phoneNumber string
|
||||
want string
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "valid russian phone number with +7",
|
||||
phoneNumber: "+79161234567",
|
||||
want: "+79161234567",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "valid russian phone number with 8",
|
||||
phoneNumber: "89161234567",
|
||||
want: "+79161234567",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "valid phone number with spaces",
|
||||
phoneNumber: "+7 916 123 45 67",
|
||||
want: "+79161234567",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "valid phone number with dashes",
|
||||
phoneNumber: "+7-916-123-45-67",
|
||||
want: "+79161234567",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "valid phone number with parentheses",
|
||||
phoneNumber: "+7 (916) 123-45-67",
|
||||
want: "+79161234567",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "valid moscow landline",
|
||||
phoneNumber: "+7 495 123 45 67",
|
||||
want: "+74951234567",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "russian mobile without country code",
|
||||
phoneNumber: "9161234567",
|
||||
want: "+79161234567",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "invalid phone number - too short",
|
||||
phoneNumber: "1",
|
||||
want: "",
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: "invalid phone number - too long",
|
||||
phoneNumber: "+712345678901234567890",
|
||||
want: "",
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: "empty phone number",
|
||||
phoneNumber: "",
|
||||
want: "",
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: "invalid characters",
|
||||
phoneNumber: "+7abc1234567",
|
||||
want: "",
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: "only spaces",
|
||||
phoneNumber: " ",
|
||||
want: "",
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: "us phone number should work with ru default",
|
||||
phoneNumber: "+12345678901",
|
||||
want: "+12345678901",
|
||||
wantErr: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got, err := ParseAndFormatPhoneNumber(tt.phoneNumber)
|
||||
|
||||
if tt.wantErr {
|
||||
assert.Error(t, err, "ParseAndFormatPhoneNumber() should return error")
|
||||
assert.Empty(t, got, "ParseAndFormatPhoneNumber() should return empty string on error")
|
||||
} else {
|
||||
assert.NoError(t, err, "ParseAndFormatPhoneNumber() should not return error")
|
||||
assert.Equal(t, tt.want, got, "ParseAndFormatPhoneNumber() result mismatch")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseAndFormatPhoneNumber_ErrorHandling(t *testing.T) {
|
||||
// Test specific error cases
|
||||
testCases := []struct {
|
||||
name string
|
||||
phoneNumber string
|
||||
}{
|
||||
{"nil input", ""},
|
||||
{"invalid format", "not-a-phone-number"},
|
||||
{"incomplete number", "+7"},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
result, err := ParseAndFormatPhoneNumber(tc.phoneNumber)
|
||||
assert.Error(t, err)
|
||||
assert.Empty(t, result)
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user