mirror of
https://github.com/navidrome/navidrome.git
synced 2025-07-16 16:41:16 +03:00
179 lines
4.8 KiB
Go
179 lines
4.8 KiB
Go
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
|
|
})
|
|
})
|