1
0
Fork 0
golang-github-nicholas-fedo.../pkg/services/services_test.go
Daniel Baumann c0c4addb85
Adding upstream version 0.8.9.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-22 10:16:14 +02:00

142 lines
4.4 KiB
Go

package services_test
import (
"log"
"net/http"
"testing"
"github.com/jarcoal/httpmock"
"github.com/onsi/ginkgo/v2"
"github.com/onsi/gomega"
"github.com/nicholas-fedor/shoutrrr/internal/testutils"
"github.com/nicholas-fedor/shoutrrr/pkg/router"
"github.com/nicholas-fedor/shoutrrr/pkg/types"
)
func TestServices(t *testing.T) {
gomega.RegisterFailHandler(ginkgo.Fail)
ginkgo.RunSpecs(t, "Service Compliance Suite")
}
var serviceURLs = map[string]string{
"discord": "discord://token@id",
"gotify": "gotify://example.com/Aaa.bbb.ccc.ddd",
"googlechat": "googlechat://chat.googleapis.com/v1/spaces/FOO/messages?key=bar&token=baz",
"hangouts": "hangouts://chat.googleapis.com/v1/spaces/FOO/messages?key=bar&token=baz",
"ifttt": "ifttt://key?events=event",
"join": "join://:apikey@join/?devices=device",
"logger": "logger://",
"mattermost": "mattermost://user@example.com/token",
"opsgenie": "opsgenie://example.com/token?responders=user:dummy",
"pushbullet": "pushbullet://tokentokentokentokentokentokentoke",
"pushover": "pushover://:token@user/?devices=device",
"rocketchat": "rocketchat://example.com/token/channel",
"slack": "slack://AAAAAAAAA/BBBBBBBBB/123456789123456789123456",
"smtp": "smtp://host.tld:25/?fromAddress=from@host.tld&toAddresses=to@host.tld",
"teams": "teams://11111111-4444-4444-8444-cccccccccccc@22222222-4444-4444-8444-cccccccccccc/33333333012222222222333333333344/44444444-4444-4444-8444-cccccccccccc/V2ESyij_gAljSoUQHvZoZYzlpAoAXExyOl26dlf1xHEx05?host=test.webhook.office.com",
"telegram": "telegram://000000000:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA@telegram?channels=channel",
"xmpp": "xmpp://",
"zulip": "zulip://mail:key@example.com/?stream=foo&topic=bar",
}
var serviceResponses = map[string]string{
"discord": "",
"gotify": `{"id": 0}`,
"googlechat": "",
"hangouts": "",
"ifttt": "",
"join": "",
"logger": "",
"mattermost": "",
"opsgenie": "",
"pushbullet": `{"type": "note", "body": "test", "title": "test title", "active": true, "created": 0}`,
"pushover": "",
"rocketchat": "",
"slack": "",
"smtp": "",
"teams": "",
"telegram": "",
"xmpp": "",
"zulip": "",
}
var logger = log.New(ginkgo.GinkgoWriter, "Test", log.LstdFlags)
var _ = ginkgo.Describe("services", func() {
ginkgo.BeforeEach(func() {
})
ginkgo.AfterEach(func() {
})
ginkgo.When("passed the a title param", func() {
var serviceRouter *router.ServiceRouter
ginkgo.AfterEach(func() {
httpmock.DeactivateAndReset()
})
for key, configURL := range serviceURLs {
serviceRouter, _ = router.New(logger)
ginkgo.It("should not throw an error for "+key, func() {
if key == "smtp" {
ginkgo.Skip("smtp does not use HTTP and needs a specific test")
}
if key == "xmpp" {
ginkgo.Skip("not supported")
}
service, err := serviceRouter.Locate(configURL)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
httpmock.Activate()
if mockService, ok := service.(testutils.MockClientService); ok {
httpmock.ActivateNonDefault(mockService.GetHTTPClient())
}
respStatus := http.StatusOK
if key == "discord" || key == "ifttt" {
respStatus = http.StatusNoContent
}
if key == "mattermost" {
httpmock.RegisterResponder(
"POST",
"https://example.com/hooks/token",
httpmock.NewStringResponder(http.StatusOK, ""),
)
} else {
httpmock.RegisterNoResponder(httpmock.NewStringResponder(respStatus, serviceResponses[key]))
}
err = service.Send("test", (*types.Params)(&map[string]string{
"title": "test title",
}))
gomega.Expect(err).NotTo(gomega.HaveOccurred())
})
if key == "mattermost" {
ginkgo.It("should not throw an error for "+key+" with DisableTLS", func() {
modifiedURL := configURL + "?disabletls=yes"
service, err := serviceRouter.Locate(modifiedURL)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
httpmock.Activate()
if mockService, ok := service.(testutils.MockClientService); ok {
httpmock.ActivateNonDefault(mockService.GetHTTPClient())
}
httpmock.RegisterResponder(
"POST",
"http://example.com/hooks/token",
httpmock.NewStringResponder(http.StatusOK, ""),
)
err = service.Send("test", (*types.Params)(&map[string]string{
"title": "test title",
}))
gomega.Expect(err).NotTo(gomega.HaveOccurred())
})
}
}
})
})