Skip to content

Commit a584c03

Browse files
committed
Send slack notification on TimerReset.
1 parent 42b605e commit a584c03

File tree

4 files changed

+52
-5
lines changed

4 files changed

+52
-5
lines changed

app/models/read_model/game_read_model.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ def build_slack_new_turn_message(event_data)
2020
steam://run/8930/q/%2Bconnect%20#{ip_address}"
2121
end
2222

23-
def build_slack_timer_reset_message(event_data)
24-
"The turn timer for game #{name} has been reset"
23+
def build_slack_timer_reset_message(event_data, player = nil)
24+
player_name = player&.slack_name || "Unknown player"
25+
"The turn timer for game #{name} has been reset by #{player_name}"
2526
end
2627

2728
def turn

notifications/lib/notifications/slack_notifier.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ def call(event)
1313
new_turn_notification(event)
1414
when Game::PlayerDisconnected
1515
maybe_notify_remaining_players(event)
16+
when Game::TimerReset
17+
notify_about_timer_reset(event)
1618
end
1719
rescue => e
1820
error_message = "Error in Notifications::SlackNotifier: #{e.inspect}"
@@ -47,6 +49,18 @@ def maybe_notify_remaining_players(event)
4749
end
4850
end
4951

52+
def notify_about_timer_reset(event)
53+
game = ReadModel::GameReadModel.find_by(id: event.data[:game_id])
54+
return unless game && game.slack_token
55+
player_id = game.registered_slots&.dig(event.data[:slot])
56+
player = Player.find(player_id) if player_id
57+
CustomSlackClient.post_message(
58+
channel: game.slack_channel,
59+
text: game.build_slack_timer_reset_message(event.data, player),
60+
token: game.slack_token
61+
)
62+
end
63+
5064
attr_reader :logger, :event_store
5165
end
5266
end

notifications/spec/notifications/slack_notifier_spec.rb

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ def game_read_model
3333
id: game_id,
3434
slack_token: game_slack_token,
3535
slack_channel: game_slack_channel,
36-
ip_address: game_ip_address
36+
ip_address: game_ip_address,
37+
name: "Arkency 135"
3738
)
3839
end
3940

@@ -48,7 +49,7 @@ def given(*domain_events)
4849
.with(
4950
body: {
5051
"channel" => "#arkency58",
51-
"text" => "Game Turn 1 <!channel>\nsteam://run/8930/q/%2Bconnect%2010.4.0.28"
52+
"text" => "Game Arkency 135 Turn 1 <!channel>\nsteam://run/8930/q/%2Bconnect%2010.4.0.28"
5253
},
5354
headers: {
5455
"Authorization" => "Bearer xoxb-302139800755-nR1O848GLyVS5ZfNNMpBLm0b",
@@ -153,5 +154,36 @@ def given(*domain_events)
153154
expect(stub0).to have_been_requested
154155
expect(stub1).to have_been_requested
155156
end
157+
158+
specify("timer reset notification") do
159+
player_1 = Player.create!(steam_name: "some_player", slack_name: "slack_user")
160+
game = game_read_model
161+
game.update!(registered_slots: { 1 => player_1.id })
162+
163+
stub = stub_request(:post, "https://slack.com/api/chat.postMessage")
164+
.with(
165+
body: {
166+
"channel" => "#arkency58",
167+
"text" => "The turn timer for game Arkency 135 has been reset by slack_user"
168+
},
169+
headers: {
170+
"Authorization" => "Bearer xoxb-302139800755-nR1O848GLyVS5ZfNNMpBLm0b",
171+
"Accept" => "application/json; charset=utf-8",
172+
"Accept-Encoding" => "gzip;q=1.0,deflate;q=0.6,identity;q=0.3",
173+
"Content-Type" => "application/json"
174+
}
175+
)
176+
.to_return(status: 200, body: {ok: true}.to_json, headers: {})
177+
178+
given(
179+
Game::GameHosted.new(data: {turn_timer: 24.hours.to_i, game_id: game_id}),
180+
Game::PlayerRegistered.new(data: {slot_id: 1, player_id: player_1.id}),
181+
Game::PlayerRegistered.new(data: {slot_id: 2, player_id: player_2}),
182+
Game::PlayerRegistered.new(data: {slot_id: 3, player_id: player_3}),
183+
Game::NewTurnStarted.new(data: {turn: 1}),
184+
Game::TimerReset.new(data: {slot: 1, game_id: game_id}),
185+
)
186+
expect(stub).to have_been_requested
187+
end
156188
end
157189
end

notifications/spec/spec_helper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def event_store
1717
.tap do |client|
1818
client.subscribe(
1919
->(event) { Notifications::SlackNotifier.new(logger: Rails.logger, event_store: client).call(event) },
20-
to: [Game::NewTurnStarted, Game::PlayerDisconnected]
20+
to: [Game::NewTurnStarted, Game::PlayerDisconnected, Game::TimerReset]
2121
)
2222
end
2323
end

0 commit comments

Comments
 (0)