First QUnit test for dialog classes

Wrote a first test, that checks the parameter checkboxes showing up.

Bug: T291155
Change-Id: Ie79272442a0d0532607fe93e9ea538635812e671
This commit is contained in:
Adam Wight 2021-09-16 15:07:59 +02:00 committed by Svantje Lilienthal
parent 934ccfa305
commit d70941593d
2 changed files with 110 additions and 0 deletions

View file

@ -2821,6 +2821,7 @@
"lib/ve/tests/ui/datatransferhandlers/ve.ui.UrlStringTransferHandler.test.js",
"modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.test.js",
"modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.UrlStringTransferHandler.test.js",
"modules/ve-mw/tests/ui/dialogs/ve.ui.MWTransclusionDialog.test.js",
"modules/ve-mw/tests/init/targets/ve.init.mw.DesktopArticleTarget.test.js",
"lib/ve/tests/ui/inspectors/ve.ui.FragmentInspector.test.js",
"modules/ve-mw/tests/ui/inspectors/ve.ui.FragmentInspector.test.js",

View file

@ -0,0 +1,109 @@
/*!
* VisualEditor Template Dialog and Transclusion Dialog tests
*
* @copyright 2021 VisualEditor Team and others; see http://ve.mit-license.org
*/
( function () {
QUnit.module( 've.ui.MWTransclusionDialog', QUnit.newMwEnvironment( {
beforeEach() {
ve.test.utils.mwEnvironment.beforeEach.call( this );
// set config variable to activate new sidebar feature
// TODO: remove this when sidebar feature will be default
mw.config.set( {
wgVisualEditorConfig: {
transclusionDialogNewSidebar: true,
transclusionDialogInlineDescriptions: true
}
} );
},
afterEach() {
ve.test.utils.mwEnvironment.afterEach.call( this );
}
} ) );
function createFragmentFromDoc( doc ) {
// convert doc to something ui magical
const surface = new ve.dm.Surface( doc );
// VE block from surface
const fragment = surface.getLinearFragment( new ve.Range( 1 ) );
// return fragment as data for the dialog
return { fragment: fragment };
}
QUnit.test( 'onReplacePart', ( assert ) => {
// don't kill test until this promise is resolved, to allow the async workflow to complete
const finishTest = assert.async();
// new wiki page and fragment
const doc = ve.dm.Document.static.newBlankDocument();
const fragment = createFragmentFromDoc( doc );
// new popup window
const dialog = new ve.ui.MWTransclusionDialog();
const windowManager = new OO.ui.WindowManager();
windowManager.addWindows( [ dialog ] );
const windowInstance = windowManager.openWindow( dialog, fragment );
windowInstance.opened.done( () => {
const transclusion = dialog.transclusionModel;
// mock api call with template data for Test
const templateData = {
title: 'Template:Test',
params: {
Blub: {
label: 'Blub',
description: 'blub',
type: 'string',
required: true
},
Foo: {
label: 'Foo',
description: 'Foo',
type: 'string',
required: true
}
}
};
transclusion.cacheTemplateDataApiResponse( { pages: [ templateData ] } );
// add a template with an undocumented parameter to the dialog
const data = {
target: {
title: 'Template:Test',
wt: 'Test',
href: 'Template:Test'
},
params: {
test: {
}
},
i: 0
};
const template = ve.dm.MWTemplateModel.newFromData( transclusion, data );
// change transclusion model (onReplacePart happens automatically)
const promise = transclusion.addPart( template );
promise.done( function () {
// checking for parameter checkboxes
// (should be 3 because of 2 predefined and 1 undocumented)
assert.strictEqual(
dialog.$element.find( '.ve-ui-mwTransclusionOutlineParameterWidget' ).length, 3
);
dialog.close();
} );
} ).fail( () => {
assert.ok( false );
finishTest();
} );
windowInstance.closed.then( function () {
assert.ok( true );
finishTest();
} );
} );
}() );