Cloudreve/routers/file_router_test.go

179 lines
4.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package routers
import (
"bytes"
"encoding/json"
"github.com/HFO4/cloudreve/middleware"
model "github.com/HFO4/cloudreve/models"
"github.com/HFO4/cloudreve/pkg/serializer"
"github.com/HFO4/cloudreve/service/explorer"
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
"strings"
"testing"
)
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-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-FileName", "TestFileUploadRoute.txt")
req.Header.Add("X-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()
}
}