Skip to content

Commit abfee72

Browse files
authored
Merge pull request #1151 from xwp/tests/users-connector
Users connector class test implemented.
2 parents c6e834e + 96d03b9 commit abfee72

File tree

3 files changed

+264
-6
lines changed

3 files changed

+264
-6
lines changed

connectors/class-connector-user-switching.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22
/**
3-
* Connector for User-Switching
3+
* Connector for the User-Switching plugin
44
*
55
* @package WP_Stream
66
*/

connectors/class-connector-users.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class Connector_Users extends Connector {
4141
'delete_user',
4242
'deleted_user',
4343
'set_user_role',
44+
'set_current_user',
4445
);
4546

4647
/**
@@ -242,7 +243,7 @@ public function callback_password_reset( $user ) {
242243
/* translators: %s: a user display name (e.g. "Jane Doe") */
243244
__( '%s\'s password was reset', 'stream' ),
244245
array(
245-
'email' => $user->display_name,
246+
'display_name' => $user->display_name,
246247
),
247248
$user->ID,
248249
'profiles',
@@ -313,7 +314,8 @@ public function callback_set_logged_in_cookie( $logged_in_cookie, $expire, $expi
313314
* @action clear_auth_cookie
314315
*/
315316
public function callback_clear_auth_cookie() {
316-
$user = wp_get_current_user();
317+
$user_id = get_current_user_id();
318+
$user = get_user_by( 'ID', $user_id );
317319

318320
// For some reason, incognito mode calls clear_auth_cookie on failed login attempts.
319321
if ( empty( $user ) || ! $user->exists() ) {
@@ -323,9 +325,7 @@ public function callback_clear_auth_cookie() {
323325
$this->log(
324326
/* translators: %s: a user display name (e.g. "Jane Doe") */
325327
__( '%s logged out', 'stream' ),
326-
array(
327-
'display_name' => $user->display_name,
328-
),
328+
array( 'display_name' => $user->display_name ),
329329
$user->ID,
330330
'sessions',
331331
'logout',
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,258 @@
1+
<?php
2+
/**
3+
* Tests for Users connector class callbacks.
4+
*
5+
* @package WP_Stream
6+
*/
7+
namespace WP_Stream;
8+
9+
class Test_WP_Stream_Connector_Users extends WP_StreamTestCase {
10+
11+
/**
12+
* Runs before each test
13+
*/
14+
public function setUp() {
15+
parent::setUp();
16+
17+
// Make partial of Connector_Users class, with mocked "log" function.
18+
$this->mock = $this->getMockBuilder( Connector_Users::class )
19+
->setMethods( array( 'log' ) )
20+
->getMock();
21+
22+
$this->mock->register();
23+
}
24+
25+
public function test_callback_user_register() {
26+
// Expected log calls.
27+
$this->mock->expects( $this->atLeastOnce() )
28+
->method( 'log' )
29+
->withConsecutive(
30+
array(
31+
$this->equalTo( esc_html__( 'New user registration', 'stream' ) ),
32+
$this->equalTo(
33+
array(
34+
'display_name' => 'TestGuy',
35+
'roles' => 'Subscriber',
36+
)
37+
),
38+
$this->greaterThan( 0 ),
39+
$this->equalTo( 'users' ),
40+
$this->equalTo( 'created' ),
41+
$this->greaterThan( 0 )
42+
),
43+
array(
44+
$this->equalTo(
45+
_x(
46+
'New user account created for %1$s (%2$s)',
47+
'1: User display name, 2: User role',
48+
'stream'
49+
)
50+
),
51+
$this->equalTo(
52+
array(
53+
'display_name' => 'TestGuy2',
54+
'roles' => 'Subscriber',
55+
)
56+
),
57+
$this->greaterThan( 0 ),
58+
$this->equalTo( 'users' ),
59+
$this->equalTo( 'created' ),
60+
$this->greaterThan( 0 )
61+
)
62+
);
63+
64+
// Do stuff.
65+
$user_id = self::factory()->user->create( array( 'display_name' => 'TestGuy' ) );
66+
wp_set_current_user( $user_id );
67+
self::factory()->user->create( array( 'display_name' => 'TestGuy2' ) );
68+
69+
// Check callback test action.
70+
$this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_user_register' ) );
71+
}
72+
73+
public function test_callback_password_reset() {
74+
// Create user.
75+
$user_id = self::factory()->user->create( array( 'display_name' => 'TestGuy' ) );
76+
wp_set_current_user( $user_id );
77+
$user = get_user_by( 'id', $user_id );
78+
79+
// Expected log calls.
80+
$this->mock->expects( $this->once() )
81+
->method( 'log' )
82+
->withConsecutive(
83+
array(
84+
$this->equalTo( __( '%s\'s password was reset', 'stream' ) ),
85+
$this->equalTo( array( 'display_name' => 'TestGuy' ) ),
86+
$this->equalTo( $user_id ),
87+
$this->equalTo( 'profiles' ),
88+
$this->equalTo( 'password-reset' ),
89+
$this->equalTo( $user_id )
90+
)
91+
);
92+
93+
// Do stuff.
94+
$new_pass = 'blahblahblah';
95+
reset_password( $user, $new_pass );
96+
97+
// Check callback test action.
98+
$this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_password_reset' ) );
99+
}
100+
101+
public function test_callback_retrieve_password_and_profile_update() {
102+
// Create user.
103+
$user_id = self::factory()->user->create( array( 'display_name' => 'TestGuy' ) );
104+
$user = get_user_by( 'id', $user_id );
105+
106+
// Expected log calls.
107+
$this->mock->expects( $this->atLeastOnce() )
108+
->method( 'log' )
109+
->withConsecutive(
110+
array(
111+
$this->equalTo( __( '%s\'s password was requested to be reset', 'stream' ) ),
112+
$this->equalTo( array( 'display_name' => 'TestGuy' ) ),
113+
$this->equalTo( $user_id ),
114+
$this->equalTo( 'sessions' ),
115+
$this->equalTo( 'forgot-password' ),
116+
$this->equalTo( $user_id )
117+
),
118+
array(
119+
$this->equalTo( __( '%s\'s profile was updated', 'stream' ) ),
120+
$this->equalTo( array( 'display_name' => 'TestGuy' ) ),
121+
$this->equalTo( $user_id ),
122+
$this->equalTo( 'profiles' ),
123+
$this->equalTo( 'updated' )
124+
)
125+
);
126+
127+
// Do stuff.
128+
get_password_reset_key( $user );
129+
130+
// Check callback test action.
131+
$this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_profile_update' ) );
132+
$this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_retrieve_password' ) );
133+
}
134+
135+
public function test_callback_set_logged_in_cookie() {
136+
// Create user.
137+
$user_id = self::factory()->user->create( array( 'display_name' => 'TestGuy' ) );
138+
139+
// Expected log calls.
140+
$this->mock->expects( $this->once() )
141+
->method( 'log' )
142+
->with(
143+
$this->equalTo( __( '%s logged in', 'stream' ) ),
144+
$this->equalTo( array( 'display_name' => 'TestGuy' ) ),
145+
$this->equalTo( $user_id ),
146+
$this->equalTo( 'sessions' ),
147+
$this->equalTo( 'login' ),
148+
$this->equalTo( $user_id )
149+
);
150+
151+
// Do stuff.
152+
wp_set_auth_cookie( $user_id );
153+
154+
// Check callback test action.
155+
$this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_set_logged_in_cookie' ) );
156+
}
157+
158+
public function test_callback_clear_auth_cookie() {
159+
// Create and authenticate user.
160+
$user_id = self::factory()->user->create( array( 'display_name' => 'TestGuy' ) );
161+
wp_set_current_user( $user_id );
162+
wp_set_auth_cookie( $user_id );
163+
164+
// Manually trigger the action to execute callback.
165+
add_filter( 'send_auth_cookies', '__return_false' );
166+
wp_clear_auth_cookie();
167+
168+
// Check callback test action.
169+
$this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_clear_auth_cookie' ) );
170+
}
171+
172+
public function test_callback_deleted_user() {
173+
// Create Users.
174+
$user_id = self::factory()->user->create( array( 'display_name' => 'TestGuy' ));
175+
$user = get_user_by( 'ID', $user_id );
176+
177+
// Expected log calls.
178+
$this->mock->expects( $this->exactly( 2 ) )
179+
->method( 'log' )
180+
->withConsecutive(
181+
array(
182+
$this->equalTo(
183+
_x(
184+
'%1$s\'s account was deleted (%2$s)',
185+
'1: User display name, 2: User roles',
186+
'stream'
187+
)
188+
),
189+
$this->equalTo(
190+
array(
191+
'display_name' => 'TestGuy',
192+
'roles' => 'Subscriber',
193+
)
194+
),
195+
$this->equalTo( $user_id ),
196+
$this->equalTo( 'users' ),
197+
$this->equalTo( 'deleted' ),
198+
$this->equalTo( 0 )
199+
),
200+
array(
201+
$this->equalTo( esc_html__( 'User account #%d was deleted', 'stream' ) ),
202+
$this->equalTo(
203+
array(
204+
'display_name' => $user_id,
205+
'roles' => '',
206+
)
207+
),
208+
$this->equalTo( $user_id ),
209+
$this->equalTo( 'users' ),
210+
$this->equalTo( 'deleted' ),
211+
$this->equalTo( 0 )
212+
)
213+
);
214+
215+
// Delete user and run action to simulate event and trigger callback.
216+
wp_delete_user( $user_id );
217+
do_action( 'deleted_user', $user_id, null, $user );
218+
219+
// Check callback test action.
220+
$this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_delete_user' ) );
221+
$this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_deleted_user' ) );
222+
}
223+
224+
public function test_callback_set_user_role() {
225+
// Create user.
226+
$user_id = self::factory()->user->create( array( 'display_name' => 'TestGuy' ));
227+
$user = get_user_by( 'id', $user_id );
228+
229+
// Expected log calls.
230+
$this->mock->expects( $this->once() )
231+
->method( 'log' )
232+
->with(
233+
$this->equalTo(
234+
_x(
235+
'%1$s\'s role was changed from %2$s to %3$s',
236+
'1: User display name, 2: Old role, 3: New role',
237+
'stream'
238+
)
239+
),
240+
$this->equalTo(
241+
array(
242+
'display_name' => 'TestGuy',
243+
'old_role' => 'Subscriber',
244+
'new_role' => 'Editor',
245+
)
246+
),
247+
$this->equalTo( $user_id ),
248+
$this->equalTo( 'profiles' ),
249+
$this->equalTo( 'updated' )
250+
);
251+
252+
// Do stuff.
253+
$user->set_role( 'editor' );
254+
255+
// Check callback test action.
256+
$this->assertFalse( 0 === did_action( $this->action_prefix . 'callback_set_user_role' ) );
257+
}
258+
}

0 commit comments

Comments
 (0)