Redesign UserMenu, now with support for Gravatar

This commit is contained in:
Deluan
2020-11-13 00:40:01 -05:00
parent 7efc32d136
commit 9d7995fd4d
7 changed files with 196 additions and 9 deletions
+25
View File
@@ -0,0 +1,25 @@
package gravatar
import (
"crypto/md5"
"fmt"
"strings"
"github.com/deluan/navidrome/utils"
)
const baseUrl = "https://www.gravatar.com/avatar"
const defaultSize = 80
const maxSize = 2048
func Url(email string, size int) string {
email = strings.ToLower(email)
email = strings.TrimSpace(email)
hash := md5.Sum([]byte(email))
if size < 1 {
size = defaultSize
}
size = utils.MinInt(maxSize, size)
return fmt.Sprintf("%s/%x?s=%d", baseUrl, hash, size)
}
+36
View File
@@ -0,0 +1,36 @@
package gravatar_test
import (
"testing"
"github.com/deluan/navidrome/core/gravatar"
"github.com/deluan/navidrome/log"
"github.com/deluan/navidrome/tests"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
func TestGravatar(t *testing.T) {
tests.Init(t, false)
log.SetLevel(log.LevelCritical)
RegisterFailHandler(Fail)
RunSpecs(t, "Gravatar Test Suite")
}
var _ = Describe("Gravatar", func() {
It("returns a well formatted gravatar URL", func() {
Expect(gravatar.Url("my@email.com", 100)).To(Equal("https://www.gravatar.com/avatar/4f384e9f3e8e625aae72b52658323d70?s=100"))
})
It("sets the default size", func() {
Expect(gravatar.Url("my@email.com", 0)).To(Equal("https://www.gravatar.com/avatar/4f384e9f3e8e625aae72b52658323d70?s=80"))
})
It("caps maximum size", func() {
Expect(gravatar.Url("my@email.com", 3000)).To(Equal("https://www.gravatar.com/avatar/4f384e9f3e8e625aae72b52658323d70?s=2048"))
})
It("ignores case", func() {
Expect(gravatar.Url("MY@email.com", 0)).To(Equal(gravatar.Url("my@email.com", 0)))
})
It("ignores spaces", func() {
Expect(gravatar.Url(" my@email.com ", 0)).To(Equal(gravatar.Url("my@email.com", 0)))
})
})