Skip to content

Commit

Permalink
chore: add /help tests
Browse files Browse the repository at this point in the history
  • Loading branch information
freak12techno committed Nov 26, 2024
1 parent 08c305b commit b935780
Show file tree
Hide file tree
Showing 5 changed files with 209 additions and 10 deletions.
8 changes: 1 addition & 7 deletions pkg/reporters/telegram/help.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,5 @@ func (reporter *Reporter) HandleHelp(c tele.Context) error {
Str("text", c.Text()).
Msg("Got help query")

template, err := reporter.TemplatesManager.Render("help", reporter.Version)
if err != nil {
reporter.Logger.Error().Err(err).Msg("Error rendering template")
return reporter.BotReply(c, "Error rendering template")
}

return reporter.BotReply(c, template)
return reporter.ReplyRender(c, "help", reporter.Version)
}
73 changes: 73 additions & 0 deletions pkg/reporters/telegram/help_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package telegram

import (
"main/assets"
"main/pkg/data"
databasePkg "main/pkg/database"
loggerPkg "main/pkg/logger"
mutesmanager "main/pkg/mutes"
"main/pkg/state"
"main/pkg/tracing"
"main/pkg/types"
"testing"
"time"

"github.com/jarcoal/httpmock"
"github.com/stretchr/testify/require"
tele "gopkg.in/telebot.v3"
)

//nolint:paralleltest // disabled
func TestTelegramReporterReporterHelpOk(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()

httpmock.RegisterResponder(
"POST",
"https://api.telegram.org/botxxx:yyy/getMe",
httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("telegram-bot-ok.json")))

httpmock.RegisterResponder(
"POST",
"https://api.telegram.org/botxxx:yyy/sendMessage",
httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("telegram-send-message-ok.json")),
)

config := types.TelegramConfig{TelegramToken: "xxx:yyy", TelegramChat: 123}
chains := types.Chains{{Name: "chain", LCDEndpoints: []string{"https://example.com"}}}
logger := loggerPkg.GetNopLogger()
tracer := tracing.InitNoopTracer()
database := &databasePkg.StubDatabase{}
mutesManager := mutesmanager.NewMutesManager(logger, database)
stateGenerator := state.NewStateGenerator(logger, tracer, chains)
dataManager := data.NewManager(logger, chains, tracer)

timezone, err := time.LoadLocation("Etc/GMT")
require.NoError(t, err)

reporter := NewTelegramReporter(
config,
mutesManager,
stateGenerator,
dataManager,
logger,
"1.2.3",
timezone,
tracer,
)

err = reporter.InitBot()
require.NoError(t, err)

ctx := reporter.TelegramBot.NewContext(tele.Update{
ID: 1,
Message: &tele.Message{
Sender: &tele.User{Username: "testuser"},
Text: "/help",
Chat: &tele.Chat{ID: 2},
},
})

err = reporter.HandleHelp(ctx)
require.NoError(t, err)
}
7 changes: 4 additions & 3 deletions pkg/reporters/telegram/telegram_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package telegram

