jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/398805 )

Change subject: Set the form revision data after saving a form with a 
FormChanger
......................................................................


Set the form revision data after saving a form with a FormChanger

Bug: T181253
Change-Id: Ie4310d173b0c6caa7fea5da4770f238a4a170424
---
M resources/entityChangers/FormChanger.js
M resources/view/ControllerViewFactory.js
M tests/qunit/entityChangers/FormChanger.tests.js
3 files changed, 67 insertions(+), 10 deletions(-)

Approvals:
  jenkins-bot: Verified
  Thiemo Kreuz (WMDE): Looks good to me, approved



diff --git a/resources/entityChangers/FormChanger.js 
b/resources/entityChangers/FormChanger.js
index 45adf33..c84a3dc 100644
--- a/resources/entityChangers/FormChanger.js
+++ b/resources/entityChangers/FormChanger.js
@@ -8,13 +8,16 @@
         * @constructor
         *
         * @param {mediaWiki.Api} api
+        * @param {wikibase.lexeme.RevisionStore} revisionStore
         * @param {string} lexemeId
         */
        var SELF = wb.lexeme.entityChangers.FormChanger = function 
WbLexemeFormChanger(
                api,
+               revisionStore,
                lexemeId
        ) {
                this.api = api;
+               this.revisionStore = revisionStore;
                this.lexemeId = lexemeId;
        };
 
@@ -24,6 +27,12 @@
                 * @private
                 */
                api: null,
+
+               /**
+                * @type {wikibase.lexeme.RevisionStore}
+                * @private
+                */
+               revisionStore: null,
 
                /**
                 * @type {string}
@@ -37,7 +46,8 @@
                 */
                save: function ( form ) {
                        var formSerializer = new 
wb.lexeme.serialization.FormSerializer(),
-                               lexemeDeserializer = new 
wb.lexeme.serialization.LexemeDeserializer();
+                               lexemeDeserializer = new 
wb.lexeme.serialization.LexemeDeserializer(),
+                               self = this;
 
                        if ( form.getId() ) {
                                return $.Deferred().resolve( form 
).promise();// TODO: implement edit form
@@ -61,7 +71,9 @@
                                errorformat: 'plaintext',
                                bot: 1
                        } ).then( function ( data ) {
-                               return lexemeDeserializer.deserializeForm( 
data.form );
+                               var form = lexemeDeserializer.deserializeForm( 
data.form );
+                               self.revisionStore.setFormRevision( 
data.lastrevid, form.getId() );
+                               return form;
                        } ).catch( function ( code, response ) {
                                throw convertPlainTextErrorsToRepoApiError( 
response.errors );
                        } );
diff --git a/resources/view/ControllerViewFactory.js 
b/resources/view/ControllerViewFactory.js
index 599eb5b..268ff30 100644
--- a/resources/view/ControllerViewFactory.js
+++ b/resources/view/ControllerViewFactory.js
@@ -26,12 +26,12 @@
                                repoApiUrl = repoConfig.url + 
repoConfig.scriptPath + '/api.php';
                        this._api = wb.api.getLocationAgnosticMwApi( repoApiUrl 
);
 
