jenkins-bot has submitted this change and it was merged.

Change subject: Log events using mw#track
......................................................................


Log events using mw#track

MobileFrontend or, more specifically, anything that invokes the
Schema#log method, shouldn't explicitly depend on EventLogging as
currently as it's a soft dependency.

The EventLoggingHooks::onResourceLoaderRegisterModules documentation
recommends that extensions with a soft dependency on EventLogging use
mw#track.

Change-Id: I9f9195b26e9d99efd2a45b4febbfbdf509c7d15f
---
M resources/mobile.startup/Schema.js
M tests/qunit/mobile.startup/test_Schema.js
2 files changed, 45 insertions(+), 10 deletions(-)

Approvals:
  Jdlrobson: Looks good to me, but someone else must approve
  Bmansurov: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/resources/mobile.startup/Schema.js 
b/resources/mobile.startup/Schema.js
index 106981f..4da91ac 100644
--- a/resources/mobile.startup/Schema.js
+++ b/resources/mobile.startup/Schema.js
@@ -110,23 +110,28 @@
                        this.defaults = defaults;
                        Class.prototype.initialize.apply( this, arguments );
                },
+
                /**
-                * Actually log event via EventLogging
+                * Actually log event via the EventLogging subscriber.
+                *
+                * Since we have a soft dependency on the EventLogging 
extension, we use the
+                * `mw#track` method to log events to reduce coupling between 
the two extensions.
+                *
                 * @method
                 * @param {Object} data to log
                 * @return {jQuery.Deferred}
                 */
                log: function ( data ) {
-                       if ( mw.eventLog ) {
-                               // Log event if logging schema is not sampled 
or if user is in the bucket
-                               if ( !this.isSampled || this._isUserInBucket() 
) {
-                                       return mw.eventLog.logEvent( this.name, 
$.extend( {}, this.defaults, data ) );
-                               } else {
-                                       return $.Deferred().reject( 'User not 
in event sampling bucket.' );
-                               }
-                       } else {
-                               return $.Deferred().reject( 'EventLogging not 
installed.' );
+                       var deferred = $.Deferred();
+
+                       // Log event if logging schema is not sampled or if 
user is in the bucket
+                       if ( !this.isSampled || this._isUserInBucket() ) {
+                               mw.track( 'event.' + this.name, $.extend( {}, 
this.defaults, data ) );
+
+                               return deferred.resolve();
                        }
+
+                       return deferred.reject();
                },
 
                /**
diff --git a/tests/qunit/mobile.startup/test_Schema.js 
b/tests/qunit/mobile.startup/test_Schema.js
index 707aa0a..90d8cd3 100644
--- a/tests/qunit/mobile.startup/test_Schema.js
+++ b/tests/qunit/mobile.startup/test_Schema.js
@@ -70,4 +70,34 @@
                assert.strictEqual( testSchema._isUserInBucket(), false, 'user 
is not in bucket' );
        } );
 
+       QUnit.test( '#log', 2, function ( assert ) {
+               var schema = new TestSchema(),
+                       event = {
+                               foo: 'bar'
+                       };
+
+               // Restore Schema#log as we intend to stub the mw#track method.
+               TestSchema.prototype.log.restore();
+               this.sandbox.stub( mw, 'track' ).returns( undefined );
+
+               schema.log( event ).then( function () {
+                       assert.deepEqual(
+                               [ 'event.test', event ],
+                               mw.track.firstCall.args,
+                               '#log invokes mw#track and immediately resolves'
+                       );
+               } );
+
+               schema.isSampled = true;
+               this.sandbox.stub( schema, '_isUserInBucket' ).returns( false );
+
+               schema.log( event ).fail( function () {
+                       assert.strictEqual(
+                               1,
+                               mw.track.callCount,
+                               '#log doesn\'t invoke mw#track and rejects if 
the user isn\'t in the bucket.'
+                       );
+               } );
+       } );
+
 }( jQuery, mw.mobileFrontend ) );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I9f9195b26e9d99efd2a45b4febbfbdf509c7d15f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Phuedx <g...@samsmith.io>
Gerrit-Reviewer: Bmansurov <bmansu...@wikimedia.org>
Gerrit-Reviewer: Jdlrobson <jrob...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to