jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/404290 )
Change subject: Tests for ScoreFetcher
......................................................................
Tests for ScoreFetcher
By mocking ORES service reponse, now it's possible to easily test it
Bug: T184142
Change-Id: I5707e71891167938d831c9bceb91faf33827ca91
---
M tests/phpunit/includes/ScoreFetcherTest.php
1 file changed, 109 insertions(+), 4 deletions(-)
Approvals:
jenkins-bot: Verified
Awight: Looks good to me, approved
diff --git a/tests/phpunit/includes/ScoreFetcherTest.php
b/tests/phpunit/includes/ScoreFetcherTest.php
index 23356cd..095b9dc 100644
--- a/tests/phpunit/includes/ScoreFetcherTest.php
+++ b/tests/phpunit/includes/ScoreFetcherTest.php
@@ -2,6 +2,7 @@
namespace ORES\Tests;
+use ORES\ORESService;
use ORES\ScoreFetcher;
use ORES\Storage\HashModelLookup;
@@ -24,7 +25,110 @@
'goodfaith' => [ 'id' => self::GOODFAITH, 'version' =>
'0.0.3' ],
];
$this->setService( 'ORESModelLookup', new HashModelLookup(
$modelData ) );
+ $this->setService( 'ORESService', $this->getORESServiceMock() );
+ $this->setMwGlobals( [
+ 'wgOresModels' => [ 'damaging' => true ],
+ ] );
$this->tablesUsed[] = 'ores_model';
+ }
+
+ private function getORESServiceMock() {
+ $mock = $this->getMockBuilder( ORESService::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $mock->expects( $this->any() )
+ ->method( 'request' )
+ ->willReturnCallback( [ $this, 'mockORESResponse' ] );
+
+ return $mock;
+ }
+
+ public static function mockORESResponse( array $params,
$originalRequest = null ) {
+ $models = [];
+ foreach ( explode( '|', $params['models'] ) as $model ) {
+ $models[$model] = [ 'version' => '0.0.4' ];
+ }
+
+ $scores = [];
+ foreach ( explode( '|', $params['revids'] ) as $revid ) {
+ $scores[(string)$revid] = self::mockRevisionResponse(
$revid, array_keys( $models ) );
+ }
+
+ return [ ORESService::getWikiID() => [ 'models' => $models,
'scores' => $scores ] ];
+ }
+
+ public static function mockRevisionResponse( $revid, $models ) {
+ $result = [];
+ foreach ( $models as $model ) {
+ $result[$model] = [ 'score' => [] ];
+ $probability = (float)strrev( substr( $revid, -2 ) ) /
100;
+ $result[$model]['score']['probability'] = [
+ 'true' => $probability,
+ 'false' => 1 - $probability
+ ];
+ $result[$model]['score']['prediction'] = $probability >
0.5;
+ }
+ return $result;
+ }
+
+ public function provideTestGetScores() {
+ $firstCase = [
+ '123' => [
+ 'damaging' => [ 'score' => [
+ 'prediction' => false,
+ 'probability' => [ 'true' => 0.32,
'false' => 0.68 ]
+ ] ]
+ ]
+ ];
+ $secondCase = $firstCase;
+ $secondCase['123']['goodfaith'] = [
+ 'score' => [
+ 'prediction' => false,
+ 'probability' => [ 'true' => 0.32, 'false' =>
0.68 ]
+ ]
+ ];
+ return [
+ [ $firstCase, 123, 'damaging', true, null ],
+ [ $secondCase, 123, 'damaging|goodfaith', true, null ],
+ [ $firstCase, 123, 'damaging', false, null ],
+ [ $secondCase, 123, 'damaging|goodfaith', false, null ],
+ [ $firstCase, 123, null, true, null ],
+ [ $firstCase, 123, null, false, null ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideTestGetScores
+ * @covers ORES\ScoreFetcher::getScores
+ */
+ public function testGetScores( $expected, $revisions, $models,
$precache, $originalRequest ) {
+ $scoreFetcher = ScoreFetcher::instance();
+ $result = $scoreFetcher->getScores( $revisions, $models,
$precache, $originalRequest );
+ $this->assertEquals( $expected, $result );
+ $res = wfGetDB( DB_REPLICA )->select(
+ 'ores_model',
+ [ 'oresm_name', 'oresm_version', 'oresm_is_current' ],
+ '',
+ __METHOD__
+ );
+
+ $result = iterator_to_array( $res, false );
+
+ if ( $models === null ) {
+ global $wgOresModels;
+ $models = implode( '|', array_keys( array_filter(
$wgOresModels ) ) );
+ }
+
+ $expected = [];
+ foreach ( explode( '|', $models ) as $model ) {
+ $expected[] = (object)[
+ 'oresm_name' => $model,
+ 'oresm_version' => '0.0.4',
+ 'oresm_is_current' => '1'
+ ];
+ }
+ $this->assertEquals( $expected, $result );
}
public function provideTestCheckModelVersion() {
@@ -39,6 +143,7 @@
/**
* @dataProvider provideTestCheckModelVersion
+ * @covers ORES\ScoreFetcher::checkModelVersion
*/
public function testCheckModelVersion( $expected, $model, array
$response ) {
$scoreFetcher = ScoreFetcher::instance();
@@ -46,6 +151,9 @@
$this->assertSame( $expected, $scoreFetcher->checkModelVersion(
$model, $response ) );
}
+ /**
+ * @covers ORES\ScoreFetcher::updateModelVersion
+ */
public function testUpdateModelVersion() {
$dbw = \wfGetDB( DB_MASTER );
$dbw->insert( 'ores_model',
@@ -66,10 +174,7 @@
__METHOD__
);
- $result = [];
- foreach ( $res as $row ) {
- $result[] = $row;
- }
+ $result = iterator_to_array( $res, false );
$expected = [
(object)[
--
To view, visit https://gerrit.wikimedia.org/r/404290
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I5707e71891167938d831c9bceb91faf33827ca91
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/ORES
Gerrit-Branch: master
Gerrit-Owner: Ladsgroup <[email protected]>
Gerrit-Reviewer: Awight <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits