').data('json-obj', detailView.context.testListView[0]).appendTo($listView);
var $cloudStackContainer = $('
').attr('cloudStack-container', true).data('cloudStack-args', {
sections: {
testListView: {}
}
}).appendTo('#qunit-fixture');
$.fn.dataTable = function() { return this; };
$.fn.listView = function(args1, args2) {
if (args1 == 'replaceItem')
args2.after(args2.$row.data('json-obj', args2.data));
return this;
};
cloudStack.ui.notifications.add = function(notification, complete) {
complete();
};
cloudStack.dialog.confirm = function(args) {
args.action();
};
$detailView.data('list-view-row', $listViewRow);
$detailView.detailView(detailView);
stop();
$detailView.find('.action.updateDataTestSync a').click();
});
test('Update data async, from list view row', function() {
var detailView = {
section: 'testListView',
context: {
testListView: [{
fieldA: 'fieldA-1',
fieldB: 'fieldB-1',
fieldC: 'fieldC-1',
state: 'on'
}]
},
actions: {
updateDataTestAsync: {
label: 'updateDataTestAsync',
preAction: function(args) {
start();
ok(true, 'Pre-action called');
equal($detailView.data('view-args').context.testListView[0].fieldA, 'fieldA-1', 'Pre-action: Correct context value for fieldA');
equal($detailView.data('view-args').context.testListView[0].fieldB, 'fieldB-1', 'Pre-action: Correct context value for fieldB');
equal($detailView.data('view-args').context.testListView[0].fieldC, 'fieldC-1', 'Pre-action: Correct context value for fieldC');
stop();
return true;
},
action: function(args) {
args.response.success();
},
messages: { notification: function() { return 'notification'; }},
notification: {
poll: function(args) {
args.complete({
data: {
fieldA: 'fieldA-2',
fieldB: 'fieldB-2',
state: 'off'
}
});
start();
equal($detailView.data('view-args').context.testListView[0].fieldA, 'fieldA-2', 'Correct context value for fieldA');
equal($detailView.data('view-args').context.testListView[0].fieldB, 'fieldB-2', 'Correct context value for fieldB');
equal($detailView.data('view-args').context.testListView[0].fieldC, 'fieldC-1', 'Correct context value for fieldC');
equal($detailView.find('tr.fieldA .value').html(), 'fieldA-2', 'Correct table value for fieldA');
equal($detailView.find('tr.fieldB .value').html(), 'fieldB-2', 'Correct table value for fieldB');
equal($detailView.find('tr.fieldC .value').html(), 'fieldC-1', 'Correct table value for fieldC');
equal($detailView.find('.action').size(), 1, 'Correct action count');
equal($detailView.find('.action.updateDataTestAsync').size(), 1, 'updateDataTestAsync present');
equal($detailView.find('.action.filteredAction').size(), 0, 'filteredAction not present');
stop();
}
}
},
filteredAction: {
label: 'filteredAction',
action: function() {},
messages: { notification: function() { return 'notification'; } }
}
},
tabs: {
test: {
title: 'test',
fields: [{
fieldA: { label: 'fieldA' },
fieldB: { label: 'fieldB' },
fieldC: { label: 'fieldC' }
}],
dataProvider: function(args) {
args.response.success({
data: args.context.testListView[0],
actionFilter: function(args) {
if (args.context.testListView[0].state == 'on') {
return ['updateDataTestAsync', 'filteredAction'];
}
return ['updateDataTestAsync'];
}
});
}
}
}
};
var $detailView = $('
');
var $listView = $('
').addClass('list-view');
var $listViewRow = $('
').data('json-obj', detailView.context.testListView[0]).appendTo($listView);
var $cloudStackContainer = $('
').attr('cloudStack-container', true).data('cloudStack-args', {
sections: {
testListView: {}
}
}).appendTo('#qunit-fixture');
$.fn.dataTable = function() { return this; };
$.fn.listView = function(args1, args2) {
if (args1 == 'replaceItem')
args2.after(args2.$row.data('json-obj', args2.data));
return this;
};
cloudStack.ui.notifications.add = function(notification, complete) {
notification.poll({ complete: complete });
};
cloudStack.dialog.confirm = function(args) {
args.action();
};
$detailView.data('list-view-row', $listViewRow);
$detailView.detailView(detailView);
equal($detailView.find('.action').size(), 2, 'Correct action count');
equal($detailView.find('.action.updateDataTestAsync').size(), 1, 'updateDataTestAsync present');
equal($detailView.find('.action.filteredAction').size(), 1, 'filteredAction present');
stop();
$detailView.find('.action.updateDataTestAsync a').click();
$detailView.data('view-args').actions.updateDataTestAsync.preAction = function(args) {
start();
equal($detailView.data('view-args').context.testListView[0].fieldA, 'fieldA-2', 'Pre-action: Correct context value for fieldA');
equal($detailView.data('view-args').context.testListView[0].fieldB, 'fieldB-2', 'Pre-action: Correct context value for fieldB');
equal($detailView.data('view-args').context.testListView[0].fieldC, 'fieldC-1', 'Pre-action: Correct context value for fieldC');
ok(true, 'Pre-action called');
return false;
};
$detailView.find('.action.updateDataTestAsync a').click();
});
test('Update context', function() {
var detailView = {
context: {
listViewItemA: [
{ fieldA: 'fieldAContent' }
]
// listViewItemB [not stored yet]
},
tabFilter: function(args) {
start();
ok($.isArray(args.context.listViewItemB), 'updateContext called before tabFilter');
stop();
return [];
},
// updateContext is executed every time a data provider is called
updateContext: function(args) {
start();
ok(true, 'updateContext called');
equal(args.context.listViewItemA[0].fieldA, 'fieldAContent', 'updateContext: Item A present in context');
stop();
return {
listViewItemB: [
{ fieldB: 'fieldBContent' }
]
};
},
tabs: {
test: {
title: 'test',
fields: { fieldA: { label: 'fieldA'}, fieldB: { label: 'fieldB' }},
dataProvider: function(args) {
start();
equal(args.context.listViewItemA[0].fieldA, 'fieldAContent', 'dataProvider: Item A present in context');
equal(args.context.listViewItemB[0].fieldB, 'fieldBContent', 'dataProvider: Item B present in context');
}
}
}
};
var $detailView = $('
');
stop();
$detailView.detailView(detailView);
});
}(jQuery));