107 lines
3.3 KiB
Go
107 lines
3.3 KiB
Go
package logger_test
|
|
|
|
import (
|
|
"log"
|
|
"testing"
|
|
|
|
"github.com/onsi/ginkgo/v2"
|
|
"github.com/onsi/gomega"
|
|
"github.com/onsi/gomega/gbytes"
|
|
|
|
"github.com/nicholas-fedor/shoutrrr/internal/testutils"
|
|
"github.com/nicholas-fedor/shoutrrr/pkg/services/logger"
|
|
"github.com/nicholas-fedor/shoutrrr/pkg/types"
|
|
)
|
|
|
|
func TestLogger(t *testing.T) {
|
|
gomega.RegisterFailHandler(ginkgo.Fail)
|
|
ginkgo.RunSpecs(t, "Logger Suite")
|
|
}
|
|
|
|
var _ = ginkgo.Describe("the logger service", func() {
|
|
ginkgo.When("sending a notification", func() {
|
|
ginkgo.It("should output the message to the log", func() {
|
|
logbuf := gbytes.NewBuffer()
|
|
service := &logger.Service{}
|
|
_ = service.Initialize(testutils.URLMust(`logger://`), log.New(logbuf, "", 0))
|
|
|
|
err := service.Send(`Failed - Requires Toaster Repair Level 10`, nil)
|
|
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
|
|
|
gomega.Eventually(logbuf).
|
|
Should(gbytes.Say("Failed - Requires Toaster Repair Level 10"))
|
|
})
|
|
|
|
ginkgo.It("should not mutate the passed params", func() {
|
|
service := &logger.Service{}
|
|
_ = service.Initialize(testutils.URLMust(`logger://`), nil)
|
|
params := types.Params{}
|
|
err := service.Send(`Failed - Requires Toaster Repair Level 10`, ¶ms)
|
|
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
|
|
|
gomega.Expect(params).To(gomega.BeEmpty())
|
|
})
|
|
|
|
ginkgo.When("a template has been added", func() {
|
|
ginkgo.It("should render template with params", func() {
|
|
logbuf := gbytes.NewBuffer()
|
|
service := &logger.Service{}
|
|
_ = service.Initialize(testutils.URLMust(`logger://`), log.New(logbuf, "", 0))
|
|
err := service.SetTemplateString(`message`, `{{.level}}: {{.message}}`)
|
|
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
|
|
|
params := types.Params{
|
|
"level": "warning",
|
|
}
|
|
err = service.Send(`Requires Toaster Repair Level 10`, ¶ms)
|
|
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
|
|
|
gomega.Eventually(logbuf).
|
|
Should(gbytes.Say("warning: Requires Toaster Repair Level 10"))
|
|
})
|
|
|
|
ginkgo.It("should return an error if template execution fails", func() {
|
|
logbuf := gbytes.NewBuffer()
|
|
service := &logger.Service{}
|
|
_ = service.Initialize(testutils.URLMust(`logger://`), log.New(logbuf, "", 0))
|
|
err := service.SetTemplateString(
|
|
`message`,
|
|
`{{range .message}}x{{end}} {{.message}}`,
|
|
)
|
|
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
|
|
|
params := types.Params{
|
|
"level": "error",
|
|
}
|
|
err = service.Send(`Critical Failure`, ¶ms)
|
|
gomega.Expect(err).To(gomega.HaveOccurred())
|
|
gomega.Expect(err.Error()).
|
|
To(gomega.ContainSubstring("failed to write template to log"))
|
|
})
|
|
})
|
|
})
|
|
|
|
ginkgo.Describe("the config object", func() {
|
|
ginkgo.It("should return a URL with the correct scheme from GetURL", func() {
|
|
config := &logger.Config{}
|
|
url := config.GetURL()
|
|
gomega.Expect(url.Scheme).To(gomega.Equal("logger"))
|
|
gomega.Expect(url.String()).To(gomega.Equal("logger://"))
|
|
})
|
|
|
|
ginkgo.It("should not error when SetURL is called with a valid URL", func() {
|
|
config := &logger.Config{}
|
|
url := testutils.URLMust(`logger://`)
|
|
err := config.SetURL(url)
|
|
gomega.Expect(err).NotTo(gomega.HaveOccurred())
|
|
})
|
|
})
|
|
|
|
ginkgo.Describe("the service identifier", func() {
|
|
ginkgo.It("should return the correct ID", func() {
|
|
service := &logger.Service{}
|
|
id := service.GetID()
|
|
gomega.Expect(id).To(gomega.Equal("logger"))
|
|
})
|
|
})
|
|
})
|