mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/RevisionSlider
synced 2024-12-12 07:25:13 +00:00
8e2365502b
Despite its documentation the "constructor" of RevisionList tends to expect array of revision data in a format returned by API instead of array of Revision objects. Due to different name of ID fields in Revision object and in API array, if "real" Revision object is passed to RevisionList, its ID is lost. This changes RevisionList so that it only accepts an array of Revision objects. This provides better abstraction. This is basically a revert of I147270f28381038d05f8bcfd2317e8c269b2e458 which aimed at the same problem but suggested solution doesn't seem right. Change-Id: Ic45cdd3e7b707a8c6a19eecf0a84d4c11696cd1f
189 lines
6.7 KiB
JavaScript
189 lines
6.7 KiB
JavaScript
( function ( mw ) {
|
|
var RevisionListView = mw.libs.revisionSlider.RevisionListView,
|
|
RevisionList = mw.libs.revisionSlider.RevisionList,
|
|
Revision = mw.libs.revisionSlider.Revision;
|
|
|
|
QUnit.module( 'ext.RevisionSlider.RevisionListView' );
|
|
|
|
QUnit.test( 'render adds revisions', function ( assert ) {
|
|
var revisionListView = new RevisionListView( new RevisionList( [
|
|
new Revision( { revid: 1, size: 5, comment: '' } ),
|
|
new Revision( { revid: 3, size: 213, comment: '' } ),
|
|
new Revision( { revid: 37, size: 100, comment: '' } )
|
|
] ) ),
|
|
$resultHtml, $revisionWrapperDivs, $revisionDivs;
|
|
|
|
$resultHtml = revisionListView.render( 11 );
|
|
$revisionWrapperDivs = $resultHtml.find( '.mw-revslider-revision-wrapper' );
|
|
$revisionDivs = $resultHtml.find( '.mw-revslider-revision' );
|
|
|
|
assert.equal( $revisionWrapperDivs.length, 3 );
|
|
assert.equal( $( $revisionDivs[ 0 ] ).attr( 'data-revid' ), 1 );
|
|
assert.equal( $( $revisionDivs[ 2 ] ).attr( 'data-revid' ), 37 );
|
|
assert.equal( $( $revisionDivs[ 1 ] ).css( 'width' ), '11px' );
|
|
assert.equal( $( $revisionDivs[ 1 ] ).css( 'height' ), '70px' ); // max relative size
|
|
assert.ok( $( $revisionDivs[ 1 ] ).hasClass( 'mw-revslider-revision-up' ) );
|
|
assert.ok( $( $revisionDivs[ 2 ] ).hasClass( 'mw-revslider-revision-down' ) );
|
|
} );
|
|
|
|
QUnit.test( 'tool tip is composed correctly', function ( assert ) {
|
|
var revisionListView = new RevisionListView(),
|
|
revision = new Revision( {
|
|
revid: 1,
|
|
size: 230,
|
|
comment: 'Hello',
|
|
parsedcomment: '<strong>Hello</strong>',
|
|
timestamp: '2016-04-26T10:27:14Z', // 10:27, 26 Apr 2016
|
|
user: 'User1',
|
|
minor: true
|
|
} ),
|
|
$tooltipHtml;
|
|
|
|
revision.setRelativeSize( 210 );
|
|
|
|
mw.libs.revisionSlider.userOffset = 0;
|
|
|
|
$tooltipHtml = revisionListView.makeTooltip( revision );
|
|
|
|
assert.ok( $tooltipHtml.match( /User1/ ), 'Test the user.' );
|
|
assert.ok( $tooltipHtml.match( /Hello/ ), 'Test the comment.' );
|
|
assert.ok( $tooltipHtml.match( /230/ ), 'Test the page size.' );
|
|
assert.ok( $tooltipHtml.match( /\+210/ ), 'Test the change size.' );
|
|
} );
|
|
|
|
QUnit.revisionSlider.testOrSkip( 'tool tip is composed correctly with en lang', function ( assert ) {
|
|
var revisionListView = new RevisionListView(),
|
|
revision = new Revision( {
|
|
revid: 1,
|
|
size: 2300,
|
|
comment: 'Hello',
|
|
parsedcomment: '<strong>Hello</strong>',
|
|
timestamp: '2016-04-26T10:27:14Z', // 10:27, 26 Apr 2016
|
|
user: 'User1',
|
|
minor: true
|
|
} ),
|
|
$tooltipHtml;
|
|
|
|
revision.setRelativeSize( 2100 );
|
|
|
|
mw.libs.revisionSlider.userOffset = 0;
|
|
|
|
$tooltipHtml = revisionListView.makeTooltip( revision );
|
|
|
|
assert.ok( $tooltipHtml.match( /User1/ ), 'Test the user.' );
|
|
assert.ok( $tooltipHtml.match( /Hello/ ), 'Test the comment.' );
|
|
assert.ok( $tooltipHtml.match( /2,300/ ), 'Test the page size.' );
|
|
assert.ok( $tooltipHtml.match( /\+2,100/ ), 'Test the change size.' );
|
|
assert.ok( $tooltipHtml.match( /10:27, 26 Apr 2016/ ), 'Test the date.' );
|
|
assert.ok( $tooltipHtml.match( /minor/ ), 'Test minor.' );
|
|
}, mw.config.get( 'wgUserLanguage' ) !== 'en' );
|
|
|
|
QUnit.test( 'empty user leads to no user line', function ( assert ) {
|
|
var revisionListView = new RevisionListView(),
|
|
$userLineHtml;
|
|
|
|
$userLineHtml = revisionListView.makeUserLine( null );
|
|
|
|
assert.equal( $userLineHtml, '' );
|
|
} );
|
|
|
|
QUnit.test( 'user line is composed correctly', function ( assert ) {
|
|
var revisionListView = new RevisionListView(),
|
|
$userLineHtml;
|
|
|
|
$userLineHtml = revisionListView.makeUserLine( 'User1' );
|
|
|
|
assert.equal( $userLineHtml.find( 'a' ).text(), 'User1' );
|
|
assert.ok( $userLineHtml.find( 'a' ).attr( 'href' ).match( /User:User1/ ) );
|
|
} );
|
|
|
|
QUnit.test( 'IP user line is composed correctly', function ( assert ) {
|
|
var revisionListView = new RevisionListView(),
|
|
$userLineHtml;
|
|
|
|
$userLineHtml = revisionListView.makeUserLine( '127.0.0.1' );
|
|
|
|
assert.equal( $userLineHtml.find( 'a' ).text(), '127.0.0.1' );
|
|
assert.ok( $userLineHtml.find( 'a' ).attr( 'href' ).match( /Special:Contributions\/127.0.0.1/ ) );
|
|
} );
|
|
|
|
QUnit.test( 'empty comment leads to no comment line', function ( assert ) {
|
|
var revisionListView = new RevisionListView(),
|
|
$commentHtml;
|
|
|
|
$commentHtml = revisionListView.makeCommentLine( new Revision( {
|
|
comment: ' ',
|
|
parsedcomment: ' '
|
|
} ) );
|
|
|
|
assert.equal( $commentHtml, '' );
|
|
} );
|
|
|
|
QUnit.test( 'comment line is composed correctly', function ( assert ) {
|
|
var revisionListView = new RevisionListView(),
|
|
$commentLineHtml;
|
|
|
|
$commentLineHtml = revisionListView.makeCommentLine( new Revision( {
|
|
comment: 'Hello',
|
|
parsedcomment: '<strong>Hello</strong>'
|
|
} ) );
|
|
|
|
assert.equal( $commentLineHtml.find( 'strong' ).length, 2 );
|
|
} );
|
|
|
|
QUnit.test( 'positive change is composed correctly', function ( assert ) {
|
|
var revisionListView = new RevisionListView(),
|
|
$changeSizeLineHtml;
|
|
|
|
$changeSizeLineHtml = revisionListView.makeChangeSizeLine( 9 );
|
|
|
|
assert.equal( $changeSizeLineHtml.find( '.mw-revslider-change-positive' ).length, 1 );
|
|
assert.equal( $changeSizeLineHtml.find( '.mw-revslider-change-positive' ).text(), '+9' );
|
|
} );
|
|
|
|
QUnit.test( 'negative change is composed correctly', function ( assert ) {
|
|
var revisionListView = new RevisionListView(),
|
|
$changeSizeLineHtml;
|
|
|
|
$changeSizeLineHtml = revisionListView.makeChangeSizeLine( -9 );
|
|
|
|
assert.equal( $changeSizeLineHtml.find( '.mw-revslider-change-negative' ).length, 1 );
|
|
assert.equal( $changeSizeLineHtml.find( '.mw-revslider-change-negative' ).text(), '-9' );
|
|
} );
|
|
|
|
QUnit.test( 'neutral change is composed correctly', function ( assert ) {
|
|
var revisionListView = new RevisionListView(),
|
|
$changeSizeLineHtml;
|
|
|
|
$changeSizeLineHtml = revisionListView.makeChangeSizeLine( 0 );
|
|
|
|
assert.equal( $changeSizeLineHtml.find( '.mw-revslider-change-none' ).length, 1 );
|
|
assert.equal( $changeSizeLineHtml.find( '.mw-revslider-change-none' ).text(), '0' );
|
|
} );
|
|
|
|
QUnit.test( 'big change number is formatted correctly', function ( assert ) {
|
|
var revisionListView = new RevisionListView(),
|
|
originalUserLangSetting = mw.config.get( 'wgUserLanguage' ),
|
|
$changeSizeLineHtml;
|
|
|
|
mw.config.set( 'wgUserLanguage', 'en' );
|
|
$changeSizeLineHtml = revisionListView.makeChangeSizeLine( 1000 );
|
|
mw.config.set( 'wgUserLanguage', originalUserLangSetting );
|
|
|
|
assert.equal( $changeSizeLineHtml.find( '.mw-revslider-change-positive' ).text(), '+1,000' );
|
|
} );
|
|
|
|
QUnit.test( 'page size is formatted correctly', function ( assert ) {
|
|
var revisionListView = new RevisionListView(),
|
|
originalUserLangSetting = mw.config.get( 'wgUserLanguage' ),
|
|
$pageSizeLineHtml;
|
|
|
|
mw.config.set( 'wgUserLanguage', 'en' );
|
|
$pageSizeLineHtml = revisionListView.makePageSizeLine( 1337 );
|
|
mw.config.set( 'wgUserLanguage', originalUserLangSetting );
|
|
|
|
assert.ok( $pageSizeLineHtml.text().match( /1,337/ ) );
|
|
} );
|
|
|
|
} )( mediaWiki );
|