From 818e0054c14aa45f8fb18a3aeb909be45495067f Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Tue, 2 Apr 2024 16:17:43 +0200 Subject: [PATCH] Added Redirect function --- Context.go | 9 +++++++++ Context_test.go | 12 ++++++++++++ README.md | 1 + 3 files changed, 22 insertions(+) diff --git a/Context.go b/Context.go index 46b3b8c..7afb303 100644 --- a/Context.go +++ b/Context.go @@ -9,6 +9,7 @@ type Context interface { Bytes([]byte) error Error(...any) error Next() error + Redirect(int, string) error Request() Request Response() Response Status(int) Context @@ -51,6 +52,14 @@ func (ctx *context) Next() error { return ctx.server.handlers[ctx.handlerCount](ctx) } +// Redirect redirects the client to a different location +// with the specified status code. +func (ctx *context) Redirect(status int, location string) error { + ctx.response.SetStatus(status) + ctx.response.SetHeader("Location", location) + return nil +} + // Request returns the HTTP request. func (ctx *context) Request() Request { return &ctx.request diff --git a/Context_test.go b/Context_test.go index 05bc24f..5a25cab 100644 --- a/Context_test.go +++ b/Context_test.go @@ -55,3 +55,15 @@ func TestErrorMultiple(t *testing.T) { assert.Equal(t, response.Status(), 401) assert.Equal(t, string(response.Body()), "") } + +func TestRedirect(t *testing.T) { + s := web.NewServer() + + s.Get("/", func(ctx web.Context) error { + return ctx.Redirect(301, "/target") + }) + + response := s.Request("GET", "/", nil, nil) + assert.Equal(t, response.Status(), 301) + assert.Equal(t, response.Header("Location"), "/target") +} diff --git a/README.md b/README.md index 9b912f2..67e9259 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ PASS: TestBytes PASS: TestString PASS: TestError PASS: TestErrorMultiple +PASS: TestRedirect PASS: TestRequest PASS: TestRequestHeader PASS: TestRequestParam