mediawiki-skins-MinervaNeue/tests/qunit/skins.minerva.scripts/test_AB.js
Stephen Niedzielski 22b2f0fd7c Hygiene: move page issues A/B test logging to file
Refactor the page issues A/B test logging implementation to a distinct
new file that only has the responsibility of tracking.

T191528 is referenced in this commit as I was having difficulty
answering the feedback and bugs reported in the current implementation
without working through and restructuring the flow as I understood it.
This refactor is merely a byproduct artifact of that effort to focus on
the parsing and presentation responsibilities.

Bug: T191528
Change-Id: If547a0a67fbc9a532f834fe374abf668309e73df
2018-08-14 20:49:06 +00:00

55 lines
1.4 KiB
JavaScript

( function ( M ) {
var AB = M.require( 'skins.minerva.scripts/AB' ),
util = M.require( 'mobile.startup/util' ),
defaultConfig = {
testName: 'WME.MinervaABTest',
samplingRate: 0.5,
sessionId: mw.user.generateRandomSessionId()
};
QUnit.module( 'Minerva AB-test' );
QUnit.test( 'Bucketing test', function ( assert ) {
var userBuckets = {
control: 0,
A: 0,
B: 0
},
maxUsers = 1000,
bucketingTest,
config,
i;
for ( i = 0; i < maxUsers; i++ ) {
config = util.extend( {}, defaultConfig, { sessionId: mw.user.generateRandomSessionId() } );
bucketingTest = new AB( config );
if ( bucketingTest.isA() ) {
++userBuckets.A;
} else if ( bucketingTest.isB() ) {
++userBuckets.B;
} else if ( !bucketingTest.isEnabled() ) {
++userBuckets.control;
} else {
throw new Error( 'Unknown bucket!' );
}
}
assert.strictEqual(
( userBuckets.control / maxUsers > 0.4 ) &&
( userBuckets.control / maxUsers < 0.6 ),
true, 'test control group is about 50% (' + userBuckets.control / 10 + '%)' );
assert.strictEqual(
( userBuckets.A / maxUsers > 0.2 ) &&
( userBuckets.A / maxUsers < 0.3 ),
true, 'test group A is about 25% (' + userBuckets.A / 10 + '%)' );
assert.strictEqual(
( userBuckets.B / maxUsers > 0.2 ) &&
( userBuckets.B / maxUsers < 0.3 ),
true, 'test group B is about 25% (' + userBuckets.B / 10 + '%)' );
} );
}( mw.mobileFrontend ) );