/*! * VisualEditor Template Dialog and Transclusion Dialog tests * * @copyright 2021 VisualEditor Team and others; see http://ve.mit-license.org */ { QUnit.module( 've.ui.MWTransclusionDialog', ve.test.utils.newMwEnvironment( { config: { // Set config variable to activate new sidebar feature // TODO: remove this when sidebar feature will be default wgVisualEditorConfig: ve.extendObject( {}, mw.config.get( 'wgVisualEditorConfig' ), { transclusionDialogNewSidebar: true } ) } } ) ); const createFragmentFromDoc = function ( 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.skip( '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( () => { // 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.true( false ); finishTest(); } ); windowInstance.closed.then( () => { assert.true( true ); finishTest(); } ); } ); }