@@ -27,6 +27,12 @@ def perform
2727 end
2828end
2929
30+ class JobWithArgument < ActiveJob ::Base
31+ def perform ( *args , integer :, post :, **options )
32+ raise "foo"
33+ end
34+ end
35+
3036class QueryPostJob < ActiveJob ::Base
3137 self . logger = nil
3238
@@ -76,6 +82,52 @@ def rescue_callback(error)
7682 expect ( NormalJob . perform_now ) . to eq ( "foo" )
7783 end
7884
85+ describe "ActiveJob arguments serialization" do
86+ it "serializes ActiveRecord arguments in globalid form" do
87+ post = Post . create!
88+ post2 = Post . create!
89+
90+ expect do
91+ JobWithArgument . perform_now ( "foo" , { bar : Sentry } , integer : 1 , post : post , nested : { another_level : { post : post2 } } )
92+ end . to raise_error ( RuntimeError )
93+
94+ event = transport . events . last . to_json_compatible
95+ expect ( event . dig ( "extra" , "arguments" ) ) . to eq (
96+ [
97+ "foo" ,
98+ { "bar" => "Sentry" } ,
99+ {
100+ "integer" => 1 ,
101+ "post" => "gid://rails-test-app/Post/#{ post . id } " ,
102+ "nested" => { "another_level" => { "post" => "gid://rails-test-app/Post/#{ post2 . id } " } }
103+ }
104+ ]
105+ )
106+ end
107+
108+ it "handles problematic globalid conversion gracefully" do
109+ post = Post . create!
110+
111+ def post . to_global_id
112+ raise
113+ end
114+
115+ expect do
116+ JobWithArgument . perform_now ( integer : 1 , post : post )
117+ end . to raise_error ( RuntimeError )
118+
119+ event = transport . events . last . to_json_compatible
120+ expect ( event . dig ( "extra" , "arguments" ) ) . to eq (
121+ [
122+ {
123+ "integer" => 1 ,
124+ "post" => post . to_s ,
125+ }
126+ ]
127+ )
128+ end
129+ end
130+
79131 it "adds useful context to extra" do
80132 expect { FailedJob . perform_now } . to raise_error ( FailedJob ::TestError )
81133
0 commit comments