WatchedItemStore::setNotificationTimestampsForUser(): Allow clearing timestamp
ApiSetNotificationTimestamp expects to be able to clear the timestamp by passing null. Allow that to work as expected. Bug: T153482 Change-Id: Ibf4ba56f0abd3b72283f7a33e4665d5999a70b82
This commit is contained in:
parent
bf3a60743d
commit
05ca28bba0
2 changed files with 35 additions and 2 deletions
|
|
@ -668,7 +668,7 @@ class WatchedItemStore implements StatsdAwareInterface {
|
|||
|
||||
/**
|
||||
* @param User $user The user to set the timestamp for
|
||||
* @param string $timestamp Set the update timestamp to this value
|
||||
* @param string|null $timestamp Set the update timestamp to this value
|
||||
* @param LinkTarget[] $targets List of targets to update. Default to all targets
|
||||
*
|
||||
* @return bool success
|
||||
|
|
@ -687,9 +687,13 @@ class WatchedItemStore implements StatsdAwareInterface {
|
|||
$conds[] = $batch->constructSet( 'wl', $dbw );
|
||||
}
|
||||
|
||||
if ( $timestamp !== null ) {
|
||||
$timestamp = $dbw->timestamp( $timestamp );
|
||||
}
|
||||
|
||||
$success = $dbw->update(
|
||||
'watchlist',
|
||||
[ 'wl_notificationtimestamp' => $dbw->timestamp( $timestamp ) ],
|
||||
[ 'wl_notificationtimestamp' => $timestamp ],
|
||||
$conds,
|
||||
__METHOD__
|
||||
);
|
||||
|
|
|
|||
|
|
@ -2404,6 +2404,35 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
|
|||
);
|
||||
}
|
||||
|
||||
public function testSetNotificationTimestampsForUser_nullTimestamp() {
|
||||
$user = $this->getMockNonAnonUserWithId( 1 );
|
||||
$timestamp = null;
|
||||
|
||||
$mockDb = $this->getMockDb();
|
||||
$mockDb->expects( $this->once() )
|
||||
->method( 'update' )
|
||||
->with(
|
||||
'watchlist',
|
||||
[ 'wl_notificationtimestamp' => null ],
|
||||
[ 'wl_user' => 1 ]
|
||||
)
|
||||
->will( $this->returnValue( true ) );
|
||||
$mockDb->expects( $this->exactly( 0 ) )
|
||||
->method( 'timestamp' )
|
||||
->will( $this->returnCallback( function( $value ) {
|
||||
return 'TS' . $value . 'TS';
|
||||
} ) );
|
||||
|
||||
$store = $this->newWatchedItemStore(
|
||||
$this->getMockLoadBalancer( $mockDb ),
|
||||
$this->getMockCache()
|
||||
);
|
||||
|
||||
$this->assertTrue(
|
||||
$store->setNotificationTimestampsForUser( $user, $timestamp )
|
||||
);
|
||||
}
|
||||
|
||||
public function testSetNotificationTimestampsForUser_specificTargets() {
|
||||
$user = $this->getMockNonAnonUserWithId( 1 );
|
||||
$timestamp = '20100101010101';
|
||||
|
|
|
|||
Loading…
Reference in a new issue