@@ -287,6 +287,76 @@ defmodule Bamboo.MailgunAdapterTest do
287287 assert params [ "t:text" ] == "yes"
288288 end
289289
290+ test "deliver/2 includes whitelisted o: options from private" do
291+ email =
292+ [ from: "from@foo.com" , subject: "My Subject" , text_body: "TEXT BODY" , html_body: "HTML BODY" ]
293+ |> new_email ( )
294+ |> Email . put_private ( :"o:tracking" , "yes" )
295+ |> Email . put_private ( :"o:tracking-clicks" , "htmlonly" )
296+ |> Email . put_private ( :"o:dkim" , "yes" )
297+ |> Email . put_private ( :"o:testmode" , "true" )
298+
299+ MailgunAdapter . deliver ( email , @ config )
300+
301+ assert_receive { :fake_mailgun , % { params: params } }
302+
303+ assert params [ "o:tracking" ] == "yes"
304+ assert params [ "o:tracking-clicks" ] == "htmlonly"
305+ assert params [ "o:dkim" ] == "yes"
306+ assert params [ "o:testmode" ] == "true"
307+ end
308+
309+ test "deliver/2 ignores unsupported o: options from private" do
310+ email =
311+ [ from: "from@foo.com" , subject: "My Subject" , text_body: "TEXT BODY" , html_body: "HTML BODY" ]
312+ |> new_email ( )
313+ |> Email . put_private ( :"o:tracking" , "yes" )
314+ |> Email . put_private ( :"o:unsupported-option" , "value" )
315+ |> Email . put_private ( :"o:invalid" , "should-be-ignored" )
316+
317+ MailgunAdapter . deliver ( email , @ config )
318+
319+ assert_receive { :fake_mailgun , % { params: params } }
320+
321+ # Supported option should be included
322+ assert params [ "o:tracking" ] == "yes"
323+
324+ # Unsupported options should be ignored
325+ refute Map . has_key? ( params , "o:unsupported-option" )
326+ refute Map . has_key? ( params , "o:invalid" )
327+ end
328+
329+ test "deliver/2 works with all allowed o: options" do
330+ email =
331+ [ from: "from@foo.com" , subject: "My Subject" , text_body: "TEXT BODY" , html_body: "HTML BODY" ]
332+ |> new_email ( )
333+ |> Email . put_private ( :"o:tag" , [ "tag1" , "tag2" ] )
334+ |> Email . put_private ( :"o:deliverytime" , "Wed, 15 Nov 2023 09:30:00 +0000" )
335+ |> Email . put_private ( :"o:tracking-opens" , "yes" )
336+ |> Email . put_private ( :"o:require-tls" , "true" )
337+ |> Email . put_private ( :"o:skip-verification" , "false" )
338+ |> Email . put_private ( :"o:sending-ip" , "192.168.1.1" )
339+ |> Email . put_private ( :"o:sending-ip-pool" , "pool-123" )
340+ |> Email . put_private ( :"o:tracking-pixel-location-top" , "yes" )
341+ |> Email . put_private ( :"o:secondary-dkim" , "example.com/s1" )
342+ |> Email . put_private ( :"o:secondary-dkim-public" , "public.com/s1" )
343+
344+ MailgunAdapter . deliver ( email , @ config )
345+
346+ assert_receive { :fake_mailgun , % { params: params } }
347+
348+ assert params [ "o:tag" ] == [ "tag1" , "tag2" ]
349+ assert params [ "o:deliverytime" ] == "Wed, 15 Nov 2023 09:30:00 +0000"
350+ assert params [ "o:tracking-opens" ] == "yes"
351+ assert params [ "o:require-tls" ] == "true"
352+ assert params [ "o:skip-verification" ] == "false"
353+ assert params [ "o:sending-ip" ] == "192.168.1.1"
354+ assert params [ "o:sending-ip-pool" ] == "pool-123"
355+ assert params [ "o:tracking-pixel-location-top" ] == "yes"
356+ assert params [ "o:secondary-dkim" ] == "example.com/s1"
357+ assert params [ "o:secondary-dkim-public" ] == "public.com/s1"
358+ end
359+
290360 test "returns an error if the response is not a success" do
291361 email = new_email ( from: "INVALID_EMAIL" )
292362
0 commit comments