mediawiki-extensions-Visual.../modules/ve-mw/tests/dm/ve.dm.MWTemplateModel.test.js
Máté Szabó d127dc48b7 ve.dm.MWTemplateModel: Don't add spurious empty parameters
Make ve.dm.MWTemplateModel#serialize ignore empty parameters if they were not
present in the transclusion before the edit. This avoids dirty diffs where an
user edits a template transclusion via VisualEditor, and the editor adds all
available template parameters to the edit wikitext, even if they were not
changed during the edit.

This logic was ported from the old Wikia-WMF VisualEditor project.[1]

Additionally, add tests for ve.dm.MWTemplateModel serialization.

---
[1] https://github.com/Wikia/app/pull/6450/commits/858eaa9

Bug: T101075
Change-Id: I35f8812724658904d30034db4e4684193a661c1e
2020-11-16 19:54:44 +01:00

83 lines
2.5 KiB
JavaScript

/*!
* VisualEditor DataModel MWTemplateModel tests.
*
* @copyright 2011-2020 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
( function () {
var transclusionData = {
params: {
foo: { wt: 'Foo value' },
bar: { wt: 'Bar value' },
empty: { wt: '' }
},
target: {
href: './Template:Test',
wt: 'Test'
}
};
QUnit.module( 've.dm.MWTemplateModel', ve.test.utils.mwEnvironment );
/**
* Create a new MWTemplateModel initialized with a static transclusion data fixture.
*
* @return {ve.dm.MWTemplateModel}
*/
function newTemplateModel() {
var doc = ve.dm.Document.static.newBlankDocument(),
transclusion = new ve.dm.MWTransclusionModel( doc ),
clonedTransclusionData = ve.extendObject( {}, transclusionData );
return ve.dm.MWTemplateModel.newFromData( transclusion, clonedTransclusionData );
}
/* Tests */
QUnit.test( 'serialize input parameters', function ( assert ) {
var templateModel = newTemplateModel(),
serializedTransclusionData = templateModel.serialize();
assert.deepEqual( serializedTransclusionData, { template: transclusionData } );
} );
QUnit.test( 'serialize changed input parameters', function ( assert ) {
var templateModel = newTemplateModel(),
newParameterModel = new ve.dm.MWParameterModel( templateModel, 'baz', 'Baz value' ),
serializedTransclusionData;
templateModel.addParameter( newParameterModel );
serializedTransclusionData = templateModel.serialize();
assert.deepEqual( serializedTransclusionData.template.params.baz, { wt: 'Baz value' } );
} );
// T75134
QUnit.test( 'serialize after parameter was removed', function ( assert ) {
var templateModel = newTemplateModel(),
barParam = templateModel.getParameter( 'bar' ),
serializedTransclusionData;
templateModel.removeParameter( barParam );
serializedTransclusionData = templateModel.serialize();
assert.deepEqual( serializedTransclusionData.template.params, { foo: { wt: 'Foo value' }, empty: { wt: '' } } );
} );
// T101075
QUnit.test( 'serialize without empty parameter not present in original parameter set', function ( assert ) {
var templateModel = newTemplateModel(),
newEmptyParam = new ve.dm.MWParameterModel( templateModel, 'new_empty', '' ),
serializedTransclusionData;
templateModel.addParameter( newEmptyParam );
serializedTransclusionData = templateModel.serialize();
assert.deepEqual( serializedTransclusionData, { template: transclusionData } );
} );
}() );