mediawiki-extensions-Visual.../modules/ve-mw/tests/dm/models/ve.dm.MWTransclusionModel.test.js
Thiemo Kreuz d59a4366db Change TransclusionModel.nextUniquePartId() to return a string
The numeric part of these ids is never used on it's own. There is no
need to expose it.

Note we renamed the method not long ago in I6eeab8b to reflect better
what it does. This is the next step. We just forgot it back then.

Change-Id: I5da82855e99ea3a42a5d91379c6974ae9c154518
2022-04-19 13:48:30 +02:00

126 lines
3.3 KiB
JavaScript

/*!
* VisualEditor DataModel MWTransclusionModel tests.
*
* @copyright 2011-2020 VisualEditor Team and others; see http://ve.mit-license.org
*/
{
QUnit.module( 've.dm.MWTransclusionModel', ve.test.utils.newMwEnvironment( {
beforeEach() {
// Mock XHR for mw.Api()
this.server = this.sandbox.useFakeServer();
this.server.respondImmediately = true;
}
} ) );
const runAddPartTest = function ( 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( 'nextUniquePartId', function ( assert ) {
const transclusion = new ve.dm.MWTransclusionModel();
assert.strictEqual( transclusion.nextUniquePartId(), 'part_0' );
assert.strictEqual( transclusion.nextUniquePartId(), 'part_1' );
assert.strictEqual( transclusion.nextUniquePartId(), 'part_2' );
} );
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(), [] );
} );
} );
}