Current File : //home/tradevaly/www/node_modules/jquery.repeater/test/nested.js |
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' }]
}]
});
});