Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sundowndev
GitHub Repository: sundowndev/phoneinfoga
Path: blob/master/lib/remote/numverify_scanner_test.go
988 views
1
package remote_test
2
3
import (
4
"errors"
5
"github.com/stretchr/testify/assert"
6
"github.com/sundowndev/phoneinfoga/v2/lib/filter"
7
"github.com/sundowndev/phoneinfoga/v2/lib/number"
8
"github.com/sundowndev/phoneinfoga/v2/lib/remote"
9
"github.com/sundowndev/phoneinfoga/v2/lib/remote/suppliers"
10
"github.com/sundowndev/phoneinfoga/v2/mocks"
11
"testing"
12
)
13
14
func TestNumverifyScanner_Metadata(t *testing.T) {
15
scanner := remote.NewNumverifyScanner(&mocks.NumverifySupplier{})
16
assert.Equal(t, remote.Numverify, scanner.Name())
17
assert.NotEmpty(t, scanner.Description())
18
}
19
20
func TestNumverifyScanner(t *testing.T) {
21
dummyError := errors.New("dummy")
22
23
testcases := []struct {
24
name string
25
number *number.Number
26
opts remote.ScannerOptions
27
mocks func(*mocks.NumverifySupplier, *mocks.NumverifySupplierReq)
28
expected map[string]interface{}
29
wantErrors map[string]error
30
}{
31
{
32
name: "successful scan",
33
number: func() *number.Number {
34
n, _ := number.NewNumber("15556661212")
35
return n
36
}(),
37
opts: map[string]interface{}{
38
"NUMVERIFY_API_KEY": "secret",
39
},
40
mocks: func(s *mocks.NumverifySupplier, r *mocks.NumverifySupplierReq) {
41
s.On("Request").Return(r)
42
r.On("SetApiKey", "secret").Return(r)
43
r.On("ValidateNumber", "15556661212").Return(&suppliers.NumverifyValidateResponse{
44
Valid: true,
45
Number: "test",
46
LocalFormat: "test",
47
InternationalFormat: "test",
48
CountryPrefix: "test",
49
CountryCode: "test",
50
CountryName: "test",
51
Location: "test",
52
Carrier: "test",
53
LineType: "test",
54
}, nil).Once()
55
},
56
expected: map[string]interface{}{
57
"numverify": remote.NumverifyScannerResponse{
58
Valid: true,
59
Number: "test",
60
LocalFormat: "test",
61
InternationalFormat: "test",
62
CountryPrefix: "test",
63
CountryCode: "test",
64
CountryName: "test",
65
Location: "test",
66
Carrier: "test",
67
LineType: "test",
68
},
69
},
70
wantErrors: map[string]error{},
71
},
72
{
73
name: "failed scan",
74
number: func() *number.Number {
75
n, _ := number.NewNumber("15556661212")
76
return n
77
}(),
78
opts: map[string]interface{}{
79
"NUMVERIFY_API_KEY": "secret",
80
},
81
mocks: func(s *mocks.NumverifySupplier, r *mocks.NumverifySupplierReq) {
82
s.On("Request").Return(r)
83
r.On("SetApiKey", "secret").Return(r)
84
r.On("ValidateNumber", "15556661212").Return(nil, dummyError).Once()
85
},
86
expected: map[string]interface{}{},
87
wantErrors: map[string]error{
88
"numverify": dummyError,
89
},
90
},
91
{
92
name: "should not run",
93
number: func() *number.Number {
94
n, _ := number.NewNumber("15556661212")
95
return n
96
}(),
97
mocks: func(s *mocks.NumverifySupplier, r *mocks.NumverifySupplierReq) {},
98
expected: map[string]interface{}{},
99
wantErrors: map[string]error{},
100
},
101
}
102
103
for _, tt := range testcases {
104
t.Run(tt.name, func(t *testing.T) {
105
numverifySupplierMock := &mocks.NumverifySupplier{}
106
numverifySupplierReqMock := &mocks.NumverifySupplierReq{}
107
tt.mocks(numverifySupplierMock, numverifySupplierReqMock)
108
109
scanner := remote.NewNumverifyScanner(numverifySupplierMock)
110
lib := remote.NewLibrary(filter.NewEngine())
111
lib.AddScanner(scanner)
112
113
got, errs := lib.Scan(tt.number, tt.opts)
114
if len(tt.wantErrors) > 0 {
115
assert.Equal(t, tt.wantErrors, errs)
116
} else {
117
assert.Len(t, errs, 0)
118
}
119
assert.Equal(t, tt.expected, got)
120
121
numverifySupplierMock.AssertExpectations(t)
122
})
123
}
124
}
125
126