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.
324 lines
10 KiB
324 lines
10 KiB
QUnit.module('nested-repeater', { |
|
setup: function () { |
|
this.$fixture = $('#qunit-fixture'); |
|
this.$fixture.html($('#template').html()); |
|
this.$outerRepeater = this.$fixture.find('.outer-repeater'); |
|
this.$innerRepeater = this.$fixture.find('.inner-repeater'); |
|
this.$outerAddButton = this.$fixture.find('.outer-repeater > [data-repeater-create]'); |
|
this.$innerAddButton = this.$fixture.find('.inner-repeater > [data-repeater-create]'); |
|
} |
|
}); |
|
|
|
|
|
QUnit.test('isFirstItemUndeletable configuration option', function (assert) { |
|
this.$outerRepeater.repeater({ |
|
isFirstItemUndeletable: true, |
|
repeaters: [{ |
|
selector: '.inner-repeater', |
|
isFirstItemUndeletable: true |
|
}] |
|
}); |
|
|
|
this.$outerAddButton.click(); |
|
this.$innerAddButton.click(); |
|
|
|
var $outerItems = this.$outerRepeater.find('[data-repeater-list="outer-group"] > [data-repeater-item]'); |
|
var $innerItems = this.$innerRepeater.find('[data-repeater-item]'); |
|
|
|
assert.strictEqual($outerItems.length, 2, 'adds a second item to outer list'); |
|
assert.strictEqual($innerItems.length, 2, 'adds a second item to inner list'); |
|
assert.strictEqual( |
|
this.$outerRepeater.find('[data-repeater-item].outer') |
|
.first().find('[data-repeater-delete].outer').length, |
|
0, |
|
'No delete button on first outer item' |
|
); |
|
|
|
assert.strictEqual( |
|
this.$outerRepeater.find('[data-repeater-item].outer') |
|
.last().find('[data-repeater-delete].outer').length, |
|
1, |
|
'Delete button on second outer item' |
|
); |
|
|
|
assert.strictEqual( |
|
this.$innerRepeater.find('[data-repeater-item]') |
|
.first().find('[data-repeater-delete]').length, |
|
0, |
|
'No delete button on first inner item of first outer item' |
|
); |
|
|
|
assert.strictEqual( |
|
this.$innerRepeater.find('[data-repeater-item]') |
|
.last().find('[data-repeater-delete]').length, |
|
1, |
|
'Delete button on second inner item of first outer item' |
|
); |
|
|
|
assert.strictEqual( |
|
this.$outerRepeater.find('[data-repeater-list="inner-group"]').last() |
|
.find('[data-repeater-item]').first().find('[data-repeater-delete]').length, |
|
0, |
|
'No delete button on first inner item of second outer item' |
|
); |
|
}); |
|
|
|
QUnit.test('setList', function (assert) { |
|
var repeater = this.$outerRepeater.repeater({ |
|
repeaters: [{ selector: '.inner-repeater' }] |
|
}); |
|
repeater.setList([ |
|
{ |
|
'text-input': 'set-a', |
|
'inner-group': [{ 'inner-text-input': 'set-b' }] |
|
}, |
|
{ |
|
'text-input': 'set-foo', |
|
'inner-group': [] |
|
} |
|
]); |
|
|
|
var $items = this.$outerRepeater.find('[data-repeater-list="outer-group"] > [data-repeater-item]'); |
|
|
|
assert.deepEqual( |
|
getNamedInputValues($items.first()), |
|
{ |
|
"outer-group[0][text-input]": "set-a", |
|
"outer-group[0][inner-group][0][inner-text-input]": "set-b" |
|
}, |
|
'set first item' |
|
); |
|
|
|
assert.deepEqual( |
|
getNamedInputValues($items.last()), |
|
{ |
|
"outer-group[1][text-input]": "set-foo" |
|
}, |
|
'set second item' |
|
); |
|
}); |
|
|
|
QUnit.test('add item nested outer', function (assert) { |
|
this.$outerRepeater.repeater({ repeaters: [{ selector: '.inner-repeater' }] }); |
|
this.$outerAddButton.click(); |
|
var $items = this.$outerRepeater.find('[data-repeater-list="outer-group"] > [data-repeater-item]'); |
|
|
|
assert.strictEqual($items.length, 2, 'adds a second item to list'); |
|
|
|
assert.strictEqual( |
|
$items.first().find('[data-repeater-list="inner-group"] > [data-repeater-item]').length, |
|
1, 'does not duplicate first inner repeater' |
|
); |
|
|
|
assert.strictEqual( |
|
$items.last().find('[data-repeater-list="inner-group"] > [data-repeater-item]').length, |
|
1, 'does not duplicate last inner repeater' |
|
); |
|
|
|
assert.deepEqual( |
|
getNamedInputValues($items.first()), |
|
{ |
|
"outer-group[0][text-input]": "A", |
|
"outer-group[0][inner-group][0][inner-text-input]": "B" |
|
}, |
|
'renamed first item' |
|
); |
|
|
|
assert.deepEqual( |
|
getNamedInputValues($items.last()), |
|
{ |
|
"outer-group[1][text-input]": "", |
|
"outer-group[1][inner-group][0][inner-text-input]": "" |
|
}, |
|
'renamed last item, values cleared' |
|
); |
|
}); |
|
|
|
QUnit.test('delete added item outer from repeated outer', function (assert) { |
|
this.$outerRepeater.repeater({ repeaters: [{ selector: '.inner-repeater' }] }); |
|
this.$outerAddButton.click(); |
|
|
|
var $lastOuterItem = this.$outerRepeater |
|
.find('[data-repeater-list="outer-group"] > [data-repeater-item]') |
|
.last(); |
|
|
|
$lastOuterItem.find('[data-repeater-delete]').first().click(); |
|
|
|
assert.deepEqual( |
|
getNamedInputValues(this.$outerRepeater), |
|
{ |
|
"outer-group[0][text-input]": "A", |
|
"outer-group[0][inner-group][0][inner-text-input]": "B" |
|
} |
|
); |
|
}); |
|
|
|
QUnit.test('delete added item outer from first outer', function (assert) { |
|
this.$outerRepeater.repeater({ repeaters: [{ selector: '.inner-repeater' }] }); |
|
this.$outerAddButton.click(); |
|
|
|
var $firstOuterItem = this.$outerRepeater |
|
.find('[data-repeater-list="outer-group"] > [data-repeater-item]') |
|
.first(); |
|
|
|
$firstOuterItem.find('[data-repeater-delete]').first().click(); |
|
|
|
assert.deepEqual( |
|
getNamedInputValues(this.$outerRepeater), |
|
{ |
|
"outer-group[0][text-input]": "", |
|
"outer-group[0][inner-group][0][inner-text-input]": "" |
|
} |
|
); |
|
}); |
|
|
|
QUnit.test('add item nested inner', function (assert) { |
|
this.$outerRepeater.repeater({ repeaters: [{ selector: '.inner-repeater' }] }); |
|
this.$innerAddButton.click(); |
|
|
|
assert.strictEqual( |
|
this.$innerRepeater.find('[data-repeater-item]').length, |
|
2, 'adds item to inner repeater' |
|
); |
|
|
|
var $items = this.$outerRepeater.find('[data-repeater-list="outer-group"] > [data-repeater-item]'); |
|
|
|
assert.strictEqual($items.length, 1, 'does not add item to outer list'); |
|
|
|
assert.deepEqual( |
|
getNamedInputValues($items.first()), |
|
{ |
|
"outer-group[0][text-input]": "A", |
|
"outer-group[0][inner-group][0][inner-text-input]": "B", |
|
"outer-group[0][inner-group][1][inner-text-input]": "", |
|
}, |
|
'renamed items' |
|
); |
|
}); |
|
|
|
QUnit.test('add item nested inner from repeated outer', function (assert) { |
|
this.$outerRepeater.repeater({ repeaters: [{ selector: '.inner-repeater' }] }); |
|
this.$outerAddButton.click(); |
|
|
|
var $lastItem = this.$outerRepeater.find('[data-repeater-list="outer-group"] > [data-repeater-item]').last(); |
|
|
|
$lastItem.find('[data-repeater-create]').click(); |
|
|
|
assert.strictEqual( |
|
this.$innerRepeater.find('[data-repeater-item]').length, |
|
1, 'does not add item to first inner repeater' |
|
); |
|
|
|
assert.strictEqual( |
|
$lastItem.find('[data-repeater-item]').length, |
|
2, 'adds item to second inner repeater' |
|
); |
|
|
|
var $items = this.$outerRepeater.find('[data-repeater-list="outer-group"] > [data-repeater-item]'); |
|
|
|
assert.strictEqual($items.length, 2, 'correct number of terms in outer list'); |
|
|
|
assert.deepEqual( |
|
getNamedInputValues(this.$outerRepeater), |
|
{ |
|
"outer-group[0][text-input]": "A", |
|
"outer-group[0][inner-group][0][inner-text-input]": "B", |
|
"outer-group[1][text-input]": "", |
|
"outer-group[1][inner-group][0][inner-text-input]": "", |
|
"outer-group[1][inner-group][1][inner-text-input]": "", |
|
}, |
|
'renamed items' |
|
); |
|
}); |
|
|
|
QUnit.test('delete added item nested inner from repeated outer', function (assert) { |
|
this.$outerRepeater.repeater({ repeaters: [{ selector: '.inner-repeater' }] }); |
|
this.$outerAddButton.click(); |
|
|
|
var $lastOuterItem = this.$outerRepeater |
|
.find('[data-repeater-list="outer-group"] > [data-repeater-item]') |
|
.last(); |
|
|
|
$lastOuterItem.find('[data-repeater-create]').click(); |
|
$lastOuterItem.find('[data-repeater-list] [data-repeater-delete]').first().click(); |
|
|
|
assert.deepEqual( |
|
getNamedInputValues(this.$outerRepeater), |
|
{ |
|
"outer-group[0][text-input]": "A", |
|
"outer-group[0][inner-group][0][inner-text-input]": "B", |
|
"outer-group[1][text-input]": "", |
|
"outer-group[1][inner-group][0][inner-text-input]": "" |
|
} |
|
); |
|
}); |
|
|
|
QUnit.test('nested default values first item', function (assert) { |
|
this.$outerRepeater.repeater({ |
|
repeaters: [{ |
|
selector: '.inner-repeater', |
|
defaultValues: { 'inner-text-input': 'foo' } |
|
}] |
|
}); |
|
|
|
this.$innerAddButton.click(); |
|
|
|
assert.deepEqual( |
|
getNamedInputValues(this.$outerRepeater), |
|
{ |
|
"outer-group[0][text-input]": "A", |
|
"outer-group[0][inner-group][0][inner-text-input]": "B", |
|
"outer-group[0][inner-group][1][inner-text-input]": "foo" |
|
} |
|
); |
|
}); |
|
|
|
QUnit.test('nested default values last item', function (assert) { |
|
this.$outerRepeater.repeater({ |
|
repeaters: [{ |
|
selector: '.inner-repeater', |
|
defaultValues: { 'inner-text-input': 'foo' } |
|
}] |
|
}); |
|
|
|
this.$outerAddButton.click(); |
|
var $lastOuterItem = this.$outerRepeater |
|
.find('[data-repeater-list="outer-group"] > [data-repeater-item]') |
|
.last(); |
|
|
|
assert.deepEqual( |
|
getNamedInputValues(this.$outerRepeater), |
|
{ |
|
"outer-group[0][text-input]": "A", |
|
"outer-group[0][inner-group][0][inner-text-input]": "B", |
|
"outer-group[1][text-input]": "", |
|
"outer-group[1][inner-group][0][inner-text-input]": "foo" |
|
} |
|
); |
|
|
|
$lastOuterItem.find('[data-repeater-create]').click(); |
|
|
|
assert.deepEqual( |
|
getNamedInputValues(this.$outerRepeater), |
|
{ |
|
"outer-group[0][text-input]": "A", |
|
"outer-group[0][inner-group][0][inner-text-input]": "B", |
|
"outer-group[1][text-input]": "", |
|
"outer-group[1][inner-group][0][inner-text-input]": "foo", |
|
"outer-group[1][inner-group][1][inner-text-input]": "foo" |
|
} |
|
); |
|
}); |
|
|
|
QUnit.test('repeaterVal nested', function (assert) { |
|
this.$outerRepeater.repeater({ |
|
repeaters: [{ selector: '.inner-repeater' }] |
|
}); |
|
|
|
assert.deepEqual(this.$outerRepeater.repeaterVal(), { |
|
'outer-group': [{ |
|
'text-input': 'A', |
|
'inner-group': [{ 'inner-text-input': 'B' }] |
|
}] |
|
}); |
|
});
|
|
|