Test the abuse prevention logic

This commit is contained in:
Stanko K.R.
2025-09-11 16:56:54 +02:00
parent 0bdbc5f5e8
commit 1d69b171b6
5 changed files with 72 additions and 17 deletions
+6 -6
View File
@@ -1,13 +1,13 @@
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
webhook: one
last_reset_at: 2025-09-11 14:45:43
active_webhook_tracker:
webhook: active
last_reset_at: <%= 1.hour.ago %>
total_count: 1
failed_count: 1
two:
webhook: two
last_reset_at: 2025-09-11 14:45:43
inactive_webhook_tracker:
webhook: inactive
last_reset_at: <%= 1.hour.ago %>
total_count: 1
failed_count: 1
+15 -7
View File
@@ -4,24 +4,32 @@ successfully_completed:
webhook: active
event: logo_published
state: completed
request: '{"headers": {}}'
response: '{"code": 200, "headers": {}}'
request:
headers: {}
response:
code: 200
headers: {}
created_at: <%= 1.week.ago %>
successfully_completed:
unsuccessfully_completed:
webhook: active
event: logo_assignment_jz
state: completed
request: '{"headers": {}}'
response: '{"code": 200, "headers": {}}'
request:
headers: {}
response:
code: 422
headers: {}
created_at: <%= 1.week.ago + 1.hour %>
errored:
webhook: active
event: layout_published
state: errored
request: '{"headers": {}}'
response: '{"error": "destination_unreachable"}'
request:
headers: {}
response:
error: "destination_unreachable"
created_at: <%= 1.week.ago %>
pending:
@@ -1,7 +1,42 @@
require "test_helper"
class Webhook::DelinquencyTrackerTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
test "record_delivery_of" do
tracker = webhook_delinquency_trackers(:active_webhook_tracker)
webhook = tracker.webhook
successful_delivery = webhook_deliveries(:successfully_completed)
failed_delivery = webhook_deliveries(:errored)
assert_difference -> { tracker.reload.total_count }, +1 do
assert_no_difference -> { tracker.reload.failed_count } do
tracker.record_delivery_of(successful_delivery)
end
end
assert_difference -> { tracker.reload.total_count }, +1 do
assert_difference -> { tracker.reload.failed_count }, +1 do
tracker.record_delivery_of(failed_delivery)
end
end
travel_to 13.hours.from_now do
tracker.update!(total_count: 10, failed_count: 5)
tracker.record_delivery_of(successful_delivery)
tracker.reload
assert_equal 0, tracker.total_count
assert_equal 0, tracker.failed_count
assert tracker.last_reset_at > 1.minute.ago
end
travel_to 26.hours.from_now do
tracker.update!(total_count: 50, failed_count: 50)
webhook.activate
assert_changes -> { webhook.reload.active? }, from: true, to: false do
tracker.record_delivery_of(failed_delivery)
end
end
end
end
+4 -1
View File
@@ -55,7 +55,10 @@ class Webhook::DeliveryTest < ActiveSupport::TestCase
assert_equal "pending", delivery.state
delivery.deliver
tracker = delivery.webhook.delinquency_tracker
assert_difference -> { tracker.reload.total_count }, 1 do
delivery.deliver
end
assert delivery.persisted?
assert_equal "completed", delivery.state
+9
View File
@@ -6,6 +6,7 @@ class WebhookTest < ActiveSupport::TestCase
assert webhook.persisted?
assert webhook.active?
assert webhook.signing_secret.present?
assert webhook.delinquency_tracker.present?
end
test "validates the url" do
@@ -43,4 +44,12 @@ class WebhookTest < ActiveSupport::TestCase
webhook.deactivate
end
end
test "activate" do
webhook = webhooks(:inactive)
assert_changes -> { webhook.active? }, from: false, to: true do
webhook.activate
end
end
end