585 lines
20 KiB
Cheetah
585 lines
20 KiB
Cheetah
[%# 1.0@bugzilla.org %]
|
|
[%# The contents of this file are subject to the Mozilla Public
|
|
# License Version 1.1 (the "License"); you may not use this file
|
|
# except in compliance with the License. You may obtain a copy of
|
|
# the License at http://www.mozilla.org/MPL/
|
|
#
|
|
# Software distributed under the License is distributed on an "AS
|
|
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
# implied. See the License for the specific language governing
|
|
# rights and limitations under the License.
|
|
#
|
|
# The Original Code is the Bugzilla Test Runner System.
|
|
#
|
|
# The Initial Developer of the Original Code is Maciej Maczynski.
|
|
# Portions created by Maciej Maczynski are Copyright (C) 2001
|
|
# Maciej Maczynski. All Rights Reserved.
|
|
#
|
|
# Contributor(s): Ed Fuentetaja <efuentetaja@acm.org>
|
|
# Greg Hendricks <ghendricks@novell.com>
|
|
#%]
|
|
|
|
[%# INTERFACE:
|
|
# ...
|
|
#%]
|
|
|
|
[% PROCESS testopia/blocks.html.tmpl %]
|
|
[% PROCESS testopia/style.none.tmpl %]
|
|
|
|
[% title = "Test Run $run.id: $run.summary" FILTER html %]
|
|
|
|
[% PROCESS global/header.html.tmpl %]
|
|
<div id="mask"></div>
|
|
<script type="text/javascript">
|
|
var Param_Show_Setup_Breakdown = [% Param('testopia-show-setup-breakdown') ? 1 : 0 %];
|
|
var run = [% run.TO_JSON FILTER html_light %];
|
|
var user_login = '[% user.login FILTER html_light %]';
|
|
Ext.onReady(function(){
|
|
Ext.QuickTips.init();
|
|
|
|
var testopia_form = new Ext.form.BasicForm('testopia_helper_frm',{});
|
|
|
|
function submitEdits(field, value){
|
|
var params = {action: 'edit', run_id: run.run_id};
|
|
switch(field){
|
|
case 'run_product_version':
|
|
params.run_product_version = value;
|
|
break;
|
|
case 'build':
|
|
params.build = value;
|
|
break;
|
|
case 'status':
|
|
params.status = value;
|
|
break;
|
|
case 'summary':
|
|
params.summary = value;
|
|
break;
|
|
case 'environment':
|
|
params.environment = value;
|
|
break;
|
|
case 'run_notes':
|
|
params.run_notes = value;
|
|
break;
|
|
case 'manager':
|
|
params.manager = value;
|
|
break;
|
|
case 'target_pass':
|
|
params.target_pass = value;
|
|
break;
|
|
case 'target_completion':
|
|
params.target_completion = value;
|
|
break;
|
|
}
|
|
testopia_form.submit({
|
|
url: 'tr_process_run.cgi',
|
|
params: params,
|
|
success: function(f,a){
|
|
Testopia.Util.notify.msg('Test Run updated', 'Test Run {0} was updated successfully', field);
|
|
},
|
|
failure: function(f,a){
|
|
if (field == 'status'){
|
|
Ext.getCmp('run_status_cycle').setActiveItem(Ext.getCmp('run_status_cycle').getActiveItem().id == 'run_status_stopped' ? Ext.getCmp('run_status_running') : Ext.getCmp('run_status_stopped'), true);
|
|
Ext.getCmp('run_status_cycle').getEl().child(Ext.getCmp('run_status_cycle').buttonSelector).setStyle('background-image', 'url(' +Ext.getCmp('run_status_cycle').getActiveItem().icon +')');
|
|
}
|
|
Testopia.Util.error(f,a);
|
|
}
|
|
});
|
|
}
|
|
|
|
var runDelete = function(btn){
|
|
if (btn == 'yes'){
|
|
var form = new Ext.form.BasicForm("testopia_helper_frm",{});
|
|
form.submit({
|
|
url: 'tr_process_run.cgi',
|
|
params: {run_id: run.run_id, action:'delete'},
|
|
success: function(data){
|
|
Ext.Msg.show({
|
|
title:'Test Run Deleted',
|
|
msg: "Test Run " + run.run_id + " was deleted",
|
|
buttons: Ext.Msg.OK,
|
|
icon: Ext.MessageBox.INFO
|
|
});
|
|
window.location="tr_show_plan.cgi?plan_id=" + run.plan.id;
|
|
},
|
|
failure: Testopia.Util.error
|
|
});
|
|
}
|
|
};
|
|
var fileMenu = new Ext.menu.Menu({
|
|
id: 'file-menu',
|
|
items: [{
|
|
text: "Clone",
|
|
id:'run-clone-icon',
|
|
icon: 'extensions/testopia/img/copy.png',
|
|
iconCls: 'img_button_16x',
|
|
handler: function(){
|
|
Testopia.TestRun.ClonePopup(run.product_id, run.run_id);
|
|
}
|
|
},{
|
|
text: "Delete",
|
|
disabled: run.candelete ? false : true,
|
|
id:'run-delete-icon',
|
|
icon: 'extensions/testopia/img/delete.png',
|
|
iconCls: 'img_button_16x',
|
|
handler: function(){
|
|
Ext.Msg.show({
|
|
title:'Confirm Delete?',
|
|
msg: 'You are about to delete run ' + run.id + ' with all of its history. Are you sure you want to continue?',
|
|
buttons: Ext.Msg.YESNO,
|
|
fn: runDelete,
|
|
animEl: 'run_delete_btn',
|
|
icon: Ext.MessageBox.QUESTION
|
|
});
|
|
}
|
|
},{
|
|
text: 'Export Results to CSV',
|
|
icon: 'extensions/testopia/img/csv.png',
|
|
iconCls: 'img_button_16x',
|
|
handler: function(){
|
|
window.location = 'tr_list_caseruns.cgi?ctype=csv&run_id=' + run.run_id;
|
|
}
|
|
|
|
}]
|
|
});
|
|
|
|
var runControls = new Ext.Toolbar();
|
|
runControls.add({
|
|
text: 'File',
|
|
menu: fileMenu
|
|
},new Ext.Toolbar.Fill()
|
|
,{
|
|
xtype: 'button',
|
|
id:'run-clone-ibtn',
|
|
icon: 'extensions/testopia/img/copy.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Clone this Test Run',
|
|
handler: function(){
|
|
Testopia.TestRun.ClonePopup(run.product_id, run.run_id);
|
|
}
|
|
}
|
|
[% IF run.candelete %]
|
|
,{
|
|
xtype: 'button',
|
|
id: 'run_delete_btn',
|
|
icon: 'extensions/testopia/img/delete.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Delete this Run',
|
|
handler: function(){
|
|
Ext.Msg.show({
|
|
title:'Confirm Delete?',
|
|
msg: 'You are about to delete run ' + run.id + ' with all of its history. Are you sure you want to continue?',
|
|
buttons: Ext.Msg.YESNO,
|
|
fn: runDelete,
|
|
animEl: 'run_delete_btn',
|
|
icon: Ext.MessageBox.QUESTION
|
|
});
|
|
}
|
|
}
|
|
[% END %]
|
|
);
|
|
var runpanel = new Ext.Panel({
|
|
layout: 'border',
|
|
applyTo: 'run-body-div',
|
|
monitorResize: true,
|
|
id: 'runpanel',
|
|
height: Ext.state.Manager.get('run_height', 1200),
|
|
footer: true,
|
|
items:[{
|
|
split: true,
|
|
region: 'north',
|
|
xtype: 'tabpanel',
|
|
activeTab: 0,
|
|
id: 'object_panel',
|
|
items: [new Testopia.TestCaseRun.Panel(Testopia.Util.urlQueryToJSON(window.location.search), run),
|
|
{
|
|
title: 'Notes',
|
|
layout: 'fit',
|
|
items: [{
|
|
id: 'run_notes',
|
|
xtype:'textarea',
|
|
value: '[% run.notes FILTER js %]'
|
|
}],
|
|
buttons: [{
|
|
text: 'Submit',
|
|
disabled: run.canedit ? false : true,
|
|
handler: function(){
|
|
submitEdits('run_notes', Ext.getCmp('run_notes').getValue());
|
|
}
|
|
}]
|
|
},
|
|
new Testopia.Util.HistoryList('run', [% run.id FILTER none %])
|
|
]
|
|
},{
|
|
split: true,
|
|
id: 'run_overview_pane',
|
|
title: '[% title FILTER js %]',
|
|
headerAsText: true,
|
|
region: 'center',
|
|
collapsible: true,
|
|
contentEl: 'run_overview',
|
|
height: 'auto'
|
|
},{
|
|
collapsible: true,
|
|
title: ' ',
|
|
split: true,
|
|
region:'east',
|
|
layout: 'fit',
|
|
width: 200,
|
|
items: [{
|
|
xtype: 'tabpanel',
|
|
activeTab: 0,
|
|
id: 'run_east_panel',
|
|
items:[
|
|
new Testopia.Tags.ObjectTags('run', [% run.id FILTER none %]),
|
|
// {
|
|
// title: 'CC List'
|
|
// },
|
|
new Testopia.TestRun.FiltersList(run)
|
|
|
|
]
|
|
}]
|
|
}]
|
|
});
|
|
[% IF run.canedit %]
|
|
[% IF run.canstatus %]
|
|
// Manager Editing
|
|
var manager_edit_btn = new Ext.Button({
|
|
applyTo: 'manager_edit_btn_div',
|
|
id:'manager_edit_btn',
|
|
icon: 'extensions/testopia/img/edit.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Edit Manager',
|
|
handler: function(){
|
|
Ext.getCmp('manager_edt').startEdit(Ext.get('run_manager_div'), '[% run.manager.name FILTER js %]');
|
|
}
|
|
});
|
|
var manager_edt = new Ext.Editor(
|
|
new Testopia.User.Lookup({
|
|
hiddenName:'manager',
|
|
value: run.manager
|
|
}),
|
|
{
|
|
alignment: 'tl-tl',
|
|
id: 'manager_edt',
|
|
updateEl: true,
|
|
completeOnEnter: true,
|
|
ignoreNoChange: true,
|
|
cancelOnEsc: true
|
|
});
|
|
manager_edt.on('complete', function(e,v){
|
|
submitEdits('manager', v);
|
|
});
|
|
// Target Complete edit
|
|
var tcomp_edit_btn = new Ext.Button({
|
|
applyTo: 'run_tcomp_edit_btn_div',
|
|
id:'run_tcomp_edit_btn',
|
|
icon: 'extensions/testopia/img/edit.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Edit Run Summary',
|
|
handler: function(){
|
|
Ext.getCmp('run_tcomp_edt').startEdit(Ext.get('run_tcomp_div'));
|
|
}
|
|
});
|
|
var run_tcomp_edt = new Ext.Editor(
|
|
new Ext.form.NumberField({
|
|
width: 30,
|
|
name: 'tcomp',
|
|
allowBlank:true,
|
|
minValue: 0,
|
|
maxValue: 100
|
|
}),{
|
|
alignment: 'tl-tl',
|
|
id: 'run_tcomp_edt',
|
|
ignoreNoChange: true,
|
|
updateEl: true,
|
|
completeOnEnter: true,
|
|
ignoreNoChange: true,
|
|
cancelOnEsc: true
|
|
});
|
|
run_tcomp_edt.on('complete', function(e,v,sv){
|
|
submitEdits('target_completion', v);
|
|
Ext.getCmp('tpass_nf').maxValue = v;
|
|
});
|
|
// Target Pass edit
|
|
var tpass_edit_btn = new Ext.Button({
|
|
applyTo: 'run_tpass_edit_btn_div',
|
|
id:'run_tpass_edit_btn',
|
|
icon: 'extensions/testopia/img/edit.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Edit Run Summary',
|
|
handler: function(){
|
|
Ext.getCmp('run_tpass_edt').startEdit(Ext.get('run_tpass_div'));
|
|
}
|
|
});
|
|
var run_tpass_edt = new Ext.Editor(
|
|
new Ext.form.NumberField({
|
|
width: 30,
|
|
name: 'tpass',
|
|
allowBlank: true,
|
|
id: 'tpass_nf',
|
|
minValue: 0,
|
|
maxValue: [% run.target_completion || 100 FILTER js %]
|
|
}),{
|
|
alignment: 'tl-tl',
|
|
id: 'run_tpass_edt',
|
|
ignoreNoChange: true,
|
|
updateEl: true,
|
|
completeOnEnter: true,
|
|
ignoreNoChange: true,
|
|
cancelOnEsc: true
|
|
});
|
|
run_tpass_edt.on('complete', function(e,v,sv){
|
|
submitEdits('target_pass', v);
|
|
});
|
|
|
|
[% END %]
|
|
runControls.render('run-tb-div');
|
|
// Summary Editing
|
|
var summary_edit_btn = new Ext.Button({
|
|
applyTo: 'run_summary_edit_btn_div',
|
|
id:'run_summary_edit_btn',
|
|
icon: 'extensions/testopia/img/edit.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Edit Run Summary',
|
|
handler: function(){
|
|
Ext.getCmp('run_summary_edt').startEdit(Ext.get('run_summary_div'));
|
|
}
|
|
});
|
|
var run_summary_edt = new Ext.Editor(
|
|
new Ext.form.TextField({
|
|
width: Ext.get('run_summary_div').getWidth() < 200 ? 200 : Ext.get('run_summary_div').getWidth(),
|
|
name: 'summary'
|
|
}),{
|
|
alignment: 'tl-tl',
|
|
id: 'run_summary_edt',
|
|
ignoreNoChange: true,
|
|
updateEl: true,
|
|
completeOnEnter: true,
|
|
ignoreNoChange: true,
|
|
cancelOnEsc: true
|
|
});
|
|
run_summary_edt.on('complete', function(e,v,sv){
|
|
submitEdits('summary', v);
|
|
});
|
|
|
|
// Combo Boxes
|
|
var pbox = new Testopia.Product.VersionCombo({
|
|
hiddenName: 'run_product_version',
|
|
transform: 'product_version'
|
|
});
|
|
pbox.on('select', function(c,r,i){
|
|
submitEdits('run_product_version', r.get('value'));
|
|
});
|
|
|
|
var bbox = new Testopia.Build.Combo({
|
|
hiddenName: 'build',
|
|
transform: 'run_default_build'
|
|
});
|
|
bbox.on('select', function(c,r,i){
|
|
submitEdits('build', r.get('value'));
|
|
});
|
|
|
|
var ebox = new Testopia.Environment.Combo({
|
|
hiddenName: 'environment',
|
|
transform: 'run_default_environment'
|
|
});
|
|
ebox.on('select', function(c,r,i){
|
|
submitEdits('environment', r.get('value'));
|
|
});
|
|
[% END %]
|
|
// Status editor
|
|
var statusBtn = new Ext.CycleButton({
|
|
applyTo: 'run_status_btn',
|
|
id: 'run_status_cycle',
|
|
showText: true,
|
|
[% 'disabled: true,' UNLESS run.canstatus %]
|
|
icon: 'extensions/testopia/img/[% run.stop_date ? "stop" : "go" %].png',
|
|
iconCls: 'img_button_16x',
|
|
|
|
items: [{
|
|
text: 'RUNNING',
|
|
icon: 'extensions/testopia/img/go.png',
|
|
id: 'run_status_running',
|
|
iconCls: 'img_button_16x'
|
|
[% ',checked: true' IF NOT run.stop_date %]
|
|
},{
|
|
text: 'STOPPED',
|
|
id: 'run_status_stopped',
|
|
icon: 'extensions/testopia/img/stop.png',
|
|
iconCls: 'img_button_16x'
|
|
[% ',checked: true' IF run.stop_date %]
|
|
}],
|
|
|
|
changeHandler: function (btn, item){
|
|
Ext.Msg.show({
|
|
msg: 'Are you sure you want to change the status to ' + item.text,
|
|
title: 'Change Run Status?',
|
|
buttons: Ext.Msg.YESNO,
|
|
icon: Ext.MessageBox.QUESTION,
|
|
fn: function(b){
|
|
if (b == 'yes'){
|
|
btn.getEl().child(btn.buttonSelector).setStyle('background-image', 'url(' +item.icon +')');
|
|
submitEdits('status', item.text);
|
|
if (item.text == 'STOPPED'){
|
|
Ext.getCmp('caserun_grid_tb').disable();
|
|
Ext.getCmp('summary_tb').disable();
|
|
}
|
|
else {
|
|
if (Ext.getCmp('caserun_grid').getSelectionModel().getCount() > 0){
|
|
Ext.getCmp('caserun_grid_tb').enable();
|
|
Ext.getCmp('summary_tb').enable();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
// Resizer
|
|
var resizer = new Ext.Resizable('run-body-div',{
|
|
handles: 's',
|
|
pinned: true
|
|
|
|
});
|
|
resizer.on('resize', function(r,w,h,e){
|
|
runpanel.setHeight(h);
|
|
runpanel.doLayout();
|
|
Ext.state.Manager.set('run_height', h);
|
|
});
|
|
Ext.QuickTips.register({
|
|
target: 'update_bugs',
|
|
title: 'Update Attached Bugs Status',
|
|
text: 'Update Status of Attached Bugs.<p><b>FAILED = REOPENED<br>PASSED = VERIFIED</b></p>'
|
|
});
|
|
Ext.getCmp('case_details_panel').on('resize', function(c,aw,ah,rw,rh){
|
|
Ext.getCmp('cr_action_panel').setHeight(ah - 100);
|
|
Ext.getCmp('cr_results_panel').setHeight(ah - 100);
|
|
if (Param_Show_Setup_Breakdown)
|
|
{
|
|
Ext.getCmp('cr_breakdown_panel').setHeight(ah - 100);
|
|
Ext.getCmp('cr_setup_panel').setHeight(ah - 100);
|
|
}
|
|
Ext.state.Manager.set('bigtext_height', ah - 100);
|
|
});
|
|
[% IF run.case_run_count == 0 %]
|
|
Ext.getCmp('run_progress').updateProgress(0,0,0,'0%');
|
|
[% ELSE %]
|
|
Ext.getCmp('run_progress').updateProgress([% run.case_run_count(2) / run.case_run_count %],[% run.case_run_count(3) / run.case_run_count %],[% run.case_run_count(6) / run.case_run_count %], '[% run.percent_complete %]%');
|
|
[% END %]
|
|
[% IF run.stop_date %]
|
|
Testopia.Util.DisableTools(Ext.getCmp('caserun_grid_tb'),['caserun_grid_tocsv','run_progress']);
|
|
[% END %]
|
|
Ext.get('run_overview').show();
|
|
Ext.get('caserun-filter-div').show();
|
|
});
|
|
</script>
|
|
|
|
[% PROCESS testopia/run/navigate.html.tmpl %]
|
|
<div id="run-body-div"></div>
|
|
<div id="caserun"></div>
|
|
<form id="caserungrideditform"></form>
|
|
<form id="rungrideditform"></form>
|
|
<form id="attachmentgrideditform"></form>
|
|
|
|
[%##### Overview #####%]
|
|
<div id="run_overview" style="visibility:hidden">
|
|
<div id="run-tb-div"></div>
|
|
<div id="caserun-tb-div"></div>
|
|
<table border="0" cellpadding="1" width="100%">
|
|
<tbody align="left">
|
|
<tr class="bz_row_header">
|
|
<th colspan="2">Run Summary</th>
|
|
<th width="25%">Manager</th>
|
|
</tr>
|
|
<tr class="bz_row_data">
|
|
<td colspan="2">
|
|
<table>
|
|
<tr style="width:100%;">
|
|
<td><div id="run_summary_div">[% run.summary FILTER html %]</div></td>
|
|
<td><div id="run_summary_edit_btn_div"></div></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td>
|
|
<table>
|
|
<tr><td><a href="mailto:[% run.manager.email FILTER html %]" id="run_manager_div">[% run.manager.identity FILTER html %]</a></td>
|
|
<td><div id="manager_edit_btn_div"></div></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr class="bz_row_header">
|
|
<th>Plan</th>
|
|
<th>Plan Text Version</th>
|
|
<th>Start Date</th>
|
|
</tr>
|
|
<tr class="bz_row_data">
|
|
<td><a href="tr_show_plan.cgi?plan_id=[% run.plan.id FILTER none %]">[% run.plan.name FILTER html %]</a></td>
|
|
<td>[% run.plan_text_version FILTER html %]</td>
|
|
<td>[% run.start_date FILTER time %]</td>
|
|
</tr>
|
|
<tr class="bz_row_header">
|
|
<th>Product</th>
|
|
<th>Product Version</th>
|
|
<th>Stop Date</th>
|
|
</tr>
|
|
<tr class="bz_row_data">
|
|
<td><a href="tr_show_product.cgi?product_id=[% run.plan.product.id FILTER none %]">[% run.plan.product.name FILTER html %]</a></td>
|
|
<td>[% IF run.canedit %]
|
|
[% PROCESS select sel = { name => 'product_version',
|
|
list => run.plan.product.versions,
|
|
default => run.product_version } %]
|
|
[% ELSE %]
|
|
[% run.product_version FILTER html %]
|
|
[% END %]
|
|
</td>
|
|
<td>[% run.stop_date FILTER time %][% IF run.total_time %] ([% run.total_time FILTER none %] D:H:M:S)[% END %]</td>
|
|
</tr>
|
|
<tr class="bz_row_header">
|
|
<th>Default Build</th>
|
|
<th>Default Environment</th>
|
|
<td>
|
|
<table>
|
|
<tr><th width="120">Run Status</th><th width="120">Target Comp. %</th><th width="120">Target Pass %</th></tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr class="bz_row_data">
|
|
<td>[% IF run.canedit %]
|
|
[% PROCESS select sel = { name => 'run_default_build',
|
|
list => run.plan.product.builds('ACTIVE', run.build.id),
|
|
default => run.build.name } %]
|
|
[% ELSE %]
|
|
[% run.build.name FILTER html %]
|
|
[% END %]
|
|
</td>
|
|
<td>[% IF run.canedit %]
|
|
[% PROCESS select sel = { name => 'run_default_environment',
|
|
list => run.plan.product.environments('ACTIVE', run.environment.id),
|
|
default => run.environment.name } %]
|
|
[% ELSE %]
|
|
[% run.environment.name FILTER html %]
|
|
[% END %]
|
|
</td>
|
|
<td align="left">
|
|
<table>
|
|
<tr>
|
|
<td width="120"><div id="run_status_btn"></div></td>
|
|
<td width="120"><div id="run_tcomp_div" style="width:30px;">[% run.target_completion FILTER none %]</div></td>
|
|
<td><div id="run_tcomp_edit_btn_div"></div></td>
|
|
<td width="120"><div id="run_tpass_div" style="width:30px;">[% run.target_pass FILTER none %]</div></td>
|
|
<td><div id="run_tpass_edit_btn_div"></div></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div style="height: 10px"></div>
|
|
</div>
|
|
|
|
[% PROCESS testopia/caserun/filter.html.tmpl %]
|
|
|
|
[% PROCESS global/footer.html.tmpl %]
|