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  }