Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.

Commit 70ed62e

Browse files
committed
Pass template values in a struct rather than as individual arguments
This makes it easier to add more template strings in the future without changing the function signature
1 parent cdec956 commit 70ed62e

2 files changed

Lines changed: 22 additions & 11 deletions

File tree

src/keybaseca/bot/bot.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,17 @@ func isConfiguredTeam(conf config.Config, teamName string, channelName string) b
150150
return false
151151
}
152152

153-
func buildAnnouncement(template, username, currentTeam string, teams []string) string {
153+
type AnnouncementTemplateValues struct {
154+
Username string
155+
CurrentTeam string
156+
Teams []string
157+
}
158+
159+
func buildAnnouncement(template string, values AnnouncementTemplateValues) string {
154160
replacements := map[string]string{
155-
"{USERNAME}": username,
156-
"{CURRENT_TEAM}": currentTeam,
157-
"{TEAMS}": strings.Join(teams, ", "),
161+
"{USERNAME}": values.Username,
162+
"{CURRENT_TEAM}": values.CurrentTeam,
163+
"{TEAMS}": strings.Join(values.Teams, ", "),
158164
}
159165

160166
templatedMessage := template
@@ -171,7 +177,10 @@ func sendAnnouncementMessage(conf config.Config, kbc *kbchat.API) error {
171177
return nil
172178
}
173179
for _, team := range conf.GetTeams() {
174-
announcement := buildAnnouncement(conf.GetAnnouncement(), kbc.GetUsername(), team, conf.GetTeams())
180+
announcement := buildAnnouncement(conf.GetAnnouncement(),
181+
AnnouncementTemplateValues{Username: kbc.GetUsername(),
182+
CurrentTeam: team,
183+
Teams: conf.GetTeams()})
175184

176185
var channel *string
177186
_, err := kbc.SendMessageByTeamName(team, announcement, channel)

src/keybaseca/bot/bot_test.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,18 @@ import (
77
)
88

99
func TestBuildAnnouncement(t *testing.T) {
10+
values := AnnouncementTemplateValues{Username: "my_username", CurrentTeam: "my_cur_team", Teams: []string{"my_team1", "my_team2"}}
11+
1012
require.Equal(t, "",
11-
buildAnnouncement("", "my_username", "my_cur_team", []string{"my_team1", "my_team2"}))
13+
buildAnnouncement("", values))
1214
require.Equal(t, "no templates",
13-
buildAnnouncement("no templates", "my_username", "my_cur_team", []string{"my_team1", "my_team2"}))
15+
buildAnnouncement("no templates", values))
1416
require.Equal(t, "repeated my_username my_username my_username",
15-
buildAnnouncement("repeated {USERNAME} {USERNAME} {USERNAME}", "my_username", "my_cur_team", []string{"my_team1", "my_team2"}))
17+
buildAnnouncement("repeated {USERNAME} {USERNAME} {USERNAME}", values))
1618
require.Equal(t, "all my_username my_cur_team my_team1, my_team2",
17-
buildAnnouncement("all {USERNAME} {CURRENT_TEAM} {TEAMS}", "my_username", "my_cur_team", []string{"my_team1", "my_team2"}))
19+
buildAnnouncement("all {USERNAME} {CURRENT_TEAM} {TEAMS}", values))
1820
require.Equal(t, "bogus {FOO}",
19-
buildAnnouncement("bogus {FOO}", "my_username", "my_cur_team", []string{"my_team1", "my_team2"}))
21+
buildAnnouncement("bogus {FOO}", values))
2022
require.Equal(t, "double-is-not-escape {my_username}",
21-
buildAnnouncement("double-is-not-escape {{USERNAME}}", "my_username", "my_cur_team", []string{"my_team1", "my_team2"}))
23+
buildAnnouncement("double-is-not-escape {{USERNAME}}", values))
2224
}

0 commit comments

Comments
 (0)