package v2_test
import (
"context"
"errors"
"testing"
"github.com/aws/aws-lambda-go/events"
v2 "mercemay.top/src/lambdalog/adapters/apigateway/v2"
)
type capture struct{ msgs []string }
func (c *capture) Info(msg string, _ ...v2.Field) { c.msgs = append(c.msgs, "info:"+msg) }
func (c *capture) Error(msg string, _ ...v2.Field) { c.msgs = append(c.msgs, "error:"+msg) }
func (c *capture) With(_ ...v2.Field) v2.Logger { return c }
func request() events.APIGatewayV2HTTPRequest {
return events.APIGatewayV2HTTPRequest{
RouteKey: "GET /x",
RequestContext: events.APIGatewayV2HTTPRequestContext{
RequestID: "req-2",
HTTP: events.APIGatewayV2HTTPRequestContextHTTPDescription{
Method: "GET", Path: "/x", SourceIP: "1.2.3.4",
},
},
}
}
func TestWrap_HappyPath(t *testing.T) {
c := &capture{}
h := v2.Wrap(c, func(ctx context.Context, req events.APIGatewayV2HTTPRequest) (events.APIGatewayV2HTTPResponse, error) {
return events.APIGatewayV2HTTPResponse{StatusCode: 204}, nil
})
if _, err := h(context.Background(), request()); err != nil {
t.Fatalf("err: %v", err)
}
if len(c.msgs) != 2 || c.msgs[1] != "info:http.request.end" {
t.Fatalf("msgs: %v", c.msgs)
}
}
func TestWrap_Error(t *testing.T) {
c := &capture{}
h := v2.Wrap(c, func(ctx context.Context, req events.APIGatewayV2HTTPRequest) (events.APIGatewayV2HTTPResponse, error) {
return events.APIGatewayV2HTTPResponse{}, errors.New("boom")
})
if _, err := h(context.Background(), request()); err == nil {
t.Fatal("expected error")
}
if c.msgs[len(c.msgs)-1] != "error:http.request.end" {
t.Fatalf("msgs: %v", c.msgs)
}
}
func TestExtractFields(t *testing.T) {
fs := v2.ExtractFields(request())
if len(fs) != 5 {
t.Fatalf("fields: %#v", fs)
}
}
func TestJSONResponse(t *testing.T) {
r := v2.JSONResponse(200, `{"a":1}`)
if r.Headers["Content-Type"] != "application/json" {
t.Fatalf("headers: %+v", r.Headers)
}
}
func TestErrorResponse(t *testing.T) {
r := v2.ErrorResponse(503, "x")
if r.StatusCode != 503 || r.Body != "x" {
t.Fatalf("%+v", r)
}
}