mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
747 lines
25 KiB
JavaScript
747 lines
25 KiB
JavaScript
// Copyright 2012 Citrix Systems, Inc. Licensed under the
|
|
// Apache License, Version 2.0 (the "License"); you may not use this
|
|
// file except in compliance with the License. Citrix Systems, Inc.
|
|
// reserves all rights not expressly granted by the License.
|
|
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
// Automatically generated by addcopyright.py at 04/03/2012
|
|
(function($) {
|
|
module('Detail view', {
|
|
setup: function() {
|
|
cloudStack.dialog.__confirm = cloudStack.dialog.confirm;
|
|
cloudStack.ui.notifications.__add = cloudStack.ui.notifications.add;
|
|
$.fn.__cloudBrowser = $.fn.cloudBrowser;
|
|
$.fn.__listView = $.fn.listView;
|
|
$.fn.__dataTable = $.fn.dataTable;
|
|
$.fn.__is = $.fn.is;
|
|
|
|
$.fn.is = function(args) {
|
|
if (args == ':visible')
|
|
return true; // No test elems will ever be shown, so just pretend they are visible
|
|
|
|
return true;
|
|
};
|
|
},
|
|
|
|
teardown: function() {
|
|
cloudStack.dialog.confirm = cloudStack.dialog.__confirm;
|
|
cloudStack.ui.notifications.add = cloudStack.ui.notifications.__add;
|
|
$.fn.cloudBrowser = $.fn.__cloudBrowser;
|
|
$.fn.listView = $.fn.__listView;
|
|
$.fn.dataTable = $.fn.__dataTable;
|
|
$.fn.is = $.fn.__is;
|
|
}
|
|
});
|
|
|
|
test('Basic', function() {
|
|
var detailView = {
|
|
tabs: {
|
|
tabA: {
|
|
title: 'tabA',
|
|
fields: [{}],
|
|
dataProvider: function() {}
|
|
},
|
|
tabB: {
|
|
title: 'tabB',
|
|
fields: [{}],
|
|
dataProvider: function() {}
|
|
}
|
|
}
|
|
};
|
|
|
|
var $detailView = $('<div>');
|
|
|
|
ok($detailView.detailView(detailView), 'Create detail view');
|
|
equal($detailView.find('.ui-tabs-nav li').size(), 2, 'Detail view has correct tab count');
|
|
equal($detailView.find('.ui-tabs-nav li:first a').html(), 'tabA', 'First tab has correct title');
|
|
equal($detailView.find('.ui-tabs-nav li:last a').html(), 'tabB', 'Last tab has correct title');
|
|
});
|
|
|
|
test('Data provider', function() {
|
|
var detailView = {
|
|
tabs: {
|
|
tabA: {
|
|
title: 'tabA',
|
|
fields: [{
|
|
fieldA: { label: 'fieldA' },
|
|
fieldB: { label: 'fieldB' }
|
|
}],
|
|
dataProvider: function(args) {
|
|
start();
|
|
ok(args.response.success({
|
|
data: {
|
|
fieldA: 'dataProviderFieldA',
|
|
fieldB: 'dataProviderFieldB'
|
|
}
|
|
}), 'Call success');
|
|
equal($detailView.find('tr').size(), 2, 'Correct fields rendered');
|
|
equal($detailView.find('tr:first td:first').html(), 'fieldA', 'First field has correct label');
|
|
equal($detailView.find('tr:first td:last').html(), 'dataProviderFieldA', 'First field has correct content');
|
|
equal($detailView.find('tr:last td:first').html(), 'fieldB', 'Last field has correct label');
|
|
equal($detailView.find('tr:last td:last').html(), 'dataProviderFieldB', 'Last field has correct content');
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var $detailView = $('<div>');
|
|
|
|
stop();
|
|
|
|
// Test first tab
|
|
$detailView = $detailView.detailView(detailView);
|
|
|
|
// Test last tab
|
|
$detailView.find('.ui-tabs-nav li:last').click();
|
|
});
|
|
|
|
test('Data provider, multiple tabs', function() {
|
|
var detailView = {
|
|
tabs: {
|
|
tabA: {
|
|
title: 'tabA',
|
|
fields: [{
|
|
fieldA: { label: 'fieldA' },
|
|
fieldB: { label: 'fieldB' }
|
|
}],
|
|
dataProvider: function(args) {
|
|
start();
|
|
ok(args.response.success({
|
|
data: {
|
|
fieldA: 'dataProviderFieldA',
|
|
fieldB: 'dataProviderFieldB'
|
|
}
|
|
}), 'Call success');
|
|
equal($detailView.find('tr').size(), 2, 'Correct fields rendered');
|
|
equal($detailView.find('tr:first td:first').html(), 'fieldA', 'First field has correct label');
|
|
equal($detailView.find('tr:first td:last').html(), 'dataProviderFieldA', 'First field has correct content');
|
|
equal($detailView.find('tr:last td:first').html(), 'fieldB', 'Last field has correct label');
|
|
equal($detailView.find('tr:last td:last').html(), 'dataProviderFieldB', 'Last field has correct content');
|
|
}
|
|
},
|
|
|
|
tabB: {
|
|
title: 'tabB',
|
|
fields: [{
|
|
fieldC: { label: 'fieldC' },
|
|
fieldD: { label: 'fieldD' },
|
|
fieldC: { label: 'fieldE' },
|
|
fieldD: { label: 'fieldF' }
|
|
}],
|
|
dataProvider: function(args) {
|
|
start();
|
|
ok(args.response.success({
|
|
data: {
|
|
fieldC: 'dataProviderFieldC',
|
|
fieldD: 'dataProviderFieldD',
|
|
fieldE: 'dataProviderFieldE',
|
|
fieldF: 'dataProviderFieldF'
|
|
}
|
|
}), 'Call success');
|
|
equal($detailView.find('tr').size(), 4, 'Correct fields rendered');
|
|
equal($detailView.find('tr:first td:first').html(), 'fieldC', 'First field has correct label');
|
|
equal($detailView.find('tr:first td:last').html(), 'dataProviderFieldC', 'First field has correct content');
|
|
equal($detailView.find('tr:last td:first').html(), 'fieldF', 'Last field has correct label');
|
|
equal($detailView.find('tr:last td:last').html(), 'dataProviderFieldF', 'Last field has correct content');
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var $detailView = $('<div>');
|
|
|
|
stop();
|
|
|
|
// Test first tab
|
|
$detailView = $detailView.detailView(detailView);
|
|
|
|
// Test last tab
|
|
$detailView.find('.ui-tabs-nav li:last').click();
|
|
});
|
|
|
|
test('Field pre-filter', function() {
|
|
var detailView = {
|
|
tabs: {
|
|
tabA: {
|
|
title: 'tabA',
|
|
fields: {
|
|
fieldA: { label: 'fieldA' },
|
|
fieldB: { label: 'fieldB' },
|
|
fieldC: { label: 'fieldC' },
|
|
fieldD: { label: 'fieldD' }
|
|
},
|
|
preFilter: function(args) {
|
|
return ['fieldB', 'fieldC'];
|
|
},
|
|
dataProvider: function (args) {
|
|
args.response.success({
|
|
data: {
|
|
fieldA: 'fieldAContent',
|
|
fieldB: 'fieldBContent',
|
|
fieldC: 'fieldCContent',
|
|
fieldD: 'fieldDContent'
|
|
}
|
|
});
|
|
|
|
start();
|
|
equal($detailView.find('tr').size(), 2, 'Correct fields rendered');
|
|
equal($detailView.find('tr:first td:first').html(), 'fieldA', 'First field has correct label');
|
|
equal($detailView.find('tr:first td:last').html(), 'fieldAContent', 'First field has correct content');
|
|
equal($detailView.find('tr:last td:first').html(), 'fieldD', 'Last field has correct label');
|
|
equal($detailView.find('tr:last td:last').html(), 'fieldDContent', 'Last field has correct content');
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var $detailView = $('<div>');
|
|
|
|
stop();
|
|
|
|
$detailView.detailView(detailView);
|
|
});
|
|
|
|
test('Action', function() {
|
|
var detailView = {
|
|
actions: {
|
|
actionA: {
|
|
label: 'testActionA',
|
|
action: function(args) {
|
|
start();
|
|
ok(args.response.success(), 'Call success from action A');
|
|
},
|
|
messages: {
|
|
confirm: function() { return 'testActionAConfirm'; },
|
|
notification: function() { return 'testActionANotification'; }
|
|
}
|
|
},
|
|
actionB: {
|
|
label: 'testActionB',
|
|
action: function(args) {
|
|
start();
|
|
ok(args.response.success(), 'Call success from action B');
|
|
},
|
|
messages: {
|
|
confirm: function() { return 'testActionBConfirm'; },
|
|
notification: function() { return 'testActionBNotification'; }
|
|
},
|
|
notification: {
|
|
poll: function(args) {
|
|
start();
|
|
ok(args.complete(), 'Call complete from async action B');
|
|
}
|
|
}
|
|
}
|
|
},
|
|
tabs: {
|
|
tabA: {
|
|
title: 'tabA',
|
|
fields: {
|
|
fieldA: { label: 'fieldA' },
|
|
fieldB: { label: 'fieldB' }
|
|
},
|
|
dataProvider: function(args) {
|
|
args.response.success({
|
|
data: {
|
|
fieldA: 'fieldAContent',
|
|
fieldB: 'fieldBContent'
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var $detailView = $('<div>');
|
|
|
|
$detailView.detailView(detailView).appendTo('#qunit-fixture');
|
|
|
|
equal($detailView.find('.detail-actions').size(), 1, 'Action container present');
|
|
equal($detailView.find('.detail-actions .action').size(), 2, 'Correct action count');
|
|
equal($detailView.find('.detail-actions .action.actionA').size(), 1, 'actionA present');
|
|
equal($detailView.find('.detail-actions .action.actionB').size(), 1, 'actionB present');
|
|
|
|
cloudStack.dialog.confirm = function(args) {
|
|
start();
|
|
equal(args.message, 'testActionAConfirm', 'Correct confirmation message for action A');
|
|
stop();
|
|
|
|
args.action(); // Perform action
|
|
};
|
|
|
|
cloudStack.ui.notifications.add = function(notification, success, successArgs) {
|
|
stop();
|
|
equal(notification.desc, 'testActionANotification', 'Correct notification message for action A');
|
|
start();
|
|
};
|
|
|
|
$detailView.find('.detail-actions .action.actionA a').click(); // <a> triggers action, not action's container
|
|
|
|
cloudStack.dialog.confirm = function(args) {
|
|
start();
|
|
equal(args.message, 'testActionBConfirm', 'Correct confirmation message for action B');
|
|
stop();
|
|
|
|
args.action(); // Perform action
|
|
};
|
|
|
|
cloudStack.ui.notifications.add = function(notification, success, successArgs) {
|
|
start();
|
|
equal(notification.desc, 'testActionBNotification', 'Correct notification message for action B');
|
|
stop();
|
|
notification.poll({ complete: function() { return true; } });
|
|
};
|
|
|
|
$detailView.find('.detail-actions .action.actionB a').click(); // <a> triggers action, not action's container
|
|
});
|
|
|
|
test('Action filter', function() {
|
|
var detailView = {
|
|
actions: {
|
|
actionA: {
|
|
label: 'testActionA',
|
|
action: function(args) {}
|
|
},
|
|
actionB: {
|
|
label: 'testActionB',
|
|
action: function(args) {}
|
|
}
|
|
},
|
|
tabs: {
|
|
tabA: {
|
|
title: 'tabA',
|
|
fields: {
|
|
fieldA: { label: 'fieldA' },
|
|
fieldB: { label: 'fieldB' }
|
|
},
|
|
dataProvider: function(args) {
|
|
args.response.success({
|
|
actionFilter: function() {
|
|
return ['actionA'];
|
|
},
|
|
data: {
|
|
fieldA: 'fieldAContent',
|
|
fieldB: 'fieldBContent'
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var $detailView = $('<div>');
|
|
|
|
$detailView.detailView(detailView).appendTo('#qunit-fixture');
|
|
|
|
equal($detailView.find('.detail-actions .action').size(), 1, 'Correct action count');
|
|
equal($detailView.find('.detail-actions .action.actionA').size(), 1, 'actionA present');
|
|
notEqual($detailView.find('.detail-actions .action.actionB').size(), 1, 'actionB not present');
|
|
});
|
|
|
|
test('Refresh', function() {
|
|
var dataA = ['dataLoad1A', 'dataLoad2A'];
|
|
var dataB = ['dataLoad1B', 'dataLoad2B'];
|
|
var index = 0;
|
|
|
|
var detailView = {
|
|
tabs: {
|
|
tabA: {
|
|
title: 'tabA',
|
|
fields: {
|
|
fieldA: { label: 'fieldA' }
|
|
},
|
|
dataProvider: function(args) {
|
|
args.response.success({ data: { fieldA: dataA[index] }});
|
|
start();
|
|
equal($detailView.find('tr td:last').html(), dataA[index], 'Tab A data correct for load ' + (index + 1));
|
|
index++;
|
|
}
|
|
},
|
|
tabB: {
|
|
title: 'tabB',
|
|
fields: {
|
|
fieldB: { label: 'fieldB' }
|
|
},
|
|
dataProvider: function(args) {
|
|
args.response.success({ data: { fieldB: dataB[index] }});
|
|
start();
|
|
equal($detailView.find('tr td:last').html(), dataB[index], 'Tab B data correct for load ' + (index + 1));
|
|
index++;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var $detailView = $('<div>');
|
|
|
|
stop();
|
|
$detailView.detailView(detailView).appendTo('#qunit-fixture');
|
|
|
|
stop();
|
|
$detailView.find('.button.refresh').click();
|
|
|
|
stop();
|
|
index = 0;
|
|
$detailView.find('.ui-tabs-nav li.last a').click();
|
|
|
|
stop();
|
|
$detailView.find('.button.refresh').click();
|
|
});
|
|
|
|
test('View all, 1 section', function() {
|
|
var $browser = $('<div>').appendTo('#qunit-fixture');
|
|
var detailView = {
|
|
$browser: $browser,
|
|
context: {},
|
|
viewAll: { label: 'testListView', path: 'testListView' },
|
|
tabs: {
|
|
tabA: {
|
|
title: 'tabA',
|
|
fields: [{ fieldA: { label: 'fieldA' }}],
|
|
dataProvider: function(args) { args.response.success({ data: { fieldA: 'fieldAContent' } }); start(); }
|
|
}
|
|
}
|
|
};
|
|
var testListView = {};
|
|
var $detailView = $('<div>').appendTo('#qunit-fixture');
|
|
|
|
$('<div>').attr('cloudStack-container', true).data('cloudStack-args', {
|
|
sections: {
|
|
testListView: testListView
|
|
}
|
|
}).appendTo('#qunit-fixture');
|
|
|
|
stop();
|
|
|
|
$.fn.cloudBrowser = function(cmd, args) {};
|
|
$browser.cloudBrowser();
|
|
$detailView.detailView(detailView);
|
|
|
|
equal($detailView.find('.detail-group.actions td.view-all').size(), 1, 'Detail view has view all button');
|
|
|
|
stop();
|
|
|
|
$.fn.listView = function(args, options) {
|
|
start();
|
|
ok(true, 'List view called');
|
|
equal(args, testListView, 'Correct list view passed');
|
|
ok(args.$browser.size(), 'Browser passed in args');
|
|
ok($.isPlainObject(args.ref), 'Ref passed in args');
|
|
equal(args.id, 'testListView', 'Correct section ID');
|
|
|
|
return this;
|
|
};
|
|
|
|
$.fn.cloudBrowser = function(cmd, args) {
|
|
start();
|
|
equal(cmd, 'addPanel', 'Browser add panel called');
|
|
stop();
|
|
args.complete($('<div>'));
|
|
};
|
|
|
|
$detailView.find('.view-all a').click();
|
|
});
|
|
|
|
test('View all, subsections', function() {
|
|
var $browser = $('<div>').appendTo('#qunit-fixture');
|
|
var detailView = {
|
|
$browser: $browser,
|
|
context: {},
|
|
viewAll: { label: 'testListView', path: 'testSection.listViewB' },
|
|
tabs: {
|
|
tabA: {
|
|
title: 'tabA',
|
|
fields: [{ fieldA: { label: 'fieldA' }}],
|
|
dataProvider: function(args) { args.response.success({ data: { fieldA: 'fieldAContent' } }); start(); }
|
|
}
|
|
}
|
|
};
|
|
var listViewA = {};
|
|
var listViewB = {};
|
|
var $detailView = $('<div>').appendTo('#qunit-fixture');
|
|
|
|
$('<div>').attr('cloudStack-container', true).data('cloudStack-args', {
|
|
sections: {
|
|
testSection: {
|
|
sections: {
|
|
listViewA: { listView: listViewA },
|
|
listViewB: { listView: listViewB }
|
|
}
|
|
}
|
|
}
|
|
}).appendTo('#qunit-fixture');
|
|
|
|
stop();
|
|
|
|
$.fn.cloudBrowser = function(cmd, args) {};
|
|
$browser.cloudBrowser();
|
|
$detailView.detailView(detailView);
|
|
|
|
equal($detailView.find('.detail-group.actions td.view-all').size(), 1, 'Detail view has view all button');
|
|
|
|
stop();
|
|
|
|
$.fn.listView = function(args, options) {
|
|
start();
|
|
ok(true, 'List view called');
|
|
equal(args.listView, listViewB, 'Correct list view passed');
|
|
ok(args.$browser.size(), 'Browser passed in args');
|
|
ok($.isPlainObject(args.ref), 'Ref passed in args');
|
|
equal(args.id, 'testSection', 'Correct section ID');
|
|
|
|
return this;
|
|
};
|
|
|
|
$.fn.cloudBrowser = function(cmd, args) {
|
|
start();
|
|
equal(cmd, 'addPanel', 'Browser add panel called');
|
|
stop();
|
|
args.complete($('<div>'));
|
|
};
|
|
|
|
$detailView.find('.view-all a').click();
|
|
});
|
|
|
|
test('Pre-action', function() {
|
|
var detailView = {
|
|
actions: {
|
|
test: {
|
|
label: 'test',
|
|
preAction: function() {
|
|
start();
|
|
ok(true, 'Pre-action called');
|
|
|
|
return false;
|
|
},
|
|
action: function() {
|
|
ok(false, 'Action called; pre-action should have blocked it');
|
|
},
|
|
messages: { notification: function() { return 'notification'; }}
|
|
}
|
|
},
|
|
tabs: {
|
|
test: {
|
|
title: 'test',
|
|
label: 'testAction',
|
|
fields: [{
|
|
fieldA: { label: 'fieldA' },
|
|
fieldB: { label: 'fieldB' }
|
|
}],
|
|
dataProvider: function(args) { args.response.success({ data: {} }); }
|
|
}
|
|
}
|
|
};
|
|
var $detailView = $('<div>');
|
|
|
|
stop();
|
|
$detailView.detailView(detailView);
|
|
$detailView.find('.action.test a').click();
|
|
});
|
|
|
|
test('Update data, from list view row', function() {
|
|
var detailView = {
|
|
section: 'testListView',
|
|
context: {
|
|
testListView: [{
|
|
fieldA: 'fieldA-1',
|
|
fieldB: 'fieldB-1',
|
|
fieldC: 'fieldC-1'
|
|
}]
|
|
},
|
|
actions: {
|
|
updateDataTestSync: {
|
|
label: 'updateDataTestSync',
|
|
preAction: function(args) { return true; },
|
|
action: function(args) {
|
|
args.response.success({
|
|
data: {
|
|
fieldA: 'fieldA-2',
|
|
fieldB: 'fieldB-2'
|
|
}
|
|
});
|
|
|
|
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');
|
|
},
|
|
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]
|
|
});
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var $detailView = $('<div>');
|
|
var $listView = $('<div>').addClass('list-view');
|
|
var $listViewRow = $('<div>').data('json-obj', detailView.context.testListView[0]).appendTo($listView);
|
|
var $cloudStackContainer = $('<div>').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 = $('<div>');
|
|
var $listView = $('<div>').addClass('list-view');
|
|
var $listViewRow = $('<div>').data('json-obj', detailView.context.testListView[0]).appendTo($listView);
|
|
var $cloudStackContainer = $('<div>').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();
|
|
});
|
|
}(jQuery));
|