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:
109
utils/str/sanitize_strings_test.go
Normal file
109
utils/str/sanitize_strings_test.go
Normal file
@@ -0,0 +1,109 @@
|
||||
package str_test
|
||||
|
||||
import (
|
||||
"github.com/navidrome/navidrome/conf"
|
||||
"github.com/navidrome/navidrome/utils/str"
|
||||
. "github.com/onsi/ginkgo/v2"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
||||
var _ = Describe("Sanitize Strings", func() {
|
||||
Describe("SanitizeStrings", func() {
|
||||
It("returns all lowercase chars", func() {
|
||||
Expect(str.SanitizeStrings("Some Text")).To(Equal("some text"))
|
||||
})
|
||||
|
||||
It("removes accents", func() {
|
||||
Expect(str.SanitizeStrings("Quintão")).To(Equal("quintao"))
|
||||
})
|
||||
|
||||
It("remove extra spaces", func() {
|
||||
Expect(str.SanitizeStrings(" some text ", "text some")).To(Equal("some text"))
|
||||
})
|
||||
|
||||
It("remove duplicated words", func() {
|
||||
Expect(str.SanitizeStrings("legião urbana", "urbana legiÃo")).To(Equal("legiao urbana"))
|
||||
})
|
||||
|
||||
It("remove symbols", func() {
|
||||
Expect(str.SanitizeStrings("Tom’s Diner ' “40” ‘A’")).To(Equal("40 a diner toms"))
|
||||
})
|
||||
|
||||
It("remove opening brackets", func() {
|
||||
Expect(str.SanitizeStrings("[Five Years]")).To(Equal("five years"))
|
||||
})
|
||||
|
||||
It("remove slashes", func() {
|
||||
Expect(str.SanitizeStrings("folder/file\\yyyy")).To(Equal("file folder yyyy"))
|
||||
})
|
||||
|
||||
It("normalizes utf chars", func() {
|
||||
// These uses different types of hyphens
|
||||
Expect(str.SanitizeStrings("k—os", "k−os")).To(Equal("k-os"))
|
||||
})
|
||||
|
||||
It("remove commas", func() {
|
||||
// This is specially useful for handling cases where the Sort field uses comma.
|
||||
// It reduces the size of the resulting string, thus reducing the size of the DB table and indexes.
|
||||
Expect(str.SanitizeStrings("Bob Marley", "Marley, Bob")).To(Equal("bob marley"))
|
||||
})
|
||||
})
|
||||
|
||||
Describe("SanitizeFieldForSorting", func() {
|
||||
BeforeEach(func() {
|
||||
conf.Server.IgnoredArticles = "The O"
|
||||
})
|
||||
It("sanitize accents", func() {
|
||||
Expect(str.SanitizeFieldForSorting("Céu")).To(Equal("ceu"))
|
||||
})
|
||||
It("removes articles", func() {
|
||||
Expect(str.SanitizeFieldForSorting("The Beatles")).To(Equal("the beatles"))
|
||||
})
|
||||
It("removes accented articles", func() {
|
||||
Expect(str.SanitizeFieldForSorting("Õ Blésq Blom")).To(Equal("o blesq blom"))
|
||||
})
|
||||
})
|
||||
|
||||
Describe("SanitizeFieldForSortingNoArticle", func() {
|
||||
BeforeEach(func() {
|
||||
conf.Server.IgnoredArticles = "The O"
|
||||
})
|
||||
It("sanitize accents", func() {
|
||||
Expect(str.SanitizeFieldForSortingNoArticle("Céu")).To(Equal("ceu"))
|
||||
})
|
||||
It("removes articles", func() {
|
||||
Expect(str.SanitizeFieldForSortingNoArticle("The Beatles")).To(Equal("beatles"))
|
||||
})
|
||||
It("removes accented articles", func() {
|
||||
Expect(str.SanitizeFieldForSortingNoArticle("Õ Blésq Blom")).To(Equal("blesq blom"))
|
||||
})
|
||||
})
|
||||
|
||||
Describe("RemoveArticle", func() {
|
||||
Context("Empty articles list", func() {
|
||||
BeforeEach(func() {
|
||||
conf.Server.IgnoredArticles = ""
|
||||
})
|
||||
It("returns empty if string is empty", func() {
|
||||
Expect(str.RemoveArticle("")).To(BeEmpty())
|
||||
})
|
||||
It("returns same string", func() {
|
||||
Expect(str.RemoveArticle("The Beatles")).To(Equal("The Beatles"))
|
||||
})
|
||||
})
|
||||
Context("Default articles", func() {
|
||||
BeforeEach(func() {
|
||||
conf.Server.IgnoredArticles = "The El La Los Las Le Les Os As O A"
|
||||
})
|
||||
It("returns empty if string is empty", func() {
|
||||
Expect(str.RemoveArticle("")).To(BeEmpty())
|
||||
})
|
||||
It("remove prefix article from string", func() {
|
||||
Expect(str.RemoveArticle("Os Paralamas do Sucesso")).To(Equal("Paralamas do Sucesso"))
|
||||
})
|
||||
It("does not remove article if it is part of the first word", func() {
|
||||
Expect(str.RemoveArticle("Thelonious Monk")).To(Equal("Thelonious Monk"))
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user