@@ -1109,6 +1109,122 @@ public function test_wp_new_comment_notify_postauthor_should_not_send_email_when
11091109 $ this ->assertFalse ( $ sent );
11101110 }
11111111
1112+ /**
1113+ * @ticket 64217
1114+ *
1115+ * @covers ::wp_new_comment_notify_postauthor
1116+ */
1117+ public function test_wp_new_comment_notify_postauthor_filter_should_receive_false_for_unapproved_comment (): void {
1118+ $ c = self ::factory ()->comment ->create (
1119+ array (
1120+ 'comment_post_ID ' => self ::$ post_id ,
1121+ 'comment_approved ' => '0 ' ,
1122+ )
1123+ );
1124+ $ this ->assertIsInt ( $ c );
1125+
1126+ update_option ( 'comments_notify ' , 1 );
1127+
1128+ $ filter = new MockAction ();
1129+ add_filter ( 'notify_post_author ' , array ( $ filter , 'filter ' ) );
1130+
1131+ $ sent = wp_new_comment_notify_postauthor ( $ c );
1132+
1133+ $ this ->assertSame ( 1 , $ filter ->get_call_count () );
1134+ $ args = array_first ( $ filter ->get_args () );
1135+ $ this ->assertFalse ( $ args [0 ] ?? null , 'The filter should receive a default of false for an unapproved comment. ' );
1136+ $ this ->assertFalse ( $ sent , 'No notification should be sent for an unapproved comment by default. ' );
1137+ }
1138+
1139+ /**
1140+ * @ticket 64217
1141+ *
1142+ * @covers ::wp_new_comment_notify_postauthor
1143+ */
1144+ public function test_wp_new_comment_notify_postauthor_filter_should_override_unapproved_comment (): void {
1145+ $ c = self ::factory ()->comment ->create (
1146+ array (
1147+ 'comment_post_ID ' => self ::$ post_id ,
1148+ 'comment_approved ' => '0 ' ,
1149+ )
1150+ );
1151+ $ this ->assertIsInt ( $ c );
1152+
1153+ add_filter ( 'notify_post_author ' , '__return_true ' );
1154+
1155+ $ sent = wp_new_comment_notify_postauthor ( $ c );
1156+
1157+ $ this ->assertTrue ( $ sent , 'The notify_post_author filter should be able to force a notification for an unapproved comment. ' );
1158+ }
1159+
1160+ /**
1161+ * @ticket 64217
1162+ *
1163+ * @covers ::wp_new_comment_notify_postauthor
1164+ */
1165+ public function test_wp_new_comment_notify_postauthor_should_not_send_email_for_invalid_comment (): void {
1166+ $ filter = new MockAction ();
1167+ add_filter ( 'notify_post_author ' , array ( $ filter , 'filter ' ) );
1168+
1169+ // An empty ID such as 0 would fall back to the global comment in get_comment().
1170+ $ sent = wp_new_comment_notify_postauthor ( PHP_INT_MAX );
1171+
1172+ $ this ->assertFalse ( $ sent , 'No notification should be sent for an invalid comment ID. ' );
1173+ $ this ->assertSame ( array (), $ filter ->get_events (), 'The notify_post_author filter should not fire for an invalid comment ID. ' );
1174+ }
1175+
1176+ /**
1177+ * @ticket 64217
1178+ *
1179+ * @covers ::wp_new_comment_notify_postauthor
1180+ */
1181+ public function test_wp_new_comment_notify_postauthor_filter_should_receive_truthy_default_for_unapproved_note (): void {
1182+ $ c = self ::factory ()->comment ->create (
1183+ array (
1184+ 'comment_post_ID ' => self ::$ post_id ,
1185+ 'comment_type ' => 'note ' ,
1186+ 'comment_approved ' => '0 ' ,
1187+ )
1188+ );
1189+ $ this ->assertIsInt ( $ c );
1190+
1191+ update_option ( 'wp_notes_notify ' , 1 );
1192+
1193+ $ filter = new MockAction ();
1194+ add_filter ( 'notify_post_author ' , array ( $ filter , 'filter ' ) );
1195+
1196+ $ sent = wp_new_comment_notify_postauthor ( $ c );
1197+
1198+ $ this ->assertTrue ( $ sent , 'The notification comment should have been sent. ' );
1199+ $ args = array_first ( $ filter ->get_args () );
1200+ $ this ->assertTrue ( (bool ) ( $ args [0 ] ?? null ), 'The filter should receive a truthy default for an unapproved note. ' );
1201+ }
1202+
1203+ /**
1204+ * @ticket 64217
1205+ *
1206+ * @covers ::wp_new_comment_notify_postauthor
1207+ */
1208+ public function test_wp_new_comment_notify_postauthor_filter_should_receive_option_value_for_approved_comment (): void {
1209+ $ c = self ::factory ()->comment ->create (
1210+ array (
1211+ 'comment_post_ID ' => self ::$ post_id ,
1212+ )
1213+ );
1214+ $ this ->assertIsInt ( $ c );
1215+
1216+ update_option ( 'comments_notify ' , 0 );
1217+
1218+ $ filter = new MockAction ();
1219+ add_filter ( 'notify_post_author ' , array ( $ filter , 'filter ' ) );
1220+
1221+ $ sent = wp_new_comment_notify_postauthor ( $ c );
1222+
1223+ $ args = array_first ( $ filter ->get_args () );
1224+ $ this ->assertFalse ( (bool ) ( $ args [0 ] ?? null ), 'The filter should receive the comments_notify option value as the default for an approved comment. ' );
1225+ $ this ->assertFalse ( $ sent , 'No notification should be sent for an approved comment when comments_notify is disabled. ' );
1226+ }
1227+
11121228 /**
11131229 * @ticket 43805
11141230 *
0 commit comments