Add integration test for notification delivery and simplify test helpers

- Add comprehensive integration test covering card assignment, comments,
  mentions, email bundling, and edge cases (system user, inactive user)
- Inline push notification test helpers into the only test that uses them
- Remove separate PushNotificationTestHelper module

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Rosa Gutierrez
2026-01-23 21:44:43 +01:00
parent 1a0d8e2501
commit 126ccb5e3a
6 changed files with 187 additions and 60 deletions
@@ -189,4 +189,20 @@ class Notification::PushTarget::NativeTest < ActiveSupport::TestCase
assert_equal @notification.creator.name, native.data[:creator_name]
end
private
def assert_native_push_delivery(count: 1, &block)
assert_enqueued_jobs count, only: ApplicationPushNotificationJob do
perform_enqueued_jobs only: Notification::PushJob, &block
end
end
def assert_no_native_push_delivery(&block)
assert_enqueued_jobs 0, only: ApplicationPushNotificationJob do
perform_enqueued_jobs only: Notification::PushJob, &block
end
end
def stub_push_services
ActionPushNative.stubs(:service_for).returns(stub(push: true))
end
end
-21
View File
@@ -1,21 +0,0 @@
require "test_helper"
class PushConfigTest < ActiveSupport::TestCase
test "loads push config from the saas engine" do
skip unless Fizzy.saas?
config = ActionPushNative.config
apple_team_id = config.dig(:apple, :team_id)
apple_topic = config.dig(:apple, :topic)
google_project_id = config.dig(:google, :project_id)
skip "Update test once APNS team_id is configured" if apple_team_id == "YOUR_TEAM_ID"
skip "Update test once APNS topic is configured" if apple_topic == "com.yourcompany.fizzy"
skip "Update test once FCM project_id is configured" if google_project_id == "your-firebase-project"
assert apple_team_id.present?
assert apple_topic.present?
assert google_project_id.present?
end
end
@@ -1,33 +0,0 @@
module PushNotificationTestHelper
# Assert native push notification is queued for delivery
def assert_native_push_delivery(count: 1, &block)
assert_enqueued_jobs count, only: ApplicationPushNotificationJob, &block
end
# Assert no native push notifications are queued
def assert_no_native_push_delivery(&block)
assert_native_push_delivery(count: 0, &block)
end
# Expect push notification to be delivered (using mocha)
def expect_native_push_delivery(count: 1)
ApplicationPushNotification.any_instance.expects(:deliver_later_to).times(count)
yield if block_given?
end
# Expect no push notification delivery
def expect_no_native_push_delivery(&block)
expect_native_push_delivery(count: 0, &block)
end
# Stub the push service to avoid actual API calls
def stub_push_services
ActionPushNative.stubs(:service_for).returns(stub(push: true))
end
# Stub push service to simulate token error (device should be deleted)
def stub_push_token_error
push_stub = stub.tap { |s| s.stubs(:push).raises(ActionPushNative::TokenError) }
ActionPushNative.stubs(:service_for).returns(push_stub)
end
end