Gergő Tisza has uploaded a new change for review. https://gerrit.wikimedia.org/r/126912
Change subject: [WIP] Use sinon.js mocks to test the thumbnail fetching ...................................................................... [WIP] Use sinon.js mocks to test the thumbnail fetching Change-Id: Ida6143e29e54d90f26e7888aced1d207b3bfa702 --- M tests/qunit/mmv/mmv.test.js 1 file changed, 37 insertions(+), 97 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MultimediaViewer refs/changes/12/126912/1 diff --git a/tests/qunit/mmv/mmv.test.js b/tests/qunit/mmv/mmv.test.js index bbcbfde..650af47 100644 --- a/tests/qunit/mmv/mmv.test.js +++ b/tests/qunit/mmv/mmv.test.js @@ -379,6 +379,7 @@ QUnit.test( 'fetchThumbnail()', 14, function ( assert ) { var viewer = new mw.mmv.MultimediaViewer(), + mock = this.sandbox.mock( viewer ), oldUseThumbnailGuessing = mw.config.get( 'wgMultimediaViewer' ).useThumbnailGuessing, file = new mw.Title( 'File:Copyleft.svg' ), sampleURL = 'http://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/Copyleft.svg/300px-Copyleft.svg.png', @@ -386,117 +387,56 @@ originalWidth = 1000, originalHeight = 1000, apiURL = 'foo', - guessedURL = 'bar'; + guessedURL = 'bar', + image = {}; mw.config.get( 'wgMultimediaViewer' ).useThumbnailGuessing = true; - viewer.guessedThumbnailInfoProvider = { - get: function() { - assert.ok( false, 'Guessed thumbnail provider should not be called, because we lack sample URL and original dimensions' ); - } - }; - - viewer.thumbnailInfoProvider = { - get: function() { - assert.ok( true, 'Classic thumbnail info provider should be called, because we lack sample URL and original dimensions' ); - return $.Deferred().reject(); - } - }; - + // the asserts are only there for progress logging as the message thrown sinon cannot be customized + assert.ok( true, 'When we lack sample URL and original dimensions, the classic provider should be used' ); + mock.expects( 'guessedThumbnailInfoProvider' ).never(); + mock.expects( 'thumbnailInfoProvider' ).once().returns( $.Deferred().resolve( apiURL ) ); + mock.expects( 'imageProvider' ).once().withExactArgs( apiURL ).returns( $.Deferred().resolve( image ) ); viewer.fetchThumbnail( file, width ); + mock.verify(); - viewer.guessedThumbnailInfoProvider = { - get: function() { - assert.ok( true, 'Guessed thumbnail provider should be called' ); - return $.Deferred().reject(); - } - }; - - viewer.thumbnailInfoProvider = { - get: function() { - assert.ok( true, 'API thumbnail info provider should be called as a fallback, since we could not guess the URL' ); - return $.Deferred().reject(); - } - }; - + assert.ok( true, 'When the guesser bails out, the classic provider should be used' ); + mock.expects( 'guessedThumbnailInfoProvider' ).once().returns( $.Deferred().reject() ); + mock.expects( 'thumbnailInfoProvider' ).once().returns( $.Deferred().resolve( apiURL ) ); + mock.expects( 'imageProvider' ).once().withExactArgs( apiURL ).returns( $.Deferred().resolve( image ) ); viewer.fetchThumbnail( file, width, sampleURL, originalWidth, originalHeight ); + mock.verify(); - viewer.thumbnailInfoProvider = { - get: function() { - assert.ok( true, 'API thumbnail info provider should be called as a fallback, since we could not guess the URL' ); - return $.Deferred().resolve( { url : apiURL } ); - } - }; - - viewer.imageProvider = { - get: function( url ) { - assert.strictEqual( url, apiURL, 'Image provider is called based on data provided by the API provider' ); - return $.Deferred().resolve(); - } - }; - + assert.ok( true, 'When the guesser returns an URL, that should be used' ); + mock.expects( 'guessedThumbnailInfoProvider' ).once().returns( $.Deferred().resolve( { url : guessedURL } ) ); + mock.expects( 'thumbnailInfoProvider' ).never(); + mock.expects( 'imageProvider' ).once().withExactArgs( guessedURL ).returns( $.Deferred().resolve( image ) ); viewer.fetchThumbnail( file, width, sampleURL, originalWidth, originalHeight ); + mock.verify(); - viewer.guessedThumbnailInfoProvider = { - get: function() { - assert.ok( true, 'Guessed thumbnail provider should be called' ); - return $.Deferred().resolve( { url : guessedURL } ); - } - }; - - viewer.imageProvider = { - get: function( url ) { - assert.strictEqual( url, guessedURL, 'Image provider is called based on data provided by the guessed provider' ); - return $.Deferred().reject(); - } - }; - - viewer.thumbnailInfoProvider = { - get: function() { - assert.ok( true, 'API thumbnail info provider should be called as a fallback, since the URL we hit did not exist' ); - return $.Deferred().reject(); - } - }; - + assert.ok( true, 'When the guesser returns an URL, but that returns 404, image loading should be retried with the classic provider' ); + mock.expects( 'guessedThumbnailInfoProvider' ).once().returns( $.Deferred().resolve( { url : guessedURL } ) ); + mock.expects( 'thumbnailInfoProvider' ).once().returns( $.Deferred().resolve( apiURL ) ); + mock.expects( 'imageProvider' ).twice() + .onFirstCall().withExactArgs( guessedURL ).returns( $.Deferred().reject() ) + .onSecondCall().withExactArgs( apiURL ).returns( $.Deferred().resolve( image ) ); viewer.fetchThumbnail( file, width, sampleURL, originalWidth, originalHeight ); + mock.verify(); - viewer.imageProvider = { - get: function( url ) { - assert.strictEqual( url, guessedURL, 'Image provider is called based on data provided by the guessed provider' ); - return $.Deferred().resolve(); - } - }; - - viewer.thumbnailInfoProvider = { - get: function() { - assert.ok( false, 'API thumbnail info provider should not be called as a fallback' ); - return $.Deferred().reject(); - } - }; - - QUnit.stop(); - - viewer.fetchThumbnail( file, width, sampleURL, originalWidth, originalHeight ).then( function() { - assert.ok( true, 'Guessed URL is all that was needed to load the thumb' ); - QUnit.start(); - } ); +// QUnit.stop(); +// viewer.fetchThumbnail( file, width, sampleURL, originalWidth, originalHeight ).then( function() { +// assert.ok( true, 'Guessed URL is all that was needed to load the thumb' ); +// QUnit.start(); +// } ); mw.config.get( 'wgMultimediaViewer' ).useThumbnailGuessing = false; - viewer.guessedThumbnailInfoProvider = { - get: function() { - assert.ok( false, 'Guessed thumbnail provider should not be called, since it was disabled in extension configuration' ); - } - }; - - viewer.thumbnailInfoProvider = { - get: function() { - assert.ok( true, 'Classic thumbnail info provider should be called, since guesser was disabled in extension configuration' ); - return $.Deferred().reject(); - } - }; - - viewer.fetchThumbnail( file, width ); + assert.ok( true, 'When the guesser returns an URL, that should be used' ); + mock.expects( 'guessedThumbnailInfoProvider' ).never(); + mock.expects( 'thumbnailInfoProvider' ).once().returns( $.Deferred().resolve( apiURL ) ); + mock.expects( 'imageProvider' ).once().withExactArgs( guessedURL ).returns( $.Deferred().resolve( image ) ); + viewer.fetchThumbnail( file, width, sampleURL, originalWidth, originalHeight ); + mock.verify(); mw.config.get( 'wgMultimediaViewer' ).useThumbnailGuessing = oldUseThumbnailGuessing; } ); -- To view, visit https://gerrit.wikimedia.org/r/126912 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ida6143e29e54d90f26e7888aced1d207b3bfa702 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/MultimediaViewer Gerrit-Branch: master Gerrit-Owner: Gergő Tisza <gti...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits