github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/middleware/common_test.go (about)

     1  package middleware
     2  
     3  import (
     4  	"net/http"
     5  	"net/http/httptest"
     6  	"testing"
     7  
     8  	"github.com/cloudreve/Cloudreve/v3/pkg/cache"
     9  	"github.com/cloudreve/Cloudreve/v3/pkg/hashid"
    10  	"github.com/gin-gonic/gin"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestHashID(t *testing.T) {
    15  	asserts := assert.New(t)
    16  	rec := httptest.NewRecorder()
    17  	TestFunc := HashID(hashid.FolderID)
    18  
    19  	// 未给定ID对象,跳过
    20  	{
    21  		c, _ := gin.CreateTestContext(rec)
    22  		c.Params = []gin.Param{}
    23  		c.Request, _ = http.NewRequest("POST", "/api/v3/file/dellete/1", nil)
    24  		TestFunc(c)
    25  		asserts.NoError(mock.ExpectationsWereMet())
    26  		asserts.False(c.IsAborted())
    27  	}
    28  
    29  	// 给定ID,解析失败
    30  	{
    31  		c, _ := gin.CreateTestContext(rec)
    32  		c.Params = []gin.Param{
    33  			{"id", "2333"},
    34  		}
    35  		c.Request, _ = http.NewRequest("POST", "/api/v3/file/dellete/1", nil)
    36  		TestFunc(c)
    37  		asserts.NoError(mock.ExpectationsWereMet())
    38  		asserts.True(c.IsAborted())
    39  	}
    40  
    41  	// 给定ID,解析成功
    42  	{
    43  		c, _ := gin.CreateTestContext(rec)
    44  		c.Params = []gin.Param{
    45  			{"id", hashid.HashID(1, hashid.FolderID)},
    46  		}
    47  		c.Request, _ = http.NewRequest("POST", "/api/v3/file/dellete/1", nil)
    48  		TestFunc(c)
    49  		asserts.NoError(mock.ExpectationsWereMet())
    50  		asserts.False(c.IsAborted())
    51  	}
    52  }
    53  
    54  func TestIsFunctionEnabled(t *testing.T) {
    55  	asserts := assert.New(t)
    56  	rec := httptest.NewRecorder()
    57  	TestFunc := IsFunctionEnabled("TestIsFunctionEnabled")
    58  
    59  	// 未开启
    60  	{
    61  		cache.Set("setting_TestIsFunctionEnabled", "0", 0)
    62  		c, _ := gin.CreateTestContext(rec)
    63  		c.Params = []gin.Param{}
    64  		c.Request, _ = http.NewRequest("POST", "/api/v3/file/dellete/1", nil)
    65  		TestFunc(c)
    66  		asserts.True(c.IsAborted())
    67  	}
    68  	// 开启
    69  	{
    70  		cache.Set("setting_TestIsFunctionEnabled", "1", 0)
    71  		c, _ := gin.CreateTestContext(rec)
    72  		c.Params = []gin.Param{}
    73  		c.Request, _ = http.NewRequest("POST", "/api/v3/file/dellete/1", nil)
    74  		TestFunc(c)
    75  		asserts.False(c.IsAborted())
    76  	}
    77  
    78  }
    79  
    80  func TestCacheControl(t *testing.T) {
    81  	a := assert.New(t)
    82  	TestFunc := CacheControl()
    83  	rec := httptest.NewRecorder()
    84  	c, _ := gin.CreateTestContext(rec)
    85  	TestFunc(c)
    86  	a.Contains(c.Writer.Header().Get("Cache-Control"), "no-cache")
    87  }
    88  
    89  func TestSandbox(t *testing.T) {
    90  	a := assert.New(t)
    91  	TestFunc := Sandbox()
    92  	rec := httptest.NewRecorder()
    93  	c, _ := gin.CreateTestContext(rec)
    94  	TestFunc(c)
    95  	a.Contains(c.Writer.Header().Get("Content-Security-Policy"), "sandbox")
    96  }
    97  
    98  func TestStaticResourceCache(t *testing.T) {
    99  	a := assert.New(t)
   100  	TestFunc := StaticResourceCache()
   101  	rec := httptest.NewRecorder()
   102  	c, _ := gin.CreateTestContext(rec)
   103  	TestFunc(c)
   104  	a.Contains(c.Writer.Header().Get("Cache-Control"), "public, max-age")
   105  }