userExpLevel test: use a single time()
authorStephane Bisson <sbisson@wikimedia.org>
Mon, 24 Apr 2017 12:54:10 +0000 (08:54 -0400)
committerStephane Bisson <sbisson@wikimedia.org>
Mon, 24 Apr 2017 12:54:10 +0000 (08:54 -0400)
Capture `$now = time()` only once and propagate
the value in the test and production code.

Bug: T161041
Change-Id: Ib2887a81a4e8015e3c80ef89d48181c7e5e1d406

includes/specialpage/ChangesListSpecialPage.php
tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php

index 3aafc94..870f24a 100644 (file)
@@ -1211,7 +1211,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
         * @param array $selectedExpLevels The allowed active values, sorted
         */
        public function filterOnUserExperienceLevel( $specialPageClassName, $context, $dbr,
-               &$tables, &$fields, &$conds, &$query_options, &$join_conds, $selectedExpLevels ) {
+               &$tables, &$fields, &$conds, &$query_options, &$join_conds, $selectedExpLevels, $now = 0 ) {
 
                global $wgLearnerEdits,
                        $wgExperiencedUserEdits,
@@ -1230,7 +1230,9 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                $tables[] = 'user';
                $join_conds['user'] = [ 'LEFT JOIN', 'rc_user = user_id' ];
 
-               $now = time();
+               if ( $now === 0 ) {
+                       $now = time();
+               }
                $secondsPerDay = 86400;
                $learnerCutoff = $now - $wgLearnerMemberSince * $secondsPerDay;
                $experiencedUserCutoff = $now - $wgExperiencedUserMemberSince * $secondsPerDay;
index b536c22..d8919cd 100644 (file)
@@ -396,6 +396,7 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
        }
 
        public function testFilterUserExpLevel() {
+               $now = time();
                $this->setMwGlobals( [
                        'wgLearnerEdits' => 10,
                        'wgLearnerMemberSince' => 4,
@@ -412,12 +413,12 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                        'Learner3' => [ 'edits' => 460, 'days' => 33 ],
                        'Learner4' => [ 'edits' => 525, 'days' => 28 ],
                        'Experienced1' => [ 'edits' => 538, 'days' => 33 ],
-               ] );
+               ], $now );
 
                // newcomers only
                $this->assertArrayEquals(
                        [ 'Newcomer1', 'Newcomer2', 'Newcomer3' ],
-                       $this->fetchUsers( [ 'newcomer' ] )
+                       $this->fetchUsers( [ 'newcomer' ], $now )
                );
 
                // newcomers and learner
@@ -426,7 +427,7 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                                'Newcomer1', 'Newcomer2', 'Newcomer3',
                                'Learner1', 'Learner2', 'Learner3', 'Learner4',
                        ],
-                       $this->fetchUsers( [ 'newcomer', 'learner' ] )
+                       $this->fetchUsers( [ 'newcomer', 'learner' ], $now )
                );
 
                // newcomers and more learner
@@ -435,19 +436,19 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                                'Newcomer1', 'Newcomer2', 'Newcomer3',
                                'Experienced1',
                        ],
-                       $this->fetchUsers( [ 'newcomer', 'experienced' ] )
+                       $this->fetchUsers( [ 'newcomer', 'experienced' ], $now )
                );
 
                // learner only
                $this->assertArrayEquals(
                        [ 'Learner1', 'Learner2', 'Learner3', 'Learner4' ],
-                       $this->fetchUsers( [ 'learner' ] )
+                       $this->fetchUsers( [ 'learner' ], $now )
                );
 
                // more experienced only
                $this->assertArrayEquals(
                        [ 'Experienced1' ],
-                       $this->fetchUsers( [ 'experienced' ] )
+                       $this->fetchUsers( [ 'experienced' ], $now )
                );
 
                // learner and more experienced
@@ -456,7 +457,7 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                                'Learner1', 'Learner2', 'Learner3', 'Learner4',
                                'Experienced1',
                        ],
-                       $this->fetchUsers( [ 'learner', 'experienced' ] ),
+                       $this->fetchUsers( [ 'learner', 'experienced' ], $now ),
                        'Learner and more experienced'
                );
 
@@ -469,25 +470,25 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                /*              'Learner1', 'Learner2', 'Learner3', 'Learner4', */
                /*              'Experienced1', */
                /*      ], */
-               /*      $this->fetchUsers( [ 'newcomer', 'learner', 'experienced' ] ) */
+               /*      $this->fetchUsers( [ 'newcomer', 'learner', 'experienced' ], $now ) */
                /* ); */
        }
 
-       private function createUsers( $specs ) {
+       private function createUsers( $specs, $now ) {
                $dbw = wfGetDB( DB_MASTER );
                foreach ( $specs as $name => $spec ) {
                        User::createNew(
                                $name,
                                [
                                        'editcount' => $spec['edits'],
-                                       'registration' => $dbw->timestamp( $this->daysAgo( $spec['days'] ) ),
+                                       'registration' => $dbw->timestamp( $this->daysAgo( $spec['days'], $now ) ),
                                        'email' => 'ut',
                                ]
                        );
                }
        }
 
-       private function fetchUsers( $filters ) {
+       private function fetchUsers( $filters, $now ) {
                $tables = [];
                $conds = [];
                $fields = [];
@@ -507,7 +508,8 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                                &$conds,
                                &$query_options,
                                &$join_conds,
-                               $filters
+                               $filters,
+                               $now
                        ]
                );
 
@@ -525,9 +527,9 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                return $usernames;
        }
 
-       private function daysAgo( $days ) {
+       private function daysAgo( $days, $now ) {
                $secondsPerDay = 86400;
-               return time() - $days * $secondsPerDay;
+               return $now - $days * $secondsPerDay;
        }
 
        public function testGetFilterGroupDefinitionFromLegacyCustomFilters() {