Skip to content

Commit

Permalink
fix: merged headers
Browse files Browse the repository at this point in the history
  • Loading branch information
ConsoleTVs committed Sep 19, 2024
1 parent 9ff4098 commit d186f2f
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 2 deletions.
6 changes: 5 additions & 1 deletion builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,11 @@ func (builder Builder) Merge(other Builder) Builder {
}

if other.headers != nil {
builder.headers = other.headers
for key, values := range other.headers {
for _, value := range values {
builder.headers.Add(key, value)
}
}
}

if other.body != nil {
Expand Down
7 changes: 6 additions & 1 deletion handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package akumu

import (
"context"
"fmt"
"net/http"
)

Expand All @@ -22,7 +23,9 @@ func handleError(writer http.ResponseWriter, request *http.Request, err error, p

if builder, ok := err.(Builder); ok {
if parent != nil {
parent.Merge(builder).Handle(writer, request)
parent.
Merge(builder).
Handle(writer, request)

return
}
Expand All @@ -33,6 +36,8 @@ func handleError(writer http.ResponseWriter, request *http.Request, err error, p
}

if responder, ok := err.(Responder); ok {
fmt.Printf("Responder: %T\n %#v", responder, parent)

if parent != nil {
parent.
Merge(responder.Respond(request)).
Expand Down
25 changes: 25 additions & 0 deletions problem_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ func customProblemHandler(request *http.Request) error {
)
}

func customProblemHandler2(request *http.Request) error {
return akumu.
Failed(ErrNotAuthenticated).
Header("X-Foo", "Bar")
}

func problemHandler(request *http.Request) error {
return akumu.Failed(akumu.Problem{
Type: "http://example.com/problems/not-found",
Expand All @@ -33,6 +39,25 @@ func problemHandler(request *http.Request) error {
})
}

func TestItHandlesErrorsWithHeaders(t *testing.T) {
request, err := http.NewRequest("GET", "/", nil)
request.Header.Add("Accept", "application/problem+json")

if err != nil {
t.Fatalf("unable to create request: %s", err)
}

response := akumu.Record(customProblemHandler2, request)

if response.Code != ErrNotAuthenticated.Status {
t.Fatalf("unexpected status code: %d, expected %d", response.Code, ErrNotAuthenticated.Status)
}

if value := response.Header().Get("X-Foo"); value != "Bar" {
t.Fatalf("unexpected header value: %s, expected %s", value, "Bar")
}
}

func TestProblemHandler(t *testing.T) {
request, err := http.NewRequest("GET", "/", nil)

Expand Down

0 comments on commit d186f2f

Please sign in to comment.