summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Echo/tests/qunit/mobile/test_NotificationBadge.js')
-rw-r--r--Echo/tests/qunit/mobile/test_NotificationBadge.js76
1 files changed, 76 insertions, 0 deletions
diff --git a/Echo/tests/qunit/mobile/test_NotificationBadge.js b/Echo/tests/qunit/mobile/test_NotificationBadge.js
new file mode 100644
index 00000000..02304ec6
--- /dev/null
+++ b/Echo/tests/qunit/mobile/test_NotificationBadge.js
@@ -0,0 +1,76 @@
+( function ( M ) {
+ var OverlayManager = M.require( 'mobile.startup' ).OverlayManager,
+ NotificationBadge = require( '../../../modules/mobile/NotificationBadge.js' );
+
+ QUnit.module( 'ext.echo.mobile - NotificationBadge', {
+ beforeEach: function () {
+ this.OverlayManager = OverlayManager.getSingleton();
+ }
+ } );
+
+ QUnit.test( '#setCount', function ( assert ) {
+ var initialClassExpectationsMet,
+ badge = new NotificationBadge( {
+ overlayManager: this.OverlayManager,
+ hasNotifications: true,
+ hasUnseenNotifications: true,
+ notificationCountRaw: 5
+ } );
+ initialClassExpectationsMet = badge.$el.find( '.mw-ui-icon' ).length === 0 &&
+ badge.$el.find( '.zero' ).length === 0;
+
+ badge.setCount( 0 );
+ assert.ok( initialClassExpectationsMet, 'No icon and no zero class' );
+ assert.strictEqual( badge.$el.find( '.zero' ).length, 1, 'A zero class is present on the badge' );
+ badge.setCount( 105 );
+ assert.strictEqual( badge.options.notificationCountRaw, 100, 'Number is capped to 100.' );
+ } );
+
+ QUnit.test( '#setCount (Eastern Arabic numerals)', function ( assert ) {
+ var badge;
+
+ this.sandbox.stub( mw.language, 'convertNumber' )
+ .withArgs( 2 ).returns( '۲' )
+ .withArgs( 5 ).returns( '۵' );
+ this.sandbox.stub( mw, 'message' )
+ .withArgs( 'echo-badge-count', '۵' ).returns( { text: function () { return '۵'; } } )
+ .withArgs( 'echo-badge-count', '۲' ).returns( { text: function () { return '۲'; } } );
+
+ badge = new NotificationBadge( {
+ overlayManager: this.OverlayManager,
+ el: $( '<div><a title="n" href="/" class="notification-unseen"><div class="circle" ><span data-notification-count="2">۲</span></div></a></div>' )
+ } );
+ assert.strictEqual( badge.options.notificationCountRaw, 2,
+ 'Number is parsed from Eastern Arabic numerals' );
+ assert.strictEqual( badge.options.notificationCountString, '۲',
+ 'Number will be rendered in Eastern Arabic numerals' );
+ badge.setCount( 5 );
+ assert.strictEqual( badge.options.notificationCountString, '۵',
+ 'Number will be rendered in Eastern Arabic numerals' );
+ } );
+
+ QUnit.test( '#render [hasUnseenNotifications]', function ( assert ) {
+ var badge = new NotificationBadge( {
+ notificationCountRaw: 0,
+ overlayManager: this.OverlayManager,
+ hasNotifications: false,
+ hasUnseenNotifications: false
+ } );
+ assert.strictEqual( badge.$el.find( '.mw-ui-icon' ).length, 1, 'A bell icon is visible' );
+ } );
+
+ QUnit.test( '#markAsSeen', function ( assert ) {
+ var badge = new NotificationBadge( {
+ notificationCountRaw: 2,
+ overlayManager: this.OverlayManager,
+ hasNotifications: true,
+ hasUnseenNotifications: true
+ } );
+ // Badge resets counter to zero
+ badge.setCount( 0 );
+ assert.strictEqual( badge.$el.find( '.mw-ui-icon' ).length, 0, 'The bell icon is not visible' );
+ badge.markAsSeen();
+ assert.strictEqual( badge.$el.find( '.notification-unseen' ).length, 0,
+ 'Unseen class disappears after markAsSeen called.' );
+ } );
+}( mw.mobileFrontend ) );