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

Reply via email to