mediawiki-extensions-Multim.../tests/qunit/mmv/logging/mmv.logging.ViewLogger.test.js
Timo Tijhof 5bf1466e7f Remove use of QUnit.test(, testCount, )
* Removed deprecated testCount, which is no longer supported in this way.
  It's only useful when wanting to explicitly expect 0 assertions (normally
  considered an error).
* Replaced use of testCount = 0, with assert.expect( 0 ).

Change-Id: I8fe82032d3af2a1ad2ed7febdb90a95d56dd3fc4
2017-07-26 00:12:06 +00:00

88 lines
2.4 KiB
JavaScript

( function ( mw, $ ) {
QUnit.module( 'mmv.logging.ViewLogger', QUnit.newMwEnvironment( {
setup: function () {
this.clock = this.sandbox.useFakeTimers();
// since jQuery 2/3, $.now will capture a reference to Date.now
// before above fake timer gets a chance to override it, so I'll
// override that new behavior in order to run these tests...
// @see https://github.com/sinonjs/lolex/issues/76
this.oldNow = $.now;
$.now = function () { return +( new Date() ); };
},
teardown: function () {
$.now = this.oldNow;
this.clock.restore();
}
} ) );
QUnit.test( 'unview()', function ( assert ) {
var logger = { log: $.noop },
viewLogger = new mw.mmv.logging.ViewLogger( { recordVirtualViewBeaconURI: $.noop }, {}, logger );
this.sandbox.stub( logger, 'log' );
viewLogger.unview();
assert.ok( !logger.log.called, 'action logger not called' );
viewLogger.setLastViewLogged( false );
viewLogger.unview();
assert.ok( !logger.log.called, 'action logger not called' );
viewLogger.setLastViewLogged( true );
viewLogger.unview();
assert.ok( logger.log.calledOnce, 'action logger called' );
viewLogger.unview();
assert.ok( logger.log.calledOnce, 'action logger not called again' );
} );
QUnit.test( 'focus and blur', function ( assert ) {
var fakeWindow = $( '<div>' ),
viewLogger = new mw.mmv.logging.ViewLogger( { recordVirtualViewBeaconURI: $.noop }, fakeWindow, { log: $.noop } );
this.clock.tick( 1 ); // This is just so that $.now() > 0 in the fake timer environment
viewLogger.attach();
this.clock.tick( 5 );
fakeWindow.triggerHandler( 'blur' );
this.clock.tick( 2 );
fakeWindow.triggerHandler( 'focus' );
this.clock.tick( 3 );
fakeWindow.triggerHandler( 'blur' );
this.clock.tick( 4 );
assert.strictEqual( viewLogger.viewDuration, 8, 'Only focus duration was logged' );
} );
QUnit.test( 'stopViewDuration before startViewDuration', function ( assert ) {
var viewLogger = new mw.mmv.logging.ViewLogger( { recordVirtualViewBeaconURI: $.noop }, {}, { log: $.noop } );
this.clock.tick( 1 ); // This is just so that $.now() > 0 in the fake timer environment
viewLogger.stopViewDuration();
this.clock.tick( 2 );
viewLogger.startViewDuration();
this.clock.tick( 3 );
viewLogger.stopViewDuration();
assert.strictEqual( viewLogger.viewDuration, 3, 'Only last timeframe was logged' );
} );
}( mediaWiki, jQuery ) );