github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/middleware/file_test.go (about) 1 package middleware 2 3 import ( 4 "github.com/DATA-DOG/go-sqlmock" 5 "github.com/gin-gonic/gin" 6 "github.com/stretchr/testify/assert" 7 "net/http/httptest" 8 "testing" 9 ) 10 11 func TestValidateSourceLink(t *testing.T) { 12 a := assert.New(t) 13 rec := httptest.NewRecorder() 14 testFunc := ValidateSourceLink() 15 16 // ID 不存在 17 { 18 c, _ := gin.CreateTestContext(rec) 19 testFunc(c) 20 a.True(c.IsAborted()) 21 } 22 23 // SourceLink 不存在 24 { 25 c, _ := gin.CreateTestContext(rec) 26 c.Set("object_id", 1) 27 mock.ExpectQuery("SELECT(.+)source_links(.+)").WithArgs(1).WillReturnRows(sqlmock.NewRows([]string{"id"})) 28 testFunc(c) 29 a.True(c.IsAborted()) 30 a.NoError(mock.ExpectationsWereMet()) 31 } 32 33 // 原文件不存在 34 { 35 c, _ := gin.CreateTestContext(rec) 36 c.Set("object_id", 1) 37 mock.ExpectQuery("SELECT(.+)source_links(.+)").WithArgs(1).WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 38 mock.ExpectQuery("SELECT(.+)files(.+)").WithArgs(0).WillReturnRows(sqlmock.NewRows([]string{"id"})) 39 testFunc(c) 40 a.True(c.IsAborted()) 41 a.NoError(mock.ExpectationsWereMet()) 42 } 43 44 // 成功 45 { 46 c, _ := gin.CreateTestContext(rec) 47 c.Set("object_id", 1) 48 mock.ExpectQuery("SELECT(.+)source_links(.+)").WithArgs(1).WillReturnRows(sqlmock.NewRows([]string{"id", "file_id"}).AddRow(1, 2)) 49 mock.ExpectQuery("SELECT(.+)files(.+)").WithArgs(2).WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(2)) 50 mock.ExpectBegin() 51 mock.ExpectExec("UPDATE(.+)source_links").WillReturnResult(sqlmock.NewResult(1, 1)) 52 testFunc(c) 53 a.False(c.IsAborted()) 54 a.NoError(mock.ExpectationsWereMet()) 55 } 56 57 }