github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/middleware/share_test.go (about) 1 package middleware 2 3 import ( 4 "net/http/httptest" 5 "testing" 6 7 "github.com/DATA-DOG/go-sqlmock" 8 model "github.com/cloudreve/Cloudreve/v3/models" 9 "github.com/cloudreve/Cloudreve/v3/pkg/conf" 10 "github.com/gin-gonic/gin" 11 "github.com/jinzhu/gorm" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestShareAvailable(t *testing.T) { 16 asserts := assert.New(t) 17 rec := httptest.NewRecorder() 18 testFunc := ShareAvailable() 19 20 // 分享不存在 21 { 22 c, _ := gin.CreateTestContext(rec) 23 c.Params = []gin.Param{ 24 {"id", "empty"}, 25 } 26 testFunc(c) 27 asserts.True(c.IsAborted()) 28 } 29 30 // 通过 31 { 32 conf.SystemConfig.HashIDSalt = "" 33 // 用户组 34 mock.ExpectQuery("SELECT(.+)groups(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(3)) 35 mock.ExpectQuery("SELECT(.+)shares(.+)"). 36 WillReturnRows( 37 sqlmock.NewRows( 38 []string{"id", "remain_downloads", "source_id"}). 39 AddRow(1, 1, 2), 40 ) 41 mock.ExpectQuery("SELECT(.+)files(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(2)) 42 c, _ := gin.CreateTestContext(rec) 43 c.Params = []gin.Param{ 44 {"id", "x9T4"}, 45 } 46 testFunc(c) 47 asserts.NoError(mock.ExpectationsWereMet()) 48 asserts.False(c.IsAborted()) 49 asserts.NotNil(c.Get("user")) 50 asserts.NotNil(c.Get("share")) 51 } 52 } 53 54 func TestShareCanPreview(t *testing.T) { 55 asserts := assert.New(t) 56 rec := httptest.NewRecorder() 57 testFunc := ShareCanPreview() 58 59 // 无分享上下文 60 { 61 c, _ := gin.CreateTestContext(rec) 62 testFunc(c) 63 asserts.True(c.IsAborted()) 64 } 65 66 // 可以预览 67 { 68 c, _ := gin.CreateTestContext(rec) 69 c.Set("share", &model.Share{PreviewEnabled: true}) 70 testFunc(c) 71 asserts.False(c.IsAborted()) 72 } 73 74 // 未开启预览 75 { 76 c, _ := gin.CreateTestContext(rec) 77 c.Set("share", &model.Share{PreviewEnabled: false}) 78 testFunc(c) 79 asserts.True(c.IsAborted()) 80 } 81 } 82 83 func TestCheckShareUnlocked(t *testing.T) { 84 asserts := assert.New(t) 85 rec := httptest.NewRecorder() 86 testFunc := CheckShareUnlocked() 87 88 // 无分享上下文 89 { 90 c, _ := gin.CreateTestContext(rec) 91 testFunc(c) 92 asserts.True(c.IsAborted()) 93 } 94 95 // 无密码 96 { 97 c, _ := gin.CreateTestContext(rec) 98 c.Set("share", &model.Share{}) 99 testFunc(c) 100 asserts.False(c.IsAborted()) 101 } 102 103 } 104 105 func TestBeforeShareDownload(t *testing.T) { 106 asserts := assert.New(t) 107 rec := httptest.NewRecorder() 108 testFunc := BeforeShareDownload() 109 110 // 无分享上下文 111 { 112 c, _ := gin.CreateTestContext(rec) 113 testFunc(c) 114 asserts.True(c.IsAborted()) 115 116 c, _ = gin.CreateTestContext(rec) 117 c.Set("share", &model.Share{}) 118 testFunc(c) 119 asserts.True(c.IsAborted()) 120 } 121 122 // 用户不能下载 123 { 124 c, _ := gin.CreateTestContext(rec) 125 c.Set("share", &model.Share{}) 126 c.Set("user", &model.User{ 127 Group: model.Group{OptionsSerialized: model.GroupOption{}}, 128 }) 129 testFunc(c) 130 asserts.True(c.IsAborted()) 131 } 132 133 // 可以下载 134 { 135 c, _ := gin.CreateTestContext(rec) 136 c.Set("share", &model.Share{}) 137 c.Set("user", &model.User{ 138 Model: gorm.Model{ID: 1}, 139 Group: model.Group{OptionsSerialized: model.GroupOption{ 140 ShareDownload: true, 141 }}, 142 }) 143 testFunc(c) 144 asserts.False(c.IsAborted()) 145 } 146 } 147 148 func TestShareOwner(t *testing.T) { 149 asserts := assert.New(t) 150 rec := httptest.NewRecorder() 151 testFunc := ShareOwner() 152 153 // 未登录 154 { 155 c, _ := gin.CreateTestContext(rec) 156 testFunc(c) 157 asserts.True(c.IsAborted()) 158 159 c, _ = gin.CreateTestContext(rec) 160 c.Set("share", &model.Share{}) 161 testFunc(c) 162 asserts.True(c.IsAborted()) 163 } 164 165 // 非用户所创建分享 166 { 167 c, _ := gin.CreateTestContext(rec) 168 testFunc(c) 169 asserts.True(c.IsAborted()) 170 171 c, _ = gin.CreateTestContext(rec) 172 c.Set("share", &model.Share{User: model.User{Model: gorm.Model{ID: 1}}}) 173 c.Set("user", &model.User{}) 174 testFunc(c) 175 asserts.True(c.IsAborted()) 176 } 177 178 // 正常 179 { 180 c, _ := gin.CreateTestContext(rec) 181 testFunc(c) 182 asserts.True(c.IsAborted()) 183 184 c, _ = gin.CreateTestContext(rec) 185 c.Set("share", &model.Share{}) 186 c.Set("user", &model.User{}) 187 testFunc(c) 188 asserts.False(c.IsAborted()) 189 } 190 }