package jsonip import ( "context" "net" "net/http" "net/http/httptest" "testing" "github.com/stretchr/testify/assert" ) func TestService_Name(t *testing.T) { s := Service{} assert.Equal(t, "jsonip", s.Name()) } func TestService_Lookup(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := w.Write([]byte(`{"ip":"211.46.32.214","geo-ip":"https://getjsonip.com/#plus","API Help":"https://getjsonip.com/#docs"}`)) assert.NoError(t, err) })) defer server.Close() s := Service{url: server.URL} ip, err := s.Lookup(context.Background()) assert.NoError(t, err) assert.Equal(t, net.IPv4(211, 46, 32, 214), ip) } func TestService_Lookup_HTTPError(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(404) })) defer server.Close() s := Service{url: server.URL} ip, err := s.Lookup(context.Background()) assert.EqualError(t, err, "HTTP Response: 404 Not Found") assert.Nil(t, ip) } func TestService_Lookup_JsonParseError(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := w.Write([]byte(`invalid_json`)) assert.NoError(t, err) })) defer server.Close() s := Service{url: server.URL} ip, err := s.Lookup(context.Background()) assert.EqualError(t, err, "invalid character 'i' looking for beginning of value") assert.Nil(t, ip) } func TestService_Lookup_IPParseError(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := w.Write([]byte(`{"ip":"xxx","geo-ip":"https://getjsonip.com/#plus","API Help":"https://getjsonip.com/#docs"}`)) assert.NoError(t, err) })) defer server.Close() s := Service{url: server.URL} ip, err := s.Lookup(context.Background()) assert.EqualError(t, err, "invalid IP address: xxx") assert.Nil(t, ip) }