mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-11-30 10:34:54 +00:00
f29f7303d1
Notification timestamp is generated in MW format (YYYYMMDDHHMMSS) inside the model and saved to the database in db specific format, We need to convert it back to MW format when loading the data from the database, it just happens that MW format is the same as MySQL timestamp format Change-Id: Ie881b66c8c24d57a8933c0153e9e7db5fe6aa017
85 lines
2.2 KiB
PHP
85 lines
2.2 KiB
PHP
<?php
|
|
|
|
class EchoNotificationTest extends MediaWikiTestCase {
|
|
|
|
public function testNewFromRow() {
|
|
$row = $this->mockNotificationRow() + $this->mockEventRow();
|
|
|
|
$notif = EchoNotification::newFromRow( (object)$row );
|
|
$this->assertInstanceOf( 'EchoNotification', $notif );
|
|
// getReadTimestamp() should return null
|
|
$this->assertNull( $notif->getReadTimestamp() );
|
|
$this->assertEquals(
|
|
$notif->getTimestamp(),
|
|
wfTimestamp( TS_MW, $row['notification_timestamp'] )
|
|
);
|
|
$this->assertInstanceOf( 'EchoEvent', $notif->getEvent() );
|
|
$this->assertNull( $notif->getTargetPage() );
|
|
|
|
// Provide a read timestamp
|
|
$row['notification_read_timestamp'] = time() + 1000;
|
|
$notif = EchoNotification::newFromRow( (object)$row );
|
|
// getReadTimestamp() should return the timestamp in MW format
|
|
$this->assertEquals(
|
|
$notif->getReadTimestamp(),
|
|
wfTimestamp( TS_MW, $row['notification_read_timestamp'] )
|
|
);
|
|
|
|
$row += $this->mockTargetPageRow();
|
|
$notif = EchoNotification::newFromRow( (object)$row );
|
|
$this->assertInstanceOf( 'EchoTargetPage', $notif->getTargetPage() );
|
|
}
|
|
|
|
/**
|
|
* @expectedException MWException
|
|
*/
|
|
public function testNewFromRowWithException() {
|
|
$row = $this->mockNotificationRow();
|
|
// Provide an invalid event id
|
|
$row['notification_event'] = -1;
|
|
$noitf = EchoNotification::newFromRow( (object)$row );
|
|
}
|
|
|
|
/**
|
|
* Mock a notification row from database
|
|
*/
|
|
protected function mockNotificationRow() {
|
|
return array (
|
|
'notification_user' => 1,
|
|
'notification_event' => 1,
|
|
'notification_timestamp' => time(),
|
|
'notification_read_timestamp' => '',
|
|
'notification_bundle_base' => 1,
|
|
'notification_bundle_hash' => 'testhash',
|
|
'notification_bundle_display_hash' => 'testdisplayhash'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Mock an event row from database
|
|
*/
|
|
protected function mockEventRow() {
|
|
return array (
|
|
'event_id' => 1,
|
|
'event_type' => 'test_event',
|
|
'event_variant' => '',
|
|
'event_extra' => '',
|
|
'event_page_id' => '',
|
|
'event_agent_id' => '',
|
|
'event_agent_ip' => ''
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Mock a target page row
|
|
*/
|
|
protected function mockTargetPageRow() {
|
|
return array (
|
|
'etp_user' => 1,
|
|
'etp_page' => 2,
|
|
'etp_event' => 1
|
|
);
|
|
}
|
|
|
|
}
|