@@ -982,6 +982,145 @@ public function test_illegal_user_logins_single( $user_login ) {
982982 $ this ->assertInstanceOf ( 'WP_User ' , $ user );
983983 }
984984
985+ /**
986+ * @ticket 61175
987+ * @covers ::wp_insert_user
988+ */
989+ public function test_wp_insert_user_with_null () {
990+ // Note: $this->expectWarning() is deprecated and will be removed in PHPUnit 10.
991+ $ warnings = array ();
992+ set_error_handler (
993+ static function ( int $ errno , string $ errstr ) use ( &$ warnings ) {
994+ $ warnings [] = compact ( 'errno ' , 'errstr ' );
995+ return true ;
996+ },
997+ E_USER_WARNING
998+ );
999+ $ user = wp_insert_user ( null );
1000+ restore_error_handler ();
1001+
1002+ $ this ->assertCount ( 1 , $ warnings , 'Expected one warning. ' );
1003+ $ this ->assertWPError ( $ user );
1004+ $ this ->assertSame ( 'empty_user_login ' , $ user ->get_error_code () );
1005+ }
1006+
1007+ /**
1008+ * @ticket 61175
1009+ * @covers ::wp_insert_user
1010+ */
1011+ public function test_wp_insert_user_with_stdclass () {
1012+ $ data = array (
1013+ 'user_login ' => 'new-admin ' ,
1014+ 'user_pass ' => 'better-password ' ,
1015+ );
1016+ $ user_id = wp_insert_user ( (object ) $ data );
1017+ $ this ->assertIsInt ( $ user_id , 'Expected user to be created. ' );
1018+ $ user = new WP_User ( $ user_id );
1019+ $ this ->assertSame ( $ data ['user_login ' ], $ user ->user_login );
1020+ }
1021+
1022+ /**
1023+ * @ticket 61175
1024+ * @covers ::wp_insert_user
1025+ */
1026+ public function test_wp_insert_user_with_wp_user () {
1027+ $ username = 'new-admin ' ;
1028+ $ user = new WP_User ();
1029+ $ user ->user_login = $ username ;
1030+ $ user ->user_pass = 'better-password ' ;
1031+
1032+ $ user_id = wp_insert_user ( $ user );
1033+ $ this ->assertIsInt ( $ user_id , 'Expected user to be created. ' );
1034+ $ user = new WP_User ( $ user_id );
1035+ $ this ->assertSame ( $ username , $ user ->user_login );
1036+ }
1037+
1038+ /**
1039+ * @ticket 61175
1040+ * @covers ::wp_insert_user
1041+ */
1042+ public function test_wp_insert_user_with_traversable () {
1043+ $ internal_data = array (
1044+ 'user_login ' => 'new-admin ' ,
1045+ 'user_pass ' => 'better-password ' ,
1046+ );
1047+
1048+ $ array_access_user = new class ( $ internal_data ) implements ArrayAccess, IteratorAggregate {
1049+ private array $ data ;
1050+
1051+ public function __construct ( array $ data ) {
1052+ $ this ->data = $ data ;
1053+ }
1054+
1055+ public function offsetExists ( $ offset ): bool {
1056+ return isset ( $ this ->data [ $ offset ] );
1057+ }
1058+
1059+ #[\ReturnTypeWillChange]
1060+ public function offsetGet ( $ offset ) {
1061+ return $ this ->data [ $ offset ];
1062+ }
1063+
1064+ public function offsetSet ( $ offset , $ value ): void {
1065+ $ this ->data [ $ offset ] = $ value ;
1066+ }
1067+
1068+ public function offsetUnset ( $ offset ): void {
1069+ unset( $ this ->data [ $ offset ] );
1070+ }
1071+
1072+ public function getIterator (): ArrayIterator {
1073+ return new ArrayIterator ( $ this ->data );
1074+ }
1075+ };
1076+
1077+ $ user_id = wp_insert_user ( $ array_access_user );
1078+ $ this ->assertIsInt ( $ user_id , 'Expected user to be created. ' );
1079+ $ user = new WP_User ( $ user_id );
1080+ $ this ->assertSame ( $ internal_data ['user_login ' ], $ user ->user_login );
1081+ }
1082+
1083+ /**
1084+ * @ticket 61175
1085+ * @covers ::wp_insert_user
1086+ */
1087+ public function test_wp_insert_user_with_only_array_access () {
1088+ $ internal_data = array (
1089+ 'user_login ' => 'new-admin ' ,
1090+ 'user_pass ' => 'better-password ' ,
1091+ );
1092+
1093+ $ array_access_user = new class ( $ internal_data ) implements ArrayAccess {
1094+ private array $ data ;
1095+
1096+ public function __construct ( array $ data ) {
1097+ $ this ->data = $ data ;
1098+ }
1099+
1100+ public function offsetExists ( $ offset ): bool {
1101+ return isset ( $ this ->data [ $ offset ] );
1102+ }
1103+
1104+ #[\ReturnTypeWillChange]
1105+ public function offsetGet ( $ offset ) {
1106+ return $ this ->data [ $ offset ];
1107+ }
1108+
1109+ public function offsetSet ( $ offset , $ value ): void {
1110+ $ this ->data [ $ offset ] = $ value ;
1111+ }
1112+
1113+ public function offsetUnset ( $ offset ): void {
1114+ unset( $ this ->data [ $ offset ] );
1115+ }
1116+ };
1117+
1118+ $ user_id = wp_insert_user ( $ array_access_user );
1119+ $ this ->assertIsInt ( $ user_id , 'Expected user to be created. ' );
1120+ $ user = new WP_User ( $ user_id );
1121+ $ this ->assertSame ( $ internal_data ['user_login ' ], $ user ->user_login );
1122+ }
1123+
9851124 /**
9861125 * @ticket 27317
9871126 * @dataProvider data_illegal_user_logins
0 commit comments