update
Some checks failed
Pipeline: Test, Lint, Build / Get version info (push) Has been cancelled
Pipeline: Test, Lint, Build / Lint Go code (push) Has been cancelled
Pipeline: Test, Lint, Build / Test Go code (push) Has been cancelled
Pipeline: Test, Lint, Build / Test JS code (push) Has been cancelled
Pipeline: Test, Lint, Build / Lint i18n files (push) Has been cancelled
Pipeline: Test, Lint, Build / Check Docker configuration (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (darwin/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (darwin/arm64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/386) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v5) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v6) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v7) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (windows/386) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (windows/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Push to GHCR (push) Has been cancelled
Pipeline: Test, Lint, Build / Push to Docker Hub (push) Has been cancelled
Pipeline: Test, Lint, Build / Cleanup digest artifacts (push) Has been cancelled
Pipeline: Test, Lint, Build / Build Windows installers (push) Has been cancelled
Pipeline: Test, Lint, Build / Package/Release (push) Has been cancelled
Pipeline: Test, Lint, Build / Upload Linux PKG (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled
POEditor import / update-translations (push) Has been cancelled
Some checks failed
Pipeline: Test, Lint, Build / Get version info (push) Has been cancelled
Pipeline: Test, Lint, Build / Lint Go code (push) Has been cancelled
Pipeline: Test, Lint, Build / Test Go code (push) Has been cancelled
Pipeline: Test, Lint, Build / Test JS code (push) Has been cancelled
Pipeline: Test, Lint, Build / Lint i18n files (push) Has been cancelled
Pipeline: Test, Lint, Build / Check Docker configuration (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (darwin/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (darwin/arm64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/386) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v5) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v6) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm/v7) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (linux/arm64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (windows/386) (push) Has been cancelled
Pipeline: Test, Lint, Build / Build (windows/amd64) (push) Has been cancelled
Pipeline: Test, Lint, Build / Push to GHCR (push) Has been cancelled
Pipeline: Test, Lint, Build / Push to Docker Hub (push) Has been cancelled
Pipeline: Test, Lint, Build / Cleanup digest artifacts (push) Has been cancelled
Pipeline: Test, Lint, Build / Build Windows installers (push) Has been cancelled
Pipeline: Test, Lint, Build / Package/Release (push) Has been cancelled
Pipeline: Test, Lint, Build / Upload Linux PKG (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled
POEditor import / update-translations (push) Has been cancelled
This commit is contained in:
178
utils/files_test.go
Normal file
178
utils/files_test.go
Normal file
@@ -0,0 +1,178 @@
|
||||
package utils_test
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/navidrome/navidrome/utils"
|
||||
. "github.com/onsi/ginkgo/v2"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
||||
var _ = Describe("TempFileName", func() {
|
||||
It("creates a temporary file name with prefix and suffix", func() {
|
||||
prefix := "test-"
|
||||
suffix := ".tmp"
|
||||
result := utils.TempFileName(prefix, suffix)
|
||||
|
||||
Expect(result).To(ContainSubstring(prefix))
|
||||
Expect(result).To(HaveSuffix(suffix))
|
||||
Expect(result).To(ContainSubstring(os.TempDir()))
|
||||
})
|
||||
|
||||
It("creates unique file names on multiple calls", func() {
|
||||
prefix := "unique-"
|
||||
suffix := ".test"
|
||||
|
||||
result1 := utils.TempFileName(prefix, suffix)
|
||||
result2 := utils.TempFileName(prefix, suffix)
|
||||
|
||||
Expect(result1).NotTo(Equal(result2))
|
||||
})
|
||||
|
||||
It("handles empty prefix and suffix", func() {
|
||||
result := utils.TempFileName("", "")
|
||||
|
||||
Expect(result).To(ContainSubstring(os.TempDir()))
|
||||
Expect(len(result)).To(BeNumerically(">", len(os.TempDir())))
|
||||
})
|
||||
|
||||
It("creates proper file path separators", func() {
|
||||
prefix := "path-test-"
|
||||
suffix := ".ext"
|
||||
result := utils.TempFileName(prefix, suffix)
|
||||
|
||||
expectedDir := os.TempDir()
|
||||
Expect(result).To(HavePrefix(expectedDir))
|
||||
Expect(strings.Count(result, string(filepath.Separator))).To(BeNumerically(">=", strings.Count(expectedDir, string(filepath.Separator))))
|
||||
})
|
||||
})
|
||||
|
||||
var _ = Describe("BaseName", func() {
|
||||
It("extracts basename from a simple filename", func() {
|
||||
result := utils.BaseName("test.mp3")
|
||||
Expect(result).To(Equal("test"))
|
||||
})
|
||||
|
||||
It("extracts basename from a file path", func() {
|
||||
result := utils.BaseName("/path/to/file.txt")
|
||||
Expect(result).To(Equal("file"))
|
||||
})
|
||||
|
||||
It("handles files without extension", func() {
|
||||
result := utils.BaseName("/path/to/filename")
|
||||
Expect(result).To(Equal("filename"))
|
||||
})
|
||||
|
||||
It("handles files with multiple dots", func() {
|
||||
result := utils.BaseName("archive.tar.gz")
|
||||
Expect(result).To(Equal("archive.tar"))
|
||||
})
|
||||
|
||||
It("handles hidden files", func() {
|
||||
// For hidden files without additional extension, path.Ext returns the entire name
|
||||
// So basename becomes empty string after TrimSuffix
|
||||
result := utils.BaseName(".hidden")
|
||||
Expect(result).To(Equal(""))
|
||||
})
|
||||
|
||||
It("handles hidden files with extension", func() {
|
||||
result := utils.BaseName(".config.json")
|
||||
Expect(result).To(Equal(".config"))
|
||||
})
|
||||
|
||||
It("handles empty string", func() {
|
||||
// The actual behavior returns empty string for empty input
|
||||
result := utils.BaseName("")
|
||||
Expect(result).To(Equal(""))
|
||||
})
|
||||
|
||||
It("handles path ending with separator", func() {
|
||||
result := utils.BaseName("/path/to/dir/")
|
||||
Expect(result).To(Equal("dir"))
|
||||
})
|
||||
|
||||
It("handles complex nested path", func() {
|
||||
result := utils.BaseName("/very/long/path/to/my/favorite/song.mp3")
|
||||
Expect(result).To(Equal("song"))
|
||||
})
|
||||
})
|
||||
|
||||
var _ = Describe("FileExists", func() {
|
||||
var tempFile *os.File
|
||||
var tempDir string
|
||||
|
||||
BeforeEach(func() {
|
||||
var err error
|
||||
tempFile, err = os.CreateTemp("", "fileexists-test-*.txt")
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
tempDir, err = os.MkdirTemp("", "fileexists-test-dir-*")
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
})
|
||||
|
||||
AfterEach(func() {
|
||||
if tempFile != nil {
|
||||
os.Remove(tempFile.Name())
|
||||
tempFile.Close()
|
||||
}
|
||||
if tempDir != "" {
|
||||
os.RemoveAll(tempDir)
|
||||
}
|
||||
})
|
||||
|
||||
It("returns true for existing file", func() {
|
||||
Expect(utils.FileExists(tempFile.Name())).To(BeTrue())
|
||||
})
|
||||
|
||||
It("returns true for existing directory", func() {
|
||||
Expect(utils.FileExists(tempDir)).To(BeTrue())
|
||||
})
|
||||
|
||||
It("returns false for non-existing file", func() {
|
||||
nonExistentPath := filepath.Join(tempDir, "does-not-exist.txt")
|
||||
Expect(utils.FileExists(nonExistentPath)).To(BeFalse())
|
||||
})
|
||||
|
||||
It("returns false for empty path", func() {
|
||||
Expect(utils.FileExists("")).To(BeFalse())
|
||||
})
|
||||
|
||||
It("handles nested non-existing path", func() {
|
||||
nonExistentPath := "/this/path/definitely/does/not/exist/file.txt"
|
||||
Expect(utils.FileExists(nonExistentPath)).To(BeFalse())
|
||||
})
|
||||
|
||||
Context("when file is deleted after creation", func() {
|
||||
It("returns false after file deletion", func() {
|
||||
filePath := tempFile.Name()
|
||||
Expect(utils.FileExists(filePath)).To(BeTrue())
|
||||
|
||||
err := os.Remove(filePath)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
tempFile = nil // Prevent cleanup attempt
|
||||
|
||||
Expect(utils.FileExists(filePath)).To(BeFalse())
|
||||
})
|
||||
})
|
||||
|
||||
Context("when directory is deleted after creation", func() {
|
||||
It("returns false after directory deletion", func() {
|
||||
dirPath := tempDir
|
||||
Expect(utils.FileExists(dirPath)).To(BeTrue())
|
||||
|
||||
err := os.RemoveAll(dirPath)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
tempDir = "" // Prevent cleanup attempt
|
||||
|
||||
Expect(utils.FileExists(dirPath)).To(BeFalse())
|
||||
})
|
||||
})
|
||||
|
||||
It("handles permission denied scenarios gracefully", func() {
|
||||
// This test might be platform specific, but we test the general case
|
||||
result := utils.FileExists("/root/.ssh/id_rsa") // Likely to not exist or be inaccessible
|
||||
Expect(result).To(Or(BeTrue(), BeFalse())) // Should not panic
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user