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

Change subject: Include user's edit count in BOOT action
......................................................................


Include user's edit count in BOOT action

Action changes:
* Group user-related data in the user property, rather than repeating
  "isUser" and "user" prefixes.
* Include user's edit count in the user property of the action.

Reducer changes:
* Make the preview reducer handle the action's new shape.
* Make the eventLogging reducer add the bucketed user's edit count to
  the state tree.

Bug: T152225
Change-Id: I8fae9e2d0f6889ffdd30bb5192513d194f791967
---
M extension.json
M resources/ext.popups/actions.js
A resources/ext.popups/counts.js
M resources/ext.popups/reducers.js
M tests/qunit/ext.popups/actions.test.js
A tests/qunit/ext.popups/counts.test.js
M tests/qunit/ext.popups/reducers.eventLogging.test.js
M tests/qunit/ext.popups/reducers.test.js
8 files changed, 109 insertions(+), 15 deletions(-)

Approvals:
  Jhernandez: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/extension.json b/extension.json
index ff6c036..602d487 100644
--- a/extension.json
+++ b/extension.json
@@ -63,6 +63,7 @@
                                "resources/ext.popups/experiment.js",
                                "resources/ext.popups/actions.js",
                                "resources/ext.popups/processLinks.js",
+                               "resources/ext.popups/counts.js",
                                "resources/ext.popups/gateway.js",
                                "resources/ext.popups/reducers.js",
                                "resources/ext.popups/changeListener.js",
diff --git a/resources/ext.popups/actions.js b/resources/ext.popups/actions.js
index beb3165..42d58a7 100644
--- a/resources/ext.popups/actions.js
+++ b/resources/ext.popups/actions.js
@@ -44,9 +44,10 @@
         *  i.e. `mw.config`
         */
        actions.boot = function ( isUserInCondition, user, generateToken, 
config ) {
+               var editCount = config.get( 'wgUserEditCount' );
+
                return {
                        type: types.BOOT,
-                       isUserInCondition: isUserInCondition(),
                        sessionToken: user.sessionId(),
                        pageToken: generateToken(),
                        page: {
@@ -54,7 +55,11 @@
                                namespaceID: config.get( 'wgNamespaceNumber' ),
                                id: config.get( 'wgArticleId' )
                        },
-                       isUserAnon: user.isAnon()
+                       user: {
+                               isInCondition: isUserInCondition(),
+                               isAnon: user.isAnon(),
+                               editCount: editCount
+                       }
                };
        };
 
