mirror of
https://github.com/navidrome/navidrome.git
synced 2025-12-23 15:08:04 -05:00
90 lines
2.7 KiB
Go
90 lines
2.7 KiB
Go
package cmd
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/navidrome/navidrome/model"
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("readTargetsFromFile", func() {
|
|
var tempDir string
|
|
|
|
BeforeEach(func() {
|
|
var err error
|
|
tempDir, err = os.MkdirTemp("", "navidrome-test-")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
})
|
|
|
|
AfterEach(func() {
|
|
os.RemoveAll(tempDir)
|
|
})
|
|
|
|
It("reads valid targets from file", func() {
|
|
filePath := filepath.Join(tempDir, "targets.txt")
|
|
content := "1:Music/Rock\n2:Music/Jazz\n3:Classical\n"
|
|
err := os.WriteFile(filePath, []byte(content), 0600)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
targets, err := readTargetsFromFile(filePath)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(targets).To(HaveLen(3))
|
|
Expect(targets[0]).To(Equal(model.ScanTarget{LibraryID: 1, FolderPath: "Music/Rock"}))
|
|
Expect(targets[1]).To(Equal(model.ScanTarget{LibraryID: 2, FolderPath: "Music/Jazz"}))
|
|
Expect(targets[2]).To(Equal(model.ScanTarget{LibraryID: 3, FolderPath: "Classical"}))
|
|
})
|
|
|
|
It("skips empty lines", func() {
|
|
filePath := filepath.Join(tempDir, "targets.txt")
|
|
content := "1:Music/Rock\n\n2:Music/Jazz\n\n"
|
|
err := os.WriteFile(filePath, []byte(content), 0600)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
targets, err := readTargetsFromFile(filePath)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(targets).To(HaveLen(2))
|
|
})
|
|
|
|
It("trims whitespace", func() {
|
|
filePath := filepath.Join(tempDir, "targets.txt")
|
|
content := " 1:Music/Rock \n\t2:Music/Jazz\t\n"
|
|
err := os.WriteFile(filePath, []byte(content), 0600)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
targets, err := readTargetsFromFile(filePath)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(targets).To(HaveLen(2))
|
|
Expect(targets[0].FolderPath).To(Equal("Music/Rock"))
|
|
Expect(targets[1].FolderPath).To(Equal("Music/Jazz"))
|
|
})
|
|
|
|
It("returns error for non-existent file", func() {
|
|
_, err := readTargetsFromFile("/nonexistent/file.txt")
|
|
Expect(err).To(HaveOccurred())
|
|
Expect(err.Error()).To(ContainSubstring("failed to open target file"))
|
|
})
|
|
|
|
It("returns error for invalid target format", func() {
|
|
filePath := filepath.Join(tempDir, "targets.txt")
|
|
content := "invalid-format\n"
|
|
err := os.WriteFile(filePath, []byte(content), 0600)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
_, err = readTargetsFromFile(filePath)
|
|
Expect(err).To(HaveOccurred())
|
|
})
|
|
|
|
It("handles mixed valid and empty lines", func() {
|
|
filePath := filepath.Join(tempDir, "targets.txt")
|
|
content := "\n1:Music/Rock\n\n\n2:Music/Jazz\n\n"
|
|
err := os.WriteFile(filePath, []byte(content), 0600)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
targets, err := readTargetsFromFile(filePath)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(targets).To(HaveLen(2))
|
|
})
|
|
})
|