Test the abuse prevention logic
This commit is contained in:
+6
-6
@@ -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
|
||||
|
||||
Vendored
+15
-7
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user