Capture `$now = time()` only once and propagate
the value in the test and production code.
Bug: T161041
Change-Id: Ib2887a81a4e8015e3c80ef89d48181c7e5e1d406
* @param array $selectedExpLevels The allowed active values, sorted
*/
public function filterOnUserExperienceLevel( $specialPageClassName, $context, $dbr,
* @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,
global $wgLearnerEdits,
$wgExperiencedUserEdits,
$tables[] = 'user';
$join_conds['user'] = [ 'LEFT JOIN', 'rc_user = user_id' ];
$tables[] = 'user';
$join_conds['user'] = [ 'LEFT JOIN', 'rc_user = user_id' ];
+ if ( $now === 0 ) {
+ $now = time();
+ }
$secondsPerDay = 86400;
$learnerCutoff = $now - $wgLearnerMemberSince * $secondsPerDay;
$experiencedUserCutoff = $now - $wgExperiencedUserMemberSince * $secondsPerDay;
$secondsPerDay = 86400;
$learnerCutoff = $now - $wgLearnerMemberSince * $secondsPerDay;
$experiencedUserCutoff = $now - $wgExperiencedUserMemberSince * $secondsPerDay;
}
public function testFilterUserExpLevel() {
}
public function testFilterUserExpLevel() {
$this->setMwGlobals( [
'wgLearnerEdits' => 10,
'wgLearnerMemberSince' => 4,
$this->setMwGlobals( [
'wgLearnerEdits' => 10,
'wgLearnerMemberSince' => 4,
'Learner3' => [ 'edits' => 460, 'days' => 33 ],
'Learner4' => [ 'edits' => 525, 'days' => 28 ],
'Experienced1' => [ 'edits' => 538, 'days' => 33 ],
'Learner3' => [ 'edits' => 460, 'days' => 33 ],
'Learner4' => [ 'edits' => 525, 'days' => 28 ],
'Experienced1' => [ 'edits' => 538, 'days' => 33 ],
// newcomers only
$this->assertArrayEquals(
[ 'Newcomer1', 'Newcomer2', 'Newcomer3' ],
// newcomers only
$this->assertArrayEquals(
[ 'Newcomer1', 'Newcomer2', 'Newcomer3' ],
- $this->fetchUsers( [ 'newcomer' ] )
+ $this->fetchUsers( [ 'newcomer' ], $now )
);
// newcomers and learner
);
// newcomers and learner
'Newcomer1', 'Newcomer2', 'Newcomer3',
'Learner1', 'Learner2', 'Learner3', 'Learner4',
],
'Newcomer1', 'Newcomer2', 'Newcomer3',
'Learner1', 'Learner2', 'Learner3', 'Learner4',
],
- $this->fetchUsers( [ 'newcomer', 'learner' ] )
+ $this->fetchUsers( [ 'newcomer', 'learner' ], $now )
);
// newcomers and more learner
);
// newcomers and more learner
'Newcomer1', 'Newcomer2', 'Newcomer3',
'Experienced1',
],
'Newcomer1', 'Newcomer2', 'Newcomer3',
'Experienced1',
],
- $this->fetchUsers( [ 'newcomer', 'experienced' ] )
+ $this->fetchUsers( [ 'newcomer', 'experienced' ], $now )
);
// learner only
$this->assertArrayEquals(
[ 'Learner1', 'Learner2', 'Learner3', 'Learner4' ],
);
// learner only
$this->assertArrayEquals(
[ 'Learner1', 'Learner2', 'Learner3', 'Learner4' ],
- $this->fetchUsers( [ 'learner' ] )
+ $this->fetchUsers( [ 'learner' ], $now )
);
// more experienced only
$this->assertArrayEquals(
[ 'Experienced1' ],
);
// more experienced only
$this->assertArrayEquals(
[ 'Experienced1' ],
- $this->fetchUsers( [ 'experienced' ] )
+ $this->fetchUsers( [ 'experienced' ], $now )
);
// learner and more experienced
);
// learner and more experienced
'Learner1', 'Learner2', 'Learner3', 'Learner4',
'Experienced1',
],
'Learner1', 'Learner2', 'Learner3', 'Learner4',
'Experienced1',
],
- $this->fetchUsers( [ 'learner', 'experienced' ] ),
+ $this->fetchUsers( [ 'learner', 'experienced' ], $now ),
'Learner and more experienced'
);
'Learner and more experienced'
);
/* 'Learner1', 'Learner2', 'Learner3', 'Learner4', */
/* 'Experienced1', */
/* ], */
/* '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'],
$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',
]
);
}
}
'email' => 'ut',
]
);
}
}
- private function fetchUsers( $filters ) {
+ private function fetchUsers( $filters, $now ) {
$tables = [];
$conds = [];
$fields = [];
$tables = [];
$conds = [];
$fields = [];
&$conds,
&$query_options,
&$join_conds,
&$conds,
&$query_options,
&$join_conds,
- private function daysAgo( $days ) {
+ private function daysAgo( $days, $now ) {
- return time() - $days * $secondsPerDay;
+ return $now - $days * $secondsPerDay;
}
public function testGetFilterGroupDefinitionFromLegacyCustomFilters() {
}
public function testGetFilterGroupDefinitionFromLegacyCustomFilters() {