214 lines
7.1 KiB
JavaScript
214 lines
7.1 KiB
JavaScript
/**
|
|
* This file is part of the Semantic MediaWiki QUnit test suite
|
|
* @see https://semantic-mediawiki.org/
|
|
*
|
|
* @section LICENSE
|
|
* This program 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.
|
|
*
|
|
* This program 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 this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
*
|
|
* @since 1.9
|
|
*
|
|
* @file
|
|
* @ignore
|
|
*
|
|
* @ingroup SMW
|
|
* @ingroup Test
|
|
*
|
|
* @licence GNU GPL v2+
|
|
* @author mwjames
|
|
*/
|
|
|
|
/**
|
|
* Tests methods provided by ext.smw.query.js
|
|
* @ignore
|
|
*/
|
|
( function ( $, mw, smw ) {
|
|
'use strict';
|
|
|
|
QUnit.module( 'ext.smw.Query', QUnit.newMwEnvironment() );
|
|
var jsonString = '{\"conditions\":\"[[Modification date::+]]\",\"parameters\":{\"limit\":10,\"offset\":0,\"link\":\"all\",\"headers\":\"show\",\"mainlabel\":\"\",\"intro\":\"\",\"outro\":\"\",\"searchlabel\":\"\\u2026 further results\",\"default\":\"\",\"class\":\"\"},\"printouts\":[\"?Modification date\"]}';
|
|
|
|
var pass = 'Passes because ';
|
|
|
|
/**
|
|
* Test accessibility
|
|
*
|
|
* @since: 1.9
|
|
* @ignore
|
|
*/
|
|
QUnit.test( 'instance', function ( assert ) {
|
|
assert.expect( 2 );
|
|
|
|
var result;
|
|
|
|
result = new smw.api();
|
|
assert.ok( result instanceof Object, pass + 'the api instance was accessible' );
|
|
|
|
result = new smw.query();
|
|
assert.ok( result instanceof Object, pass + 'the api.query instance was accessible' );
|
|
|
|
} );
|
|
|
|
/**
|
|
* Test toString sanity
|
|
*
|
|
* @since: 1.9
|
|
* @ignore
|
|
*/
|
|
QUnit.test( 'toString sanity test', function ( assert ) {
|
|
assert.expect( 11 );
|
|
|
|
var result;
|
|
|
|
assert.throws( function() {
|
|
new smw.query( '', '' ,'' ).toString();
|
|
}, pass + 'an error was raised due to missing conditions' );
|
|
|
|
assert.throws( function() {
|
|
new smw.query( [], {} ,'' ).toString();
|
|
}, pass + 'an error was raised due to missing conditions' );
|
|
|
|
assert.throws( function() {
|
|
new smw.query( [], [] , '[[Modification date::+]]' ).toString();
|
|
}, pass + 'an error was raised due to parameters being a non object' );
|
|
|
|
assert.throws( function() {
|
|
new smw.query( '', [] , '[[Modification date::+]]' ).toString();
|
|
}, pass + 'an error was raised due to parameters being a non object' );
|
|
|
|
assert.throws( function() {
|
|
new smw.query( '?Modification date', {'limit' : 10, 'offset': 0 } , '[[Modification date::+]]' ).toString();
|
|
}, pass + 'an error was raised due to printouts weren\'t empty at first, contained values but those weren\'t of type array' );
|
|
|
|
assert.throws( function() {
|
|
new smw.query( ['?Modification date'], ['limit'], '[[Modification date::+]]' ).toString();
|
|
}, pass + 'an error was raised due to parameters weren\'t empty at first, contained values but those weren\'t of type object' );
|
|
|
|
result = new smw.query( '', '' , ['[[Modification date::+]]'] ).toString();
|
|
assert.equal( result, '[[Modification date::+]]', pass + '.toString() returned a string' );
|
|
|
|
result = new smw.query( [], {} , ['[[Modification date::+]]'] ).toString();
|
|
assert.equal( result, '[[Modification date::+]]', pass + '.toString() returned a string' );
|
|
|
|
result = new smw.query(
|
|
'',
|
|
{'limit' : 10, 'offset': 0 } ,
|
|
'[[Modification date::+]]'
|
|
).toString();
|
|
assert.equal( result, '[[Modification date::+]]|limit=10|offset=0', pass + '(printouts = empty, parameters = object, conditions = array).toString() returned a string,' );
|
|
|
|
result = new smw.query(
|
|
['?Modification date'],
|
|
{'limit' : 10, 'offset': 0 } ,
|
|
'[[Modification date::+]]'
|
|
).toString();
|
|
assert.equal( result, '[[Modification date::+]]|?Modification date|limit=10|offset=0', pass + '(printouts = array, parameters = object, conditions = array).toString() returned a string,' );
|
|
|
|
result = new smw.query(
|
|
['?Modification date'],
|
|
{'limit' : 10, 'offset': 0 } ,
|
|
{ foo: '[[Modification date::+]]', bar: '[[Modification date::>2013-04-01]]' }
|
|
).toString();
|
|
assert.equal( result, '[[Modification date::+]][[Modification date::>2013-04-01]]|?Modification date|limit=10|offset=0', pass + '(printouts = array, parameters = object, conditions = object).toString() returned a string,' );
|
|
|
|
} );
|
|
|
|
/**
|
|
* Test toString
|
|
*
|
|
* @since: 1.9
|
|
* @ignore
|
|
*/
|
|
QUnit.test( 'toString Ajax response test', function ( assert ) {
|
|
assert.expect( 4 );
|
|
|
|
var done = assert.async();
|
|
|
|
var smwApi = new smw.api();
|
|
var queryObject = smwApi.parse( jsonString );
|
|
|
|
var query = new smw.query ( queryObject.printouts, queryObject.parameters, queryObject.conditions );
|
|
|
|
assert.ok( $.type( query.toString() ) === 'string', pass + 'the query is a string' );
|
|
assert.ok( $.type( query.getQueryString() ) === 'string', pass + 'the function alias returned a string' );
|
|
|
|
// Ajax
|
|
smwApi.fetch( query.toString() )
|
|
.done( function ( results ) {
|
|
|
|
assert.ok( true, pass + 'the query returned with a positive server response' );
|
|
assert.ok( results instanceof Object, pass + 'the query returned with a result object' );
|
|
|
|
done();
|
|
} );
|
|
|
|
} );
|
|
|
|
/**
|
|
* Test getLimit
|
|
*
|
|
* @since: 1.9
|
|
* @ignore
|
|
*/
|
|
QUnit.test( 'getLimit', function ( assert ) {
|
|
assert.expect( 1 );
|
|
|
|
var smwApi = new smw.api();
|
|
var queryObject = smwApi.parse( jsonString );
|
|
|
|
var query = new smw.query ( queryObject.printouts, queryObject.parameters, queryObject.conditions );
|
|
assert.equal( query.getLimit(), 10, pass + 'the query limit parameter returned 10' );
|
|
|
|
} );
|
|
|
|
|
|
/**
|
|
* Test getLink
|
|
*
|
|
* @since: 1.9
|
|
* @ignore
|
|
*/
|
|
QUnit.test( 'getLink', function ( assert ) {
|
|
assert.expect( 5 );
|
|
|
|
var result, context;
|
|
|
|
var smwApi = new smw.api();
|
|
var queryObject = smwApi.parse( jsonString );
|
|
|
|
result = new smw.query ( queryObject.printouts, queryObject.parameters, queryObject.conditions ).getLink();
|
|
assert.equal( $.type( result ), 'string', pass + 'the query link returned was a string' );
|
|
|
|
// DOM test
|
|
context = $( '<div></div>', '#qunit-fixture' );
|
|
context.append( result );
|
|
assert.equal( context.find( 'a' ).attr( 'class' ), 'query-link', pass + 'DOM object returned class attribute "query-link"' );
|
|
assert.ok( context.find( 'a' ).attr( 'href' ), pass + 'DOM object returned a href attribute' );
|
|
|
|
// Caption text test
|
|
context = $( '<div></div>', '#qunit-fixture' );
|
|
queryObject.parameters.searchlabel = 'test';
|
|
result = new smw.query ( queryObject.printouts, queryObject.parameters, queryObject.conditions ).getLink();
|
|
context.append( result );
|
|
assert.equal( context.find( 'a' ).text( ), 'test', pass + 'parameters.searchlabel is used to set the caption text' );
|
|
|
|
context = $( '<div></div>', '#qunit-fixture' );
|
|
result = new smw.query ( queryObject.printouts, queryObject.parameters, queryObject.conditions ).getLink( 'test 2' );
|
|
context.append( result );
|
|
assert.equal( context.find( 'a' ).text( ), 'test 2', pass + 'getLink() is used to set the caption text' );
|
|
|
|
} );
|
|
|
|
}( jQuery, mediaWiki, semanticMediaWiki ) );
|