mediawiki-extensions-Multim.../tests/qunit/mmv/ui/mmv.ui.reuse.download.test.js
Gergő Tisza f04f5984d5 Display correct file type on download button
Works, but awkward - the extension name changes a little later than the button
text itself. This is hard to avoid since we don't know beforehand
what the thumbnail type is - we have to wait for the API request.
(We can't do thumbnail URL guessing here since we cannot catch the 404 error.)

In general the whole API handling here is not so good, with a separate API
request going out when we should just get all size options in a single request,
when the user opens the reuse panel.

Change-Id: I502b7cb4e99d8af348d7d1967eb8343ec0f926fe
Mingle: https://wikimedia.mingle.thoughtworks.com/projects/multimedia/cards/471
2014-04-21 23:51:15 +00:00

147 lines
5.7 KiB
JavaScript

/*
* This file is part of the MediaWiki extension MultimediaViewer.
*
* MultimediaViewer is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* MultimediaViewer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MultimediaViewer. If not, see <http://www.gnu.org/licenses/>.
*/
( function ( mw, $ ) {
QUnit.module( 'mmv.ui.reuse.download', QUnit.newMwEnvironment() );
QUnit.test( 'Sanity test, object creation and UI construction', 6, function ( assert ) {
var download = new mw.mmv.ui.reuse.Download( $( '#qunit-fixture' ) );
assert.ok( download, 'download UI element is created.' );
assert.strictEqual( download.$pane.length, 1, 'Pane div created.' );
assert.ok( download.$downloadButton && download.$selectionArrow, 'Download button created.' );
assert.ok( download.downloadSizeMenu, 'Image size pulldown menu created.' );
assert.ok( download.$previewLink, 'Preview link created.' );
assert.ok( download.defaultItem, 'Default item set.' );
} );
QUnit.test( 'set()/empty():', 5, function ( assert ) {
var download = new mw.mmv.ui.reuse.Download( $( '#qunit-fixture' ) ),
src = 'https://upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg',
image = { // fake mw.mmv.model.Image
title: new mw.Title( 'File:Foobar.jpg' ),
url: src
};
assert.strictEqual( download.imageExtension, undefined, 'Image extension is not set.' );
download.utils.updateMenuOptions = function() {
assert.ok( true, 'Menu options updated.' );
};
download.downloadSizeMenu.getMenu().selectItem = function() {
assert.ok( true, 'Default item selected to update the labels.' );
};
download.set( image );
assert.strictEqual( download.imageExtension, 'jpg', 'Image extension is set correctly.' );
download.empty();
assert.strictEqual( download.imageExtension, undefined, 'Image extension is not set.' );
} );
QUnit.test( 'attach()/unattach():', 2, function ( assert ) {
var download = new mw.mmv.ui.reuse.Download( $( '#qunit-fixture' ) ),
image = {
title: new mw.Title( 'File:Foobar.jpg' ),
url: 'https://upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg'
};
download.set( image );
download.handleSizeSwitch = function() {
assert.ok( false, 'handleSizeSwitch should not have been called.' );
};
download.downloadSizeMenu.$element.click = function() {
assert.ok( false, 'Menu selection should not have happened.' );
};
// Triggering action events before attaching should do nothing
download.downloadSizeMenu.getMenu().emit(
'choose', download.downloadSizeMenu.getMenu().getSelectedItem() );
download.$selectionArrow.click();
download.handleSizeSwitch = function() {
assert.ok( true, 'handleSizeSwitch was called.' );
};
download.downloadSizeMenu.$element.click = function() {
assert.ok( true, 'Menu selection happened.' );
};
download.attach();
// Action events should be handled now
download.downloadSizeMenu.getMenu().emit(
'choose', download.downloadSizeMenu.getMenu().getSelectedItem() );
download.$selectionArrow.click();
// Test the unattach part
download.handleSizeSwitch = function() {
assert.ok( false, 'handleSizeSwitch should not have been called.' );
};
download.downloadSizeMenu.$element.click = function() {
assert.ok( false, 'Menu selection should not have happened.' );
};
download.unattach();
// Triggering action events now that we are unattached should do nothing
download.downloadSizeMenu.getMenu().emit(
'choose', download.downloadSizeMenu.getMenu().getSelectedItem() );
download.$selectionArrow.click();
} );
QUnit.test( 'handleSizeSwitch():', 6, function ( assert ) {
var download = new mw.mmv.ui.reuse.Download( $( '#qunit-fixture' ) ),
newImageUrl = 'https://upload.wikimedia.org/wikipedia/commons/3/3a/NewFoobar.jpg';
assert.strictEqual( download.$downloadButton.html(), '', 'Button has empty content.' );
assert.strictEqual( download.$downloadButton.attr( 'href' ), undefined, 'Button href is empty.' );
assert.strictEqual( download.$previewLink.attr( 'href' ), undefined, 'Preview link href is empty.' );
download.utils.getThumbnailUrlPromise = function() {
return $.Deferred().resolve( { url: newImageUrl } ).promise();
};
download.handleSizeSwitch( download.downloadSizeMenu.getMenu().getSelectedItem() );
assert.ok( download.$downloadButton.html().match( /original.*/ ), 'Button message updated.' );
assert.strictEqual( download.$downloadButton.attr( 'href' ), newImageUrl + '?download', 'Button href updated.' );
assert.strictEqual( download.$previewLink.attr( 'href' ), newImageUrl, 'Preview link href updated.' );
} );
QUnit.test( 'setButtonText() sanity check:', 2, function ( assert ) {
var download = new mw.mmv.ui.reuse.Download( $( '#qunit-fixture' ) ),
message;
download.setButtonText( 'large', 'jpg', 100, 200 );
assert.ok( true, 'Setting the text did not cause any errors' );
message = download.$downloadButton.html();
download.setButtonText( 'small', 'png', 1000, 2000 );
assert.notStrictEqual( download.$downloadButton.html(), message, 'Button text was updated' );
} );
QUnit.test( 'getExtensionFromUrl():', 1, function ( assert ) {
var download = new mw.mmv.ui.reuse.Download( $( '#qunit-fixture' ) );
assert.strictEqual( download.getExtensionFromUrl( 'http://example.com/bing/foo.bar.png' ),
'png', 'Extension is parsed correctly' );
} );
}( mediaWiki, jQuery ) );