mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/DiscussionTools
synced 2024-11-24 00:13:36 +00:00
Suppress events from comments that are more than 10 minutes old
Bug: T290803 Change-Id: Ic0e23f439eef8a1b785f408d4557bec0abe9104b
This commit is contained in:
parent
a86d308d66
commit
0fba9b0048
|
@ -10,6 +10,8 @@
|
|||
namespace MediaWiki\Extension\DiscussionTools\Notifications;
|
||||
|
||||
use ChangeTags;
|
||||
use DateInterval;
|
||||
use DateTimeImmutable;
|
||||
use DeferredUpdates;
|
||||
use EchoEvent;
|
||||
use Error;
|
||||
|
@ -239,6 +241,13 @@ class EventDispatcher {
|
|||
if ( $newComment->getAuthor() !== $user->getName() ) {
|
||||
continue;
|
||||
}
|
||||
// Ignore comments which are more than 10 minutes old, as this may be a user archiving
|
||||
// their own comment. (T290803)
|
||||
$revTimestamp = new DateTimeImmutable( $newRevRecord->getTimestamp() );
|
||||
$threshold = $revTimestamp->sub( new DateInterval( 'PT10M' ) );
|
||||
if ( $newComment->getTimestamp() <= $threshold ) {
|
||||
continue;
|
||||
}
|
||||
$heading = $newComment->getSubscribableHeading();
|
||||
if ( !$heading ) {
|
||||
continue;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace MediaWiki\Extension\DiscussionTools\Tests;
|
||||
|
||||
use DateTimeImmutable;
|
||||
use MediaWiki\Page\PageIdentityValue;
|
||||
use MediaWiki\Revision\MutableRevisionRecord;
|
||||
use MediaWiki\User\UserIdentityValue;
|
||||
|
@ -45,6 +46,8 @@ class EventDispatcherTest extends IntegrationTestCase {
|
|||
$fakeUser = new UserIdentityValue( 0, $authorUsername );
|
||||
$fakeTitle = new PageIdentityValue( 0, NS_TALK, __CLASS__, PageIdentityValue::LOCAL );
|
||||
$fakeRevRecord = new MutableRevisionRecord( $fakeTitle );
|
||||
// All mock comments are posted between 00:00 and 00:10 on 2020-01-01
|
||||
$fakeRevRecord->setTimestamp( ( new DateTimeImmutable( '2020-01-01T00:10' ) )->format( 'c' ) );
|
||||
MockEventDispatcher::generateEventsFromParsers(
|
||||
$events, $parser1, $parser2, $fakeRevRecord, $fakeTitle, $fakeUser
|
||||
);
|
||||
|
@ -59,6 +62,24 @@ class EventDispatcherTest extends IntegrationTestCase {
|
|||
}
|
||||
|
||||
self::assertEquals( $expectedEvents, $events );
|
||||
|
||||
// Assert that no events are generated for comments saved >10 minutes after their timestamps
|
||||
$events = self::getJson( $other, true );
|
||||
$fakeRevRecord->setTimestamp( ( new DateTimeImmutable( '2020-01-01T00:20' ) )->format( 'c' ) );
|
||||
MockEventDispatcher::generateEventsFromParsers(
|
||||
$events, $parser1, $parser2, $fakeRevRecord, $fakeTitle, $fakeUser
|
||||
);
|
||||
|
||||
foreach ( $events as &$event ) {
|
||||
$event = json_decode( json_encode( $event ), false );
|
||||
}
|
||||
|
||||
// Other events (e.g. from Echo) are never removed
|
||||
$events = array_filter( $events, static function ( $event ) {
|
||||
return $event->type === 'dt-subscribed-new-comment';
|
||||
} );
|
||||
|
||||
self::assertEquals( [], $events );
|
||||
}
|
||||
|
||||
public function provideGenerateCases(): array {
|
||||
|
|
Loading…
Reference in a new issue