diff --git a/pkg/filesystem/hooks_test.go b/pkg/filesystem/hooks_test.go index 7257906..b0da5e9 100644 --- a/pkg/filesystem/hooks_test.go +++ b/pkg/filesystem/hooks_test.go @@ -168,6 +168,18 @@ func TestFileSystem_Use(t *testing.T) { // 不存在 fs.Use("BeforeUpload2333", hook) + + asserts.NotPanics(func() { + for _, hookName := range []string{ + "AfterUpload", + "AfterValidateFailed", + "AfterUploadCanceled", + "BeforeFileDownload", + } { + fs.Use(hookName, hook) + } + }) + } func TestFileSystem_Trigger(t *testing.T) { @@ -195,3 +207,50 @@ func TestFileSystem_Trigger(t *testing.T) { asserts.NoError(err) asserts.Equal(uint64(4), fs.User.Storage) } + +func TestHookIsFileExist(t *testing.T) { + asserts := assert.New(t) + fs := &FileSystem{User: &model.User{ + Model: gorm.Model{ + ID: 1, + }, + }} + ctx := context.WithValue(context.Background(), PathCtx, "/test.txt") + { + mock.ExpectQuery("SELECT(.+)").WithArgs(uint(1), "/", "test.txt").WillReturnRows( + sqlmock.NewRows([]string{"Name"}).AddRow("s"), + ) + err := HookIsFileExist(ctx, fs) + asserts.NoError(mock.ExpectationsWereMet()) + asserts.NoError(err) + } + { + mock.ExpectQuery("SELECT(.+)").WithArgs(uint(1), "/", "test.txt").WillReturnRows( + sqlmock.NewRows([]string{"Name"}), + ) + err := HookIsFileExist(ctx, fs) + asserts.NoError(mock.ExpectationsWereMet()) + asserts.Error(err) + } + +} + +func TestHookValidateCapacity(t *testing.T) { + asserts := assert.New(t) + fs := &FileSystem{User: &model.User{ + Model: gorm.Model{ID: 1}, + Storage: 0, + Group: model.Group{ + MaxStorage: 11, + }, + }} + ctx := context.WithValue(context.Background(), FileHeaderCtx, local.FileStream{Size: 10}) + { + err := HookValidateCapacity(ctx, fs) + asserts.NoError(err) + } + { + err := HookValidateCapacity(ctx, fs) + asserts.Error(err) + } +} diff --git a/pkg/filesystem/local/file_test.go b/pkg/filesystem/local/file_test.go new file mode 100644 index 0000000..bf42fca --- /dev/null +++ b/pkg/filesystem/local/file_test.go @@ -0,0 +1,48 @@ +package local + +import ( + "github.com/stretchr/testify/assert" + "io/ioutil" + "strings" + "testing" +) + +func TestFileStream_GetFileName(t *testing.T) { + asserts := assert.New(t) + file := FileStream{Name: "123"} + asserts.Equal("123", file.GetFileName()) +} + +func TestFileStream_GetMIMEType(t *testing.T) { + asserts := assert.New(t) + file := FileStream{MIMEType: "123"} + asserts.Equal("123", file.GetFileName()) +} + +func TestFileStream_GetSize(t *testing.T) { + asserts := assert.New(t) + file := FileStream{Size: 123} + asserts.Equal(uint64(123), file.GetSize()) +} + +func TestFileStream_Read(t *testing.T) { + asserts := assert.New(t) + file := FileStream{ + File: ioutil.NopCloser(strings.NewReader("123")), + } + var p = make([]byte, 3) + { + n, err := file.Read(p) + asserts.Equal(3, n) + asserts.NoError(err) + } +} + +func TestFileStream_Close(t *testing.T) { + asserts := assert.New(t) + file := FileStream{ + File: ioutil.NopCloser(strings.NewReader("123")), + } + err := file.Close() + asserts.NoError(err) +} diff --git a/pkg/filesystem/path_test.go b/pkg/filesystem/path_test.go index f51c938..81dda09 100644 --- a/pkg/filesystem/path_test.go +++ b/pkg/filesystem/path_test.go @@ -368,3 +368,78 @@ func TestFileSystem_Delete(t *testing.T) { } } + +func TestFileSystem_Copy(t *testing.T) { + asserts := assert.New(t) + fs := &FileSystem{User: &model.User{ + Model: gorm.Model{ + ID: 1, + }, + Storage: 3, + Group: model.Group{MaxStorage: 3}, + }} + ctx := context.Background() + + // 目录不存在 + { + mock.ExpectQuery("SELECT(.+)").WithArgs(uint(1), "/dst").WillReturnRows( + sqlmock.NewRows([]string{"name"}), + ) + mock.ExpectQuery("SELECT(.+)").WithArgs(uint(1), "/src").WillReturnRows( + sqlmock.NewRows([]string{"name"}), + ) + err := fs.Copy(ctx, []string{}, []string{}, "/src", "/dst") + asserts.Equal(ErrPathNotExist, err) + asserts.NoError(mock.ExpectationsWereMet()) + } + + // 复制目录出错 + { + mock.ExpectQuery("SELECT(.+)").WithArgs(uint(1), "/src").WillReturnRows( + sqlmock.NewRows([]string{"name"}).AddRow("123"), + ) + mock.ExpectQuery("SELECT(.+)").WithArgs(uint(1), "/dst").WillReturnRows( + sqlmock.NewRows([]string{"name"}).AddRow("123"), + ) + err := fs.Copy(ctx, []string{"test"}, []string{}, "/src", "/dst") + asserts.Error(err) + } + +} + +func TestFileSystem_Move(t *testing.T) { + asserts := assert.New(t) + fs := &FileSystem{User: &model.User{ + Model: gorm.Model{ + ID: 1, + }, + Storage: 3, + Group: model.Group{MaxStorage: 3}, + }} + ctx := context.Background() + + // 目录不存在 + { + mock.ExpectQuery("SELECT(.+)").WithArgs(uint(1), "/dst").WillReturnRows( + sqlmock.NewRows([]string{"name"}), + ) + mock.ExpectQuery("SELECT(.+)").WithArgs(uint(1), "/src").WillReturnRows( + sqlmock.NewRows([]string{"name"}), + ) + err := fs.Move(ctx, []string{}, []string{}, "/src", "/dst") + asserts.Equal(ErrPathNotExist, err) + asserts.NoError(mock.ExpectationsWereMet()) + } + + // 移动目录出错 + { + mock.ExpectQuery("SELECT(.+)").WithArgs(uint(1), "/src").WillReturnRows( + sqlmock.NewRows([]string{"name"}).AddRow("123"), + ) + mock.ExpectQuery("SELECT(.+)").WithArgs(uint(1), "/dst").WillReturnRows( + sqlmock.NewRows([]string{"name"}).AddRow("123"), + ) + err := fs.Move(ctx, []string{"test"}, []string{}, "/src", "/dst") + asserts.Error(err) + } +} diff --git a/pkg/filesystem/upload_test.go b/pkg/filesystem/upload_test.go index f97b6f1..8d0c475 100644 --- a/pkg/filesystem/upload_test.go +++ b/pkg/filesystem/upload_test.go @@ -82,4 +82,18 @@ func TestFileSystem_Upload(t *testing.T) { asserts.Error(err) testHandller2.AssertExpectations(t) + // AfterUpload失败 + testHandller3 := new(FileHeaderMock) + testHandller3.On("Put", testMock.Anything, testMock.Anything, testMock.Anything).Return(nil) + fs.Handler = testHandller3 + fs.Use("AfterUpload", func(ctx context.Context, fs *FileSystem) error { + return errors.New("error") + }) + fs.Use("AfterValidateFailed", func(ctx context.Context, fs *FileSystem) error { + return errors.New("error") + }) + err = fs.Upload(ctx, file) + asserts.Error(err) + testHandller2.AssertExpectations(t) + } diff --git a/pkg/util/common_test.go b/pkg/util/common_test.go index 6101872..aea0d27 100644 --- a/pkg/util/common_test.go +++ b/pkg/util/common_test.go @@ -62,3 +62,9 @@ func TestBuildRegexp(t *testing.T) { asserts.Equal("^/dir/", BuildRegexp([]string{"/dir"}, "^", "/", "|")) asserts.Equal("^/dir/|^/dir/di\\*r/", BuildRegexp([]string{"/dir", "/dir/di*r"}, "^", "/", "|")) } + +func TestBuildConcat(t *testing.T) { + asserts := assert.New(t) + asserts.Equal("CONCAT(1,2)", BuildConcat("1", "2", "mysql")) + asserts.Equal("1||2", BuildConcat("1", "2", "sqlite3")) +} diff --git a/pkg/util/io_test.go b/pkg/util/io_test.go new file mode 100644 index 0000000..746f52e --- /dev/null +++ b/pkg/util/io_test.go @@ -0,0 +1,12 @@ +package util + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestExists(t *testing.T) { + asserts := assert.New(t) + asserts.True(Exists("io_test.go")) + asserts.False(Exists("io_test.js")) +} diff --git a/pkg/util/logger_test.go b/pkg/util/logger_test.go new file mode 100644 index 0000000..f09e86a --- /dev/null +++ b/pkg/util/logger_test.go @@ -0,0 +1,101 @@ +package util + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestBuildLogger(t *testing.T) { + asserts := assert.New(t) + asserts.NotPanics(func() { + BuildLogger("error") + }) + asserts.NotPanics(func() { + BuildLogger("warning") + }) + asserts.NotPanics(func() { + BuildLogger("info") + }) + asserts.NotPanics(func() { + BuildLogger("?") + }) + asserts.NotPanics(func() { + BuildLogger("debug") + }) +} + +func TestLog(t *testing.T) { + asserts := assert.New(t) + asserts.NotNil(Log()) + logger = nil + asserts.NotNil(Log()) +} + +func TestLogger_Debug(t *testing.T) { + asserts := assert.New(t) + l := Logger{ + level: LevelDebug, + } + asserts.NotPanics(func() { + l.Debug("123") + }) + l.level = LevelError + asserts.NotPanics(func() { + l.Debug("123") + }) +} + +func TestLogger_Info(t *testing.T) { + asserts := assert.New(t) + l := Logger{ + level: LevelDebug, + } + asserts.NotPanics(func() { + l.Info("123") + }) + l.level = LevelError + asserts.NotPanics(func() { + l.Info("123") + }) +} +func TestLogger_Warning(t *testing.T) { + asserts := assert.New(t) + l := Logger{ + level: LevelDebug, + } + asserts.NotPanics(func() { + l.Warning("123") + }) + l.level = LevelError + asserts.NotPanics(func() { + l.Warning("123") + }) +} + +func TestLogger_Error(t *testing.T) { + asserts := assert.New(t) + l := Logger{ + level: LevelDebug, + } + asserts.NotPanics(func() { + l.Error("123") + }) + l.level = -1 + asserts.NotPanics(func() { + l.Error("123") + }) +} + +func TestLogger_Panic(t *testing.T) { + asserts := assert.New(t) + l := Logger{ + level: LevelDebug, + } + asserts.Panics(func() { + l.Panic("123") + }) + l.level = -1 + asserts.NotPanics(func() { + l.Error("123") + }) +} diff --git a/pkg/util/path_test.go b/pkg/util/path_test.go index 6978d3a..8470398 100644 --- a/pkg/util/path_test.go +++ b/pkg/util/path_test.go @@ -12,3 +12,10 @@ func TestDotPathToStandardPath(t *testing.T) { asserts.Equal("/目录", DotPathToStandardPath("目录")) asserts.Equal("/目录/目录2", DotPathToStandardPath("目录,目录2")) } + +func TestFillSlash(t *testing.T) { + asserts := assert.New(t) + asserts.Equal("/", FillSlash("/")) + asserts.Equal("/", FillSlash("")) + asserts.Equal("/123/", FillSlash("/123")) +}