@@ -709,9 +709,7 @@ def test_local_scheduled_payload(self):
709709 sched = ua .ScheduledPush (None )
710710 sched .push = p
711711 sched .name = "a schedule in device local time"
712- sched .schedule = ua .local_scheduled_time (
713- datetime .datetime (2015 , 1 , 1 , 12 , 0 , 0 )
714- )
712+ sched .schedule = ua .local_scheduled_time (datetime .datetime (2015 , 1 , 1 , 12 , 0 , 0 ))
715713
716714 self .assertEqual (
717715 sched .payload ,
@@ -751,6 +749,50 @@ def test_push_success(self):
751749 pr = push .send ()
752750 self .assertEqual (pr .push_ids , ["0492662a-1b52-4343-a1f9-c6b0c72931c0" ])
753751
752+ def test_push_with_message_only_no_notification (self ):
753+ """Test that sending a push with only a message (no notification) works correctly."""
754+ with mock .patch .object (ua .Airship , "_request" ) as mock_request :
755+ response = requests .Response ()
756+ response ._content = json .dumps (
757+ {
758+ "ok" : True ,
759+ "operation_id" : "780f6697-6b4e-49ea-ac91-b5c184516a15" ,
760+ "push_ids" : ["0b4b5180-b990-11f0-a452-000a1acef8dc" ],
761+ "message_ids" : ["C0tRgLmQEfCkUgAKGs743A" ],
762+ "content_urls" : [],
763+ "localized_ids" : [],
764+ }
765+ ).encode ("utf-8" )
766+ response .status_code = 202
767+ mock_request .return_value = response
768+
769+ airship = ua .Airship (TEST_KEY , TEST_SECRET )
770+ push = ua .Push (airship )
771+ push .audience = ua .named_user ("123abc" )
772+ push .device_types = ua .device_types ("ios" )
773+ push .message = ua .message (
774+ "Hello" ,
775+ "Hello World" ,
776+ content_type = "plain/text" ,
777+ )
778+ # Verify the payload structure (notification should be omitted when None)
779+ self .assertEqual (
780+ push .payload ,
781+ {
782+ "audience" : {"named_user" : "123abc" },
783+ "device_types" : ["ios" ],
784+ "message" : {
785+ "title" : "Hello" ,
786+ "body" : "Hello World" ,
787+ "content_type" : "plain/text" ,
788+ },
789+ },
790+ )
791+ # This should not raise a TypeError
792+ pr = push .send ()
793+ self .assertEqual (pr .push_ids , ["0b4b5180-b990-11f0-a452-000a1acef8dc" ])
794+ self .assertEqual (pr .payload .get ("message_ids" ), ["C0tRgLmQEfCkUgAKGs743A" ])
795+
754796 def test_schedule_success (self ):
755797 with mock .patch .object (ua .Airship , "_request" ) as mock_request :
756798 response = requests .Response ()
@@ -803,9 +845,7 @@ def test_scheduled_template(self):
803845 sched .schedule = ua .scheduled_time (datetime .datetime .now ())
804846
805847 template_push = ua .TemplatePush (airship )
806- template_push .audience = ua .ios_channel (
807- "780ba0c5-45be-4f29-befa-39135cb05b59"
808- )
848+ template_push .audience = ua .ios_channel ("780ba0c5-45be-4f29-befa-39135cb05b59" )
809849 template_push .device_types = ua .device_types ("ios" )
810850 template_push .merge_data = ua .merge_data (
811851 template_id = "780ba0c5-45be-4f29-befa-39135cb05b59" ,
@@ -880,8 +920,7 @@ def test_schedule_from_url(self):
880920 mock_request .return_value = response
881921
882922 url = (
883- "https://go.urbanairship.com/api/schedules/"
884- "0492662a-1b52-4343-a1f9-c6b0c72931c0"
923+ "https://go.urbanairship.com/api/schedules/" "0492662a-1b52-4343-a1f9-c6b0c72931c0"
885924 )
886925
887926 airship = ua .Airship (TEST_KEY , TEST_SECRET )
@@ -902,8 +941,7 @@ def test_cancel(self):
902941 mock_request .return_value = response
903942
904943 url = (
905- "https://go.urbanairship.com/api/schedules/"
906- "0492662a-1b52-4343-a1f9-c6b0c72931c0"
944+ "https://go.urbanairship.com/api/schedules/" "0492662a-1b52-4343-a1f9-c6b0c72931c0"
907945 )
908946 sched .url = url
909947
@@ -917,8 +955,7 @@ def test_update_schedule(self):
917955
918956 with mock .patch .object (ua .Airship , "_request" ) as mock_request :
919957 url = (
920- "https://go.urbanairship.com/api/schedules/"
921- "0492662a-1b52-4343-a1f9-c6b0c72931c0"
958+ "https://go.urbanairship.com/api/schedules/" "0492662a-1b52-4343-a1f9-c6b0c72931c0"
922959 )
923960
924961 response = requests .Response ()
@@ -947,8 +984,12 @@ def test_update_schedule(self):
947984 sched .update ()
948985
949986 def test_schedules_listing (self ):
950- self .url1 = "https://go.urbanairship.com/api/schedules/16153636-4434-441f-bad4-86ab0f1778bc"
951- self .url2 = "https://go.urbanairship.com/api/schedules/ee03b71b-5b88-4b87-93cf-2d9dc8b87e7c"
987+ self .url1 = (
988+ "https://go.urbanairship.com/api/schedules/16153636-4434-441f-bad4-86ab0f1778bc"
989+ )
990+ self .url2 = (
991+ "https://go.urbanairship.com/api/schedules/ee03b71b-5b88-4b87-93cf-2d9dc8b87e7c"
992+ )
952993
953994 with mock .patch .object (ua .Airship , "_request" ) as mock_request :
954995 response = requests .Response ()
0 commit comments