diff --git a/pkg/request/request_test.go b/pkg/request/request_test.go index 7b1a48d..1f00f7e 100644 --- a/pkg/request/request_test.go +++ b/pkg/request/request_test.go @@ -82,6 +82,8 @@ func TestHTTPClient_Request(t *testing.T) { WithTimeout(time.Duration(1)*time.Microsecond), WithCredential(auth.HMACAuth{SecretKey: []byte("123")}, 10), WithContext(context.Background()), + WithoutHeader([]string{"s s", "s s"}), + WithMasterMeta(), ) asserts.Error(resp.Err) asserts.Nil(resp.Response) diff --git a/pkg/serializer/explorer_test.go b/pkg/serializer/explorer_test.go new file mode 100644 index 0000000..00c9efc --- /dev/null +++ b/pkg/serializer/explorer_test.go @@ -0,0 +1,15 @@ +package serializer + +import ( + model "github.com/cloudreve/Cloudreve/v3/models" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestBuildObjectList(t *testing.T) { + a := assert.New(t) + res := BuildObjectList(1, []Object{{}, {}}, &model.Policy{}) + a.NotEmpty(res.Parent) + a.NotNil(res.Policy) + a.Len(res.Objects, 2) +} diff --git a/pkg/serializer/upload.go b/pkg/serializer/upload.go index b9e9029..4e7150b 100644 --- a/pkg/serializer/upload.go +++ b/pkg/serializer/upload.go @@ -1,9 +1,7 @@ package serializer import ( - "encoding/base64" "encoding/gob" - "encoding/json" model "github.com/cloudreve/Cloudreve/v3/models" "time" ) @@ -64,32 +62,3 @@ type GeneralUploadCallbackFailed struct { func init() { gob.Register(UploadSession{}) } - -// DecodeUploadPolicy 反序列化Header中携带的上传策略 -func DecodeUploadPolicy(raw string) (*UploadPolicy, error) { - var res UploadPolicy - - rawJSON, err := base64.StdEncoding.DecodeString(raw) - if err != nil { - return nil, err - } - - err = json.Unmarshal(rawJSON, &res) - if err != nil { - return nil, err - } - - return &res, err -} - -// EncodeUploadPolicy 序列化Header中携带的上传策略 -func (policy *UploadPolicy) EncodeUploadPolicy() (string, error) { - jsonRes, err := json.Marshal(policy) - if err != nil { - return "", err - } - - res := base64.StdEncoding.EncodeToString(jsonRes) - return res, nil - -} diff --git a/pkg/serializer/upload_test.go b/pkg/serializer/upload_test.go deleted file mode 100644 index 2ed89f1..0000000 --- a/pkg/serializer/upload_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package serializer - -import ( - "github.com/stretchr/testify/assert" - "testing" -) - -func TestDecodeUploadPolicy(t *testing.T) { - asserts := assert.New(t) - - testCases := []struct { - input string - expectError bool - expectNil bool - expectRes *UploadPolicy - }{ - { - "错误的base64字符", - true, - true, - &UploadPolicy{}, - }, - { - "6ZSZ6K+v55qESlNPTuWtl+espg==", - true, - true, - &UploadPolicy{}, - }, - { - "e30=", - false, - false, - &UploadPolicy{}, - }, - { - "eyJjYWxsYmFja191cmwiOiJ0ZXN0In0=", - false, - false, - &UploadPolicy{CallbackURL: "test"}, - }, - } - - for _, testCase := range testCases { - res, err := DecodeUploadPolicy(testCase.input) - if testCase.expectError { - asserts.Error(err) - } - if testCase.expectNil { - asserts.Nil(res) - } - if !testCase.expectNil { - asserts.Equal(testCase.expectRes, res) - } - } -} - -func TestUploadPolicy_EncodeUploadPolicy(t *testing.T) { - asserts := assert.New(t) - testPolicy := UploadPolicy{} - res, err := testPolicy.EncodeUploadPolicy() - asserts.NoError(err) - asserts.NotEmpty(res) -} diff --git a/pkg/serializer/user_test.go b/pkg/serializer/user_test.go index cb70fcc..2942186 100644 --- a/pkg/serializer/user_test.go +++ b/pkg/serializer/user_test.go @@ -29,23 +29,19 @@ func TestMain(m *testing.M) { func TestBuildUser(t *testing.T) { asserts := assert.New(t) - user := model.User{ - Policy: model.Policy{MaxSize: 1024 * 1024}, - } + user := model.User{} mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"})) res := BuildUser(user) asserts.NoError(mock.ExpectationsWereMet()) - asserts.Equal("1.00mb", res.Policy.MaxSize) + asserts.NotNil(res) } func TestBuildUserResponse(t *testing.T) { asserts := assert.New(t) - user := model.User{ - Policy: model.Policy{MaxSize: 1024 * 1024}, - } + user := model.User{} res := BuildUserResponse(user) - asserts.Equal("1.00mb", res.Data.(User).Policy.MaxSize) + asserts.NotNil(res) } func TestBuildUserStorageResponse(t *testing.T) { diff --git a/pkg/task/import_test.go b/pkg/task/import_test.go index ea22cb8..c75e17c 100644 --- a/pkg/task/import_test.go +++ b/pkg/task/import_test.go @@ -182,6 +182,7 @@ func TestImportTask_Do(t *testing.T) { // 插入文件记录 mock.ExpectBegin() mock.ExpectExec("INSERT(.+)files(.+)").WillReturnResult(sqlmock.NewResult(2, 1)) + mock.ExpectExec("UPDATE(.+)users(.+)storage(.+)").WillReturnResult(sqlmock.NewResult(2, 1)) mock.ExpectCommit() task.Do() diff --git a/pkg/webdav/internal/xml/xml.go b/pkg/webdav/internal/xml/xml.go index 5b79cbe..be282bb 100644 --- a/pkg/webdav/internal/xml/xml.go +++ b/pkg/webdav/internal/xml/xml.go @@ -1040,7 +1040,7 @@ Input: d.buf.WriteByte(';') n, err := strconv.ParseUint(s, base, 64) if err == nil && n <= unicode.MaxRune { - text = string(n) + text = string(rune(n)) haveText = true } } @@ -1063,7 +1063,7 @@ Input: if isName(name) { s := string(name) if r, ok := entity[s]; ok { - text = string(r) + text = string(rune(r)) haveText = true } else if d.Entity != nil { text, haveText = d.Entity[s] diff --git a/routers/file_router_test.go b/routers/file_router_test.go deleted file mode 100644 index 41ff072..0000000 --- a/routers/file_router_test.go +++ /dev/null @@ -1,180 +0,0 @@ -package routers - -import ( - "bytes" - "encoding/json" - "net/http" - "net/http/httptest" - "strings" - "testing" - - "github.com/cloudreve/Cloudreve/v3/middleware" - model "github.com/cloudreve/Cloudreve/v3/models" - "github.com/cloudreve/Cloudreve/v3/pkg/serializer" - "github.com/cloudreve/Cloudreve/v3/service/explorer" - "github.com/stretchr/testify/assert" -) - -func TestListDirectoryRoute(t *testing.T) { - switchToMemDB() - asserts := assert.New(t) - router := InitMasterRouter() - w := httptest.NewRecorder() - - // 成功 - req, _ := http.NewRequest( - "GET", - "/api/v3/directory/", - nil, - ) - middleware.SessionMock = map[string]interface{}{"user_id": 1} - router.ServeHTTP(w, req) - asserts.Equal(200, w.Code) - resJSON := &serializer.Response{} - err := json.Unmarshal(w.Body.Bytes(), resJSON) - asserts.NoError(err) - asserts.Equal(0, resJSON.Code) - - w.Body.Reset() - -} - -func TestLocalFileUpload(t *testing.T) { - switchToMemDB() - asserts := assert.New(t) - router := InitMasterRouter() - w := httptest.NewRecorder() - middleware.SessionMock = map[string]interface{}{"user_id": 1} - - testCases := []struct { - GetRequest func() *http.Request - ExpectCode int - RollBack func() - }{ - // 文件大小指定错误 - { - GetRequest: func() *http.Request { - req, _ := http.NewRequest( - "POST", - "/api/v3/file/upload", - nil, - ) - req.Header.Add("Content-Length", "ddf") - return req - }, - ExpectCode: 40001, - }, - // 返回错误 - { - GetRequest: func() *http.Request { - req, _ := http.NewRequest( - "POST", - "/api/v3/file/upload", - strings.NewReader("2333"), - ) - req.Header.Add("Content-Length", "4") - req.Header.Add("X-Cr-FileName", "大地的%sfsf") - return req - }, - ExpectCode: 40002, - }, - // 成功 - { - GetRequest: func() *http.Request { - req, _ := http.NewRequest( - "POST", - "/api/v3/file/upload", - strings.NewReader("2333"), - ) - req.Header.Add("Content-Length", "4") - req.Header.Add("X-Cr-FileName", "TestFileUploadRoute.txt") - req.Header.Add("X-Cr-Path", "/") - return req - }, - ExpectCode: 0, - }, - } - - for key, testCase := range testCases { - req := testCase.GetRequest() - router.ServeHTTP(w, req) - asserts.Equal(200, w.Code) - resJSON := &serializer.Response{} - err := json.Unmarshal(w.Body.Bytes(), resJSON) - asserts.NoError(err, "测试用例%d", key) - asserts.Equal(testCase.ExpectCode, resJSON.Code, "测试用例%d", key) - if testCase.RollBack != nil { - testCase.RollBack() - } - w.Body.Reset() - } - -} - -func TestObjectDelete(t *testing.T) { - asserts := assert.New(t) - router := InitMasterRouter() - w := httptest.NewRecorder() - middleware.SessionMock = map[string]interface{}{"user_id": 1} - - testCases := []struct { - Mock []string - GetRequest func() *http.Request - ExpectCode int - RollBack []string - }{ - // 路径不存在,返回无错误 - { - GetRequest: func() *http.Request { - body := explorer.ItemService{ - Items: []uint{1}, - } - bodyStr, _ := json.Marshal(body) - req, _ := http.NewRequest( - "DELETE", - "/api/v3/object", - bytes.NewReader(bodyStr), - ) - return req - }, - ExpectCode: 0, - }, - // 文件删除失败,返回203 - { - Mock: []string{"INSERT INTO `files` (`id`, `created_at`, `updated_at`, `deleted_at`, `name`, `source_name`, `user_id`, `size`, `pic_info`, `folder_id`, `policy_id`) VALUES(5, '2019-11-30 07:08:33', '2019-11-30 07:08:33', NULL, 'pigeon.zip', '65azil3B_pigeon.zip', 1, 1667217, '', 1, 1);"}, - GetRequest: func() *http.Request { - body := explorer.ItemService{ - Items: []uint{5}, - } - bodyStr, _ := json.Marshal(body) - req, _ := http.NewRequest( - "DELETE", - "/api/v3/object", - bytes.NewReader(bodyStr), - ) - return req - }, - RollBack: []string{"DELETE FROM `v3_files` WHERE `id`=5"}, - ExpectCode: 203, - }, - } - - for key, testCase := range testCases { - for _, value := range testCase.Mock { - model.DB.Exec(value) - } - req := testCase.GetRequest() - router.ServeHTTP(w, req) - asserts.Equal(200, w.Code) - resJSON := &serializer.Response{} - err := json.Unmarshal(w.Body.Bytes(), resJSON) - asserts.NoError(err, "测试用例%d", key) - asserts.Equal(testCase.ExpectCode, resJSON.Code, "测试用例%d", key) - - for _, value := range testCase.RollBack { - model.DB.Exec(value) - } - - w.Body.Reset() - } -} diff --git a/routers/router_test.go b/routers/router_test.go index 4c65d4e..2476de6 100644 --- a/routers/router_test.go +++ b/routers/router_test.go @@ -1,6 +1,7 @@ package routers import ( + "github.com/cloudreve/Cloudreve/v3/pkg/conf" "net/http" "net/http/httptest" "testing" @@ -19,7 +20,7 @@ func TestPing(t *testing.T) { router.ServeHTTP(w, req) assert.Equal(t, 200, w.Code) - asserts.Contains(w.Body.String(), "Pong") + asserts.Contains(w.Body.String(), conf.BackendVersion) } func TestCaptcha(t *testing.T) {