jenkins-bot has submitted this change and it was merged.
Change subject: Use ViewFactory for building views in statementview
......................................................................
Use ViewFactory for building views in statementview
This change introduces a `ViewFactory` methods for building `ListItemAdapter`s
for `snaklistview` and `referenceview` widgets and a method for building
`snakview`s. These methods or `ListItemAdapter`s are passed to the
`statementlistview` so that it can create the widgets without having to
pass them all their dependencies.
This change leaves `listview` as an implementation detail of
`statementlistview`. This implementation detail is publicly represented by
having to pass in `listview.ListItemAdapter`s or methods building
`ListItemAdapter`s.
It improves separation between the `statementview` and `referenceview`,
`snakview` and `snaklistview`, since the `statementview` doesn't have to know
how to construct the other views anymore. It also allows to inject different
implementations, for example in tests.
This is a fifth step for T75380.
Change-Id: I996129807631f3b6b611c46715ab5d068c094a1b
---
M view/resources/jquery/wikibase/jquery.wikibase.statementview.js
M view/resources/wikibase/view/ViewFactory.js
M view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
M view/tests/qunit/jquery/wikibase/resources.php
M view/tests/qunit/wikibase/view/ViewFactory.tests.js
5 files changed, 381 insertions(+), 141 deletions(-)
Approvals:
Jonas Kress (WMDE): Verified; Looks good to me, approved
jenkins-bot: Verified
diff --git a/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
b/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
index ad33438..d445306 100644
--- a/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
+++ b/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
@@ -33,29 +33,22 @@
* The `Statement` displayed by the view. May be set initially only and
gets updated
* automatically if changes to the `Statement` are saved.
* If `null`, the view will be switched to edit mode initially.
+ * @param {Function} options.buildReferenceListItemAdapter
+ * @param {Function} options.buildSnakView
* @param {wikibase.utilities.ClaimGuidGenerator} options.guidGenerator
* Required for dynamically generating GUIDs for new `Statement`s.
* @param {wikibase.entityChangers.ClaimsChanger} options.claimsChanger
* Required to store the view's `Statement`.
- * @param {wikibase.entityIdFormatter.EntityIdHtmlFormatter}
options.entityIdHtmlFormatter
- * Required for dynamically rendering links to `Entity`s.
* @param {wikibase.entityIdFormatter.EntityIdPlainFormatter}
options.entityIdPlainFormatter
* Required for dynamically rendering plain text references to
`Entity`s.
* @param {wikibase.entityChangers.ReferencesChanger} options.referencesChanger
* Required to store the `Reference`s gathered from the
`referenceview`s aggregated by the
* `statementview`.
- * @param {wikibase.store.EntityStore} options.entityStore
- * Required for dynamically gathering `Entity`/`Property` information.
- * @param {wikibase.ValueViewBuilder} options.valueViewBuilder
- * Required by the `snakview` interfacing a `snakview` "value"
`Variation` to
- * `jQuery.valueview`.
- * @param {dataTypes.DataTypeStore} options.dataTypeStore
- * Required by the `snakview` for retrieving and evaluating a proper
`dataTypes.DataType`
- * object when interacting on a "value" `Variation`.
* @param {Object} [options.predefined={ mainSnak: false }]
* Allows to predefine certain aspects of the `Statement` to be created
from the view. If
* this option is omitted, an empty view is created. A common use-case
is adding a value to a
* property existing already by specifying, for example: `{
mainSnak.property: 'P1' }`.
+ * @param {jQuery.wikibase.listview.ListItemAdapter}
options.qualifiersListItemAdapter
* @param {Object} [options.locked={ mainSnak: false }]
* Elements that shall be locked and may not be changed by user
interaction.
* @param {string} [options.helpMessage=mw.msg(
'wikibase-claimview-snak-new-tooltip' )]
@@ -106,8 +99,6 @@
value: null,
claimsChanger: null,
referencesChanger: null,
- dataTypeStore: null,
- entityIdHtmlFormatter: null,
entityIdPlainFormatter: null,
predefined: {
mainSnak: false
@@ -151,12 +142,13 @@
* @throws {Error} if a required option is not specified properly.
*/
_create: function() {
- if ( !this.options.entityStore
- || !this.options.valueViewBuilder
+ if ( !this.options.buildReferenceListItemAdapter
+ || !this.options.buildSnakView
|| !this.options.claimsChanger
|| !this.options.referencesChanger
- || !this.options.dataTypeStore
+ || !this.options.entityIdPlainFormatter
|| !this.options.guidGenerator
+ || !this.options.qualifiersListItemAdapter
) {
throw new Error( 'Required option not specified
properly' );
}
@@ -217,17 +209,14 @@
event.stopPropagation();
} );
- this._mainSnakSnakView = this.$mainSnak.snakview( {
- value: snak || undefined,
- locked: this.options.locked.mainSnak,
- autoStartEditing: false,
- dataTypeStore: this.options.dataTypeStore,
- entityIdHtmlFormatter:
this.options.entityIdHtmlFormatter,
- entityIdPlainFormatter:
this.options.entityIdPlainFormatter,
- entityStore: this.options.entityStore,
- valueViewBuilder: this.options.valueViewBuilder,
- encapsulatedBy: ':' + this.widgetFullName.toLowerCase()
- } ).data( 'snakview' );
+ this._mainSnakSnakView = this.options.buildSnakView(
+ {
+ locked: this.options.locked.mainSnak,
+ autoStartEditing: false
+ },
+ snak,
+ this.$mainSnak
+ );
},
/**
@@ -261,20 +250,7 @@
$qualifiers = $( '<div/>' ).prependTo( this.$qualifiers
);
}
$qualifiers.listview( {
- listItemAdapter: new
$.wikibase.listview.ListItemAdapter( {
- listItemWidget: $.wikibase.snaklistview,
- newItemOptionsFn: function( value ) {
- return {
- value: value || undefined,
- singleProperty: true,
- dataTypeStore:
self.options.dataTypeStore,
- entityIdHtmlFormatter:
self.options.entityIdHtmlFormatter,
- entityIdPlainFormatter:
self.options.entityIdPlainFormatter,
- entityStore:
self.options.entityStore,
- valueViewBuilder:
self.options.valueViewBuilder
- };
- }
- } ),
+ listItemAdapter: this.options.qualifiersListItemAdapter,
value: groupedQualifierSnaks
} )
.on( 'snaklistviewstopediting.' + this.widgetName, function(
event, dropValue ) {
@@ -321,23 +297,9 @@
return;
}
- var lia = new $.wikibase.listview.ListItemAdapter( {
- listItemWidget: $.wikibase.referenceview,
- newItemOptionsFn: function( value ) {
- return {
- value: value || null,
- statementGuid: self.options.value
- ?
self.options.value.getClaim().getGuid()
- : null,
- dataTypeStore:
self.options.dataTypeStore,
- entityIdHtmlFormatter:
self.options.entityIdHtmlFormatter,
- entityIdPlainFormatter:
self.options.entityIdPlainFormatter,
- entityStore: self.options.entityStore,
- valueViewBuilder:
self.options.valueViewBuilder,
- referencesChanger:
self.options.referencesChanger
- };
- }
- } );
+ var lia = this.options.buildReferenceListItemAdapter(
+ this.options.value ?
this.options.value.getClaim().getGuid() : null
+ );
$listview.listview( {
listItemAdapter: lia,
diff --git a/view/resources/wikibase/view/ViewFactory.js
b/view/resources/wikibase/view/ViewFactory.js
index 1760098..1372521 100644
--- a/view/resources/wikibase/view/ViewFactory.js
+++ b/view/resources/wikibase/view/ViewFactory.js
@@ -301,12 +301,39 @@
}
},
+ buildReferenceListItemAdapter: $.proxy(
this.getListItemAdapterForReferenceView, this ),
+ buildSnakView: $.proxy(
+ this.getSnakView,
+ this,
+ ':' +
$.wikibase.statementview.prototype.widgetFullName.toLowerCase()
+ ),
claimsChanger:
this._entityChangersFactory.getClaimsChanger(),
+ entityIdPlainFormatter:
this._entityIdPlainFormatter,
+ guidGenerator: new
wb.utilities.ClaimGuidGenerator( entityId ),
+ qualifiersListItemAdapter:
this.getListItemAdapterForSnakListView(),
+ referencesChanger:
this._entityChangersFactory.getReferencesChanger()
+ };
+ }, this )
+ } );
+ };
+
+ /**
+ * Construct a `ListItemAdapter` for `referenceview`s
+ *
+ * @param {string} statementGuid
+ * @return {jQuery.wikibase.listview.ListItemAdapter} The constructed
ListItemAdapter
+ */
+ SELF.prototype.getListItemAdapterForReferenceView = function(
statementGuid ) {
+ return new $.wikibase.listview.ListItemAdapter( {
+ listItemWidget: $.wikibase.referenceview,
+ newItemOptionsFn: $.proxy( function( value ) {
+ return {
+ value: value || null,
+ statementGuid: statementGuid,
dataTypeStore: this._dataTypeStore,
entityIdHtmlFormatter:
this._entityIdHtmlFormatter,
entityIdPlainFormatter:
this._entityIdPlainFormatter,
entityStore: this._entityStore,
- guidGenerator: new
wb.utilities.ClaimGuidGenerator( entityId ),
referencesChanger:
this._entityChangersFactory.getReferencesChanger(),
valueViewBuilder:
this._getValueViewBuilder()
};
@@ -315,6 +342,55 @@
};
/**
+ * Construct a `ListItemAdapter` for `snaklistview`s
+ *
+ * @return {jQuery.wikibase.listview.ListItemAdapter} The constructed
ListItemAdapter
+ */
+ SELF.prototype.getListItemAdapterForSnakListView = function() {
+ return new $.wikibase.listview.ListItemAdapter( {
+ listItemWidget: $.wikibase.snaklistview,
+ newItemOptionsFn: $.proxy( function( value ) {
+ return {
+ value: value || undefined,
+ singleProperty: true,
+ dataTypeStore: this._dataTypeStore,
+ entityIdHtmlFormatter:
this._entityIdHtmlFormatter,
+ entityIdPlainFormatter:
this._entityIdPlainFormatter,
+ entityStore: this._entityStore,
+ valueViewBuilder:
this._getValueViewBuilder()
+ };
+ }, this )
+ } );
+ };
+
+ /**
+ * Construct a suitable view for the given snak on the given DOM element
+ *
+ * @param {string|null} encapsulatedBy A jQuery selector for getting
the encapsulating view
+ * @param {Object} options An object with keys `locked` and
`autoStartEditing`
+ * @param {wikibase.datamodel.Snak|null} snak
+ * @param {jQuery} $dom
+ * @return {jQuery.wikibase.snakview} The constructed snakview
+ */
+ SELF.prototype.getSnakView = function( encapsulatedBy, options, snak,
$dom ) {
+ return this._getView(
+ 'snakview',
+ $dom,
+ {
+ value: snak || undefined,
+ locked: options.locked,
+ autoStartEditing: options.autoStartEditing,
+ dataTypeStore: this._dataTypeStore,
+ entityIdHtmlFormatter:
this._entityIdHtmlFormatter,
+ entityIdPlainFormatter:
this._entityIdPlainFormatter,
+ entityStore: this._entityStore,
+ valueViewBuilder: this._getValueViewBuilder(),
+ encapsulatedBy: encapsulatedBy
+ }
+ );
+ };
+
+ /**
* @private
* @return {wikibase.ValueViewBuilder}
**/
diff --git
a/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
b/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
index 561bd09..92a99a4 100644
--- a/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
+++ b/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
@@ -20,20 +20,6 @@
}
} ) );
-var entityStore = {
- get: function() {
- return $.Deferred().resolve(
- new wb.datamodel.Property(
- 'P1',
- 'string',
- new wb.datamodel.Fingerprint( new
wb.datamodel.TermMap( [
- new wb.datamodel.Term( 'en', 'P1' )
- ] ) )
- )
- );
- }
-};
-
/**
* @param {Object} [options]
* @param {jQuery} [$node]
@@ -41,22 +27,54 @@
*/
var createStatementview = function( options, $node ) {
options = $.extend( {
- entityStore: entityStore,
- entityIdHtmlFormatter: {
- format: function( entityId ) {
- return $.Deferred().resolve( entityId
).promise();
- }
+ buildReferenceListItemAdapter: function() {
+ return wb.tests.getMockListItemAdapter(
+ 'mytestreferenceview',
+ function() {
+ this.value = function() {
+ return this.options.value;
+ };
+ }
+ );
},
+ buildSnakView: function( options, value, $dom ) {
+ var _value = value;
+ return {
+ destroy: function() {},
+ isInitialValue: function() {
+ return true;
+ },
+ isValid: function() {
+ return true;
+ },
+ option: function() {},
+ snak: function() {
+ return _value;
+ },
+ startEditing: function() {
+ $dom.trigger(
'snakviewafterstartediting' );
+ },
+ stopEditing: function() {}
+ };
+ },
+ claimsChanger: 'I am a ClaimsChanger',
entityIdPlainFormatter: {
format: function( entityId ) {
return $.Deferred().resolve( entityId
).promise();
}
},
- valueViewBuilder: 'I am a valueview builder',
- claimsChanger: 'I am a ClaimsChanger',
- referencesChanger: 'I am a ReferencesChanger',
- dataTypeStore: 'I am a DataTypeStore',
- guidGenerator: 'I am a ClaimGuidGenerator'
+ guidGenerator: 'I am a ClaimGuidGenerator',
+ locked: 'I am a',
+ predefined: 'I am a',
+ qualifiersListItemAdapter: wb.tests.getMockListItemAdapter(
+ 'mytestqualifiersview',
+ function() {
+ this.value = function() {
+ return this.options.value;
+ };
+ }
+ ),
+ referencesChanger: 'I am a ReferencesChanger'
}, options || {} );
$node = $node || $( '<div/>' ).appendTo( 'body' );
@@ -222,8 +240,12 @@
assert.ok( statementview.isInEditMode(), 'should be in edit
mode after starting editing' );
// Change main snak
- statementview.$mainSnak.find( ':wikibase-entityselector'
).data( 'wikibase-entityselector' )._select( { id: 'P1' } );
- statementview.$mainSnak.find( ':wikibase-snaktypeselector'
).data( 'snaktypeselector' ).snakType( 'novalue' );
+ statementview._mainSnakSnakView.snak = function() {
+ return snak;
+ };
+ statementview._mainSnakSnakView.isInitialValue = function() {
+ return false;
+ };
QUnit.stop();
return statementview.stopEditing( false );
diff --git a/view/tests/qunit/jquery/wikibase/resources.php
b/view/tests/qunit/jquery/wikibase/resources.php
index 9a426ae..a98f169 100644
--- a/view/tests/qunit/jquery/wikibase/resources.php
+++ b/view/tests/qunit/jquery/wikibase/resources.php
@@ -293,6 +293,7 @@
'wikibase.datamodel.Reference',
'wikibase.datamodel.ReferenceList',
'wikibase.datamodel.Statement',
+ 'wikibase.tests.getMockListItemAdapter',
),
),
diff --git a/view/tests/qunit/wikibase/view/ViewFactory.tests.js
b/view/tests/qunit/wikibase/view/ViewFactory.tests.js
index 317ab1e..4ec9b8c 100644
--- a/view/tests/qunit/wikibase/view/ViewFactory.tests.js
+++ b/view/tests/qunit/wikibase/view/ViewFactory.tests.js
@@ -162,8 +162,182 @@
} );
QUnit.test( 'getListItemAdapterForStatementView passes correct options
to ListItemAdapter', function( assert ) {
+ var entityId = 'Q1',
+ value = null,
+ claimsChanger = {},
+ referencesChanger = {},
+ entityChangersFactory = {
+ getClaimsChanger: function() { return
claimsChanger; },
+ getReferencesChanger: function() { return
referencesChanger; }
+ },
+ entityIdPlainFormatter = {},
+ viewFactory = new ViewFactory( null, null,
entityChangersFactory, null, entityIdPlainFormatter ),
+ ListItemAdapter = sinon.spy( $.wikibase.listview,
'ListItemAdapter' );
+
+ viewFactory.getListItemAdapterForStatementView( entityId, null
);
+
+ sinon.assert.calledWith(
+ ListItemAdapter,
+ sinon.match( {
+ listItemWidget: $.wikibase.statementview,
+ newItemOptionsFn: sinon.match.func
+ } )
+ );
+
+ var result = ListItemAdapter.args[0][0].newItemOptionsFn( value
);
+
+ assert.deepEqual(
+ result,
+ {
+ value: value,
+ predefined: {
+ mainSnak: {
+ property: undefined
+ }
+ },
+ locked: {
+ mainSnak: {
+ property: false
+ }
+ },
+
+ buildReferenceListItemAdapter:
result.buildReferenceListItemAdapter, // Hack
+ buildSnakView: result.buildSnakView, // Hack
+ claimsChanger: claimsChanger,
+ entityIdPlainFormatter: entityIdPlainFormatter,
+ guidGenerator: result.guidGenerator, // Hack
+ qualifiersListItemAdapter:
result.qualifiersListItemAdapter, // Hack
+ referencesChanger: referencesChanger
+ }
+ );
+
+ assert.ok( result.guidGenerator instanceof
wb.utilities.ClaimGuidGenerator );
+ assert.ok( result.buildReferenceListItemAdapter instanceof
Function );
+ assert.ok( result.buildSnakView instanceof Function );
+ assert.ok( result.qualifiersListItemAdapter instanceof
ListItemAdapter );
+
+ $.wikibase.listview.ListItemAdapter.restore();
+ } );
+
+ QUnit.test( 'getListItemAdapterForStatementView passes correct options
to views for pre-set property id', function( assert ) {
+ var entityId = 'Q1',
+ propertyId = 'propertyId',
+ value = null,
+ entityChangersFactory = {
+ getClaimsChanger: function() { return {}; },
+ getReferencesChanger: function() { return {}; }
+ },
+ viewFactory = new ViewFactory( null, null,
entityChangersFactory ),
+ ListItemAdapter = sinon.spy( $.wikibase.listview,
'ListItemAdapter' );
+
+ viewFactory.getListItemAdapterForStatementView( entityId,
propertyId );
+
+ var result = ListItemAdapter.args[0][0].newItemOptionsFn( value
);
+
+ assert.equal( result.predefined.mainSnak.property, propertyId );
+ assert.equal( result.locked.mainSnak.property, true );
+
+ $.wikibase.listview.ListItemAdapter.restore();
+ } );
+
+ QUnit.test( 'getListItemAdapterForStatementView passes correct options
to views for non-empty StatementList', function( assert ) {
+ var entityId = new wb.datamodel.EntityId( 'type', 1 ),
+ propertyId = 'P1',
+ value = new wb.datamodel.Statement( new
wb.datamodel.Claim( new wb.datamodel.PropertyNoValueSnak( propertyId ) ) ),
+ entityChangersFactory = {
+ getClaimsChanger: function() { return {}; },
+ getReferencesChanger: function() { return {}; }
+ },
+ viewFactory = new ViewFactory( null, null,
entityChangersFactory ),
+ ListItemAdapter = sinon.spy( $.wikibase.listview,
'ListItemAdapter' );
+
+ viewFactory.getListItemAdapterForStatementView( entityId, null
);
+
+ var result = ListItemAdapter.args[0][0].newItemOptionsFn( value
);
+
+ assert.equal( result.predefined.mainSnak.property, propertyId );
+ assert.equal( result.locked.mainSnak.property, true );
+
+ $.wikibase.listview.ListItemAdapter.restore();
+ } );
+
+ QUnit.test( 'getListItemAdapterForReferenceView passes correct options
to ListItemAdapter', function( assert ) {
var contentLanguages = {},
- entityId = 'Q1',
+ value = null,
+ dataTypeStore = {},
+ claimsChanger = {},
+ referencesChanger = {},
+ entityChangersFactory = {
+ getClaimsChanger: function() { return
claimsChanger; },
+ getReferencesChanger: function() { return
referencesChanger; }
+ },
+ entityIdHtmlFormatter = {},
+ entityIdPlainFormatter = {},
+ entityStore = {},
+ expertStore = {},
+ formatterStore = {},
+ messageProvider = {},
+ parserStore = {},
+ userLanguages = [],
+ viewFactory = new ViewFactory(
+ contentLanguages,
+ dataTypeStore,
+ entityChangersFactory,
+ entityIdHtmlFormatter,
+ entityIdPlainFormatter,
+ entityStore,
+ expertStore,
+ formatterStore,
+ messageProvider,
+ parserStore,
+ userLanguages
+ ),
+ statementGuid = 'statementGuid',
+ ListItemAdapter = sinon.spy( $.wikibase.listview,
'ListItemAdapter' );
+
+ viewFactory.getListItemAdapterForReferenceView( statementGuid );
+
+ sinon.assert.calledWith(
+ ListItemAdapter,
+ sinon.match( {
+ listItemWidget: $.wikibase.referenceview,
+ newItemOptionsFn: sinon.match.func
+ } )
+ );
+
+ sinon.spy( wb, 'ValueViewBuilder' );
+
+ var result = ListItemAdapter.args[0][0].newItemOptionsFn( value
);
+
+ assert.deepEqual(
+ result,
+ {
+ value: value || null,
+ statementGuid: statementGuid,
+ dataTypeStore: dataTypeStore,
+ entityIdHtmlFormatter: entityIdHtmlFormatter,
+ entityIdPlainFormatter: entityIdPlainFormatter,
+ entityStore: entityStore,
+ referencesChanger: referencesChanger,
+ valueViewBuilder:
wb.ValueViewBuilder.returnValues[0]
+ }
+ );
+
+ sinon.assert.calledWith( wb.ValueViewBuilder,
+ expertStore,
+ formatterStore,
+ parserStore,
+ userLanguages[0],
+ messageProvider,
+ contentLanguages
+ );
+
+ wb.ValueViewBuilder.restore();
+ $.wikibase.listview.ListItemAdapter.restore();
+ } );
+
+ QUnit.test( 'getListItemAdapterForSnakListView passes correct options
to ListItemAdapter', function( assert ) {
+ var contentLanguages = {},
value = null,
dataTypeStore = {},
claimsChanger = {},
@@ -195,47 +369,32 @@
),
ListItemAdapter = sinon.spy( $.wikibase.listview,
'ListItemAdapter' );
- sinon.spy( wb, 'ValueViewBuilder' );
-
- viewFactory.getListItemAdapterForStatementView( entityId, null
);
+ viewFactory.getListItemAdapterForSnakListView();
sinon.assert.calledWith(
ListItemAdapter,
sinon.match( {
- listItemWidget: $.wikibase.statementview,
+ listItemWidget: $.wikibase.snaklistview,
newItemOptionsFn: sinon.match.func
} )
);
+
+ sinon.spy( wb, 'ValueViewBuilder' );
var result = ListItemAdapter.args[0][0].newItemOptionsFn( value
);
assert.deepEqual(
result,
{
- value: value,
- predefined: {
- mainSnak: {
- property: undefined
- }
- },
- locked: {
- mainSnak: {
- property: false
- }
- },
-
- claimsChanger: claimsChanger,
+ value: value || undefined,
+ singleProperty: true,
dataTypeStore: dataTypeStore,
entityIdHtmlFormatter: entityIdHtmlFormatter,
entityIdPlainFormatter: entityIdPlainFormatter,
entityStore: entityStore,
- guidGenerator: result.guidGenerator, // Hack
- referencesChanger: referencesChanger,
valueViewBuilder:
wb.ValueViewBuilder.returnValues[0]
}
);
-
- assert.ok( result.guidGenerator instanceof
wb.utilities.ClaimGuidGenerator );
sinon.assert.calledWith( wb.ValueViewBuilder,
expertStore,
@@ -250,52 +409,72 @@
$.wikibase.listview.ListItemAdapter.restore();
} );
- QUnit.test( 'getListItemAdapterForStatementView passes correct options
to views for pre-set property id', function( assert ) {
- var entityId = 'Q1',
- propertyId = 'propertyId',
+ QUnit.test( 'getSnakView passes correct options to ListItemAdapter',
function( assert ) {
+ var contentLanguages = {},
value = null,
+ dataTypeStore = {},
+ claimsChanger = {},
entityChangersFactory = {
- getClaimsChanger: function() { return {}; },
- getReferencesChanger: function() { return {}; }
+ getClaimsChanger: function() { return
claimsChanger; }
},
- viewFactory = new ViewFactory( null, null,
entityChangersFactory ),
- ListItemAdapter = sinon.spy( $.wikibase.listview,
'ListItemAdapter' );
+ entityIdHtmlFormatter = {},
+ entityIdPlainFormatter = {},
+ entityStore = {},
+ expertStore = {},
+ formatterStore = {},
+ messageProvider = {},
+ parserStore = {},
+ userLanguages = [],
+ viewFactory = new ViewFactory(
+ contentLanguages,
+ dataTypeStore,
+ entityChangersFactory,
+ entityIdHtmlFormatter,
+ entityIdPlainFormatter,
+ entityStore,
+ expertStore,
+ formatterStore,
+ messageProvider,
+ parserStore,
+ userLanguages
+ ),
+ encapsulatedBy = 'encapsulatedBy',
+ options = {},
+ $dom = $( '<div/>' );
+
+ $dom.snakview = sinon.stub( $.wikibase, 'snakview' );
sinon.spy( wb, 'ValueViewBuilder' );
- viewFactory.getListItemAdapterForStatementView( entityId,
propertyId );
+ viewFactory.getSnakView( encapsulatedBy, options, value, $dom );
- var result = ListItemAdapter.args[0][0].newItemOptionsFn( value
);
+ sinon.assert.calledWith(
+ $.wikibase.snakview,
+ sinon.match( {
+ value: value || undefined,
+ locked: options.locked,
+ autoStartEditing: options.autoStartEditing,
+ dataTypeStore: dataTypeStore,
+ entityIdHtmlFormatter: entityIdHtmlFormatter,
+ entityIdPlainFormatter: entityIdPlainFormatter,
+ entityStore: entityStore,
+ valueViewBuilder:
wb.ValueViewBuilder.returnValues[0],
+ encapsulatedBy: encapsulatedBy
+ } )
+ );
- assert.equal( result.predefined.mainSnak.property, propertyId );
- assert.equal( result.locked.mainSnak.property, true );
+ sinon.assert.calledWith( wb.ValueViewBuilder,
+ expertStore,
+ formatterStore,
+ parserStore,
+ userLanguages[0],
+ messageProvider,
+ contentLanguages
+ );
wb.ValueViewBuilder.restore();
- $.wikibase.listview.ListItemAdapter.restore();
- } );
- QUnit.test( 'getListItemAdapterForStatementView passes correct options
to views for non-empty StatementList', function( assert ) {
- var entityId = new wb.datamodel.EntityId( 'type', 1 ),
- propertyId = 'P1',
- value = new wb.datamodel.Statement( new
wb.datamodel.Claim( new wb.datamodel.PropertyNoValueSnak( propertyId ) ) ),
- entityChangersFactory = {
- getClaimsChanger: function() { return {}; },
- getReferencesChanger: function() { return {}; }
- },
- viewFactory = new ViewFactory( null, null,
entityChangersFactory ),
- ListItemAdapter = sinon.spy( $.wikibase.listview,
'ListItemAdapter' );
-
- sinon.spy( wb, 'ValueViewBuilder' );
-
- viewFactory.getListItemAdapterForStatementView( entityId, null
);
-
- var result = ListItemAdapter.args[0][0].newItemOptionsFn( value
);
-
- assert.equal( result.predefined.mainSnak.property, propertyId );
- assert.equal( result.locked.mainSnak.property, true );
-
- wb.ValueViewBuilder.restore();
- $.wikibase.listview.ListItemAdapter.restore();
+ $.wikibase.snakview.restore();
} );
QUnit.test( 'getEntityTermsView passes correct options to views',
function( assert ) {
--
To view, visit https://gerrit.wikimedia.org/r/246767
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I996129807631f3b6b611c46715ab5d068c094a1b
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Lang <[email protected]>
Gerrit-Reviewer: Adrian Lang <[email protected]>
Gerrit-Reviewer: Jonas Kress (WMDE) <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits