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  }