Skip to content

Commit

Permalink
added Phone methods
Browse files Browse the repository at this point in the history
  • Loading branch information
jaswdr committed Mar 26, 2018
1 parent 952307e commit 2ae57ae
Show file tree
Hide file tree
Showing 3 changed files with 163 additions and 0 deletions.
4 changes: 4 additions & 0 deletions faker.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,10 @@ func (f Faker) Address() Address {
return Address{&f}
}

func (f Faker) Phone() Phone {
return Phone{&f}
}

func New() (f Faker) {
seed := rand.NewSource(time.Now().Unix())
f = NewWithSeed(seed)
Expand Down
109 changes: 109 additions & 0 deletions phone.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package faker

import (
"fmt"
"strings"
)

var (
phoneFormats = []string{
// International format
"+1-{{areaCode}}-{{exchangeCode}}-####",
"+1 ({{areaCode}}) {{exchangeCode}}-####",
"+1-{{areaCode}}-{{exchangeCode}}-####",
"+1.{{areaCode}}.{{exchangeCode}}.####",
"+1{{areaCode}}{{exchangeCode}}####",
// Standard formats
"{{areaCode}}-{{exchangeCode}}-####",
"({{areaCode}}) {{exchangeCode}}-####",
"1-{{areaCode}}-{{exchangeCode}}-####",
"{{areaCode}}.{{exchangeCode}}.####",
"{{areaCode}}-{{exchangeCode}}-####",
"({{areaCode}}) {{exchangeCode}}-####",
"1-{{areaCode}}-{{exchangeCode}}-####",
"{{areaCode}}.{{exchangeCode}}.####",
// Extensions
"{{areaCode}}-{{exchangeCode}}-#### x###",
"({{areaCode}}) {{exchangeCode}}-#### x###",
"1-{{areaCode}}-{{exchangeCode}}-#### x###",
"{{areaCode}}.{{exchangeCode}}.#### x###",
"{{areaCode}}-{{exchangeCode}}-#### x####",
"({{areaCode}}) {{exchangeCode}}-#### x####",
"1-{{areaCode}}-{{exchangeCode}}-#### x####",
"{{areaCode}}.{{exchangeCode}}.#### x####",
"{{areaCode}}-{{exchangeCode}}-#### x#####",
"({{areaCode}}) {{exchangeCode}}-#### x#####",
"1-{{areaCode}}-{{exchangeCode}}-#### x#####",
"{{areaCode}}.{{exchangeCode}}.#### x#####"}

tollFreeAreaCodes = []string{"800", "844", "855", "866", "877", "888"}

tollFreeFormats = []string{ // Standard formats
"{{tollFreeAreaCode}}-{{exchangeCode}}-####",
"({{tollFreeAreaCode}}) {{exchangeCode}}-####",
"1-{{tollFreeAreaCode}}-{{exchangeCode}}-####",
"{{tollFreeAreaCode}}.{{exchangeCode}}.####"}
)

type Phone struct {
Faker *Faker
}

func (p *Phone) AreaCode() (code string) {
number1 := p.Faker.NumberBetween(2, 9)
number2 := p.Faker.RandomDigit()
number3 := p.Faker.RandomDigitNot(number2)
return fmt.Sprintf("%d%d%d", number1, number2, number3)
}

func (p *Phone) ExchangeCode() (code string) {
number1 := p.Faker.NumberBetween(2, 9)
number2 := p.Faker.RandomDigit()
number3 := p.Faker.RandomDigit()

if number2 == 1 {
number3 = p.Faker.RandomDigitNot(1)
}

return fmt.Sprintf("%d%d%d", number1, number2, number3)
}

func (p *Phone) Number() string {
number := p.Faker.RandomStringElement(phoneFormats)

// {{areaCode}}
if strings.Contains(number, "{{areaCode}}") {
number = strings.Replace(number, "{{areaCode}}", p.AreaCode(), 1)
}

// {{exchangeCode}}
if strings.Contains(number, "{{exchangeCode}}") {
number = strings.Replace(number, "{{exchangeCode}}", p.ExchangeCode(), 1)
}

return p.Faker.Numerify(number)
}

func (p *Phone) TollFreeAreaCode() string {
return p.Faker.RandomStringElement(tollFreeAreaCodes)
}

func (p *Phone) ToolFreeNumber() string {
number := p.Faker.RandomStringElement(tollFreeFormats)

// {{tollFreeAreaCode}}
if strings.Contains(number, "{{tollFreeAreaCode}}") {
number = strings.Replace(number, "{{tollFreeAreaCode}}", p.TollFreeAreaCode(), 1)
}

// {{exchangeCode}}
if strings.Contains(number, "{{exchangeCode}}") {
number = strings.Replace(number, "{{exchangeCode}}", p.ExchangeCode(), 1)
}

return p.Faker.Numerify(number)
}

func (p *Phone) E164Number() string {
return p.Faker.Numerify("+###########")
}
50 changes: 50 additions & 0 deletions phone_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package faker

import (
"strings"
"testing"
)

func TestAreaCode(t *testing.T) {
p := New().Phone()
Expect(t, true, len(p.AreaCode()) == 3)
}

func TestExchangeCode(t *testing.T) {
p := New().Phone()
Expect(t, true, len(p.ExchangeCode()) == 3)
}

func TestNumber(t *testing.T) {
a := New().Phone()
number := a.Number()
Expect(t, true, len(number) > 0)
Expect(t, false, strings.Contains(number, "{{areaCode}}"))
Expect(t, false, strings.Contains(number, "{{exchangeCode}}"))
Expect(t, false, strings.Contains(number, "#"))
Expect(t, false, strings.Contains(number, "{{"))
Expect(t, false, strings.Contains(number, "}}"))
}

func TestTollFreeAreaCode(t *testing.T) {
a := New().Phone()
code := a.TollFreeAreaCode()
Expect(t, true, len(code) > 0)
}

func TestTollFreeNumber(t *testing.T) {
a := New().Phone()
number := a.ToolFreeNumber()
Expect(t, true, len(number) > 0)
Expect(t, false, strings.Contains(number, "{{tollFreeAreaCode}}"))
Expect(t, false, strings.Contains(number, "{{exchangeCode}}"))
Expect(t, false, strings.Contains(number, "#"))
Expect(t, false, strings.Contains(number, "{{"))
Expect(t, false, strings.Contains(number, "}}"))
}

func TestE164Number(t *testing.T) {
a := New().Phone()
number := a.E164Number()
Expect(t, true, len(number) > 0)
}

0 comments on commit 2ae57ae

Please sign in to comment.