Skip to content

Commit

Permalink
chore: add list_mutes tests
Browse files Browse the repository at this point in the history
  • Loading branch information
freak12techno committed Dec 2, 2024
1 parent e6cac86 commit 32cdfe5
Show file tree
Hide file tree
Showing 6 changed files with 277 additions and 3 deletions.
1 change: 1 addition & 0 deletions assets/responses/list-mutes-empty.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
No active mutes.
7 changes: 7 additions & 0 deletions assets/responses/list-mutes.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<strong>Chain:</strong> chain
<strong>Proposal ID:</strong> proposal
<strong>Expires: </strong>Sun, 01 Dec 2024 16:56:01 GMT

<strong>Chain:</strong> all chains
<strong>Proposal ID:</strong> all proposals
<strong>Expires: </strong>Sun, 01 Dec 2024 16:56:01 GMT
5 changes: 5 additions & 0 deletions pkg/database/stub.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ type StubDatabase struct {
IsMutedError error
UpsertMuteError error
DeleteMuteError error
GetAllMutesError error

Proposals map[string]map[string]*types.Proposal
Votes map[string]map[string]map[string]*types.Vote
Expand Down Expand Up @@ -180,6 +181,10 @@ func (d *StubDatabase) UpsertMute(mute *types.Mute) error {
}

func (d *StubDatabase) GetAllMutes() ([]*types.Mute, error) {
if d.GetAllMutesError != nil {
return []*types.Mute{}, d.GetAllMutesError
}

if d.Mutes == nil {
return []*types.Mute{}, nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/reporters/telegram/add_mute_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ func TestTelegramReporterReporterAddMuteInvalidArgument(t *testing.T) {
}

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

Expand Down
5 changes: 3 additions & 2 deletions pkg/reporters/telegram/list_mutes.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package telegram

import (
"fmt"
"main/pkg/types"
"main/pkg/utils"

Expand All @@ -15,8 +16,8 @@ func (reporter *Reporter) HandleListMutes(c tele.Context) error {

mutes, err := reporter.MutesManager.GetAllMutes()
if err != nil {
reporter.Logger.Error().Err(err).Msg("Error getting all mutes")
return reporter.BotReply(c, "Error rendering template")
reporter.Logger.Error().Err(err).Msg("Error fetching mutes")
return reporter.BotReply(c, fmt.Sprintf("Error fetching mutes: %s", err))
}

filteredMutes := utils.Filter(mutes, func(m *types.Mute) bool {
Expand Down
260 changes: 260 additions & 0 deletions pkg/reporters/telegram/list_mutes_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,260 @@
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/guregu/null/v5"
"github.com/jarcoal/httpmock"
"github.com/stretchr/testify/require"
tele "gopkg.in/telebot.v3"
)

//nolint:paralleltest // disabled
func TestTelegramReporterListMutesError(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 fetching mutes: custom error"),
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{GetAllMutesError: errors.New("custom error")}
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: "/proposals_mutes",
Chat: &tele.Chat{ID: 2},
},
})

err = reporter.HandleListMutes(ctx)
require.NoError(t, err)
}

//nolint:paralleltest // disabled
func TestTelegramReporterListMutesOk(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: "/proposals_mutes",
Chat: &tele.Chat{ID: 2},
},
})

err = database.UpsertMute(&types.Mute{})
require.NoError(t, err)

err = reporter.HandleListMutes(ctx)
require.NoError(t, err)
}

//nolint:paralleltest // disabled
func TestTelegramReporterListMutesRenderOkEmpty(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.TelegramResponseHasBytes(assets.GetBytesOrPanic("responses/list-mutes-empty.html")),
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: "/proposals_mutes",
Chat: &tele.Chat{ID: 2},
},
})

err = reporter.ReplyRender(ctx, "mutes", []*types.Mute{})
require.NoError(t, err)
}

//nolint:paralleltest // disabled
func TestTelegramReporterListMutesRenderOkNotEmpty(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.TelegramResponseHasBytes(assets.GetBytesOrPanic("responses/list-mutes.html")),
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: "/proposals_mutes",
Chat: &tele.Chat{ID: 2},
},
})

timeParsed, err := time.Parse(time.RFC3339, "2024-12-01T16:56:01Z")
require.NoError(t, err)

err = reporter.ReplyRender(ctx, "mutes", []*types.Mute{
{
Chain: null.StringFrom("chain"),
ProposalID: null.StringFrom("proposal"),
Expires: timeParsed,
Comment: "comment",
},
{
Expires: timeParsed,
Comment: "comment",
},
})
require.NoError(t, err)
}

0 comments on commit 32cdfe5

Please sign in to comment.