You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
503 lines
14 KiB
503 lines
14 KiB
var expect = window.chai.expect; |
|
|
|
function createSelect() { |
|
$('<select />', { 'id':'rating', 'name':'rating' }).appendTo('body'); |
|
|
|
for (var i = 1; i <= 10; i++) { |
|
var attributes = (i == 5) ? |
|
attributes = { 'value':i, 'selected':'selected' } : |
|
attributes = { 'value':i }; |
|
|
|
$('<option />', attributes).appendTo('#rating').html('rating-text-'+i); |
|
} |
|
} |
|
|
|
function destroySelect() { |
|
$('#rating').remove(); |
|
} |
|
|
|
|
|
|
|
describe('bar rating plugin on init with custom options', function () { |
|
|
|
it('should update defaults', function () { |
|
var BarRating; |
|
BarRating = new $.fn.barrating.BarRating(); |
|
BarRating.init({ |
|
showValues: false |
|
}); |
|
expect(BarRating.options).to.be.a('object'); |
|
expect(BarRating.options.theme).to.equal(''); |
|
expect(BarRating.options.initialRating).to.equal(null); |
|
expect(BarRating.options.allowEmpty).to.equal(null); |
|
expect(BarRating.options.emptyValue).to.equal(''); |
|
expect(BarRating.options.showValues).to.equal(false); |
|
expect(BarRating.options.showSelectedRating).to.equal(true); |
|
expect(BarRating.options.deselectable).to.equal(true); |
|
expect(BarRating.options.reverse).to.equal(false); |
|
expect(BarRating.options.readonly).to.equal(false); |
|
expect(BarRating.options.fastClicks).to.equal(true); |
|
expect(BarRating.options.hoverState).to.equal(true); |
|
expect(BarRating.options.silent).to.equal(false); |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe('bar rating plugin on show', function () { |
|
|
|
before(function () { |
|
createSelect(); |
|
$('#rating').barrating('show'); |
|
}); |
|
|
|
after(function () { |
|
$('#rating').barrating('destroy'); |
|
destroySelect(); |
|
}); |
|
|
|
it('should have data', function () { |
|
expect($('#rating').data('barrating')).to.be.a('object'); |
|
}); |
|
|
|
it('should wrap the select field into a wrapper div', function () { |
|
expect($('.br-widget').parent().hasClass('br-wrapper')).to.equal(true); |
|
}); |
|
|
|
it('should transform the select field into a rating widget', function () { |
|
expect($('.br-widget a')).to.have.length(10); |
|
}); |
|
|
|
it('should store rating values in data attributes', function () { |
|
expect($('.br-widget a:first').attr('data-rating-value')).to.equal('1'); |
|
expect($('.br-widget a:nth-child(8)').attr('data-rating-value')).to.equal('8'); |
|
expect($('.br-widget a:first').attr('data-rating-text')).to.equal('rating-text-1'); |
|
expect($('.br-widget a:nth-child(8)').attr('data-rating-text')).to.equal('rating-text-8'); |
|
}); |
|
|
|
it('should read the selected rating from the select field', function () { |
|
expect($('#rating').data('barrating').ratingValue).to.equal('5'); |
|
expect($('#rating').data('barrating').ratingText).to.equal('rating-text-5'); |
|
}); |
|
|
|
it('should set correct class', function () { |
|
expect($('.br-widget a:nth-child(4)').hasClass('br-selected')).to.equal(true); |
|
expect($('.br-widget a:nth-child(5)').hasClass('br-selected br-current')).to.equal(true); |
|
expect($('.br-widget a:nth-child(6)').hasClass('br-selected')).to.equal(false); |
|
}); |
|
|
|
it('should append a rating div', function () { |
|
expect($('div.br-current-rating')).to.have.length(1); |
|
}); |
|
|
|
it('should display a correct rating', function () { |
|
expect($('div.br-current-rating').html()).to.equal( |
|
$('#rating').data('barrating').ratingText |
|
); |
|
}); |
|
|
|
it('should hide the select field', function () { |
|
expect($('#rating').css('display')).to.equal('none'); |
|
}); |
|
|
|
}); |
|
|
|
describe('bar rating plugin on set fractional value', function () { |
|
|
|
before(function () { |
|
createSelect(); |
|
$('#rating') |
|
.barrating('show', { initialRating: 3.3 }); |
|
}); |
|
|
|
after(function () { |
|
$('#rating').barrating('destroy'); |
|
destroySelect(); |
|
}); |
|
|
|
it('should set .br-half class', function () { |
|
expect($('.br-widget a:nth-child(4)').hasClass('br-fractional')).to.equal(true); |
|
expect($('.br-widget a:nth-child(4)').hasClass('br-fractional-30')).to.equal(true); |
|
}); |
|
|
|
}); |
|
|
|
describe('bar rating plugin on set fractional value < 1', function () { |
|
|
|
before(function () { |
|
createSelect(); |
|
$('#rating') |
|
.barrating('show', { initialRating: 0.99 }); |
|
}); |
|
|
|
after(function () { |
|
$('#rating').barrating('destroy'); |
|
destroySelect(); |
|
}); |
|
|
|
it('should set .br-half class', function () { |
|
expect($('.br-widget a:first').hasClass('br-fractional')).to.equal(true); |
|
expect($('.br-widget a:first').hasClass('br-fractional-90')).to.equal(true); |
|
}); |
|
|
|
}); |
|
|
|
describe('bar rating themes', function() { |
|
|
|
before(function () { |
|
createSelect(); |
|
}); |
|
|
|
after(function () { |
|
$('#rating').barrating('destroy'); |
|
destroySelect(); |
|
}); |
|
|
|
it('should set the theme class', function() { |
|
$('#rating').barrating({ |
|
theme: 'bootstrap-stars' |
|
}); |
|
|
|
expect($('.br-wrapper').hasClass('br-theme-bootstrap-stars')).to.be.true; |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe('bar rating plugin on show and rating selected', function () { |
|
|
|
var valuesFromCallback = []; |
|
|
|
before(function () { |
|
createSelect(); |
|
|
|
$('#rating').barrating('show', { |
|
onSelect:function (value, text, event) { |
|
valuesFromCallback.push(value, text, event); |
|
} |
|
}); |
|
|
|
$('.br-widget a:nth-child(2)').trigger('click'); |
|
}); |
|
|
|
after(function () { |
|
$('#rating').barrating('destroy'); |
|
destroySelect(); |
|
}); |
|
|
|
it('should update data', function () { |
|
expect($('#rating').data('barrating').ratingValue).to.equal('2'); |
|
expect($('#rating').data('barrating').ratingText).to.equal('rating-text-2'); |
|
}); |
|
|
|
it('should set correct class', function () { |
|
expect($('.br-widget a:nth-child(1)').hasClass('br-selected')).to.equal(true); |
|
expect($('.br-widget a:nth-child(2)').hasClass('br-selected br-current')).to.equal(true); |
|
expect($('.br-widget a:nth-child(3)').hasClass('br-selected')).to.equal(false); |
|
}); |
|
|
|
it('should display a correct rating', function () { |
|
expect($('div.br-current-rating').html()).to.equal( |
|
$('#rating').data('barrating').ratingText |
|
); |
|
}); |
|
|
|
it('should pass correct values to a callback', function () { |
|
expect(valuesFromCallback[0]).to.equal('2'); |
|
expect(valuesFromCallback[1]).to.equal('rating-text-2'); |
|
expect(valuesFromCallback[2]).to.be.a('object'); |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe('bar rating plugin on show and empty ratings are allowed', function () { |
|
|
|
before(function () { |
|
createSelect(); |
|
|
|
$('#rating').barrating('show', { |
|
allowEmpty: true, |
|
emptyValue: '-- not defined --' |
|
}); |
|
}); |
|
|
|
after(function () { |
|
$('#rating').barrating('destroy'); |
|
destroySelect(); |
|
}); |
|
|
|
it('should update data', function () { |
|
expect($('#rating').data('barrating').allowEmpty).to.equal(true); |
|
expect($('#rating').data('barrating').emptyRatingValue).to.equal('-- not defined --'); |
|
expect($('#rating').data('barrating').emptyRatingText).to.equal(''); |
|
}); |
|
|
|
it('should set correct class', function () { |
|
expect($('#rating option').first().val()).to.equal('-- not defined --'); |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe('bar rating plugin reversed', function () { |
|
|
|
before(function () { |
|
createSelect(); |
|
|
|
$('#rating').barrating('show', { |
|
reverse:true |
|
}); |
|
}); |
|
|
|
after(function () { |
|
$('#rating').barrating('destroy'); |
|
destroySelect(); |
|
}); |
|
|
|
it('should set correct widget class', function () { |
|
expect($('.br-widget').hasClass('br-reverse')).to.equal(true); |
|
}); |
|
|
|
it('should set correct class', function () { |
|
expect($('.br-widget a:nth-child(4)').hasClass('br-selected')).to.equal(false); |
|
expect($('.br-widget a:nth-child(5)').hasClass('br-selected br-current')).to.equal(true); |
|
expect($('.br-widget a:nth-child(6)').hasClass('br-selected')).to.equal(true); |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe('bar rating plugin read-only', function () { |
|
|
|
before(function () { |
|
createSelect(); |
|
|
|
$('#rating').barrating('show', { |
|
readonly:true |
|
}); |
|
|
|
$('.br-widget a:nth-child(6)').trigger('click'); |
|
}); |
|
|
|
after(function () { |
|
$('#rating').barrating('destroy'); |
|
destroySelect(); |
|
}); |
|
|
|
it('should set correct class', function () { |
|
expect($('.br-widget a:nth-child(4)').hasClass('br-selected')).to.equal(true); |
|
expect($('.br-widget a:nth-child(5)').hasClass('br-selected br-current')).to.equal(true); |
|
expect($('.br-widget a:nth-child(6)').hasClass('br-selected')).to.equal(false); |
|
}); |
|
|
|
it('should ignore user input', function () { |
|
expect($('#rating').data('barrating').ratingValue).to.equal('5'); |
|
expect($('#rating').data('barrating').ratingText).to.equal('rating-text-5'); |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe('bar rating plugin on deselect', function () { |
|
|
|
before(function () { |
|
createSelect(); |
|
|
|
// prepend empty OPTION to test deselectable ratings |
|
$('#rating').prepend($('<option />', { 'value':'' })); |
|
$('#rating').barrating('show'); |
|
|
|
// deselect rating |
|
$('.br-widget a:nth-child(5)').trigger('click'); |
|
}); |
|
|
|
after(function () { |
|
$('#rating').barrating('destroy'); |
|
destroySelect(); |
|
}); |
|
|
|
it('should successfully deselect rating', function () { |
|
expect($('#rating').data('barrating').ratingValue).to.equal(''); |
|
expect($('#rating').data('barrating').ratingText).to.equal(''); |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe('bar rating plugin on clear', function () { |
|
|
|
var valuesFromCallback = []; |
|
|
|
before(function () { |
|
createSelect(); |
|
|
|
$('#rating').barrating('show', { |
|
onClear:function (value, text) { |
|
valuesFromCallback.push(value, text); |
|
} |
|
}); |
|
$('.br-widget a:nth-child(6)').trigger('click'); |
|
$('#rating').barrating('clear'); |
|
}); |
|
|
|
after(function () { |
|
$('#rating').barrating('destroy'); |
|
destroySelect(); |
|
}); |
|
|
|
it('should restore original rating', function () { |
|
expect($('#rating').data('barrating').ratingValue).to.equal('5'); |
|
expect($('#rating').data('barrating').ratingText).to.equal('rating-text-5'); |
|
}); |
|
|
|
it('should reset select field', function () { |
|
expect($('#rating').val()).to.equal('5'); |
|
}); |
|
|
|
it('should set correct class', function () { |
|
expect($('.br-widget a:nth-child(4)').hasClass('br-selected')).to.equal(true); |
|
expect($('.br-widget a:nth-child(5)').hasClass('br-selected br-current')).to.equal(true); |
|
expect($('.br-widget a:nth-child(6)').hasClass('br-selected')).to.equal(false); |
|
}); |
|
|
|
it('should pass correct values to a callback', function () { |
|
expect(valuesFromCallback[0]).to.equal('5'); |
|
expect(valuesFromCallback[1]).to.equal('rating-text-5'); |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe('bar rating plugin on destroy', function () { |
|
|
|
var valuesFromCallback = []; |
|
|
|
before(function () { |
|
createSelect(); |
|
|
|
$('#rating').barrating('show', { |
|
onDestroy:function (value, text) { |
|
valuesFromCallback.push(value, text); |
|
} |
|
}); |
|
|
|
$('#rating').barrating('destroy'); |
|
|
|
}); |
|
|
|
after(function () { |
|
destroySelect(); |
|
}); |
|
|
|
it('should remove data', function () { |
|
expect($('#rating').data('barrating')).to.equal(undefined); |
|
}); |
|
|
|
it('should unwrap the select field', function () { |
|
expect($('.br-wrapper').length).to.equal(0); |
|
}); |
|
|
|
it('should remove the widget', function () { |
|
expect($('.br-widget').length).to.equal(0); |
|
}); |
|
|
|
it('should show the select field back again', function () { |
|
expect($('#rating').is(":visible")).to.equal(true); |
|
}); |
|
|
|
it('should pass correct values to a callback', function () { |
|
expect(valuesFromCallback[0]).to.equal('5'); |
|
expect(valuesFromCallback[1]).to.equal('rating-text-5'); |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe('bar rating plugin on set value', function () { |
|
|
|
var valuesFromCallback = []; |
|
|
|
before(function () { |
|
createSelect(); |
|
|
|
$('#rating').barrating('show', { |
|
onSelect:function (value, text) { |
|
valuesFromCallback.push(value, text); |
|
} |
|
}).barrating('set', 3); |
|
|
|
}); |
|
|
|
after(function () { |
|
destroySelect(); |
|
}); |
|
|
|
it('should set correct value', function () { |
|
expect($('#rating').data('barrating').ratingValue).to.equal(3); |
|
expect($('#rating').data('barrating').ratingText).to.equal('rating-text-3'); |
|
}); |
|
|
|
it('should set correct class', function () { |
|
expect($('.br-widget a:nth-child(3)').hasClass('br-selected')).to.equal(true); |
|
expect($('.br-widget a:nth-child(3)').hasClass('br-current')).to.equal(true); |
|
}); |
|
|
|
it('should pass correct values to a callback', function () { |
|
expect(valuesFromCallback[0]).to.equal(3); |
|
expect(valuesFromCallback[1]).to.equal('rating-text-3'); |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe('bar rating plugin on set non-existing value', function () { |
|
|
|
before(function () { |
|
createSelect(); |
|
$('#rating') |
|
.barrating('show', { initialRating: 5 }) |
|
.barrating('set', 9999); |
|
}); |
|
|
|
after(function () { |
|
destroySelect(); |
|
}); |
|
|
|
it('should do nothing', function () { |
|
expect($('#rating').data('barrating').ratingValue).to.equal('5'); |
|
expect($('#rating').data('barrating').ratingText).to.equal('rating-text-5'); |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe('bar rating plugin on change read-only state', function () { |
|
|
|
before(function () { |
|
createSelect(); |
|
$('#rating') |
|
.barrating('show', { initialRating: 1 }) |
|
.barrating('readonly', true); |
|
|
|
$('.br-widget a:last-child').trigger('click'); |
|
}); |
|
|
|
after(function () { |
|
destroySelect(); |
|
}); |
|
|
|
it('should ignore user input', function () { |
|
expect($('#rating').data('barrating').ratingValue).to.equal('1'); |
|
expect($('#rating').data('barrating').ratingText).to.equal('rating-text-1'); |
|
}); |
|
|
|
it('should update data', function () { |
|
expect($('#rating').data('barrating').readOnly).to.equal(true); |
|
}); |
|
|
|
it('should set correct widget class', function () { |
|
expect($('.br-widget').hasClass('br-readonly')).to.equal(true); |
|
}); |
|
|
|
});
|
|
|