mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-12-05 03:08:37 +00:00
99523b855c
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
123 lines
3.1 KiB
JavaScript
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(), [] );
|
|
} );
|
|
} );
|
|
}() );
|