import (
"errors"
tele "gopkg.in/telebot.v3"
"main/assets"
"main/pkg/data"
databasePkg "main/pkg/database"
Expand All @@ -16,10 +15,13 @@ import (
"testing"
"time"

tele "gopkg.in/telebot.v3"

"github.com/jarcoal/httpmock"
"github.com/stretchr/testify/require"
)

//nolint:paralleltest // disabled
func TestReporterInitNotEnabled(t *testing.T) {
config := types.TelegramConfig{}
chains := types.Chains{{Name: "chain", LCDEndpoints: []string{"https://example.com"}}}
Expand Down Expand Up @@ -115,8 +117,7 @@ func TestReporterInitOkay(t *testing.T) {
wg.Add(1)

go func() {
err = reporter.Init()
require.NoError(t, err)
_ = reporter.Init()

ctx := reporter.TelegramBot.NewContext(tele.Update{
ID: 1,
Expand Down
1 change: 1 addition & 0 deletions pkg/reporters/telegram/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package telegram

import (
"fmt"

tele "gopkg.in/telebot.v3"
)

Expand Down
130 changes: 130 additions & 0 deletions pkg/reporters/telegram/utils_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
package telegram

import (
"errors"
"main/assets"
"main/pkg/data"
databasePkg "main/pkg/database"
loggerPkg "main/pkg/logger"
mutesmanager "main/pkg/mutes"
"main/pkg/state"
"main/pkg/tracing"
"main/pkg/types"
"testing"
"time"

"github.com/jarcoal/httpmock"
"github.com/stretchr/testify/require"
tele "gopkg.in/telebot.v3"
)

//nolint:paralleltest // disabled
func TestTelegramReporterReplyRenderFailedToRender(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()

httpmock.RegisterResponder(
"POST",
"https://api.telegram.org/botxxx:yyy/getMe",
httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("telegram-bot-ok.json")))

httpmock.RegisterMatcherResponder(
"POST",
"https://api.telegram.org/botxxx:yyy/sendMessage",
types.TelegramResponseHasText("Error rendering template: template: pattern matches no files: `telegram/not_found.html`"), //nolint:dupword
httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("telegram-send-message-ok.json")),
)

config := types.TelegramConfig{TelegramToken: "xxx:yyy", TelegramChat: 123}
chains := types.Chains{{Name: "chain", LCDEndpoints: []string{"https://example.com"}}}
logger := loggerPkg.GetNopLogger()
tracer := tracing.InitNoopTracer()
database := &databasePkg.StubDatabase{}
mutesManager := mutesmanager.NewMutesManager(logger, database)
stateGenerator := state.NewStateGenerator(logger, tracer, chains)
dataManager := data.NewManager(logger, chains, tracer)

timezone, err := time.LoadLocation("Etc/GMT")
require.NoError(t, err)

reporter := NewTelegramReporter(
config,
mutesManager,
stateGenerator,
dataManager,
logger,
"1.2.3",
timezone,
tracer,
)

err = reporter.InitBot()
require.NoError(t, err)

ctx := reporter.TelegramBot.NewContext(tele.Update{
ID: 1,
Message: &tele.Message{
Sender: &tele.User{Username: "testuser"},
Text: "/help",
Chat: &tele.Chat{ID: 2},
},
})

err = reporter.ReplyRender(ctx, "not_found", nil)
require.NoError(t, err)
}

//nolint:paralleltest // disabled
func TestTelegramReporterReplyRenderFailedToSend(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()

httpmock.RegisterResponder(
"POST",
"https://api.telegram.org/botxxx:yyy/getMe",
httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("telegram-bot-ok.json")))

httpmock.RegisterResponder(
"POST",
"https://api.telegram.org/botxxx:yyy/sendMessage",
httpmock.NewErrorResponder(errors.New("custom error")))

config := types.TelegramConfig{TelegramToken: "xxx:yyy", TelegramChat: 123}
chains := types.Chains{{Name: "chain", LCDEndpoints: []string{"https://example.com"}}}
logger := loggerPkg.GetNopLogger()
tracer := tracing.InitNoopTracer()
database := &databasePkg.StubDatabase{}
mutesManager := mutesmanager.NewMutesManager(logger, database)
stateGenerator := state.NewStateGenerator(logger, tracer, chains)
dataManager := data.NewManager(logger, chains, tracer)

timezone, err := time.LoadLocation("Etc/GMT")
require.NoError(t, err)

reporter := NewTelegramReporter(
config,
mutesManager,
stateGenerator,
dataManager,
logger,
"1.2.3",
timezone,
tracer,
)

err = reporter.InitBot()
require.NoError(t, err)

ctx := reporter.TelegramBot.NewContext(tele.Update{
ID: 1,
Message: &tele.Message{
Sender: &tele.User{Username: "testuser"},
Text: "/help",
Chat: &tele.Chat{ID: 2},
},
})

err = reporter.ReplyRender(ctx, "not_found", nil)
require.Error(t, err)
require.ErrorContains(t, err, "custom error")
}

0 comments on commit b935780

Please sign in to comment.