-                       var revisionStore = new wb.lexeme.RevisionStore(
+                       this._revisionStore = new wb.lexeme.RevisionStore(
                                entityChangersFactory.getRevisionStore()
                        );
                        var changersFactory = new 
wb.entityChangers.EntityChangersFactory(
                                new wb.api.RepoApi( this._api ),
-                               revisionStore,
+                               this._revisionStore,
                                entityChangersFactory.getEntity(),
                                function ( hookName ) {
                                        var hook = mw.hook( hookName );
@@ -81,6 +81,12 @@
         * @private
         */
        SELF.prototype._api = null;
+
+       /**
+        * @type {wikibase.lexeme.RevisionStore}
+        * @private
+        */
+       SELF.prototype._revisionStore = null;
 
        SELF.prototype.getEntityView = function ( startEditingCallback, lexeme, 
$entityview ) {
                return this._getView(
@@ -151,7 +157,7 @@
                        controller = this._getController(
                                this._toolbarFactory.getToolbarContainer( 
formView.element ),
                                formView,
-                               new wb.lexeme.entityChangers.FormChanger( 
this._api, lexemeId ),
+                               new wb.lexeme.entityChangers.FormChanger( 
this._api, this._revisionStore, lexemeId ),
                                removeCallback.bind( null, formView ),
                                form,
                                startEditingCallback
diff --git a/tests/qunit/entityChangers/FormChanger.tests.js 
b/tests/qunit/entityChangers/FormChanger.tests.js
index 332fd24..101243b 100644
--- a/tests/qunit/entityChangers/FormChanger.tests.js
+++ b/tests/qunit/entityChangers/FormChanger.tests.js
@@ -18,9 +18,12 @@
                var api = {
                        postWithToken: postWithToken
                };
+               var revisionStore = {
+                       setFormRevision: function () {}
+               };
 
                var lexemeId = 'L11';
-               var changer = new FormChanger( api, lexemeId );
+               var changer = new FormChanger( api, revisionStore, lexemeId );
                var representations = new TermMap( { en: new Term( 'en', 'test 
representation' ) } );
                var form = new Form( null, representations, [ 'Q1', 'Q2' ] );
 
@@ -54,7 +57,7 @@
                        postWithToken: function () {
                                return $.Deferred().resolve( {
                                        form: {
-                                               id: 'F100',
+                                               id: 'L1-F100',
                                                representations: {
                                                        en: {
                                                                language: 'en',
@@ -66,13 +69,16 @@
                                } ).promise();
                        }
                };
+               var revisionStore = {
+                       setFormRevision: function () {}
+               };
 
-               var changer = new FormChanger( api, 'L1' );
+               var changer = new FormChanger( api, revisionStore, 'L1' );
 
                var form = new Form( null, null, [] );
 
                changer.save( form ).then( function ( form ) {
-                       assert.equal( form.getId(), 'F100', 'Saved Form ID' );
+                       assert.equal( form.getId(), 'L1-F100', 'Saved Form ID' 
);
                        assert.equal(
                                form.getRepresentations().getItemByKey( 'en' 
).getText(),
                                'some representation',
@@ -83,6 +89,39 @@
                                [ 'Q1', 'Q2' ],
                                'Saved grammatical features'
                        );
+                       done();
+               } ).catch( done );
+       } );
+
+       QUnit.test( 'New form - save - sets the base revision to the one from 
API result', function ( assert ) {
+               var done = assert.async();
+
+               var api = {
+                       postWithToken: function () {
+                               return $.Deferred().resolve( {
+                                       form: { id: 'L1-F100' },
+                                       lastrevid: 303
+                               } ).promise();
+                       }
+               };
+               var revisionStore = {
+                       formBaseRevisions: {
+                       },
+                       getFormRevision: function ( formId ) {
+                               return this.formBaseRevisions[ formId ];
+                       },
+                       setFormRevision: function ( revision, formId ) {
+                               this.formBaseRevisions[ formId ] = revision;
+
+                       }
+               };
+
+               var changer = new FormChanger( api, revisionStore, 'L1' );
+
+               var form = new Form( null, null, [] );
+
+               changer.save( form ).then( function () {
+                       assert.equal( revisionStore.getFormRevision( 'L1-F100' 
), 303 );
                        done();
                } ).catch( done );
        } );
@@ -107,7 +146,7 @@
                                }
                        };
 
-                       var changer = new FormChanger( api, 'L1' );
+                       var changer = new FormChanger( api, {}, 'L1' );
 
                        var form = new Form( null, null, [] );
 

-- 
To view, visit https://gerrit.wikimedia.org/r/398805
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ie4310d173b0c6caa7fea5da4770f238a4a170424
Gerrit-PatchSet: 12
Gerrit-Project: mediawiki/extensions/WikibaseLexeme
Gerrit-Branch: master
Gerrit-Owner: WMDE-leszek <[email protected]>
Gerrit-Reviewer: Thiemo Kreuz (WMDE) <[email protected]>
Gerrit-Reviewer: WMDE-leszek <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to