2014-03-21 20:29:55 +00:00
( function ( mw ) {
2014-03-19 02:00:26 +00:00
QUnit . module ( 'mmv.EmbedFileFormatter' , QUnit . newMwEnvironment ( ) ) ;
2014-03-21 20:29:55 +00:00
function createEmbedFileInfo ( options ) {
var license = options . licenseShortName ? new mw . mmv . model . License ( options . licenseShortName ,
options . licenseInternalName , options . licenseLongName , options . licenseUrl ) : undefined ,
2014-10-28 10:40:23 +00:00
imageInfo = new mw . mmv . model . Image ( options . title , options . title . getNameText ( ) , undefined ,
undefined , undefined , undefined , options . imgUrl , options . filePageUrl , 'repo' , undefined ,
2014-12-02 10:05:12 +00:00
undefined , undefined , undefined , undefined , options . source , options . author , options . authorCount , license ) ,
2014-03-21 20:29:55 +00:00
repoInfo = { displayName : options . siteName , getSiteLink :
function ( ) { return options . siteUrl ; } } ;
return new mw . mmv . model . EmbedFileInfo ( imageInfo , repoInfo , options . caption ) ;
}
2014-03-19 02:00:26 +00:00
QUnit . test ( 'EmbedFileFormatter constructor sanity check' , 1 , function ( assert ) {
var formatter = new mw . mmv . EmbedFileFormatter ( ) ;
2015-01-23 12:48:27 +00:00
assert . ok ( formatter , 'constructor with no argument works' ) ;
2014-03-19 02:00:26 +00:00
} ) ;
2014-12-28 21:04:22 +00:00
QUnit . test ( 'getByline():' , 5 , function ( assert ) {
2014-03-19 03:05:36 +00:00
var formatter = new mw . mmv . EmbedFileFormatter ( ) ,
2014-03-31 21:33:12 +00:00
author = '<span class="mw-mmv-author">Homer</span>' ,
source = '<span class="mw-mmv-source">Iliad</span>' ,
2014-12-28 21:04:22 +00:00
attribution = '<span class="mw-mmv-attr">Cat</span>' ,
2014-03-21 20:29:55 +00:00
byline ;
2014-03-19 03:05:36 +00:00
// Works with no arguments
2014-03-21 20:29:55 +00:00
byline = formatter . getByline ( ) ;
assert . strictEqual ( byline , undefined , 'No argument case handled correctly.' ) ;
2014-03-19 03:05:36 +00:00
2014-12-28 21:04:22 +00:00
// Attribution present
byline = formatter . getByline ( author , source , attribution ) ;
assert . ok ( byline . match ( /Cat/ ) , 'Attribution found in bylines' ) ;
2014-03-19 03:05:36 +00:00
// Author and source present
2014-03-21 20:29:55 +00:00
byline = formatter . getByline ( author , source ) ;
assert . ok ( byline . match ( /Homer|Iliad/ ) , 'Author and source found in bylines' ) ;
2014-03-19 03:05:36 +00:00
// Only author present
2014-03-21 20:29:55 +00:00
byline = formatter . getByline ( author ) ;
assert . ok ( byline . match ( /Homer/ ) , 'Author found in bylines.' ) ;
2014-03-19 03:05:36 +00:00
// Only source present
2014-03-21 20:29:55 +00:00
byline = formatter . getByline ( undefined , source ) ;
assert . ok ( byline . match ( /Iliad/ ) , 'Source found in bylines.' ) ;
} ) ;
2014-03-19 03:05:36 +00:00
2014-03-21 20:29:55 +00:00
QUnit . test ( 'getSiteLink():' , 2 , function ( assert ) {
var repoInfo = new mw . mmv . model . Repo ( 'Wikipedia' , '//wikipedia.org/favicon.ico' , true ) ,
info = new mw . mmv . model . EmbedFileInfo ( { } , repoInfo ) ,
formatter = new mw . mmv . EmbedFileFormatter ( ) ,
siteUrl = repoInfo . getSiteLink ( ) ,
siteLink = formatter . getSiteLink ( info ) ;
assert . ok ( siteLink . match ( 'Wikipedia' ) , 'Site name is present in site link' ) ;
2014-12-08 21:07:41 +00:00
assert . ok ( siteLink . indexOf ( siteUrl ) !== - 1 , 'Site URL is present in site link' ) ;
2014-03-19 03:05:36 +00:00
} ) ;
2014-03-21 20:29:55 +00:00
QUnit . test ( 'getThumbnailHtml():' , 36 , function ( assert ) {
2014-03-19 03:05:36 +00:00
var formatter = new mw . mmv . EmbedFileFormatter ( ) ,
2014-03-21 20:29:55 +00:00
titleText = 'Music Room' ,
title = mw . Title . newFromText ( titleText ) ,
2014-03-19 03:05:36 +00:00
imgUrl = 'https://upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg' ,
filePageUrl = 'https://commons.wikimedia.org/wiki/File:Foobar.jpg' ,
siteName = 'Site Name' ,
2014-03-21 20:29:55 +00:00
siteUrl = '//site.url/' ,
licenseShortName = 'Public License' ,
licenseInternalName = '-' ,
licenseLongName = 'Public Domain, copyrights have lapsed' ,
licenseUrl = '//example.com/pd' ,
2014-03-31 21:33:12 +00:00
author = '<span class="mw-mmv-author">Homer</span>' ,
source = '<span class="mw-mmv-source">Iliad</span>' ,
2014-03-19 03:05:36 +00:00
thumbUrl = 'https://upload.wikimedia.org/wikipedia/thumb/Foobar.jpg' ,
width = 700 ,
height = 500 ,
info ,
generatedHtml ;
// Bylines, license and site
2014-03-21 20:29:55 +00:00
info = createEmbedFileInfo ( { title : title , imgUrl : imgUrl , filePageUrl : filePageUrl ,
siteName : siteName , siteUrl : siteUrl , licenseShortName : licenseShortName ,
licenseInternalName : licenseInternalName , licenseLongName : licenseLongName ,
licenseUrl : licenseUrl , author : author , source : source } ) ;
2015-01-23 12:48:27 +00:00
generatedHtml = formatter . getThumbnailHtml ( info , thumbUrl , width , height ) ;
2014-03-19 03:05:36 +00:00
2014-03-21 20:29:55 +00:00
assert . ok ( generatedHtml . match ( titleText ) , 'Title appears in generated HTML.' ) ;
2014-03-19 03:05:36 +00:00
assert . ok ( generatedHtml . match ( filePageUrl ) , 'Page url appears in generated HTML.' ) ;
assert . ok ( generatedHtml . match ( thumbUrl ) , 'Thumbnail url appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( siteName ) , 'Site name appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( 'Public License' ) , 'License appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( 'Homer' ) , 'Author appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( 'Iliad' ) , 'Source appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( width ) , 'Width appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( height ) , 'Height appears in generated HTML' ) ;
// Bylines, no license and site
2014-03-21 20:29:55 +00:00
info = createEmbedFileInfo ( { title : title , imgUrl : imgUrl , filePageUrl : filePageUrl ,
siteName : siteName , siteUrl : siteUrl ,
author : author , source : source } ) ;
2015-01-23 12:48:27 +00:00
generatedHtml = formatter . getThumbnailHtml ( info , thumbUrl , width , height ) ;
2014-03-19 03:05:36 +00:00
2014-03-21 20:29:55 +00:00
assert . ok ( generatedHtml . match ( titleText ) , 'Title appears in generated HTML.' ) ;
2014-03-19 03:05:36 +00:00
assert . ok ( generatedHtml . match ( filePageUrl ) , 'Page url appears in generated HTML.' ) ;
assert . ok ( generatedHtml . match ( thumbUrl ) , 'Thumbnail url appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( siteName ) , 'Site name appears in generated HTML' ) ;
2015-01-23 12:48:27 +00:00
assert . ok ( ! generatedHtml . match ( 'Public License' ) , 'License should not appear in generated HTML' ) ;
2014-03-19 03:05:36 +00:00
assert . ok ( generatedHtml . match ( 'Homer' ) , 'Author appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( 'Iliad' ) , 'Source appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( width ) , 'Width appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( height ) , 'Height appears in generated HTML' ) ;
// No bylines, license and site
2014-03-21 20:29:55 +00:00
info = createEmbedFileInfo ( { title : title , imgUrl : imgUrl , filePageUrl : filePageUrl ,
siteName : siteName , siteUrl : siteUrl , licenseShortName : licenseShortName ,
licenseInternalName : licenseInternalName , licenseLongName : licenseLongName ,
licenseUrl : licenseUrl } ) ;
2015-01-23 12:48:27 +00:00
generatedHtml = formatter . getThumbnailHtml ( info , thumbUrl , width , height ) ;
2014-03-19 03:05:36 +00:00
2015-01-23 12:48:27 +00:00
assert . ok ( generatedHtml . match ( titleText ) , 'Title appears in generated HTML.' ) ;
2014-03-19 03:05:36 +00:00
assert . ok ( generatedHtml . match ( filePageUrl ) , 'Page url appears in generated HTML.' ) ;
assert . ok ( generatedHtml . match ( thumbUrl ) , 'Thumbnail url appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( siteName ) , 'Site name appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( 'Public License' ) , 'License appears in generated HTML' ) ;
2015-01-23 12:48:27 +00:00
assert . ok ( ! generatedHtml . match ( 'Homer' ) , 'Author should not appear in generated HTML' ) ;
assert . ok ( ! generatedHtml . match ( 'Iliad' ) , 'Source should not appear in generated HTML' ) ;
2014-03-19 03:05:36 +00:00
assert . ok ( generatedHtml . match ( width ) , 'Width appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( height ) , 'Height appears in generated HTML' ) ;
// No bylines, no license and site
2014-03-21 20:29:55 +00:00
info = createEmbedFileInfo ( { title : title , imgUrl : imgUrl , filePageUrl : filePageUrl ,
siteName : siteName , siteUrl : siteUrl } ) ;
2015-01-23 12:48:27 +00:00
generatedHtml = formatter . getThumbnailHtml ( info , thumbUrl , width , height ) ;
2014-03-19 03:05:36 +00:00
2015-01-23 12:48:27 +00:00
assert . ok ( generatedHtml . match ( titleText ) , 'Title appears in generated HTML.' ) ;
2014-03-19 03:05:36 +00:00
assert . ok ( generatedHtml . match ( filePageUrl ) , 'Page url appears in generated HTML.' ) ;
assert . ok ( generatedHtml . match ( thumbUrl ) , 'Thumbnail url appears in generated HTML' ) ;
2014-03-19 20:14:15 +00:00
assert . ok ( generatedHtml . match ( siteName ) , 'Site name should appear in generated HTML' ) ;
2015-01-23 12:48:27 +00:00
assert . ok ( ! generatedHtml . match ( 'Public License' ) , 'License should not appear in generated HTML' ) ;
assert . ok ( ! generatedHtml . match ( 'Homer' ) , 'Author should not appear in generated HTML' ) ;
assert . ok ( ! generatedHtml . match ( 'Iliad' ) , 'Source should not appear in generated HTML' ) ;
2014-03-19 03:05:36 +00:00
assert . ok ( generatedHtml . match ( width ) , 'Width appears in generated HTML' ) ;
assert . ok ( generatedHtml . match ( height ) , 'Height appears in generated HTML' ) ;
} ) ;
2014-03-19 02:00:26 +00:00
QUnit . test ( 'getThumbnailWikitext():' , 3 , function ( assert ) {
var formatter = new mw . mmv . EmbedFileFormatter ( ) ,
title = mw . Title . newFromText ( 'File:Foobar.jpg' ) ,
imgUrl = 'https://upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg' ,
filePageUrl = 'https://commons.wikimedia.org/wiki/File:Foobar.jpg' ,
caption = 'Foobar caption.' ,
width = 700 ,
info ,
wikitext ;
// Title, width and caption
2014-03-21 20:29:55 +00:00
info = createEmbedFileInfo ( { title : title , imgUrl : imgUrl , filePageUrl : filePageUrl ,
caption : caption } ) ;
2014-03-19 02:00:26 +00:00
wikitext = formatter . getThumbnailWikitextFromEmbedFileInfo ( info , width ) ;
assert . strictEqual (
wikitext ,
'[[File:Foobar.jpg|700px|thumb|Foobar caption.]]' ,
'Wikitext generated correctly.' ) ;
// Title, width and no caption
2014-03-21 20:29:55 +00:00
info = createEmbedFileInfo ( { title : title , imgUrl : imgUrl , filePageUrl : filePageUrl } ) ;
2014-03-19 02:00:26 +00:00
wikitext = formatter . getThumbnailWikitextFromEmbedFileInfo ( info , width ) ;
assert . strictEqual (
wikitext ,
'[[File:Foobar.jpg|700px|thumb|Foobar]]' ,
'Wikitext generated correctly.' ) ;
// Title, no width and no caption
2014-03-21 20:29:55 +00:00
info = createEmbedFileInfo ( { title : title , imgUrl : imgUrl , filePageUrl : filePageUrl } ) ;
2014-03-19 02:00:26 +00:00
wikitext = formatter . getThumbnailWikitextFromEmbedFileInfo ( info ) ;
assert . strictEqual (
wikitext ,
'[[File:Foobar.jpg|thumb|Foobar]]' ,
'Wikitext generated correctly.' ) ;
} ) ;
2014-06-12 23:59:06 +00:00
QUnit . test ( 'getCreditText():' , 2 , function ( assert ) {
var txt , formatter = new mw . mmv . EmbedFileFormatter ( ) ;
this . sandbox . stub ( formatter , 'getLinkUrl' ) . returns ( 'quuuux' ) ;
txt = formatter . getCreditText ( {
repoInfo : {
displayName : 'Localcommons'
} ,
imageInfo : {
author : 'Author' ,
source : 'Source' ,
title : {
getNameText : function ( ) { return 'Image Title' ; }
}
}
} ) ;
2014-07-01 01:15:46 +00:00
assert . strictEqual ( txt , '"Image Title" by Author - Source. Via Localcommons - quuuux' , 'Sanity check' ) ;
2014-06-12 23:59:06 +00:00
txt = formatter . getCreditText ( {
repoInfo : {
displayName : 'Localcommons'
} ,
imageInfo : {
author : 'Author' ,
source : 'Source' ,
title : {
getNameText : function ( ) { return 'Image Title' ; }
} ,
license : {
2014-12-01 20:15:17 +00:00
getShortName : function ( ) { return 'DWTFYWPL' ; } ,
2014-11-24 22:09:03 +00:00
longName : 'Do What the Fuck You Want Public License' ,
isFree : this . sandbox . stub ( ) . returns ( true )
2014-06-12 23:59:06 +00:00
}
}
} ) ;
2014-12-01 20:15:17 +00:00
assert . strictEqual ( txt , '"Image Title" by Author - Source. Licensed under DWTFYWPL via Localcommons - quuuux' , 'License message works' ) ;
} ) ;
QUnit . test ( 'getCreditHtml():' , 2 , function ( assert ) {
var html , formatter = new mw . mmv . EmbedFileFormatter ( ) ;
this . sandbox . stub ( formatter , 'getLinkUrl' ) . returns ( 'quuuux' ) ;
html = formatter . getCreditHtml ( {
repoInfo : {
displayName : 'Localcommons' ,
getSiteLink : function ( ) { return 'quux' ; }
} ,
imageInfo : {
author : 'Author' ,
source : 'Source' ,
title : {
getNameText : function ( ) { return 'Image Title' ; }
}
}
} ) ;
assert . strictEqual ( html , '"<a href="quuuux">Image Title</a>" by Author - Source. Via <a href="quux">Localcommons</a>.' , 'Sanity check' ) ;
html = formatter . getCreditHtml ( {
repoInfo : {
displayName : 'Localcommons' ,
getSiteLink : function ( ) { return 'quux' ; }
} ,
imageInfo : {
author : 'Author' ,
source : 'Source' ,
title : {
getNameText : function ( ) { return 'Image Title' ; }
} ,
license : {
getShortLink : function ( ) { return '<a href="http://dwtfywpl.net/">DWTFYWPL</a>' ; } ,
longName : 'Do What the Fuck You Want Public License' ,
isFree : this . sandbox . stub ( ) . returns ( true )
}
}
} ) ;
assert . strictEqual ( html , '"<a href="quuuux">Image Title</a>" by Author - Source. Licensed under <a href="http://dwtfywpl.net/">DWTFYWPL</a> via <a href="quux">Localcommons</a>.' , 'Sanity check' ) ;
2014-06-12 23:59:06 +00:00
} ) ;
2014-03-21 20:29:55 +00:00
} ( mediaWiki ) ) ;