Skip to content

Commit 1d3a50f

Browse files
authored
fix(core): allow 00 prefix (GaloyMoney#4827)
1 parent 2e0221d commit 1d3a50f

File tree

2 files changed

+52
-5
lines changed

2 files changed

+52
-5
lines changed

core/api/src/domain/users/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export const checkedToPhoneNumber = (value: string): PhoneNumber | ValidationErr
2323
}
2424

2525
const trimmedValue = value.trim()
26-
const normalizedPhone = trimmedValue.startsWith("+") ? trimmedValue : `+${trimmedValue}`
26+
const normalizedPhone = trimmedValue.replace(/^(\+|00)?(.*)/g, "+$2")
2727

2828
// Special exception for the specific phone number
2929
if (

core/api/test/unit/domain/users/checked-to-phonenumber.spec.ts

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import { checkedToPhoneNumber } from "@/domain/users"
33

44
describe("phonenumber-check", () => {
55
it("Fail just prefix", () => {
6-
const phone = checkedToPhoneNumber("+1")
6+
let phone = checkedToPhoneNumber("+1")
7+
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
8+
phone = checkedToPhoneNumber("001")
79
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
810
})
911

@@ -13,18 +15,24 @@ describe("phonenumber-check", () => {
1315
})
1416

1517
it("Fail incompleted phone number", () => {
16-
const phone = checkedToPhoneNumber("+1650")
18+
let phone = checkedToPhoneNumber("+1650")
19+
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
20+
phone = checkedToPhoneNumber("001650")
1721
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
1822
})
1923

2024
it("Fail with non digits", () => {
21-
const phone = checkedToPhoneNumber("+1650555abcd")
25+
let phone = checkedToPhoneNumber("+1650555abcd")
26+
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
27+
phone = checkedToPhoneNumber("001650555abcd")
2228
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
2329
})
2430

2531
it("Success with valid phone number without + prefix", () => {
2632
let phone = checkedToPhoneNumber("16505554321")
2733
expect(phone).toEqual("+16505554321")
34+
phone = checkedToPhoneNumber("0016505554321")
35+
expect(phone).toEqual("+16505554321")
2836
phone = checkedToPhoneNumber("1 650-555-4321")
2937
expect(phone).toEqual("+16505554321")
3038
phone = checkedToPhoneNumber("1 (650) 555-4321")
@@ -40,6 +48,15 @@ describe("phonenumber-check", () => {
4048
expect(phone).toEqual("+16505554321")
4149
})
4250

51+
it("Success on good phone number with 00 prefix", () => {
52+
let phone = checkedToPhoneNumber("0016505554321")
53+
expect(phone).toEqual("+16505554321")
54+
phone = checkedToPhoneNumber("001 650-555-4321")
55+
expect(phone).toEqual("+16505554321")
56+
phone = checkedToPhoneNumber("001 (650) 555-4321")
57+
expect(phone).toEqual("+16505554321")
58+
})
59+
4360
it("Handles null, undefined or empty strings", () => {
4461
const phone1 = checkedToPhoneNumber("")
4562
expect(phone1).toBeInstanceOf(InvalidPhoneNumber)
@@ -56,17 +73,47 @@ describe("phonenumber-check", () => {
5673
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
5774
})
5875

76+
it("Fails with double 00 prefix", () => {
77+
const phone = checkedToPhoneNumber("000016505554321")
78+
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
79+
})
80+
5981
it("Fails for short phone numbers", () => {
60-
const phone = checkedToPhoneNumber("+321313123")
82+
let phone = checkedToPhoneNumber("+321313123")
83+
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
84+
phone = checkedToPhoneNumber("00321313123")
6185
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
6286
})
6387

88+
it("Fails with extremely long phone numbers", () => {
89+
const phone = checkedToPhoneNumber("+12345678901234567890")
90+
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
91+
})
92+
93+
it("Fails mixed prefixes", () => {
94+
let phone = checkedToPhoneNumber("+0016505554321")
95+
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
96+
phone = checkedToPhoneNumber("00+16505554321")
97+
expect(phone).toBeInstanceOf(InvalidPhoneNumber)
98+
})
99+
100+
it("Handles various international formats", () => {
101+
let phone = checkedToPhoneNumber("+447911123456")
102+
expect(phone).toEqual("+447911123456")
103+
104+
phone = checkedToPhoneNumber("00491711234567")
105+
expect(phone).toEqual("+491711234567")
106+
})
107+
64108
it("Handles phone numbers with whitespace", () => {
65109
let phone = checkedToPhoneNumber(" +16505554321 ")
66110
expect(phone).toEqual("+16505554321")
67111

68112
phone = checkedToPhoneNumber(" 16505554321 ")
69113
expect(phone).toEqual("+16505554321")
114+
115+
phone = checkedToPhoneNumber(" 0016505554321 ")
116+
expect(phone).toEqual("+16505554321")
70117
})
71118

72119
it("Accepts the special exception phone number +1928282918", () => {

0 commit comments

Comments
 (0)