Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4095888
EventMapperTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
EventMapperTest.php
View Options
<?php
namespace
MediaWiki\Extension\Notifications\Test\Integration\Mapper
;
use
InvalidArgumentException
;
use
MediaWiki\Extension\Notifications\DbFactory
;
use
MediaWiki\Extension\Notifications\Mapper\EventMapper
;
use
MediaWiki\Extension\Notifications\Model\Event
;
use
MediaWikiIntegrationTestCase
;
use
Wikimedia\Rdbms\FakeResultWrapper
;
use
Wikimedia\Rdbms\IDatabase
;
use
Wikimedia\Rdbms\InsertQueryBuilder
;
use
Wikimedia\Rdbms\SelectQueryBuilder
;
/**
* @group Database
* @covers \MediaWiki\Extension\Notifications\Mapper\EventMapper
*/
class
EventMapperTest
extends
MediaWikiIntegrationTestCase
{
public
static
function
provideDataTestInsert
()
{
return
[
[
'successful insert with next sequence = 1'
,
[
'insert'
=>
true
,
'insertId'
=>
1
],
1
],
[
'successful insert with insert id = 2'
,
[
'insert'
=>
true
,
'insertId'
=>
2
],
2
]
];
}
/**
* @dataProvider provideDataTestInsert
*/
public
function
testInsert
(
$message
,
$dbResult
,
$result
)
{
$event
=
$this
->
mockEvent
();
$eventMapper
=
new
EventMapper
(
$this
->
mockDbFactory
(
$dbResult
)
);
$this
->
assertEquals
(
$result
,
$eventMapper
->
insert
(
$event
),
$message
);
}
/**
* Successful fetchById()
*/
public
function
testSuccessfulFetchById
()
{
$eventMapper
=
new
EventMapper
(
$this
->
mockDbFactory
(
[
'selectRow'
=>
(
object
)[
'event_id'
=>
1
,
'event_type'
=>
'test'
,
'event_extra'
=>
''
,
'event_page_id'
=>
''
,
'event_agent_id'
=>
''
,
'event_agent_ip'
=>
''
,
'event_deleted'
=>
0
,
]
]
)
);
$res
=
$eventMapper
->
fetchById
(
1
);
$this
->
assertInstanceOf
(
Event
::
class
,
$res
);
}
public
function
testUnsuccessfulFetchById
()
{
$eventMapper
=
new
EventMapper
(
$this
->
mockDbFactory
(
[
'selectRow'
=>
false
]
)
);
$this
->
expectException
(
InvalidArgumentException
::
class
);
$eventMapper
->
fetchById
(
1
);
}
/**
* @return Event
*/
protected
function
mockEvent
()
{
$event
=
$this
->
createMock
(
Event
::
class
);
$event
->
method
(
'toDbArray'
)
->
willReturn
(
[]
);
return
$event
;
}
/**
* @param array $dbResult
* @return DbFactory
*/
protected
function
mockDbFactory
(
$dbResult
)
{
$dbFactory
=
$this
->
createMock
(
DbFactory
::
class
);
$dbFactory
->
method
(
'getEchoDb'
)
->
willReturn
(
$this
->
mockDb
(
$dbResult
)
);
return
$dbFactory
;
}
/**
* @param array $dbResult
* @return IDatabase
*/
protected
function
mockDb
(
array
$dbResult
)
{
$dbResult
+=
[
'insert'
=>
''
,
'insertId'
=>
''
,
'select'
=>
[],
'selectRow'
=>
''
];
$db
=
$this
->
createMock
(
IDatabase
::
class
);
$db
->
method
(
'insert'
)
->
willReturn
(
$dbResult
[
'insert'
]
);
$db
->
method
(
'insertId'
)
->
willReturn
(
$dbResult
[
'insertId'
]
);
$db
->
method
(
'select'
)
->
willReturn
(
new
FakeResultWrapper
(
$dbResult
[
'select'
]
)
);
$db
->
method
(
'selectRow'
)
->
willReturn
(
$dbResult
[
'selectRow'
]
);
$db
->
method
(
'newInsertQueryBuilder'
)
->
willReturnCallback
(
static
function
()
use
(
$db
)
{
return
new
InsertQueryBuilder
(
$db
);
}
);
$db
->
method
(
'newSelectQueryBuilder'
)
->
willReturnCallback
(
static
function
()
use
(
$db
)
{
return
new
SelectQueryBuilder
(
$db
);
}
);
return
$db
;
}
public
function
testFetchByPage
()
{
$user
=
$this
->
getTestUser
()->
getUser
();
// Do not create a notification for the edit made by getExistingTestPage.
$this
->
clearHook
(
'PageSaveComplete'
);
$page
=
$this
->
getExistingTestPage
();
// Create a notification that is not associated with any page
Event
::
create
(
[
'type'
=>
'welcome'
,
'agent'
=>
$user
,
]
);
// Create a notification with a title
$eventWithTitle
=
Event
::
create
(
[
'type'
=>
'welcome'
,
'agent'
=>
$user
,
'title'
=>
$page
->
getTitle
()
]
);
// Create a notification with a target-page
$eventWithTargetPage
=
Event
::
create
(
[
'type'
=>
'welcome'
,
'agent'
=>
$user
,
'extra'
=>
[
'target-page'
=>
$page
->
getId
()
]
]
);
$eventMapper
=
new
EventMapper
();
$this
->
assertArrayEquals
(
[
$eventWithTitle
->
getId
(),
$eventWithTargetPage
->
getId
()
],
$eventMapper
->
fetchIdsByPage
(
$page
->
getId
()
)
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Aug 18, 14:06 (4 w, 3 h ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
c5/18/e1dc31c211f08d282659d2208afc
Default Alt Text
EventMapperTest.php (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment