mirror of
https://gerrit.wikimedia.org/r/mediawiki/skins/MinervaNeue
synced 2024-11-17 11:13:34 +00:00
f14d9514c6
The page-issues reducer function that retrieves the severityLevels for issues was incorrectly comparing two values in the multiple-issues scenario. Instead of comparing the severity of the current issue with the previous value in the accumulator, it was comparing the current issue with the previous issue in the original array, thus ignoring the previous `maxSeverity` value in the accumulator. Tests added and function refactored with more explicit variable names. Bug: T203725 Change-Id: Ia4c15cbf0c2457d68a7381e8ed04c1a6b3ae65d1
211 lines
5.8 KiB
JavaScript
211 lines
5.8 KiB
JavaScript
( function ( M ) {
|
|
var pageIssues = M.require( 'skins.minerva.scripts/pageIssues' ),
|
|
util = M.require( 'mobile.startup/util' ),
|
|
pageIssuesParser = M.require( 'skins.minerva.scripts/pageIssuesParser' ),
|
|
extractMessage = pageIssues.test.extractMessage,
|
|
createBanner = pageIssues.test.createBanner,
|
|
formatPageIssuesSeverity = pageIssues.test.formatPageIssuesSeverity,
|
|
MEDIUM_ISSUE = {
|
|
severity: 'MEDIUM',
|
|
icon: 'i',
|
|
text: 't'
|
|
},
|
|
MEDIUM_MULTIPLE_ISSUE = {
|
|
severity: 'MEDIUM',
|
|
isMultiple: true,
|
|
icon: 'i',
|
|
text: 't'
|
|
},
|
|
LOW_MULTIPLE_ISSUE = {
|
|
severity: 'LOW',
|
|
isMultiple: true,
|
|
icon: 'i',
|
|
text: 't'
|
|
},
|
|
LOW_ISSUE = {
|
|
severity: 'LOW',
|
|
icon: 'i',
|
|
text: 't'
|
|
},
|
|
HIGH_ISSUE = {
|
|
severity: 'HIGH',
|
|
icon: 'i',
|
|
text: 't'
|
|
},
|
|
getAllIssuesSections = pageIssues.test.getAllIssuesSections,
|
|
OverlayManager = M.require( 'mobile.startup/OverlayManager' ),
|
|
Page = M.require( 'mobile.startup/Page' ),
|
|
overlayManager = new OverlayManager( require( 'mediawiki.router' ) ),
|
|
$mockContainer = $(
|
|
'<div id=\'bodyContent\'>' +
|
|
'<table class=\'ambox ambox-content\'>' +
|
|
'<tbody class=\'mbox-text\'>' +
|
|
'<tr><td><span class=\'mbox-text-span\'> ambox text span </span></td></tr>' +
|
|
'</tbody>' +
|
|
'</table>' +
|
|
'</div>'
|
|
),
|
|
labelText = 'label text',
|
|
inline = true,
|
|
processedAmbox = createBanner(
|
|
new Page( { el: $mockContainer } ),
|
|
labelText, '0', inline, overlayManager
|
|
);
|
|
|
|
QUnit.module( 'Minerva cleanuptemplates' );
|
|
|
|
QUnit.test( 'createBanner() should add a "learn more" message', function ( assert ) {
|
|
assert.strictEqual( /⧼skin-minerva-issue-learn-more⧽/.test( processedAmbox.html() ), true );
|
|
} );
|
|
|
|
QUnit.test( 'createBanner() should add an icon', function ( assert ) {
|
|
assert.strictEqual( /mw-ui-icon/.test( processedAmbox.html() ), true );
|
|
} );
|
|
QUnit.test( 'clicking on the product of createBanner() should trigger a URL change', function ( assert ) {
|
|
processedAmbox.click();
|
|
assert.strictEqual( window.location.hash, '#/issues/0' );
|
|
} );
|
|
|
|
// NOTE: Only for PageIssues AB
|
|
QUnit.test( 'clicking on the product of createBanner() should trigger a custom event', function ( assert ) {
|
|
var mockAction = {
|
|
action: 'issueClicked',
|
|
issueSeverity: [ 'MEDIUM' ]
|
|
};
|
|
mw.trackSubscribe( 'minerva.PageIssuesAB', function ( topic, data ) {
|
|
assert.equal( JSON.toString( mockAction ), JSON.toString( data ) );
|
|
} );
|
|
} );
|
|
|
|
QUnit.test( 'formatPageIssuesSeverity', function ( assert ) {
|
|
var multipleIssues = [
|
|
MEDIUM_MULTIPLE_ISSUE,
|
|
LOW_MULTIPLE_ISSUE,
|
|
LOW_MULTIPLE_ISSUE
|
|
],
|
|
multipleSingleIssues = [
|
|
LOW_ISSUE,
|
|
HIGH_ISSUE,
|
|
MEDIUM_ISSUE
|
|
],
|
|
mixedMultipleSingle = [
|
|
HIGH_ISSUE,
|
|
LOW_MULTIPLE_ISSUE,
|
|
MEDIUM_MULTIPLE_ISSUE,
|
|
LOW_ISSUE,
|
|
MEDIUM_ISSUE,
|
|
HIGH_ISSUE
|
|
],
|
|
testMultiple = multipleIssues.reduce( formatPageIssuesSeverity, [] ),
|
|
testSingle = multipleSingleIssues.reduce( formatPageIssuesSeverity, [] ),
|
|
testMixed = mixedMultipleSingle.reduce( formatPageIssuesSeverity, [] );
|
|
|
|
assert.deepEqual( testMultiple, [ 'MEDIUM' ], 'Multiple issues return one maxSeverity value' );
|
|
assert.deepEqual( testSingle, [ 'LOW', 'HIGH', 'MEDIUM' ], 'Single issues return each corresponding severity' );
|
|
assert.deepEqual( testMixed, [ 'HIGH', 'MEDIUM', 'LOW', 'MEDIUM', 'HIGH' ], 'Mixed single/multiple return one value for multiples' );
|
|
|
|
} );
|
|
|
|
QUnit.test( 'extractMessage', function ( assert ) {
|
|
this.sandbox.stub( pageIssuesParser, 'parse' ).returns(
|
|
{
|
|
severity: 'LOW',
|
|
icon: {
|
|
toHtmlString: function () {
|
|
return '<icon />';
|
|
}
|
|
}
|
|
}
|
|
);
|
|
[
|
|
[
|
|
$( '<div />' ).html(
|
|
'<div class="mbox-text">Smelly</div>'
|
|
).appendTo( '<div class="mw-collapsible-content" />' ),
|
|
{
|
|
severity: 'LOW',
|
|
isMultiple: true,
|
|
icon: '<icon />',
|
|
text: '<p>Smelly</p>'
|
|
},
|
|
'When the box is a child of mw-collapsible-content it isMultiple'
|
|
],
|
|
[
|
|
$( '<div />' ).html(
|
|
'<div class="mbox-text">Dirty</div>'
|
|
),
|
|
{
|
|
severity: 'LOW',
|
|
isMultiple: false,
|
|
icon: '<icon />',
|
|
text: '<p>Dirty</p>'
|
|
},
|
|
'When the box is not child of mw-collapsible-content it !isMultiple'
|
|
]
|
|
].forEach( function ( test ) {
|
|
assert.deepEqual(
|
|
extractMessage( test[ 0 ] ),
|
|
test[ 1 ],
|
|
test[ 2 ]
|
|
);
|
|
} );
|
|
} );
|
|
|
|
QUnit.test( 'getAllIssuesSections', function ( assert ) {
|
|
var multipleIssuesWithDeletion,
|
|
multipleIssues, allIssuesOldTreatment, allIssuesNewTreatment;
|
|
allIssuesOldTreatment = {
|
|
0: [
|
|
MEDIUM_ISSUE,
|
|
LOW_ISSUE,
|
|
MEDIUM_ISSUE
|
|
]
|
|
};
|
|
multipleIssues = {
|
|
0: [
|
|
util.extend( {}, MEDIUM_ISSUE, { isMultiple: true } ),
|
|
util.extend( {}, LOW_ISSUE, { isMultiple: true } ),
|
|
util.extend( {}, MEDIUM_ISSUE, { isMultiple: true } )
|
|
]
|
|
};
|
|
multipleIssuesWithDeletion = {
|
|
0: [
|
|
HIGH_ISSUE,
|
|
util.extend( {}, MEDIUM_ISSUE, { isMultiple: true } ),
|
|
util.extend( {}, LOW_ISSUE, { isMultiple: true } ),
|
|
util.extend( {}, MEDIUM_ISSUE, { isMultiple: true } )
|
|
]
|
|
};
|
|
allIssuesNewTreatment = {
|
|
0: [
|
|
HIGH_ISSUE,
|
|
LOW_ISSUE,
|
|
MEDIUM_ISSUE
|
|
],
|
|
1: [
|
|
MEDIUM_ISSUE
|
|
]
|
|
};
|
|
assert.deepEqual(
|
|
getAllIssuesSections( allIssuesOldTreatment ),
|
|
[ '0', '0', '0' ],
|
|
'section numbers correctly extracted from old treatment'
|
|
);
|
|
assert.deepEqual(
|
|
getAllIssuesSections( allIssuesNewTreatment ),
|
|
[ '0', '0', '0', '1' ],
|
|
'section numbers correctly extracted from new treatment'
|
|
);
|
|
assert.deepEqual(
|
|
getAllIssuesSections( multipleIssues ),
|
|
[ '0' ],
|
|
'multiple issues are packed into one entry since there is one box'
|
|
);
|
|
assert.deepEqual(
|
|
getAllIssuesSections( multipleIssuesWithDeletion ),
|
|
[ '0', '0' ],
|
|
'while multiple issues are grouped, non-multiple issues are still reported'
|
|
);
|
|
} );
|
|
}( mw.mobileFrontend ) );
|