Files
IDP-Backend/internal/phoneutil/phoneutil_test.go

130 lines
2.9 KiB
Go

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)
})
}
}