Wordpress/tests/qunit/wp-admin/js/updates.js

180 lines
6.8 KiB
JavaScript

/*global QUnit, wp, sinon */
jQuery( function( $ ) {
QUnit.module( 'wp.updates' );
QUnit.test( 'Initially, the update lock should be false', function( assert ) {
assert.strictEqual( wp.updates.ajaxLocked, false );
});
QUnit.test( 'The nonce should be set correctly', function( assert ) {
assert.equal( wp.updates.ajaxNonce, window._wpUpdatesSettings.ajax_nonce );
});
QUnit.test( 'decrementCount correctly decreases the update number', function( assert ) {
var menuItemCount = $( '#menu-plugins' ).find( '.plugin-count' ).eq( 0 ).text();
var screenReaderItemCount = $( '#wp-admin-bar-updates' ).find( '.screen-reader-text' ).text();
var adminItemCount = $( '#wp-admin-bar-updates' ).find( '.ab-label' ).text();
assert.equal( menuItemCount, 2, 'Intial value is correct' );
assert.equal( screenReaderItemCount, '2 Plugin Updates', 'Intial value is correct' );
assert.equal( adminItemCount, 2, 'Intial value is correct' );
wp.updates.decrementCount( 'plugin' );
// Re-read these values
menuItemCount = $( '#menu-plugins' ).find( '.plugin-count' ).eq( 0 ).text();
screenReaderItemCount = $( '#wp-admin-bar-updates' ).find( '.screen-reader-text' ).text();
adminItemCount = $( '#wp-admin-bar-updates' ).find( '.ab-label' ).text();
assert.equal( menuItemCount, 1 );
// @todo: Update screen reader count.
// Should the screenReader count change? Is that announced to the user?
// assert.equal( screenReaderItemCount, '1 Plugin Update' );
assert.equal( adminItemCount, 1 );
});
QUnit.test( '`beforeunload` should only fire when locked', function( assert ) {
wp.updates.ajaxLocked = false;
assert.notOk( wp.updates.beforeunload(), '`beforeunload` should not fire.' );
wp.updates.ajaxLocked = true;
assert.equal( wp.updates.beforeunload(), window._wpUpdatesSettings.l10n.beforeunload, '`beforeunload` should equal the localized `beforeunload` string.' );
wp.updates.ajaxLocked = false;
});
// FTP creds... exist?
// Admin notice?
QUnit.module( 'wp.updates.plugins', {
beforeEach: function() {
this.oldPagenow = window.pagenow;
window.pagenow = 'plugins';
sinon.spy( jQuery, 'ajax' );
},
afterEach: function() {
window.pagenow = this.oldPagenow;
wp.updates.ajaxLocked = false;
wp.updates.queue = [];
jQuery.ajax.restore();
}
} );
QUnit.test( 'Update lock is set when plugins are updating', function( assert ) {
wp.updates.updatePlugin( {
plugin: 'test/test.php',
slug: 'test'
} );
assert.strictEqual( wp.updates.ajaxLocked, true );
});
QUnit.test( 'Plugins are queued when the lock is set', function( assert ) {
var value = [
{
action: 'update-plugin',
data: {
plugin: 'test/test.php',
slug: 'test',
success: null,
error: null
}
}
];
wp.updates.ajaxLocked = true;
wp.updates.updatePlugin( {
plugin: 'test/test.php',
slug: 'test',
success: null,
error: null
} );
assert.deepEqual( wp.updates.queue, value );
});
QUnit.test( 'If plugins are installing (lock is set), the beforeUnload function should fire', function( assert ) {
wp.updates.updatePlugin( {
plugin: 'test/test.php',
slug: 'test'
} );
assert.equal( wp.updates.beforeunload(), window._wpUpdatesSettings.l10n.beforeunload );
} );
QUnit.test( 'Starting a plugin update should call the update API', function( assert ) {
wp.updates.updatePlugin( {
plugin: 'test/test.php',
slug: 'test'
} );
assert.ok( jQuery.ajax.calledOnce );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].url, '/wp-admin/admin-ajax.php' );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].data.action, 'update-plugin' );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].data.slug, 'test' );
} );
QUnit.test( 'Installing a plugin should call the API', function( assert ) {
wp.updates.installPlugin( { slug: 'jetpack' } );
assert.ok( jQuery.ajax.calledOnce );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].url, '/wp-admin/admin-ajax.php' );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].data.action, 'install-plugin' );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].data.slug, 'jetpack' );
} );
QUnit.test( 'Deleting a plugin should call the API', function( assert ) {
wp.updates.deletePlugin( { slug: 'jetpack', plugin: 'jetpack/jetpack.php' } );
assert.ok( jQuery.ajax.calledOnce );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].url, '/wp-admin/admin-ajax.php' );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].data.action, 'delete-plugin' );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].data.slug, 'jetpack' );
} );
// QUnit.test( 'A successful update changes the message?', function( assert ) {} );
// QUnit.test( 'A failed update changes the message?', function( assert ) {} );
QUnit.module( 'wp.updates.themes', {
beforeEach: function() {
this.oldPagenow = window.pagenow;
window.pagenow = 'themes';
sinon.spy( jQuery, 'ajax' );
},
afterEach: function() {
window.pagenow = this.oldPagenow;
wp.updates.ajaxLocked = false;
wp.updates.queue = [];
jQuery.ajax.restore();
}
} );
QUnit.test( 'Update lock is set when themes are updating', function( assert ) {
wp.updates.updateTheme( 'twentyeleven' );
assert.strictEqual( wp.updates.ajaxLocked, true );
});
QUnit.test( 'If themes are installing (lock is set), the beforeUnload function should fire', function( assert ) {
wp.updates.updateTheme( { slug: 'twentyeleven' } );
assert.equal( wp.updates.beforeunload(), window._wpUpdatesSettings.l10n.beforeunload );
} );
QUnit.test( 'Starting a theme update should call the update API', function( assert ) {
wp.updates.updateTheme( { slug: 'twentyeleven' } );
assert.ok( jQuery.ajax.calledOnce );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].url, '/wp-admin/admin-ajax.php' );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].data.action, 'update-theme' );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].data.slug, 'twentyeleven' );
} );
QUnit.test( 'Installing a theme should call the API', function( assert ) {
wp.updates.installTheme( { slug: 'twentyeleven' } );
assert.ok( jQuery.ajax.calledOnce );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].url, '/wp-admin/admin-ajax.php' );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].data.action, 'install-theme' );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].data.slug, 'twentyeleven' );
} );
QUnit.test( 'Deleting a theme should call the API', function( assert ) {
wp.updates.deleteTheme( { slug: 'twentyeleven' } );
assert.ok( jQuery.ajax.calledOnce );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].url, '/wp-admin/admin-ajax.php' );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].data.action, 'delete-theme' );
assert.equal( jQuery.ajax.getCall( 0 ).args[0].data.slug, 'twentyeleven' );
} );
// QUnit.test( 'A successful update changes the message?', function( assert ) {} );
// QUnit.test( 'A failed update changes the message?', function( assert ) {} );
});