go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/sdk/web/redirect_result_test.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package web 9 10 import ( 11 "bytes" 12 "net/http" 13 "testing" 14 15 "go.charczuk.com/sdk/assert" 16 ) 17 18 func Test_Redirect(t *testing.T) { 19 r := Redirect("/foo") 20 assert.ItsEqual(t, "/foo", r.RedirectURI) 21 assert.ItsEqual(t, 0, r.StatusCode) 22 assert.ItsEqual(t, "", r.Method) 23 } 24 25 func Test_RedirectStatus(t *testing.T) { 26 r := RedirectStatus("/foo", http.StatusMovedPermanently) 27 assert.ItsEqual(t, "/foo", r.RedirectURI) 28 assert.ItsEqual(t, http.StatusMovedPermanently, r.StatusCode) 29 assert.ItsEqual(t, "", r.Method) 30 } 31 32 func Test_Redirectf(t *testing.T) { 33 r := Redirectf("/foo/%d", 123) 34 assert.ItsEqual(t, "/foo/123", r.RedirectURI) 35 assert.ItsEqual(t, 0, r.StatusCode) 36 assert.ItsEqual(t, "", r.Method) 37 } 38 39 func Test_RedirectWithMethod(t *testing.T) { 40 r := RedirectWithMethod(http.MethodGet, "/foo") 41 assert.ItsEqual(t, "/foo", r.RedirectURI) 42 assert.ItsEqual(t, 0, r.StatusCode) 43 assert.ItsEqual(t, http.MethodGet, r.Method) 44 } 45 46 func Test_RedirectWithMethodf(t *testing.T) { 47 r := RedirectWithMethodf(http.MethodGet, "/foo/%d", 123) 48 assert.ItsEqual(t, "/foo/123", r.RedirectURI) 49 assert.ItsEqual(t, 0, r.StatusCode) 50 assert.ItsEqual(t, http.MethodGet, r.Method) 51 } 52 53 func Test_RedirectResult_Render(t *testing.T) { 54 b := new(bytes.Buffer) 55 res := NewMockResponse(b) 56 req := NewMockRequest(http.MethodPost, "/app/create") 57 ctx := newContext(res, req, nil, nil) 58 59 err := (&RedirectResult{ 60 RedirectURI: "/foo", 61 }).Render(ctx) 62 assert.ItsNil(t, err) 63 assert.ItsEmpty(t, b.String()) 64 assert.ItsEqual(t, http.StatusTemporaryRedirect, res.StatusCode()) 65 } 66 67 func Test_RedirectResult_Render_method(t *testing.T) { 68 b := new(bytes.Buffer) 69 res := NewMockResponse(b) 70 req := NewMockRequest(http.MethodPost, "/app/create") 71 ctx := newContext(res, req, nil, nil) 72 73 err := (&RedirectResult{ 74 Method: http.MethodGet, 75 RedirectURI: "/foo", 76 }).Render(ctx) 77 assert.ItsNil(t, err) 78 assert.ItsEqual(t, "<a href=\"/foo\">Found</a>.\n\n", b.String()) 79 assert.ItsEqual(t, http.StatusFound, res.StatusCode()) 80 } 81 82 func Test_RedirectResult_Render_statusCode(t *testing.T) { 83 b := new(bytes.Buffer) 84 res := NewMockResponse(b) 85 req := NewMockRequest(http.MethodPost, "/app/create") 86 ctx := newContext(res, req, nil, nil) 87 88 err := (&RedirectResult{ 89 StatusCode: http.StatusMovedPermanently, 90 RedirectURI: "/foo", 91 }).Render(ctx) 92 assert.ItsNil(t, err) 93 assert.ItsEmpty(t, b.String()) 94 assert.ItsEqual(t, http.StatusMovedPermanently, res.StatusCode()) 95 } 96 97 func Test_RedirectResult_Render_method_statusCode(t *testing.T) { 98 b := new(bytes.Buffer) 99 res := NewMockResponse(b) 100 req := NewMockRequest(http.MethodPost, "/app/create") 101 ctx := newContext(res, req, nil, nil) 102 103 err := (&RedirectResult{ 104 StatusCode: http.StatusMovedPermanently, 105 Method: http.MethodGet, 106 RedirectURI: "/foo", 107 }).Render(ctx) 108 assert.ItsNil(t, err) 109 assert.ItsEqual(t, "<a href=\"/foo\">Moved Permanently</a>.\n\n", b.String()) 110 assert.ItsEqual(t, http.StatusMovedPermanently, res.StatusCode()) 111 }