Path: blob/master/web/v2/api/handlers/numbers_test.go
994 views
package handlers_test12import (3"bytes"4"encoding/json"5"github.com/stretchr/testify/assert"6"github.com/sundowndev/phoneinfoga/v2/web/v2/api"7"github.com/sundowndev/phoneinfoga/v2/web/v2/api/handlers"8"github.com/sundowndev/phoneinfoga/v2/web/v2/api/server"9"net/http"10"net/http/httptest"11"testing"12)1314func TestAddNumber(t *testing.T) {15type expectedResponse struct {16Code int17Body interface{}18}1920testcases := []struct {21Name string22Input handlers.AddNumberInput23Expected expectedResponse24}{25{26Name: "test successfully adding number",27Input: handlers.AddNumberInput{Number: "14152229670"},28Expected: expectedResponse{29Code: 200,30Body: handlers.AddNumberResponse{31Valid: true,32RawLocal: "4152229670",33Local: "(415) 222-9670",34E164: "+14152229670",35International: "14152229670",36CountryCode: 1,37Country: "US",38Carrier: "",39},40},41},42{43Name: "test bad params",44Input: handlers.AddNumberInput{Number: "a14152229670"},45Expected: expectedResponse{46Code: 400,47Body: api.ErrorResponse{Error: "Invalid phone number: please provide an integer without any special chars"},48},49},50{51Name: "test invalid number",52Input: handlers.AddNumberInput{Number: "331"},53Expected: expectedResponse{54Code: 400,55Body: api.ErrorResponse{Error: "the string supplied is too short to be a phone number"},56},57},58}5960for _, tt := range testcases {61t.Run(tt.Name, func(t *testing.T) {62r := server.NewServer()6364data, err := json.Marshal(&tt.Input)65if err != nil {66t.Fatal(err)67}6869req, err := http.NewRequest(http.MethodPost, "/v2/numbers", bytes.NewReader(data))70if err != nil {71t.Fatal(err)72}73w := httptest.NewRecorder()74r.ServeHTTP(w, req)7576b, err := json.Marshal(tt.Expected.Body)77if err != nil {78t.Fatal(err)79}8081assert.Equal(t, tt.Expected.Code, w.Code)82assert.Equal(t, string(b), w.Body.String())83})84}85}868788