Skip to content

Commit

Permalink
Add some jest coverage for recent regressions
Browse files Browse the repository at this point in the history
Bug: T340112
Change-Id: I00a5a5f01c99c7c6039dacccd793d7e069ea230d
  • Loading branch information
jdlrobson authored and jrobson committed Jul 7, 2023
1 parent 0ad8795 commit ac499bf
Show file tree
Hide file tree
Showing 10 changed files with 141 additions and 10 deletions.
1 change: 1 addition & 0 deletions extension.json
Original file line number Diff line number Diff line change
Expand Up @@ -505,6 +505,7 @@
"ext.pageTriage.defaultTagsOptions": {
"es6": true,
"scripts": [
"ext.pageTriage.defaultTagsOptions/main.js",
"ext.pageTriage.defaultTagsOptions/ext.pageTriage.defaultTagsOptions.js",
"ext.pageTriage.defaultTagsOptions/ext.pageTriage.defaultDeletionTagsOptions.js"
],
Expand Down
7 changes: 5 additions & 2 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
module.exports = {
moduleNameMapper: {
'ext.pageTriage.defaultTagsOptions': '<rootDir>/modules/ext.pageTriage.defaultTagsOptions/main.js',
'ext.pageTriage.util': '<rootDir>/modules/ext.pageTriage.util/main.js',
'^./modules/(.+)/ext.pageTriage.(.+).underscore': '<rootDir>/modules/$1/$2.underscore',
// backbone needs this defined here because of the way it checks for jquery & underscore
underscore: '<rootDir>/modules/external/underscore.js'
Expand All @@ -9,14 +11,15 @@ module.exports = {
'modules/**/*.(js|vue)'
],
coveragePathIgnorePatterns: [
'/modules/external/',
'/node_modules/'
],
coverageThreshold: {
global: {
branches: 4,
functions: 6,
lines: 9,
statements: 9
lines: 6,
statements: 6
}
},
testEnvironment: 'jsdom',
Expand Down
24 changes: 24 additions & 0 deletions jest.setup.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,27 @@ Backbone.setDomLibrary( $ );
// mediawiki
const mockMediaWiki = require( '@wikimedia/mw-node-qunit/src/mockMediaWiki.js' );
global.mw = mockMediaWiki();
global.mw.Map = Map;

class Message {
text() {
return '<message>';
}
}
class Title {
}

class MessagePoster {
post() {
return Promise.resolve();
}
}

global.mw.Title = Title;
global.mw.Message = Message;

global.mw.messagePoster = {
factory: {
create: () => Promise.resolve( new MessagePoster() )
}
};
Original file line number Diff line number Diff line change
Expand Up @@ -250,13 +250,13 @@
}
};

$.pageTriageDeletionTagsMultiple = {
const pageTriageDeletionTagsMultiple = {
tag: 'Db-multiple',
talkpagenotiftopictitle: 'pagetriage-del-tags-speedy-deletion-nomination-notify-topic-title',
talkpagenotiftpl: 'Db-notice-multiple-NPF'
};

$.pageTriageDeletionTagsOptions = {
const pageTriageDeletionTagsOptions = {

Main: {
speedydeletioncommon: {
Expand Down Expand Up @@ -347,4 +347,13 @@
}
};

if ( typeof $ !== 'undefined' ) {
$.pageTriageDeletionTagsMultiple = pageTriageDeletionTagsMultiple;
$.pageTriageDeletionTagsOptions = pageTriageDeletionTagsOptions;
}

module.exports = {
pageTriageDeletionTagsMultiple,
pageTriageDeletionTagsOptions
};
}() );
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,9 @@
multiple: false
};

$.pageTriageTagsMultiple = 'Multiple issues';
const pageTriageTagsMultiple = 'Multiple issues';

$.pageTriageTagsOptions = {
const pageTriageTagsOptions = {

common: {
label: mw.msg( 'pagetriage-tags-cat-common-label' ),
Expand Down Expand Up @@ -822,7 +822,18 @@
}
}
};
$.pageTriageTagsRedirectCategoryShell = 'Redirect category shell';

const pageTriageTagsRedirectCategoryShell = 'Redirect category shell';

if ( typeof $ !== 'undefined' ) {
$.pageTriageTagsMultiple = pageTriageTagsMultiple;
$.pageTriageTagsRedirectCategoryShell = pageTriageTagsRedirectCategoryShell;
$.pageTriageTagsOptions = pageTriageTagsOptions;
}

module.exports = {
pageTriageTagsMultiple,
pageTriageTagsRedirectCategoryShell,
pageTriageTagsOptions
};
}() );
// </nowiki>
4 changes: 4 additions & 0 deletions modules/ext.pageTriage.defaultTagsOptions/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
const defaultTagsOptions = require( './ext.pageTriage.defaultTagsOptions.js' );
const defaultDeletionTagsOptions = require( './ext.pageTriage.defaultTagsOptions/ext.pageTriage.defaultDeletionTagsOptions.js' );

