51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
package httpapi
|
|
|
|
import (
|
|
"io"
|
|
"log/slog"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"calllinesystem/server/internal/config"
|
|
)
|
|
|
|
func TestInternalPhoneLookupRejectsPublicNetwork(t *testing.T) {
|
|
server := internalRouteTestServer()
|
|
recorder := httptest.NewRecorder()
|
|
request := httptest.NewRequest("POST", "/api/internal/status/search", strings.NewReader(`{"phone":"13800138000"}`))
|
|
request.RemoteAddr = "203.0.113.8:42000"
|
|
request.Header.Set("X-Forwarded-For", "10.0.0.8")
|
|
|
|
server.Handler().ServeHTTP(recorder, request)
|
|
|
|
if recorder.Code != 403 {
|
|
t.Fatalf("public network status = %d, want 403", recorder.Code)
|
|
}
|
|
if !strings.Contains(recorder.Body.String(), `"code":"INTERNAL_NETWORK_REQUIRED"`) {
|
|
t.Fatalf("unexpected response: %s", recorder.Body.String())
|
|
}
|
|
}
|
|
|
|
func TestInternalPhoneLookupIsAvailableInProductionFromPrivateNetwork(t *testing.T) {
|
|
server := internalRouteTestServer()
|
|
recorder := httptest.NewRecorder()
|
|
request := httptest.NewRequest("POST", "/api/internal/status/search", strings.NewReader(`{"phone":"123"}`))
|
|
request.RemoteAddr = "10.23.4.5:42000"
|
|
|
|
server.Handler().ServeHTTP(recorder, request)
|
|
|
|
if recorder.Code != 422 {
|
|
t.Fatalf("private network invalid phone status = %d, want 422", recorder.Code)
|
|
}
|
|
}
|
|
|
|
func internalRouteTestServer() *Server {
|
|
return &Server{
|
|
config: config.Config{Environment: "production"},
|
|
logger: slog.New(slog.NewTextHandler(io.Discard, nil)),
|
|
now: func() time.Time { return time.Unix(100, 0).UTC() },
|
|
}
|
|
}
|