Path: blob/master/lib/remote/numverify_scanner_test.go
988 views
package remote_test12import (3"errors"4"github.com/stretchr/testify/assert"5"github.com/sundowndev/phoneinfoga/v2/lib/filter"6"github.com/sundowndev/phoneinfoga/v2/lib/number"7"github.com/sundowndev/phoneinfoga/v2/lib/remote"8"github.com/sundowndev/phoneinfoga/v2/lib/remote/suppliers"9"github.com/sundowndev/phoneinfoga/v2/mocks"10"testing"11)1213func TestNumverifyScanner_Metadata(t *testing.T) {14scanner := remote.NewNumverifyScanner(&mocks.NumverifySupplier{})15assert.Equal(t, remote.Numverify, scanner.Name())16assert.NotEmpty(t, scanner.Description())17}1819func TestNumverifyScanner(t *testing.T) {20dummyError := errors.New("dummy")2122testcases := []struct {23name string24number *number.Number25opts remote.ScannerOptions26mocks func(*mocks.NumverifySupplier, *mocks.NumverifySupplierReq)27expected map[string]interface{}28wantErrors map[string]error29}{30{31name: "successful scan",32number: func() *number.Number {33n, _ := number.NewNumber("15556661212")34return n35}(),36opts: map[string]interface{}{37"NUMVERIFY_API_KEY": "secret",38},39mocks: func(s *mocks.NumverifySupplier, r *mocks.NumverifySupplierReq) {40s.On("Request").Return(r)41r.On("SetApiKey", "secret").Return(r)42r.On("ValidateNumber", "15556661212").Return(&suppliers.NumverifyValidateResponse{43Valid: true,44Number: "test",45LocalFormat: "test",46InternationalFormat: "test",47CountryPrefix: "test",48CountryCode: "test",49CountryName: "test",50Location: "test",51Carrier: "test",52LineType: "test",53}, nil).Once()54},55expected: map[string]interface{}{56"numverify": remote.NumverifyScannerResponse{57Valid: true,58Number: "test",59LocalFormat: "test",60InternationalFormat: "test",61CountryPrefix: "test",62CountryCode: "test",63CountryName: "test",64Location: "test",65Carrier: "test",66LineType: "test",67},68},69wantErrors: map[string]error{},70},71{72name: "failed scan",73number: func() *number.Number {74n, _ := number.NewNumber("15556661212")75return n76}(),77opts: map[string]interface{}{78"NUMVERIFY_API_KEY": "secret",79},80mocks: func(s *mocks.NumverifySupplier, r *mocks.NumverifySupplierReq) {81s.On("Request").Return(r)82r.On("SetApiKey", "secret").Return(r)83r.On("ValidateNumber", "15556661212").Return(nil, dummyError).Once()84},85expected: map[string]interface{}{},86wantErrors: map[string]error{87"numverify": dummyError,88},89},90{91name: "should not run",92number: func() *number.Number {93n, _ := number.NewNumber("15556661212")94return n95}(),96mocks: func(s *mocks.NumverifySupplier, r *mocks.NumverifySupplierReq) {},97expected: map[string]interface{}{},98wantErrors: map[string]error{},99},100}101102for _, tt := range testcases {103t.Run(tt.name, func(t *testing.T) {104numverifySupplierMock := &mocks.NumverifySupplier{}105numverifySupplierReqMock := &mocks.NumverifySupplierReq{}106tt.mocks(numverifySupplierMock, numverifySupplierReqMock)107108scanner := remote.NewNumverifyScanner(numverifySupplierMock)109lib := remote.NewLibrary(filter.NewEngine())110lib.AddScanner(scanner)111112got, errs := lib.Scan(tt.number, tt.opts)113if len(tt.wantErrors) > 0 {114assert.Equal(t, tt.wantErrors, errs)115} else {116assert.Len(t, errs, 0)117}118assert.Equal(t, tt.expected, got)119120numverifySupplierMock.AssertExpectations(t)121})122}123}124125126