github.com/goravel/framework@v1.13.9/filesystem/local_test.go (about) 1 package filesystem 2 3 import ( 4 "context" 5 "mime" 6 "os" 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/carbon" 15 "github.com/goravel/framework/support/env" 16 "github.com/goravel/framework/support/file" 17 ) 18 19 type LocalTestSuite struct { 20 suite.Suite 21 local *Local 22 file *File 23 mockConfig *configmock.Config 24 } 25 26 func TestLocalTestSuite(t *testing.T) { 27 suite.Run(t, new(LocalTestSuite)) 28 29 assert.Nil(t, file.Remove("test.txt")) 30 } 31 32 func (s *LocalTestSuite) SetupTest() { 33 s.mockConfig = &configmock.Config{} 34 35 dir, err := os.MkdirTemp("", "local-test") 36 s.Nil(err) 37 38 err = os.WriteFile(dir+"/test.txt", []byte("goravel"), 0644) 39 s.Nil(err) 40 41 err = os.Mkdir(dir+"/test", 0755) 42 s.Nil(err) 43 44 s.mockConfig.On("GetString", "filesystems.default").Return("local").Once() 45 s.mockConfig.On("GetString", "filesystems.disks.local.root").Return(dir).Once() 46 s.mockConfig.On("GetString", "filesystems.disks.local.url").Return("https://goravel.dev").Once() 47 ConfigFacade = s.mockConfig 48 49 s.local, err = NewLocal(s.mockConfig, "local") 50 s.Nil(err) 51 s.NotNil(s.local) 52 53 s.file, err = NewFile("./file.go") 54 s.Nil(err) 55 s.NotNil(s.file) 56 57 s.mockConfig.AssertExpectations(s.T()) 58 } 59 60 func (s *LocalTestSuite) TestAllDirectories() { 61 s.Nil(s.local.Put("AllDirectories/1.txt", "Goravel")) 62 s.Nil(s.local.Put("AllDirectories/2.txt", "Goravel")) 63 s.Nil(s.local.Put("AllDirectories/3/3.txt", "Goravel")) 64 s.Nil(s.local.Put("AllDirectories/3/5/6/6.txt", "Goravel")) 65 s.Nil(s.local.MakeDirectory("AllDirectories/3/4")) 66 s.True(s.local.Exists("AllDirectories/1.txt")) 67 s.True(s.local.Exists("AllDirectories/2.txt")) 68 s.True(s.local.Exists("AllDirectories/3/3.txt")) 69 s.True(s.local.Exists("AllDirectories/3/4/")) 70 s.True(s.local.Exists("AllDirectories/3/5/6/6.txt")) 71 files, err := s.local.AllDirectories("AllDirectories") 72 s.Nil(err) 73 if env.IsWindows() { 74 s.Equal([]string{"3\\", "3\\4\\", "3\\5\\", "3\\5\\6\\"}, files) 75 } else { 76 s.Equal([]string{"3/", "3/4/", "3/5/", "3/5/6/"}, files) 77 } 78 files, err = s.local.AllDirectories("./AllDirectories") 79 s.Nil(err) 80 if env.IsWindows() { 81 s.Equal([]string{"3\\", "3\\4\\", "3\\5\\", "3\\5\\6\\"}, files) 82 } else { 83 s.Equal([]string{"3/", "3/4/", "3/5/", "3/5/6/"}, files) 84 } 85 files, err = s.local.AllDirectories("/AllDirectories") 86 s.Nil(err) 87 if env.IsWindows() { 88 s.Equal([]string{"3\\", "3\\4\\", "3\\5\\", "3\\5\\6\\"}, files) 89 } else { 90 s.Equal([]string{"3/", "3/4/", "3/5/", "3/5/6/"}, files) 91 } 92 files, err = s.local.AllDirectories("./AllDirectories/") 93 s.Nil(err) 94 if env.IsWindows() { 95 s.Equal([]string{"3\\", "3\\4\\", "3\\5\\", "3\\5\\6\\"}, files) 96 } else { 97 s.Equal([]string{"3/", "3/4/", "3/5/", "3/5/6/"}, files) 98 } 99 s.Nil(s.local.DeleteDirectory("AllDirectories")) 100 } 101 102 func (s *LocalTestSuite) TestAllFiles() { 103 s.Nil(s.local.Put("AllFiles/1.txt", "Goravel")) 104 s.Nil(s.local.Put("AllFiles/2.txt", "Goravel")) 105 s.Nil(s.local.Put("AllFiles/3/3.txt", "Goravel")) 106 s.Nil(s.local.Put("AllFiles/3/4/4.txt", "Goravel")) 107 s.True(s.local.Exists("AllFiles/1.txt")) 108 s.True(s.local.Exists("AllFiles/2.txt")) 109 s.True(s.local.Exists("AllFiles/3/3.txt")) 110 s.True(s.local.Exists("AllFiles/3/4/4.txt")) 111 files, err := s.local.AllFiles("AllFiles") 112 s.Nil(err) 113 if env.IsWindows() { 114 s.Equal([]string{"1.txt", "2.txt", "3\\3.txt", "3\\4\\4.txt"}, files) 115 } else { 116 s.Equal([]string{"1.txt", "2.txt", "3/3.txt", "3/4/4.txt"}, files) 117 } 118 files, err = s.local.AllFiles("./AllFiles") 119 s.Nil(err) 120 if env.IsWindows() { 121 s.Equal([]string{"1.txt", "2.txt", "3\\3.txt", "3\\4\\4.txt"}, files) 122 } else { 123 s.Equal([]string{"1.txt", "2.txt", "3/3.txt", "3/4/4.txt"}, files) 124 } 125 files, err = s.local.AllFiles("/AllFiles") 126 s.Nil(err) 127 if env.IsWindows() { 128 s.Equal([]string{"1.txt", "2.txt", "3\\3.txt", "3\\4\\4.txt"}, files) 129 } else { 130 s.Equal([]string{"1.txt", "2.txt", "3/3.txt", "3/4/4.txt"}, files) 131 } 132 files, err = s.local.AllFiles("./AllFiles/") 133 s.Nil(err) 134 if env.IsWindows() { 135 s.Equal([]string{"1.txt", "2.txt", "3\\3.txt", "3\\4\\4.txt"}, files) 136 } else { 137 s.Equal([]string{"1.txt", "2.txt", "3/3.txt", "3/4/4.txt"}, files) 138 } 139 s.Nil(s.local.DeleteDirectory("AllFiles")) 140 } 141 142 func (s *LocalTestSuite) TestCopy() { 143 s.Nil(s.local.Put("Copy/1.txt", "Goravel")) 144 s.True(s.local.Exists("Copy/1.txt")) 145 s.Nil(s.local.Copy("Copy/1.txt", "Copy1/1.txt")) 146 s.True(s.local.Exists("Copy/1.txt")) 147 s.True(s.local.Exists("Copy1/1.txt")) 148 s.Nil(s.local.DeleteDirectory("Copy")) 149 s.Nil(s.local.DeleteDirectory("Copy1")) 150 } 151 152 func (s *LocalTestSuite) TestDelete() { 153 s.Nil(s.local.Put("Delete/1.txt", "Goravel")) 154 s.True(s.local.Exists("Delete/1.txt")) 155 s.Nil(s.local.Delete("Delete/1.txt")) 156 s.True(s.local.Missing("Delete/1.txt")) 157 s.Nil(s.local.DeleteDirectory("Delete")) 158 } 159 160 func (s *LocalTestSuite) TestDeleteDirectory() { 161 s.Nil(s.local.Put("DeleteDirectory/1.txt", "Goravel")) 162 s.True(s.local.Exists("DeleteDirectory/1.txt")) 163 s.Nil(s.local.DeleteDirectory("DeleteDirectory")) 164 s.True(s.local.Missing("DeleteDirectory/1.txt")) 165 s.Nil(s.local.DeleteDirectory("DeleteDirectory")) 166 } 167 168 func (s *LocalTestSuite) TestDirectories() { 169 s.Nil(s.local.Put("Directories/1.txt", "Goravel")) 170 s.Nil(s.local.Put("Directories/2.txt", "Goravel")) 171 s.Nil(s.local.Put("Directories/3/3.txt", "Goravel")) 172 s.Nil(s.local.Put("Directories/3/5/5.txt", "Goravel")) 173 s.Nil(s.local.MakeDirectory("Directories/3/4")) 174 s.True(s.local.Exists("Directories/1.txt")) 175 s.True(s.local.Exists("Directories/2.txt")) 176 s.True(s.local.Exists("Directories/3/3.txt")) 177 s.True(s.local.Exists("Directories/3/4/")) 178 s.True(s.local.Exists("Directories/3/5/5.txt")) 179 files, err := s.local.Directories("Directories") 180 s.Nil(err) 181 if env.IsWindows() { 182 s.Equal([]string{"3\\"}, files) 183 } else { 184 s.Equal([]string{"3/"}, files) 185 } 186 files, err = s.local.Directories("./Directories") 187 s.Nil(err) 188 if env.IsWindows() { 189 s.Equal([]string{"3\\"}, files) 190 } else { 191 s.Equal([]string{"3/"}, files) 192 } 193 files, err = s.local.Directories("/Directories") 194 s.Nil(err) 195 if env.IsWindows() { 196 s.Equal([]string{"3\\"}, files) 197 } else { 198 s.Equal([]string{"3/"}, files) 199 } 200 files, err = s.local.Directories("./Directories/") 201 s.Nil(err) 202 if env.IsWindows() { 203 s.Equal([]string{"3\\"}, files) 204 } else { 205 s.Equal([]string{"3/"}, files) 206 } 207 s.Nil(s.local.DeleteDirectory("Directories")) 208 } 209 210 func (s *LocalTestSuite) TestExists() { 211 exists := s.local.Exists("test.txt") 212 s.True(exists) 213 214 exists = s.local.Exists("test1.txt") 215 s.False(exists) 216 } 217 218 func (s *LocalTestSuite) TestFiles() { 219 s.Nil(s.local.Put("Files/1.txt", "Goravel")) 220 s.Nil(s.local.Put("Files/2.txt", "Goravel")) 221 s.Nil(s.local.Put("Files/3/3.txt", "Goravel")) 222 s.Nil(s.local.Put("Files/3/4/4.txt", "Goravel")) 223 s.True(s.local.Exists("Files/1.txt")) 224 s.True(s.local.Exists("Files/2.txt")) 225 s.True(s.local.Exists("Files/3/3.txt")) 226 s.True(s.local.Exists("Files/3/4/4.txt")) 227 files, err := s.local.Files("Files") 228 s.Nil(err) 229 s.Equal([]string{"1.txt", "2.txt"}, files) 230 files, err = s.local.Files("./Files") 231 s.Nil(err) 232 s.Equal([]string{"1.txt", "2.txt"}, files) 233 files, err = s.local.Files("/Files") 234 s.Nil(err) 235 s.Equal([]string{"1.txt", "2.txt"}, files) 236 files, err = s.local.Files("./Files/") 237 s.Nil(err) 238 s.Equal([]string{"1.txt", "2.txt"}, files) 239 s.Nil(s.local.DeleteDirectory("Files")) 240 } 241 242 func (s *LocalTestSuite) TestGet() { 243 s.Nil(s.local.Put("Get/1.txt", "Goravel")) 244 s.True(s.local.Exists("Get/1.txt")) 245 data, err := s.local.Get("Get/1.txt") 246 s.Nil(err) 247 s.Equal("Goravel", data) 248 length, err := s.local.Size("Get/1.txt") 249 s.Nil(err) 250 s.Equal(int64(7), length) 251 s.Nil(s.local.DeleteDirectory("Get")) 252 } 253 254 func (s *LocalTestSuite) TestGetBytes() { 255 s.Nil(s.local.Put("Get/1.txt", "Goravel")) 256 s.True(s.local.Exists("Get/1.txt")) 257 data, err := s.local.GetBytes("Get/1.txt") 258 s.Nil(err) 259 s.Equal([]byte("Goravel"), data) 260 length, err := s.local.Size("Get/1.txt") 261 s.Nil(err) 262 s.Equal(int64(7), length) 263 s.Nil(s.local.DeleteDirectory("Get")) 264 } 265 266 func (s *LocalTestSuite) TestLastModified() { 267 s.mockConfig.On("GetString", "app.timezone").Return("UTC").Once() 268 269 s.Nil(s.local.Put("LastModified/1.txt", "Goravel")) 270 s.True(s.local.Exists("LastModified/1.txt")) 271 date, err := s.local.LastModified("LastModified/1.txt") 272 s.Nil(err) 273 274 s.Nil(err) 275 s.Equal(carbon.Now().ToDateString(), carbon.FromStdTime(date).ToDateString()) 276 s.Nil(s.local.DeleteDirectory("LastModified")) 277 } 278 279 func (s *LocalTestSuite) TestMakeDirectory() { 280 s.Nil(s.local.MakeDirectory("MakeDirectory1/")) 281 s.Nil(s.local.MakeDirectory("MakeDirectory2")) 282 s.Nil(s.local.MakeDirectory("MakeDirectory3/MakeDirectory4")) 283 s.Nil(s.local.DeleteDirectory("MakeDirectory1")) 284 s.Nil(s.local.DeleteDirectory("MakeDirectory2")) 285 s.Nil(s.local.DeleteDirectory("MakeDirectory3")) 286 s.Nil(s.local.DeleteDirectory("MakeDirectory4")) 287 } 288 289 func (s *LocalTestSuite) TestMimeType_File() { 290 s.Nil(s.local.Put("MimeType/1.txt", "Goravel")) 291 s.True(s.local.Exists("MimeType/1.txt")) 292 mimeType, err := s.local.MimeType("MimeType/1.txt") 293 s.Nil(err) 294 mediaType, _, err := mime.ParseMediaType(mimeType) 295 s.Nil(err) 296 s.Equal("text/plain", mediaType) 297 } 298 299 func (s *LocalTestSuite) TestMimeType_Image() { 300 s.mockConfig.On("GetString", "filesystems.default").Return("local").Once() 301 302 fileInfo, err := NewFile("../logo.png") 303 s.Nil(err) 304 path, err := s.local.PutFile("MimeType", fileInfo) 305 s.Nil(err) 306 s.True(s.local.Exists(path)) 307 mimeType, err := s.local.MimeType(path) 308 s.Nil(err) 309 s.Equal("image/png", mimeType) 310 } 311 312 func (s *LocalTestSuite) TestMissing() { 313 missing := s.local.Missing("test.txt") 314 s.False(missing) 315 316 missing = s.local.Missing("test1.txt") 317 s.True(missing) 318 } 319 320 func (s *LocalTestSuite) TestMove() { 321 s.Nil(s.local.Put("Move/1.txt", "Goravel")) 322 s.True(s.local.Exists("Move/1.txt")) 323 s.Nil(s.local.Move("Move/1.txt", "Move1/1.txt")) 324 s.True(s.local.Missing("Move/1.txt")) 325 s.True(s.local.Exists("Move1/1.txt")) 326 s.Nil(s.local.DeleteDirectory("Move")) 327 s.Nil(s.local.DeleteDirectory("Move1")) 328 } 329 330 func (s *LocalTestSuite) TestPath() { 331 path := s.local.Path("test.txt") 332 s.Equal(filepath.Join(s.local.root, "test.txt"), path) 333 } 334 335 func (s *LocalTestSuite) TestPut() { 336 s.Nil(s.local.Put("Put/1.txt", "Goravel")) 337 s.True(s.local.Exists("Put/1.txt")) 338 s.True(s.local.Missing("Put/2.txt")) 339 s.Nil(s.local.DeleteDirectory("Put")) 340 } 341 342 func (s *LocalTestSuite) TestPutFile_Text() { 343 path, err := s.local.PutFile("PutFile", s.file) 344 s.Nil(err) 345 s.True(s.local.Exists(path)) 346 data, err := s.local.Get(path) 347 s.Nil(err) 348 s.NotEmpty(data) 349 s.Nil(s.local.DeleteDirectory("PutFile")) 350 } 351 352 func (s *LocalTestSuite) TestPutFile_Image() { 353 s.mockConfig.On("GetString", "filesystems.default").Return("local").Once() 354 355 fileInfo, err := NewFile("../logo.png") 356 s.Nil(err) 357 path, err := s.local.PutFile("PutFile1", fileInfo) 358 s.Nil(err) 359 s.True(s.local.Exists(path)) 360 s.Nil(s.local.DeleteDirectory("PutFile1")) 361 } 362 363 func (s *LocalTestSuite) TestPutFileAs_Text() { 364 path, err := s.local.PutFileAs("PutFileAs", s.file, "text") 365 s.Nil(err) 366 s.Equal(filepath.Join("PutFileAs", "text.txt"), path) 367 s.True(s.local.Exists(path)) 368 data, err := s.local.Get(path) 369 s.Nil(err) 370 s.NotEmpty(data) 371 372 path, err = s.local.PutFileAs("PutFileAs", s.file, "text1.txt") 373 s.Nil(err) 374 s.Equal(filepath.Join("PutFileAs", "text1.txt"), path) 375 s.True(s.local.Exists(path)) 376 data, err = s.local.Get(path) 377 s.Nil(err) 378 s.NotEmpty(data) 379 380 s.Nil(s.local.DeleteDirectory("PutFileAs")) 381 } 382 383 func (s *LocalTestSuite) TestPutFileAs_Image() { 384 s.mockConfig.On("GetString", "filesystems.default").Return("local").Once() 385 386 fileInfo, err := NewFile("../logo.png") 387 s.Nil(err) 388 path, err := s.local.PutFileAs("PutFileAs1", fileInfo, "image") 389 s.Nil(err) 390 s.Equal(filepath.Join("PutFileAs1", "image.png"), path) 391 s.True(s.local.Exists(path)) 392 393 path, err = s.local.PutFileAs("PutFileAs1", fileInfo, "image1.png") 394 s.Nil(err) 395 s.Equal(filepath.Join("PutFileAs1", "image1.png"), path) 396 s.True(s.local.Exists(path)) 397 398 s.Nil(s.local.DeleteDirectory("PutFileAs1")) 399 } 400 401 func (s *LocalTestSuite) TestSize() { 402 s.Nil(s.local.Put("Size/1.txt", "Goravel")) 403 s.True(s.local.Exists("Size/1.txt")) 404 length, err := s.local.Size("Size/1.txt") 405 s.Nil(err) 406 s.Equal(int64(7), length) 407 s.Nil(s.local.DeleteDirectory("Size")) 408 } 409 410 func (s *LocalTestSuite) TestTemporaryUrl() { 411 s.Nil(s.local.Put("TemporaryUrl/1.txt", "Goravel")) 412 s.True(s.local.Exists("TemporaryUrl/1.txt")) 413 url, err := s.local.TemporaryUrl("TemporaryUrl/1.txt", carbon.Now().AddSeconds(5).ToStdTime()) 414 s.Nil(err) 415 s.NotEmpty(url) 416 s.Nil(s.local.DeleteDirectory("TemporaryUrl")) 417 } 418 419 func (s *LocalTestSuite) TestWithContext() { 420 driver := s.local.WithContext(context.Background()) 421 s.Equal(s.local, driver) 422 } 423 424 func (s *LocalTestSuite) TestUrl() { 425 s.Equal("https://goravel.dev/Url/1.txt", s.local.Url("Url/1.txt")) 426 427 if env.IsWindows() { 428 s.Equal("https://goravel.dev/Url/2.txt", s.local.Url(`Url\2.txt`)) 429 } 430 }