$(function(){ var $b = $('#builder'); QUnit.module('plugins-gui', { afterEach: function() { $b.queryBuilder('destroy'); } }); /** * Test bt-checkbox */ QUnit.test('bt-checkbox', function(assert) { $b.queryBuilder({ plugins: ['bt-checkbox'], filters: bt_checkbox_filters, rules: bt_checkbox_rules }); assert.ok( $('#builder_rule_0 .checkbox.checkbox-default').length == 2, 'Should have 2 checkboxes with default color' ); assert.ok( $('#builder_rule_1 .checkbox.checkbox-primary').length == 3, 'Should have 3 checkboxes with primary color' ); assert.ok( $('#builder_rule_2 .radio.radio-danger').length == 1 && $('#builder_rule_2 .radio.radio-success').length == 1 && $('#builder_rule_2 .radio.radio-default').length == 1, 'Should have 3 radios with danger, success and default colors' ); }); /** * Test bt-selectpicker */ QUnit.test('bt-selectpicker', function(assert) { $b.queryBuilder({ plugins: ['bt-selectpicker'], filters: basic_filters, rules: basic_rules }); assert.ok( $b.find('.bootstrap-select').length == 8, 'Should have initialized Bootstrap Select on all filters and operators selectors' ); }); /** * Test bt-tooltip-errors */ QUnit.test('bt-tooltip-errors', function(assert) { $b.queryBuilder({ plugins: ['bt-tooltip-errors'], filters: basic_filters, rules: invalid_rules }); $b.queryBuilder('validate'); assert.equal( $('#builder_group_0 .error-container').eq(0).data('toggle'), 'tooltip', 'Should have added data-toggle="tooltip" in the template' ); assert.equal( $('#builder_rule_0 .error-container').data('originalTitle'), 'Empty value', 'Error title should be "Empty value"' ); }); /** * Test filter-description */ QUnit.test('filter-description', function(assert) { $b.queryBuilder({ plugins: { 'filter-description': { mode: 'inline' } }, filters: description_filters, rules: description_rules }); assert.match( $('#builder_rule_0 p.filter-description').html(), new RegExp(description_filters[0].description), 'Paragraph should contain filter description' ); $b.queryBuilder('destroy'); $b.queryBuilder({ plugins: { 'filter-description': { mode: 'popover' } }, filters: description_filters, rules: description_rules }); assert.ok( $('#builder_rule_0 button.filter-description').data('toggle') == 'popover', 'Rule should contain a new button enabled with Popover' ); $b.queryBuilder('destroy'); $b.queryBuilder({ plugins: { 'filter-description': { mode: 'bootbox' } }, filters: description_filters, rules: description_rules }); assert.ok( $('#builder_rule_0 button.filter-description').data('toggle') == 'bootbox', 'Rule should contain a new button enabled with Bootbox' ); }); /** * Test sortable */ QUnit.test('sortable', function(assert) { assert.expect(1); var done = assert.async(); $b.queryBuilder({ plugins: ['sortable'], filters: basic_filters, rules: basic_rules }); $('#builder_rule_3').simulateDragDrop({ dropTarget: $('#builder_rule_1'), start: function() { $(this).find('.drag-handle').trigger('mouseover'); }, done: function() { assert.rulesMatch( $b.queryBuilder('getRules'), sorted_rules, 'Should have moved "Identifier" rule' ); done(); } }); }); var bt_checkbox_filters = [{ id: 'no-color', type: 'integer', input: 'checkbox', values: { 10: 'foo', 20: 'bar' } }, { id: 'one-color', type: 'integer', input: 'checkbox', values: { 1: 'one', 2: 'two', 3: 'three' }, color: 'primary' }, { id: 'multi-color', type: 'integer', input: 'radio', values: { 0: 'no', 1: 'yes', 2: 'perhaps' }, colors: { 0: 'danger', 1: 'success' } }]; var bt_checkbox_rules = { condition: 'AND', rules: [{ id: 'no-color', value: 10 }, { id: 'one-color', value: [1,2,3] }, { id: 'multi-color', value: 2 }] }; var invalid_rules = { condition: 'AND', rules: [{ id: 'id', operator: 'equal', value: '' }] }; var description_filters = [{ id: 'name', type: 'string', description: '<b>Lorem Ipsum</b> sit amet.' }]; var description_rules = { rules: [{ id: 'name', value: 'Mistic' }] }; var sorted_rules = $.extend(true, {}, basic_rules); sorted_rules.rules.splice(2, 0, sorted_rules.rules[2].rules.pop()); });