mediawiki-extensions-Visual.../modules/ve-mw/tests/dm/ve.dm.MWTransclusionModel.test.js
Thiemo Kreuz 99523b855c Use and document the term "known parameter" in template code
The so called "spec" class keeps track of parameters that have
been used before, no matter if documented via TemplateData or
not. Removed parameters are still "known" (i.e. have been seen
before).

This feature allows to easily find previously used parameters
names when an undocumented parameter was removed and the user
tries to add it again.

Bug: T285483
Change-Id: Ia1555eea87cd99e7a3f386f4279ec5a80fb98a79
2021-07-01 12:03:38 +00:00

123 lines
3.1 KiB
JavaScript

/*!
* VisualEditor DataModel MWTransclusionModel tests.
*
* @copyright 2011-2020 VisualEditor Team and others; see http://ve.mit-license.org
*/
( function () {
QUnit.module( 've.dm.MWTransclusionModel', QUnit.newMwEnvironment( {
beforeEach() {
// Mock XHR for mw.Api()
this.server = this.sandbox.useFakeServer();
this.server.respondImmediately = true;
ve.test.utils.mwEnvironment.beforeEach.call( this );
},
afterEach() {
ve.test.utils.mwEnvironment.afterEach.call( this );
}
} ) );
function runAddPartTest( assert, name, response, server, callback ) {
const doc = ve.dm.Document.static.newBlankDocument(),
transclusion = new ve.dm.MWTransclusionModel( doc ),
part = ve.dm.MWTemplateModel.newFromName( transclusion, name ),
done = assert.async();
server.respondWith( [ 200, { 'Content-Type': 'application/json' }, JSON.stringify( response ) ] );
transclusion.addPart( part )
.then( () => {
callback( transclusion );
} )
.always( () => {
done();
} );
}
QUnit.test( 'fetch template part data', function ( assert ) {
const response = {
batchcomplete: '',
pages: {
1331311: {
title: 'Template:Test',
description: { en: 'MWTransclusionModel template test' },
params: {
test: {
label: { en: 'Test param' },
type: 'string',
description: { en: 'This is a test param' },
required: false,
suggested: false,
example: null,
deprecated: false,
aliases: [],
autovalue: null,
default: null
}
},
paramOrder: [ 'test' ],
format: 'inline',
sets: [],
maps: {}
}
}
};
runAddPartTest( assert, 'Test', response, this.server, ( transclusion ) => {
const parts = transclusion.getParts(),
spec = parts[ 0 ].getSpec();
assert.strictEqual( parts.length, 1 );
assert.strictEqual( spec.getDescription( 'en' ), 'MWTransclusionModel template test' );
assert.strictEqual( spec.getParameterLabel( 'test', 'en' ), 'Test param' );
} );
} );
// T243868
QUnit.test( 'fetch part data for parameterized template with no TemplateData', function ( assert ) {
const response = {
batchcomplete: '',
pages: {
1331311: {
title: 'Template:NoData',
notemplatedata: true,
params: {
foo: [],
bar: []
}
}
}
};
runAddPartTest( assert, 'NoData', response, this.server, ( transclusion ) => {
const parts = transclusion.getParts(),
spec = parts[ 0 ].getSpec();
assert.strictEqual( parts.length, 1 );
assert.deepEqual( spec.getKnownParameterNames(), [ 'foo', 'bar' ] );
} );
} );
QUnit.test( 'fetch part data for template with no TemplateData and no params', function ( assert ) {
const response = {
batchcomplete: '',
pages: {
1331311: {
title: 'Template:NoParams',
notemplatedata: true,
params: []
}
}
};
runAddPartTest( assert, 'NoParams', response, this.server, ( transclusion ) => {
const parts = transclusion.getParts(),
spec = parts[ 0 ].getSpec();
assert.strictEqual( parts.length, 1 );
assert.deepEqual( spec.getKnownParameterNames(), [] );
} );
} );
}() );