Stats: Add stats for the % of contributors that are active.

This commit is contained in:
Ian Dunn 2022-08-18 15:09:03 -07:00
parent 0be2f859f9
commit 5f1d091185
4 changed files with 149 additions and 13 deletions

View file

@ -32,11 +32,33 @@ function database_setup_before_class( WP_UnitTest_Factory $factory ) : array {
$fixtures['users']['jane'] = $factory->user->create_and_get( array(
'user_login' => 'jane',
'user_email' => 'jane@example.org',
'meta_input' => array(
'last_logged_in' => date( 'Y-m-d H:i:s', strtotime( '95 days ago' ) )
)
) );
$fixtures['users']['ashish'] = $factory->user->create_and_get( array(
'user_login' => 'ashish',
'user_email' => 'ashish@example.org',
'meta_input' => array(
'last_logged_in' => date( 'Y-m-d H:i:s', strtotime( '2 hours ago' ) )
)
) );
$fixtures['users']['andrea'] = $factory->user->create_and_get( array(
'user_login' => 'andrea',
'user_email' => 'andrea@example.org',
'meta_input' => array(
'last_logged_in' => date( 'Y-m-d H:i:s', strtotime( '1 week ago' ) )
)
) );
$fixtures['users']['caleb'] = $factory->user->create_and_get( array(
'user_login' => 'caleb',
'user_email' => 'caleb@example.org',
'meta_input' => array(
'last_logged_in' => date( 'Y-m-d H:i:s', strtotime( '4 months ago' ) )
)
) );
// Pages
@ -72,7 +94,7 @@ function database_setup_before_class( WP_UnitTest_Factory $factory ) : array {
*
* Call in `set_up()`.
*/
function database_set_up( int $jane_id, int $ashish_id ) : void {
function database_set_up( array $user_ids ) : void {
global $wpdb;
$wpdb->query( 'TRUNCATE TABLE `bpmain_bp_xprofile_data` ' );
@ -84,11 +106,19 @@ function database_set_up( int $jane_id, int $ashish_id ) : void {
(NULL, 29, %d, '40', '2019-12-02 10:00:00' ),
(NULL, 30, %d, 'a:1:{i:0;s:9:\"Core Team\";}', '2019-12-03 11:00:00' ),
(NULL, 29, %d, '35', '2019-12-02 10:00:00' ),
(NULL, 30, %d, 'a:1:{i:0;s:18:\"Documentation Team\";}', '2019-12-03 11:00:00' )",
$jane_id,
$jane_id,
$ashish_id,
$ashish_id
(NULL, 30, %d, 'a:1:{i:0;s:18:\"Documentation Team\";}', '2019-12-03 11:00:00' ),
(NULL, 29, %d, '7', '2019-12-02 10:00:00' ),
(NULL, 30, %d, 'a:1:{i:0;s:14:\"Polyglots Team\";}', '2019-12-03 11:00:00' ),
(NULL, 29, %d, '4', '2019-12-02 10:00:00' ),
(NULL, 30, %d, 'a:1:{i:0;s:9:\"Meta Team\";}', '2019-12-03 11:00:00' )",
$user_ids[0],
$user_ids[0],
$user_ids[1],
$user_ids[1],
$user_ids[2],
$user_ids[2],
$user_ids[3],
$user_ids[3]
) );
}

View file

@ -36,7 +36,7 @@ class Test_Contributor extends WP_UnitTestCase {
*/
public function set_up() {
parent::set_up();
TestHelpers\database_set_up( self::$users['jane']->ID, self::$users['ashish']->ID );
TestHelpers\database_set_up( array_values( wp_list_pluck( self::$users, 'ID' ) ) );
reset_phpmailer_instance();
}

View file

@ -0,0 +1,89 @@
<?php
use function WordPressDotOrg\FiveForTheFuture\Stats\{ get_snapshot_data };
use WordPressDotOrg\FiveForTheFuture\{ Contributor };
use WordPressDotOrg\FiveForTheFuture\Tests\Helpers as TestHelpers;
defined( 'WPINC' ) || die();
/**
* @group stats
*/
class Test_Stats extends WP_UnitTestCase {
protected static $users;
protected static $pages;
protected static $pledges;
/**
* Run once when class loads.
*/
public static function set_up_before_class() {
parent::set_up_before_class();
$fixtures = TestHelpers\database_setup_before_class( self::factory() );
self::$users = $fixtures['users'];
self::$pages = $fixtures['pages'];
self::$pledges = $fixtures['pledges'];
}
/**
* Run before every test.
*/
public function set_up() {
parent::set_up();
TestHelpers\database_set_up( array_values( wp_list_pluck( self::$users, 'ID' ) ) );
}
/**
* Run once after all tests are finished.
*/
public static function tear_down_after_class() {
parent::tear_down_after_class();
TestHelpers\database_tear_down_after_class();
}
/**
* @covers ::get_snapshot_data
*/
public function test_get_snapshot() : void {
// Setup 2 company-sponsored contributors.
$jane = self::$users['jane'];
$ashish = self::$users['ashish'];
$tenup = self::$pledges['10up'];
$tenup_contributors = Contributor\add_pledge_contributors( $tenup->ID, array( $jane->user_login, $ashish->user_login ) );
$tenup_jane_id = $tenup_contributors[ $jane->user_login ];
$tenup_ashish_id = $tenup_contributors[ $ashish->user_login ];
wp_update_post( array(
'ID' => $tenup_jane_id,
'post_status' => 'publish',
) );
wp_update_post( array(
'ID' => $tenup_ashish_id,
'post_status' => 'publish',
) );
$expected = array(
'company_sponsored_hours' => 75,
'self_sponsored_hours' => 11,
'team_company_sponsored_contributors' => array(
'Core Team' => 1,
'Documentation Team' => 1,
),
'team_self_sponsored_contributors' => array(
'Meta Team' => 1,
'Polyglots Team' => 1,
),
'companies' => 2,
'company_sponsored_contributors' => 2,
'self_sponsored_contributors' => 2,
'self_sponsored_contributor_activity' => 50.0,
'company_sponsored_contributor_activity' => 50.0,
);
$this->assertSame( $expected, get_snapshot_data() );
}
}