(function ($) {
module('methods');
//Creates a very simple map and returns map's container.
function methodsMapSetup(params) {
var $fixture = $('#qunit-fixture'),
$div = $('
');
$fixture.append($div);
$div.seatCharts(
$.extend(true, {}, {
map: [
'aa_aa',
'aaaaa',
'bbbbb',
'bbbbb',
'ccccc',
],
seats: {
a: {
classes : 'a1-seat-class a2-seat-class',
price : 45,
anObject : {
aProperty: 'testing'
}
},
b: {
classes : ['b1-seat-class', 'b2-seat-class'],
price : 25,
anObject2: {
aProperty2: 23
}
}
}
}, params)
);
return $div;
}
test('Testing Seat methods & properties', function () {
expect(9);
var $seatCharts = methodsMapSetup(),
seatCharts = $seatCharts.seatCharts(),
seat = seatCharts.get('1_2');
equal(typeof seat.blur, 'function', '.blur method present.');
equal(typeof seat.char, 'function', '.char method present.');
equal(typeof seat.click, 'function', '.click method present.');
equal(typeof seat.data, 'function', '.data method present.');
equal(typeof seat.focus, 'function', '.focus method present.');
equal(typeof seat.node, 'function', '.node method present.');
equal(typeof seat.settings, 'object', '.settings property present.');
equal(typeof seat.status, 'function', '.status method present.');
equal(typeof seat.style, 'function', '.style method present.');
});
test('Testing Seat Set methods & properties', function () {
expect(11);
var $seatCharts = methodsMapSetup(),
seatCharts = $seatCharts.seatCharts(),
seat = seatCharts.get(['1_2', '4_3']);
equal(typeof seat.each, 'function', '.each method present.');
equal(typeof seat.find, 'function', '.find method present.');
equal(typeof seat.get, 'function', '.get method present.');
equal(typeof seat.length, 'number', '.length property present.');
equal(typeof seat.node, 'function', '.node method present.');
equal(typeof seat.push, 'function', '.push method present.');
equal(typeof seat.seatIds, 'object', '.seatIds property present.');
equal(seat.seatIds.length, 2, '.seatIds property correct.');
equal(typeof seat.seats, 'object', '.seats property present.');
equal(typeof seat.set, 'function', '.set method present.');
equal(typeof seat.status, 'function', '.status method present.');
});
test('Testing .get selector', function () {
expect(7);
var $seatCharts = methodsMapSetup(),
seatCharts = $seatCharts.seatCharts();
equal(typeof seatCharts.get('1_1'), 'object', '.get for one id should return an object.');
equal(typeof seatCharts.get('1_1').length, 'undefined', '.get for one id should return an object without length property.');
equal(typeof seatCharts.get(['1_1', '3_3']), 'object', '.get for two ids should return an object.');
equal(seatCharts.get(['1_1', '3_3', '2_4']).length, 3, '.get for three ids should have a property length with value 3.');
equal(typeof seatCharts.get('99_99'), 'undefined', '.get for invalid id should return undefined.');
equal(typeof seatCharts.get(['99_99', '2_3']), 'object', '.get for invalid and valid id and should return an object.');
equal(seatCharts.get(['99_99', '2_3']).length, 1, 'With 1 as length.');
});
test('Testing .status method', function () {
expect(10);
var $seatCharts = methodsMapSetup(),
seatCharts = $seatCharts.seatCharts(),
seat1,
seatsSet;
seat1 = seatCharts.get('2_3');
equal(seat1.status(), 'available', 'Default status is available.');
seat1.status('unavailable');
equal(seat1.status(), 'unavailable', 'Status has been changed.');
seat1.status('selected');
equal(seat1.status(), 'selected', 'Status has been changed again.');
seatsSet = seatCharts.get(['2_2', '2_4']);
seatsSet.status('selected');
equal(seatCharts.get('2_2').status(), 'selected', 'Setting status for the whole set 1.');
equal(seatCharts.get('2_4').status(), 'selected', 'Setting status for the whole set 2.');
seatCharts.status('3_2', 'unavailable');
equal(seatCharts.get('3_2').status(), 'unavailable', 'Alternative .status usage.');
seatCharts.status(['4_4', '5_2', '5_1'], 'unavailable');
equal(seatCharts.get('4_4').status(), 'unavailable', 'Alternative .status usage for the whole set 1.');
equal(seatCharts.get('5_2').status(), 'unavailable', 'Alternative .status usage for the whole set 2.');
equal(seatCharts.get('5_1').status(), 'unavailable', 'Alternative .status usage for the whole set 3.');
//Issue #8 - Very odd behaviour when using sc.status();
seatCharts.get(['1_1', '1_2']).status('unavailable');
//settings the same status twice
seatCharts.get(['1_1', '1_2']).status('unavailable');
equal(seatCharts.get('1_1').status(), 'unavailable', 'Status remains correct after setting the same status again');
});
test('Testing .find selector', function () {
expect(16);
var $seatCharts = methodsMapSetup(),
seatCharts = $seatCharts.seatCharts();
seatCharts.get(['4_1', '1_5', '2_3']).status('unavailable');
seatCharts.get(['5_2', '1_4']).status('selected');
equal(seatCharts.find('available').length, 19, 'Finding by status alone.');
equal(seatCharts.find('avble').length, 0, 'Finding by invalid status alone.');
equal(seatCharts.get(['4_1', '4_2']).find('unavailable').length, 1, 'Finding in set by status alone.');
equal(seatCharts.find('c').length, 5, 'Finding by character alone.');
equal(seatCharts.find('O').length, 0, 'Finding by invalid character.');
equal(seatCharts.get(['2_1', '3_2', '5_5', '5_3', '4_2']).find('b').length, 2, 'Finding in set by character alone.');
equal(seatCharts.get(['2_1', '3_2', '5_5', '5_3', '4_2']).find('_').length, 0, 'Finding in set by invalid character.');
equal(seatCharts.find('c.available').length, 4, 'Finding by character and status.');
equal(seatCharts.find('c.able').length, 0, 'Finding by character and invalid status.');
equal(seatCharts.find('P.availble').length, 0, 'Finding by invalid character and status.');
equal(seatCharts.get(['2_1', '3_2', '5_5', '5_3', '4_2', '2_3']).find('b.available').length, 2, 'Finding in set by character and status.');
equal(seatCharts.get(['2_1', '3_2', '5_5', '5_3', '4_2', '2_3']).find('X.available').length, 0, 'Finding in set by invalid character and status.');
equal(seatCharts.get(['2_1', '3_2', '5_5', '5_3', '4_2', '2_3']).find('c.invalid-status').length, 0, 'Finding in set by character and invalid status.');
equal(seatCharts.get(['9_12', '', '4_53']).find('b').length, 0, 'Finding in empty set.');
equal(seatCharts.find(/^1_.*/).length, 4, 'Finding first row seats using a regexp.');
equal(seatCharts.find(/^[0-9]+_3/).length, 4, 'Finding third column seats using a regexp.');
});
test('Testing .node method', function () {
expect(6);
var $seatCharts = methodsMapSetup(),
seatCharts = $seatCharts.seatCharts();
seatCharts.get(['2_2', '5_4']).status('unavailable');
ok(seatCharts.get('1_4').node() instanceof jQuery, '.node returns a jQuery object.');
equal(seatCharts.get('2_3').node().length, 1, '.node for one seat returns set with 1 element.');
equal(seatCharts.get(['2_3', '4_2']).node().length, 2, '.node for two seats returns set with 2 elements.');
equal(seatCharts.find('c.available').node().length, 4, '.node returns jQuery set with all objects matching .find query.');
equal(seatCharts.get('1_4').node()[0], $('#1_4')[0], 'The same node returned by .get and jQuery selector.');
equal(seatCharts.get(['2_2', '3_5']).node()[1], $('#3_5')[0], 'The same nodes returned by .get and jQuery selector.');
});
test('Testing .each method', function () {
expect(4);
var $seatCharts = methodsMapSetup(),
seatCharts = $seatCharts.seatCharts(),
executions1 = 0,
executions2 = 0,
executions3 = 0;
seatCharts.get(['5_2', '5_1']).status('selected');
seatCharts.find('c.available').each(function () {
executions1 += 1;
});
equal(executions1, 3, '.each callback should be called for each element of the set.');
seatCharts.find('c').each(function () {
executions2 += 1;
return false; //break
});
equal(executions2, 1, 'Returning false should break .each loop.');
seatCharts.find('Z').each(function() {
executions3 += 1;
});
equal(executions3, 0, '.each should not be called when the set is empty.');
seatCharts.find('a').each(function () {
equal(typeof this.data, 'function', 'Seat is used as the context.');
return false;
});
});
test('Testing .data method', function () {
expect(4);
var $seatCharts = methodsMapSetup(),
seatCharts = $seatCharts.seatCharts();
propEqual(seatCharts.get('1_2').data(), {
classes : 'a1-seat-class a2-seat-class',
price : 45,
anObject : {
aProperty: 'testing'
}
}, 'a seat has correct properties.');
propEqual(seatCharts.get('3_4').data(), {
classes : ['b1-seat-class', 'b2-seat-class'],
price : 25,
anObject2: {
aProperty2: 23
}
}, 'b seat has correct properties.');
propEqual(seatCharts.get('5_2').data(), {}, 'c seat has correct properties.');
seatCharts.get('1_2').data().price = '75';
equal(seatCharts.get('1_1').data().price, '75', 'All seat of the same character share the reference to the same object');
});
test('Testing .char method', function () {
var $seatCharts = methodsMapSetup(),
seatCharts = $seatCharts.seatCharts();
equal(seatCharts.get('5_5').char(), 'c', 'Correct character returned 1.');
equal(seatCharts.get('2_3').char(), 'a', 'Correct character returned 2.');
equal(seatCharts.get('4_4').char(), 'b', 'Correct character returned 3.');
});
})(jQuery);