| | 899 | |
| | 900 | /** |
| | 901 | * @ticket 22212 |
| | 902 | */ |
| | 903 | public function test_get_single_role_by_user_query() { |
| | 904 | $this->factory->user->create_many( 2, array( |
| | 905 | 'role' => 'subscriber', |
| | 906 | ) ); |
| | 907 | |
| | 908 | $this->factory->user->create( array( |
| | 909 | 'role' => 'contributor', |
| | 910 | ) ); |
| | 911 | |
| | 912 | $wp_user_search = new WP_User_Query( array( 'role' => 'subscriber' ) ); |
| | 913 | $users = $wp_user_search->get_results(); |
| | 914 | |
| | 915 | $this->assertEquals( 2, count( $users ) ); |
| | 916 | } |
| | 917 | |
| | 918 | /** |
| | 919 | * @ticket 22212 |
| | 920 | */ |
| | 921 | public function test_get_multiple_roles_by_user_query() { |
| | 922 | $this->factory->user->create_many( 2, array( |
| | 923 | 'role' => 'subscriber', |
| | 924 | ) ); |
| | 925 | |
| | 926 | $this->factory->user->create_many( 3, array( |
| | 927 | 'role' => 'editor', |
| | 928 | ) ); |
| | 929 | |
| | 930 | $this->factory->user->create( array( |
| | 931 | 'role' => 'contributor', |
| | 932 | ) ); |
| | 933 | |
| | 934 | $wp_user_search = new WP_User_Query( array( 'role__in' => array( 'subscriber', 'editor' ) ) ); |
| | 935 | $users = $wp_user_search->get_results(); |
| | 936 | $this->assertEquals( 5, count( $users ) ); |
| | 937 | } |
| | 938 | |
| | 939 | /** |
| | 940 | * @ticket 22212 |
| | 941 | */ |
| | 942 | public function test_get_single_role_by_string() { |
| | 943 | $this->factory->user->create_many( 2, array( |
| | 944 | 'role' => 'subscriber', |
| | 945 | ) ); |
| | 946 | |
| | 947 | $this->factory->user->create( array( |
| | 948 | 'role' => 'contributor', |
| | 949 | ) ); |
| | 950 | |
| | 951 | $users = get_users( array( |
| | 952 | 'role' => 'subscriber', |
| | 953 | ) ); |
| | 954 | |
| | 955 | $this->assertEquals( 2, count( $users ) ); |
| | 956 | } |
| | 957 | |
| | 958 | /** |
| | 959 | * @ticket 22212 |
| | 960 | */ |
| | 961 | public function test_get_single_role_by_array() { |
| | 962 | $this->factory->user->create_many( 2, array( |
| | 963 | 'role' => 'subscriber', |
| | 964 | ) ); |
| | 965 | |
| | 966 | $this->factory->user->create( array( |
| | 967 | 'role' => 'contributor', |
| | 968 | ) ); |
| | 969 | |
| | 970 | $users = get_users( array( |
| | 971 | 'role' => array( 'subscriber' ), |
| | 972 | ) ); |
| | 973 | |
| | 974 | $this->assertEquals( 2, count( $users ) ); |
| | 975 | } |
| | 976 | |
| | 977 | /** |
| | 978 | * @ticket 22212 |
| | 979 | */ |
| | 980 | public function test_get_multiple_roles_should_only_match_users_who_have_each_role() { |
| | 981 | $subscribers = $this->factory->user->create_many( 2, array( |
| | 982 | 'role' => 'subscriber', |
| | 983 | ) ); |
| | 984 | |
| | 985 | $this->factory->user->create_many( 3, array( |
| | 986 | 'role' => 'editor', |
| | 987 | ) ); |
| | 988 | |
| | 989 | $this->factory->user->create_many( 2, array( |
| | 990 | 'role' => 'administrator', |
| | 991 | ) ); |
| | 992 | |
| | 993 | $users = new WP_User_Query( array( 'role' => array( 'subscriber', 'editor' ) ) ); |
| | 994 | $users = $users->get_results(); |
| | 995 | |
| | 996 | $this->assertEmpty( $users ); |
| | 997 | |
| | 998 | foreach ( $subscribers as $subscriber ) { |
| | 999 | $subscriber = get_user_by( 'ID', $subscriber ); |
| | 1000 | $subscriber->add_role( 'editor' ); |
| | 1001 | } |
| | 1002 | |
| | 1003 | $users = new WP_User_Query( array( 'role' => array( 'subscriber', 'editor' ) ) ); |
| | 1004 | $users = $users->get_results(); |
| | 1005 | |
| | 1006 | $this->assertEquals( 2, count( $users ) ); |
| | 1007 | |
| | 1008 | foreach ( $users as $user ) { |
| | 1009 | $this->assertInstanceOf( 'WP_User', $user ); |
| | 1010 | } |
| | 1011 | } |
| | 1012 | |
| | 1013 | /** |
| | 1014 | * @ticket 22212 |
| | 1015 | */ |
| | 1016 | public function test_get_multiple_roles_or() { |
| | 1017 | $this->factory->user->create_many( 2, array( |
| | 1018 | 'role' => 'subscriber', |
| | 1019 | ) ); |
| | 1020 | |
| | 1021 | $this->factory->user->create_many( 3, array( |
| | 1022 | 'role' => 'editor', |
| | 1023 | ) ); |
| | 1024 | |
| | 1025 | $this->factory->user->create_many( 2, array( |
| | 1026 | 'role' => 'administrator', |
| | 1027 | ) ); |
| | 1028 | |
| | 1029 | $this->factory->user->create_many( 1, array( |
| | 1030 | 'role' => 'contributor', |
| | 1031 | ) ); |
| | 1032 | |
| | 1033 | $users = new WP_User_Query( array( 'role__in' => array( 'subscriber', 'editor', 'administrator' ) ) ); |
| | 1034 | $users = $users->get_results(); |
| | 1035 | |
| | 1036 | // +1 for the default user created during installation. |
| | 1037 | $this->assertEquals( 8, count( $users ) ); |
| | 1038 | foreach ( $users as $user ) { |
| | 1039 | $this->assertInstanceOf( 'WP_User', $user ); |
| | 1040 | } |
| | 1041 | } |
| | 1042 | |
| | 1043 | /** |
| | 1044 | * @ticket 22212 |
| | 1045 | */ |
| | 1046 | public function test_get_multiple_roles_by_comma_separated_list() { |
| | 1047 | $subscribers = $this->factory->user->create_many( 2, array( |
| | 1048 | 'role' => 'subscriber', |
| | 1049 | ) ); |
| | 1050 | |
| | 1051 | $this->factory->user->create_many( 3, array( |
| | 1052 | 'role' => 'editor', |
| | 1053 | ) ); |
| | 1054 | |
| | 1055 | $users = get_users( array( |
| | 1056 | 'role' => 'subscriber, editor', |
| | 1057 | ) ); |
| | 1058 | |
| | 1059 | $this->assertEmpty( $users ); |
| | 1060 | |
| | 1061 | foreach ( $subscribers as $subscriber ) { |
| | 1062 | $subscriber = get_user_by( 'ID', $subscriber ); |
| | 1063 | $subscriber->add_role( 'editor' ); |
| | 1064 | } |
| | 1065 | |
| | 1066 | $users = get_users( array( |
| | 1067 | 'role' => 'subscriber, editor', |
| | 1068 | ) ); |
| | 1069 | |
| | 1070 | $this->assertEquals( 2, count( $users ) ); |
| | 1071 | } |
| | 1072 | |
| | 1073 | /** |
| | 1074 | * @ticket 22212 |
| | 1075 | */ |
| | 1076 | public function test_get_multiple_roles_with_meta() { |
| | 1077 | // Create administrator user + meta |
| | 1078 | $administrator_id = $this->factory->user->create( array( 'role' => 'administrator' ) ); |
| | 1079 | update_user_meta( $administrator_id, 'mk1', 1 ); |
| | 1080 | update_user_meta( $administrator_id, 'mk2', 1 ); |
| | 1081 | |
| | 1082 | // Create editor user + meta |
| | 1083 | $editor_id = $this->factory->user->create( array( 'role' => 'editor' ) ); |
| | 1084 | update_user_meta( $editor_id, 'mk1', 1 ); |
| | 1085 | update_user_meta( $editor_id, 'mk2', 2 ); |
| | 1086 | |
| | 1087 | // Create subscriber user + meta |
| | 1088 | $subscriber_id = $this->factory->user->create( array( 'role' => 'subscriber' ) ); |
| | 1089 | update_user_meta( $subscriber_id, 'mk1', 1 ); |
| | 1090 | update_user_meta( $subscriber_id, 'mk2', 1 ); |
| | 1091 | |
| | 1092 | // Create contributor user + meta |
| | 1093 | $contributor_id = $this->factory->user->create( array( 'role' => 'contributor' ) ); |
| | 1094 | update_user_meta( $contributor_id, 'mk1', 1 ); |
| | 1095 | update_user_meta( $contributor_id, 'mk2', 2 ); |
| | 1096 | |
| | 1097 | // Fetch users |
| | 1098 | $users = get_users( array( |
| | 1099 | 'role__in' => array( 'administrator', 'editor', 'subscriber' ), |
| | 1100 | 'meta_query' => array( |
| | 1101 | 'relation' => 'AND', |
| | 1102 | array( |
| | 1103 | 'key' => 'mk1', |
| | 1104 | 'value' => '1', |
| | 1105 | 'compare' => "=", |
| | 1106 | 'type' => 'numeric', |
| | 1107 | ), |
| | 1108 | array( |
| | 1109 | 'key' => 'mk2', |
| | 1110 | 'value' => '2', |
| | 1111 | 'compare' => "=", |
| | 1112 | 'type' => 'numeric', |
| | 1113 | ), |
| | 1114 | ), |
| | 1115 | ) ); |
| | 1116 | |
| | 1117 | // Check results |
| | 1118 | $this->assertEquals( 1, count( $users ) ); |
| | 1119 | $this->assertSame( $editor_id, (int) $users[0]->ID ); |
| | 1120 | } |
| | 1121 | |
| | 1122 | /** |
| | 1123 | * @ticket 22212 |
| | 1124 | */ |
| | 1125 | public function test_role_exclusion() { |
| | 1126 | $this->factory->user->create_many( 2, array( |
| | 1127 | 'role' => 'subscriber', |
| | 1128 | ) ); |
| | 1129 | |
| | 1130 | $this->factory->user->create_many( 3, array( |
| | 1131 | 'role' => 'editor', |
| | 1132 | ) ); |
| | 1133 | |
| | 1134 | $users = get_users( array( |
| | 1135 | 'role__not_in' => 'subscriber', |
| | 1136 | ) ); |
| | 1137 | |
| | 1138 | // +1 for the default user created during installation. |
| | 1139 | $this->assertEquals( 4, count( $users ) ); |
| | 1140 | |
| | 1141 | $users = get_users( array( |
| | 1142 | 'role__not_in' => 'editor', |
| | 1143 | ) ); |
| | 1144 | |
| | 1145 | // +1 for the default user created during installation. |
| | 1146 | $this->assertEquals( 3, count( $users ) ); |
| | 1147 | } |
| | 1148 | |
| | 1149 | /** |
| | 1150 | * @ticket 22212 |
| | 1151 | */ |
| | 1152 | public function test_role__in_role__not_in_combined() { |
| | 1153 | $subscribers = $this->factory->user->create_many( 2, array( |
| | 1154 | 'role' => 'subscriber', |
| | 1155 | ) ); |
| | 1156 | |
| | 1157 | $this->factory->user->create_many( 3, array( |
| | 1158 | 'role' => 'editor', |
| | 1159 | ) ); |
| | 1160 | |
| | 1161 | foreach ( $subscribers as $subscriber ) { |
| | 1162 | $subscriber = get_user_by( 'ID', $subscriber ); |
| | 1163 | $subscriber->add_role( 'editor' ); |
| | 1164 | } |
| | 1165 | |
| | 1166 | $users = get_users( array( |
| | 1167 | 'role__in' => 'editor', |
| | 1168 | ) ); |
| | 1169 | |
| | 1170 | $this->assertEquals( 5, count( $users ) ); |
| | 1171 | |
| | 1172 | $users = get_users( array( |
| | 1173 | 'role__in' => 'editor', |
| | 1174 | 'role__not_in' => 'subscriber', |
| | 1175 | ) ); |
| | 1176 | |
| | 1177 | $this->assertEquals( 3, count( $users ) ); |
| | 1178 | } |
| | 1179 | |
| | 1180 | /** |
| | 1181 | * @ticket 22212 |
| | 1182 | */ |
| | 1183 | public function test_role__not_in_role_combined() { |
| | 1184 | $subscribers = $this->factory->user->create_many( 2, array( |
| | 1185 | 'role' => 'subscriber', |
| | 1186 | ) ); |
| | 1187 | |
| | 1188 | $this->factory->user->create_many( 3, array( |
| | 1189 | 'role' => 'editor', |
| | 1190 | ) ); |
| | 1191 | |
| | 1192 | $subscriber = get_user_by( 'ID', $subscribers[0] ); |
| | 1193 | $subscriber->add_role( 'editor' ); |
| | 1194 | |
| | 1195 | $users = get_users( array( |
| | 1196 | 'role' => 'subscriber', |
| | 1197 | 'role__not_in' => array( 'editor' ), |
| | 1198 | ) ); |
| | 1199 | |
| | 1200 | $this->assertEquals( 1, count( $users ) ); |
| | 1201 | } |
| | 1202 | |
| | 1203 | /** |
| | 1204 | * @ticket 22212 |
| | 1205 | */ |
| | 1206 | public function test_role__not_in_user_without_role() { |
| | 1207 | $user_without_rule = $this->factory->user->get_object_by_id( $this->factory->user->create( array( |
| | 1208 | 'role' => 'subscriber', |
| | 1209 | ) ) ); |
| | 1210 | |
| | 1211 | $user_without_rule->remove_role( 'subscriber' ); |
| | 1212 | |
| | 1213 | $this->factory->user->create_many( 3, array( |
| | 1214 | 'role' => 'editor', |
| | 1215 | ) ); |
| | 1216 | |
| | 1217 | $users = get_users( array( |
| | 1218 | 'role__not_in' => 'subscriber', |
| | 1219 | ) ); |
| | 1220 | |
| | 1221 | // +1 for the default user created during installation. |
| | 1222 | $this->assertEquals( 5, count( $users ) ); |
| | 1223 | |
| | 1224 | $users = get_users( array( |
| | 1225 | 'role__not_in' => 'editor', |
| | 1226 | ) ); |
| | 1227 | |
| | 1228 | // +1 for the default user created during installation. |
| | 1229 | $this->assertEquals( 2, count( $users ) ); |
| | 1230 | } |
| | 1231 | |
| | 1232 | /** |
| | 1233 | * @ticket 22212 |
| | 1234 | */ |
| | 1235 | public function test_blog_id_should_restrict_by_blog_without_requiring_a_named_role() { |
| | 1236 | if ( ! is_multisite() ) { |
| | 1237 | $this->markTestSkipped( __METHOD__ . ' requires multisite.' ); |
| | 1238 | } |
| | 1239 | |
| | 1240 | $sites = $this->factory->blog->create_many( 2 ); |
| | 1241 | $users = $this->factory->user->create_many( 2 ); |
| | 1242 | |
| | 1243 | add_user_to_blog( $sites[0], $users[0], 'author' ); |
| | 1244 | add_user_to_blog( $sites[1], $users[1], 'author' ); |
| | 1245 | |
| | 1246 | $found = get_users( array( |
| | 1247 | 'blog_id' => $sites[1], |
| | 1248 | 'fields' => 'ID', |
| | 1249 | ) ); |
| | 1250 | |
| | 1251 | $this->assertEqualSets( array( $users[1] ), $found ); |
| | 1252 | } |