github.com/goravel/framework@v1.13.9/filesystem/file_test.go (about) 1 package filesystem 2 3 import ( 4 "bytes" 5 "mime/multipart" 6 "net/http" 7 "path/filepath" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/suite" 12 13 configmock "github.com/goravel/framework/contracts/config/mocks" 14 "github.com/goravel/framework/support/file" 15 ) 16 17 type FileTestSuite struct { 18 suite.Suite 19 file *File 20 mockConfig *configmock.Config 21 } 22 23 func TestFileTestSuite(t *testing.T) { 24 suite.Run(t, new(FileTestSuite)) 25 26 assert.Nil(t, file.Remove("test.txt")) 27 } 28 29 func (s *FileTestSuite) SetupTest() { 30 s.mockConfig = &configmock.Config{} 31 s.mockConfig.On("GetString", "filesystems.default").Return("local").Once() 32 ConfigFacade = s.mockConfig 33 34 var err error 35 s.file, err = NewFile("./file.go") 36 s.Nil(err) 37 s.NotNil(s.file) 38 } 39 40 func (s *FileTestSuite) TestNewFile_Error() { 41 file, err := NewFile("./file1.go") 42 s.EqualError(err, "file doesn't exist") 43 s.Nil(file) 44 } 45 46 func (s *FileTestSuite) TestGetClientOriginalName() { 47 s.Equal("file.go", s.file.GetClientOriginalName()) 48 } 49 50 func (s *FileTestSuite) TestGetClientOriginalExtension() { 51 s.Equal("go", s.file.GetClientOriginalExtension()) 52 } 53 54 func (s *FileTestSuite) TestHashName() { 55 s.Len(s.file.HashName("goravel"), 52) 56 } 57 58 func (s *FileTestSuite) TestExtension() { 59 extension, err := s.file.Extension() 60 s.Equal("txt", extension) 61 s.Nil(err) 62 } 63 64 func TestNewFileFromRequest(t *testing.T) { 65 mockConfig := &configmock.Config{} 66 ConfigFacade = mockConfig 67 mockConfig.On("GetString", "app.name").Return("goravel").Once() 68 mockConfig.On("GetString", "filesystems.default").Return("local").Once() 69 70 buf := new(bytes.Buffer) 71 mw := multipart.NewWriter(buf) 72 w, err := mw.CreateFormFile("file", "test.txt") 73 if assert.NoError(t, err) { 74 _, err = w.Write([]byte("test")) 75 assert.NoError(t, err) 76 } 77 assert.Nil(t, mw.Close()) 78 req, err := http.NewRequest("POST", "/", buf) 79 assert.NoError(t, err) 80 req.Header.Set("Content-Type", mw.FormDataContentType()) 81 err = req.ParseMultipartForm(10 << 20) // 10 MB 82 assert.NoError(t, err) 83 _, fileHeader, err := req.FormFile("file") 84 assert.NoError(t, err) 85 requestFile, err := NewFileFromRequest(fileHeader) 86 assert.NoError(t, err) 87 assert.Equal(t, ".txt", filepath.Ext(requestFile.path)) 88 89 mockConfig.AssertExpectations(t) 90 }