diff --git a/resources/ext.popups/counts.js b/resources/ext.popups/counts.js
new file mode 100644
index 0000000..47fed15
--- /dev/null
+++ b/resources/ext.popups/counts.js
@@ -0,0 +1,34 @@
+( function ( mw ) {
+
+       mw.popups.counts = {};
+
+       /**
+        * Return count bucket for the number of edits a user has made.
+        *
+        * The buckets are defined as part of
+        * [the Popups schema](https://meta.wikimedia.org/wiki/Schema:Popups).
+        *
+        * Extracted from `mw.popups.schemaPopups.getEditCountBucket`.
+        *
+        * @param {Number} count
+        * @return {String}
+        */
+       mw.popups.counts.getEditCountBucket = function ( count ) {
+               var bucket;
+
+               if ( count === 0 ) {
+                       bucket = '0';
+               } else if ( count >= 1 && count <= 4 ) {
+                       bucket = '1-4';
+               } else if ( count >= 5 && count <= 99 ) {
+                       bucket = '5-99';
+               } else if ( count >= 100 && count <= 999 ) {
+                       bucket = '100-999';
+               } else if ( count >= 1000 ) {
+                       bucket = '1000+';
+               }
+
+               return bucket + ' edits';
+       };
+
+}( mediaWiki ) );
diff --git a/resources/ext.popups/reducers.js b/resources/ext.popups/reducers.js
index cb8a9d9..44d9465 100644
--- a/resources/ext.popups/reducers.js
+++ b/resources/ext.popups/reducers.js
@@ -1,4 +1,8 @@
 ( function ( mw, $ ) {
+
+       // Sugar for the mw.popups.reducers.eventLogging reducer.
+       var counts = mw.popups.counts;
+
        mw.popups.reducers = {};
 
        /**
@@ -62,7 +66,7 @@
                switch ( action.type ) {
                        case mw.popups.actionTypes.BOOT:
                                return nextState( state, {
-                                       enabled: action.isUserInCondition
+                                       enabled: action.user.isInCondition
                                } );
                        case mw.popups.actionTypes.LINK_DWELL:
                                return nextState( state, {
@@ -155,10 +159,11 @@
                                                pageTitleSource: 
action.page.title,
                                                namespaceIdSource: 
action.page.namespaceID,
                                                pageIdSource: action.page.id,
-                                               isAnon: action.isUserAnon,
-                                               popupEnabled: 
action.isUserInCondition,
+                                               isAnon: action.user.isAnon,
+                                               popupEnabled: 
action.user.isInCondition,
                                                pageToken: action.pageToken,
-                                               sessionToken: 
action.sessionToken
+                                               sessionToken: 
action.sessionToken,
+                                               editCountBucket: 
counts.getEditCountBucket( action.user.editCount )
                                        },
                                        event: {
                                                action: 'pageLoaded'
diff --git a/tests/qunit/ext.popups/actions.test.js 
b/tests/qunit/ext.popups/actions.test.js
index ff49db7..b603764 100644
--- a/tests/qunit/ext.popups/actions.test.js
+++ b/tests/qunit/ext.popups/actions.test.js
@@ -15,7 +15,8 @@
                config.set( {
                        wgTitle: 'Foo',
                        wgNamespaceNumber: 1,
-                       wgArticleId: 2
+                       wgArticleId: 2,
+                       wgUserEditCount: 3
                } );
 
                assert.expect( 1 );
@@ -24,7 +25,6 @@
                        mw.popups.actions.boot( isUserInCondition, stubUser, 
generateToken, config ),
                        {
                                type: 'BOOT',
-                               isUserInCondition: false,
                                sessionToken: '0123456789',
                                pageToken: '9876543210',
                                page: {
@@ -32,7 +32,11 @@
                                        namespaceID: 1,
                                        id: 2
                                },
-                               isUserAnon: true
+                               user: {
+                                       isInCondition: false,
+                                       isAnon: true,
+                                       editCount: 3
+                               }
                        }
                );
        } );
diff --git a/tests/qunit/ext.popups/counts.test.js 
b/tests/qunit/ext.popups/counts.test.js
new file mode 100644
index 0000000..642ccab
--- /dev/null
+++ b/tests/qunit/ext.popups/counts.test.js
@@ -0,0 +1,37 @@
+( function ( mw ) {
+
+       QUnit.module( 'ext.popups/counts' );
+
+       QUnit.test( '#getEditCountBucket', function ( assert ) {
+               var i, bucket, count,
+                       cases = [
+                               [ 0, '0 edits' ],
+                               [ 1, '1-4 edits' ],
+                               [ 2, '1-4 edits' ],
+                               [ 4, '1-4 edits' ],
+                               [ 5, '5-99 edits' ],
+                               [ 25, '5-99 edits' ],
+                               [ 50, '5-99 edits' ],
+                               [ 99, '5-99 edits' ],
+                               [ 100, '100-999 edits' ],
+                               [ 101, '100-999 edits' ],
+                               [ 500, '100-999 edits' ],
+                               [ 999, '100-999 edits' ],
+                               [ 1000, '1000+ edits' ],
+                               [ 1500, '1000+ edits' ]
+                       ];
+
+               assert.expect( cases.length );
+
+               for ( i = 0; i < cases.length; i++ ) {
+                       count = cases[ i ][ 0 ];
+                       bucket = mw.popups.counts.getEditCountBucket( count );
+                       assert.equal(
+                               bucket,
+                               cases[ i ][ 1 ],
+                               'Edit count bucket is "' + bucket + '" when 
edit count is ' + count + '.'
+                       );
+               }
+       } );
+
+}( mediaWiki ) );
diff --git a/tests/qunit/ext.popups/reducers.eventLogging.test.js 
b/tests/qunit/ext.popups/reducers.eventLogging.test.js
index 00372ab..01fcb30 100644
--- a/tests/qunit/ext.popups/reducers.eventLogging.test.js
+++ b/tests/qunit/ext.popups/reducers.eventLogging.test.js
@@ -1,5 +1,7 @@
 ( function ( mw ) {
 
+       var counts = mw.popups.counts;
+
        QUnit.module( 'ext.popups/reducers#eventLogging', {
                setup: function () {
                        this.initialState = mw.popups.reducers.eventLogging( 
undefined, {
@@ -11,7 +13,6 @@
        QUnit.test( 'BOOT', function ( assert ) {
                var action = {
                        type: 'BOOT',
-                       isUserInCondition: true,
                        sessionToken: '0123456789',
                        pageToken: '9876543210',
                        page: {
@@ -19,7 +20,11 @@
                                namespaceID: 1,
                                id: 2
                        },
-                       isUserAnon: true
+                       user: {
+                               isInCondition: true,
+                               isAnon: false,
+                               editCount: 11
+                       }
                };
 
                assert.deepEqual(
@@ -29,10 +34,11 @@
                                        pageTitleSource: action.page.title,
                                        namespaceIdSource: 
action.page.namespaceID,
                                        pageIdSource: action.page.id,
-                                       isAnon: action.isUserAnon,
-                                       popupEnabled: action.isUserInCondition,
+                                       isAnon: action.user.isAnon,
+                                       popupEnabled: action.user.isInCondition,
                                        pageToken: action.pageToken,
-                                       sessionToken: action.sessionToken
+                                       sessionToken: action.sessionToken,
+                                       editCountBucket: 
counts.getEditCountBucket( action.user.editCount )
                                },
                                event: {
                                        action: 'pageLoaded'
diff --git a/tests/qunit/ext.popups/reducers.test.js 
b/tests/qunit/ext.popups/reducers.test.js
index aca18bb..45ecd45 100644
--- a/tests/qunit/ext.popups/reducers.test.js
+++ b/tests/qunit/ext.popups/reducers.test.js
@@ -38,7 +38,9 @@
        QUnit.test( '#preview: BOOT', function ( assert ) {
                var action = {
                        type: 'BOOT',
-                       isUserInCondition: true
+                       user: {
+                               isInCondition: true
+                       }
                };
 
                assert.expect( 1 );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I8fae9e2d0f6889ffdd30bb5192513d194f791967
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/Popups
Gerrit-Branch: mpga
Gerrit-Owner: Phuedx <samsm...@wikimedia.org>
Gerrit-Reviewer: Jhernandez <jhernan...@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