File: logger_suite_test.go

package info (click to toggle)
golang-github-nicholas-fedor-shoutrrr 0.10.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,432 kB
  • sloc: sh: 74; makefile: 5
file content (107 lines) | stat: -rw-r--r-- 3,438 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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/specialized/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`, &params)
			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`, &params)
				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`, &params)
				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"))
		})
	})
})