module.exports = Object.assign( {}, defaultTagsOptions, defaultDeletionTagsOptions );
6 changes: 6 additions & 0 deletions modules/ext.pageTriage.views.toolbar/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"@doc": "Virtual JSON. This code is only used in tests.",
"TalkPageNoteTemplate": {
"Tags": "Taggednote-NPF"
}
}
6 changes: 4 additions & 2 deletions modules/ext.pageTriage.views.toolbar/tags.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
const { contentLanguageMessage } = require( 'ext.pageTriage.util' );
const ToolView = require( './ToolView.js' );
const config = require( './config.json' );
const tagsOptions = require( 'ext.pageTriage.defaultTagsOptions' );

// Used to keep track of what actions we want to invoke, and with what data.
const actionQueue = {};
module.exports = ToolView.extend( {
Expand All @@ -11,7 +13,7 @@ module.exports = ToolView.extend( {
title: mw.msg( 'pagetriage-tags-title' ),
tooltip: 'pagetriage-tags-tooltip',
template: mw.template.get( 'ext.pageTriage.views.toolbar', 'tags.underscore' ),
tagsOptions: $.pageTriageTagsOptions,
tagsOptions,
selectedTag: {},
selectedTagCount: 0,
noteChanged: false,
Expand Down Expand Up @@ -717,7 +719,7 @@ module.exports = ToolView.extend( {
'|3=' + note + '}}';

const that = this;
messagePosterPromise.then( function ( messagePoster ) {
return messagePosterPromise.then( function ( messagePoster ) {
return messagePoster.post( topicTitle, note, { tags: 'pagetriage' } );
} ).then( function () {
mw.pageTriage.actionQueue.runAndRefresh( actionQueue, that.getDataForActionQueue() );
Expand Down
39 changes: 39 additions & 0 deletions tests/jest/ext.pageTriage.views.toolbar.delete.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
const { Article } = require( 'ext.pageTriage.util' );
let DeleteToolView;

describe( 'DeleteToolView', () => {
beforeEach( () => {
mw.config.get = jest.fn( ( key ) => {
switch ( key ) {
case 'wgPageName':
return 'PageName';
default:
return null;
}
} );
// needs to be loaded after mw.config.get has been defined to avoid fatal.
DeleteToolView = require( '../../modules/ext.pageTriage.views.toolbar/delete.js' );
} );

test( 'notifyUser', () => {
const eventBus = _.extend( {}, Backbone.Events );
const model = new Article( {
eventBus,
pageId: 5,
includeHistory: true
} );
const toolbar = new DeleteToolView( { eventBus, model } );
toolbar.selectedTag.tagKey = {
usesSubpages: false
};

const msg = toolbar.notifyUser( {
tagCount: 1,
tagKey: 'tagKey'
} );

return msg.then( function () {
expect( true ).toBe( true );
} );
} );
} );
32 changes: 32 additions & 0 deletions tests/jest/ext.pageTriage.views.toolbar.tags.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
const { Article } = require( 'ext.pageTriage.util' );
const TagToolView = require( '../../modules/ext.pageTriage.views.toolbar/tags.js' );

describe( 'TagToolView', () => {
beforeEach( () => {
mw.config.get = jest.fn( ( key ) => {
switch ( key ) {
case 'wgPageName':
return 'PageName';
default:
return null;
}
} );
} );

test( 'talkPageNote', () => {
const actionQueue = {
runAndRefresh: jest.fn()
};
mw.pageTriage = { actionQueue };
const eventBus = _.extend( {}, Backbone.Events );
const model = new Article( {
eventBus,
pageId: 5,
includeHistory: true
} );
const toolbar = new TagToolView( { eventBus, model } );
return toolbar.talkPageNote( 'foo' ).then( () => {
expect( actionQueue.runAndRefresh ).toBeCalled();
} );
} );
} );

0 comments on commit ac499bf

Please sign in to comment.