1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/31eee538eb21/
Changeset: 31eee538eb21
User: davebgx
Date: 2014-04-17 21:16:57
Summary: Fix most of the failing functional tests in test_sample_tracking.py.
Affected #: 4 files
diff -r 76ad26875b62c8ff3257b845df86a5864f0d1c91 -r 31eee538eb2161a378425d9190e600b42a0d32e3 lib/galaxy/webapps/galaxy/controllers/requests_common.py
--- a/lib/galaxy/webapps/galaxy/controllers/requests_common.py
+++ b/lib/galaxy/webapps/galaxy/controllers/requests_common.py
@@ -888,7 +888,7 @@
field_values = {}
if copy_sample_index != -1:
# The user has selected a sample to copy.
- library_id = displayable_sample_widgets[ copy_sample_index][ 'library_select_field' ].get_selected( return_value=True )
+ library_id = displayable_sample_widgets[ copy_sample_index ][ 'library_select_field' ].get_selected( return_value=True )
folder_id = displayable_sample_widgets[ copy_sample_index ][ 'folder_select_field' ].get_selected( return_value=True )
name = displayable_sample_widgets[ copy_sample_index ][ 'name' ] + '_%i' % ( len( displayable_sample_widgets ) + 1 )
history_id = displayable_sample_widgets[ copy_sample_index ][ 'history_select_field' ].get_selected( return_value=True )
@@ -1347,7 +1347,7 @@
if not sample.bar_code:
# If the sample's associated SampleState is still the initial state
# configured by the admin for the request's RequestType, this must be
- # the first time a bar code was added to the sample, so change it's state
+ # the first time a bar code was added to the sample, so change its state
# to the next associated SampleState.
if sample.state.id == request.type.states[0].id:
# Change the sample state only if its request_type
@@ -1659,7 +1659,7 @@
return build_select_field( trans, active_users, 'email', 'user_id', selected_value=selected_value, refresh_on_change=True )
def __build_sample_operation_select_field( self, trans, is_admin, request, selected_value ):
# The sample_operation SelectField is displayed only after the request has been submitted.
- # It's label is "For selected samples"
+ # its label is "For selected samples"
if is_admin:
if request.is_complete:
bulk_operations = [ trans.model.Sample.bulk_operations.CHANGE_STATE ]
diff -r 76ad26875b62c8ff3257b845df86a5864f0d1c91 -r 31eee538eb2161a378425d9190e600b42a0d32e3 templates/webapps/galaxy/requests/common/common.mako
--- a/templates/webapps/galaxy/requests/common/common.mako
+++ b/templates/webapps/galaxy/requests/common/common.mako
@@ -728,7 +728,7 @@
%endif
%if is_admin and is_submitted and request.samples_without_library_destinations:
<div class='infomessage'>
- Select a target data library and folder for a sample before selecting it's datasets to transfer from the external service.
+ Select a target data library and folder for a sample before selecting its datasets to transfer from the external service.
</div><br/>
%endif
%if message:
diff -r 76ad26875b62c8ff3257b845df86a5864f0d1c91 -r 31eee538eb2161a378425d9190e600b42a0d32e3 templates/webapps/galaxy/requests/common/create_request.mako
--- a/templates/webapps/galaxy/requests/common/create_request.mako
+++ b/templates/webapps/galaxy/requests/common/create_request.mako
@@ -22,7 +22,7 @@
<div class="toolForm"><div class="toolFormTitle">Create a new sequencing request</div>
- %if len( request_type_select_field.options ) == 1:
+ %if len( request_type_select_field.options ) < 1:
There are no request types available for ${trans.user.email} to create sequencing requests.
%else:
<div class="toolFormBody">
diff -r 76ad26875b62c8ff3257b845df86a5864f0d1c91 -r 31eee538eb2161a378425d9190e600b42a0d32e3 test/functional/test_sample_tracking.py
--- a/test/functional/test_sample_tracking.py
+++ b/test/functional/test_sample_tracking.py
@@ -4,10 +4,10 @@
from base.test_db_util import *
-# TODO: Functional tests start failing at 025, fix or eliminate rest of tests.
class TestFormsAndSampleTracking( TwillTestCase ):
# ====== Setup Users, Groups & Roles required for this test suite =========
- def test_000_initiate_users( self ):
+
+ def test_0000_initiate_users( self ):
"""Ensuring all required user accounts exist"""
self.logout()
self.login( email='test1(a)bx.psu.edu', username='regular-user1' )
@@ -37,7 +37,8 @@
assert admin_user is not None, 'Problem retrieving user with email "test(a)bx.psu.edu" from the database'
global admin_user_private_role
admin_user_private_role = get_private_role( admin_user )
- def test_005_create_required_groups_and_roles( self ):
+
+ def test_0005_create_required_groups_and_roles( self ):
"""Testing creating all required groups and roles for this script"""
# Logged in as admin_user
# Create role1
@@ -80,7 +81,8 @@
global role2
role2 = get_role_by_name( name )
assert role2 is not None, 'Problem retrieving role named "Role2" from the database'
- def test_006_create_library_and_folder( self ):
+
+ def test_0010_create_library( self ):
"""Testing creating the target data library and folder"""
# Logged in as admin_user
for index in range( 0, 2 ):
@@ -108,6 +110,8 @@
str( role1.id ),
permissions_in,
permissions_out )
+
+ def test_0015_create_folders( self ):
# adding a folder
for library in [ library1, library2 ]:
name = "%s_folder1" % library.name
@@ -161,7 +165,8 @@
#
# ====== Form definition test methods ================================================
#
- def test_010_create_request_form_definition( self ):
+
+ def test_0020_create_request_form_definition( self ):
"""Testing creating a sequencing request form definition, editing the name and description and adding fields"""
# Logged in as admin_user
# Create a form definition
@@ -175,10 +180,15 @@
field_name='1_field_name',
strings_displayed=[ 'Create a new form definition' ],
strings_displayed_after_submit=[ tmp_name, tmp_desc, form_type ] )
+
+ def test_0025_edit_request_form_fields( self ):
+ # field names
+ tmp_name = "Temp form"
tmp_form = get_form( tmp_name )
# Edit the name and description of the form definition, and add 3 fields.
new_name = "Request Form"
new_desc = "Request Form description"
+ form_type = galaxy.model.FormDefinition.types.REQUEST
# labels
global request_field_label1
request_field_label1 = 'Request form field1'
@@ -186,7 +196,6 @@
request_field_label2 = 'Request form field2'
global request_field_label3
request_field_label3 = 'Request form field3'
- # field names
global request_form_field_name1
request_form_field_name1 = 'request_form_field1'
global request_form_field_name2
@@ -227,7 +236,8 @@
form_desc=new_desc,
form_type=form_type,
field_dicts=field_dicts )
- def test_015_create_sample_form_definition( self ):
+
+ def test_0030_create_sample_form_definition( self ):
"""Testing creating sequencing sample form definition and adding fields"""
name = "Sample Form"
desc = "This is Sample Form's description"
@@ -242,8 +252,13 @@
field_name='1_field_name',
strings_displayed=[ 'Create a new form definition' ],
strings_displayed_after_submit=[ "The form '%s' has been updated with the changes." % name ] )
+
+ def test_0035_add_fields_to_sample_form( self ):
+ # now add fields to the sample form definition
+ name = "Sample Form"
+ desc = "This is Sample Form's description"
+ form_type = galaxy.model.FormDefinition.types.SAMPLE
tmp_form = get_form( name )
- # now add fields to the sample form definition
global sample_field_label1
sample_field_label1 = 'Sample form field1'
global sample_field_label2
@@ -284,7 +299,8 @@
form_type=form_type,
form_layout_name=sample_form_layout_grid_name,
field_dicts=field_dicts )
- def test_020_create_request_type( self ):
+
+ def test_0040_create_request_type( self ):
"""Testing creating a request_type"""
name = 'Request type1'
sample_states = [ ( 'New', 'Sample entered into the system' ),
@@ -308,11 +324,12 @@
strings_displayed=[ request_form_definition1.name,
sample_form_definition1.name ],
sample_states=sample_states)
- # Set permissions
+
+ def test_0045_set_request_type_permissions( self ):
+ # Role1 members are: admin_user, regular_user1, regular_user3. Each of these users will be permitted for
+ # REQUEST_TYPE_ACCESS on this request_type
permissions_in = [ k for k, v in galaxy.model.RequestType.permitted_actions.items() ]
permissions_out = []
- # Role1 members are: admin_user, regular_user1, regular_user3. Each of these users will be permitted for
- # REQUEST_TYPE_ACCESS on this request_type
self.request_type_permissions( self.security.encode_id( request_type1.id ),
request_type1.name,
str( role1.id ),
@@ -330,7 +347,8 @@
self.logout()
self.login( email=admin_user.email )
# ====== Sequencing request test methods - regular user perspective ================
- def test_025_create_request( self ):
+
+ def test_0050_create_request( self ):
"""Testing creating a sequencing request as a regular user"""
# logged in as admin_user
# Create a user_address
@@ -369,7 +387,9 @@
strings_displayed_after_submit=[ 'The sequencing request has been created.',
name, desc ] )
global request1
- request1 = get_request_by_name( name )
+ request1 = get_request_by_name( name )
+
+ def test_0055_verify_request_details( self ):
# Make sure the request's state is now set to NEW
assert request1.state is not request1.states.NEW, "The state of the request '%s' should be set to '%s'" \
% ( request1.name, request1.states.NEW )
@@ -394,7 +414,8 @@
strings_not_displayed=[ request1.states.SUBMITTED,
request1.states.COMPLETE,
request1.states.REJECTED ] )
- def test_030_edit_basic_request_info( self ):
+
+ def test_0060_edit_basic_request_info( self ):
"""Testing editing the basic information and email settings of a sequencing request"""
# logged in as regular_user1
fields = [ ( request_form_field_name1, 'option2' ),
@@ -443,7 +464,8 @@
request_id=self.security.encode_id( request1.id ),
strings_displayed=strings_displayed,
strings_not_displayed=[] )
- def test_035_add_samples_to_request( self ):
+
+ def test_0065_add_samples_to_request( self ):
"""Testing adding samples to request"""
# logged in as regular_user1
# Sample fields - the tuple represents a sample name and a list of sample form field values
@@ -481,7 +503,8 @@
request_id=self.security.encode_id( request1.id ),
strings_displayed=strings_displayed,
strings_displayed_count=strings_displayed_count )
- def test_040_edit_samples_of_new_request( self ):
+
+ def test_0070_edit_samples_of_new_request( self ):
"""Testing editing the sample information of new request1"""
# logged in as regular_user1
# target data library - change it to library1
@@ -519,7 +542,8 @@
request_id=self.security.encode_id( request1.id ),
strings_displayed=strings_displayed,
strings_displayed_count=strings_displayed_count )
- def test_045_submit_request( self ):
+
+ def test_0075_submit_request( self ):
"""Testing submitting a sequencing request"""
# logged in as regular_user1
self.submit_request( cntrller='requests',
@@ -555,7 +579,8 @@
strings_not_displayed=[ request1.states.COMPLETE,
request1.states.REJECTED ] )
# ====== Sequencing request test methods - Admin perspective ================
- def test_050_receive_request_as_admin( self ):
+
+ def test_0080_receive_request_as_admin( self ):
"""Testing receiving a sequencing request and assigning it barcodes"""
# logged in as regular_user1
self.logout()
@@ -571,6 +596,8 @@
self.view_request( cntrller='requests_admin',
request_id=self.security.encode_id( request1.id ),
strings_displayed=strings_displayed )
+
+ def test_0085_add_bar_codes( self ):
# Set bar codes for the samples
bar_codes = [ '10001', '10002', '10003' ]
strings_displayed_after_submit = [ 'Changes made to the samples have been saved.' ]
@@ -604,7 +631,8 @@
sample_id=self.security.encode_id( sample.id ),
strings_displayed=strings_displayed,
strings_not_displayed=strings_not_displayed )
- def test_055_request_lifecycle( self ):
+
+ def test_0090_request_lifecycle( self ):
"""Testing request life-cycle as it goes through all the states"""
# logged in as admin_user
self.check_request_grid( cntrller='requests_admin',
@@ -645,7 +673,8 @@
strings_displayed=[ request1.name ] )
assert request1.state is not request1.states.COMPLETE, "The state of the sequencing request '%s' should be set to '%s'" \
% ( request1.name, request1.states.COMPLETE )
- def test_060_admin_create_request_on_behalf_of_regular_user( self ):
+
+ def test_0095_admin_create_request_on_behalf_of_regular_user( self ):
"""Testing creating and submitting a request as an admin on behalf of a regular user"""
# Logged in as regular_user1
self.logout()
@@ -691,7 +720,9 @@
# Make sure the request's state is now set to 'new'
assert request2.state is not request2.states.NEW, "The state of the request '%s' should be set to '%s'" \
% ( request2.name, request2.states.NEW )
- target_library_info = dict(library='none', folder='none' )
+
+ def test_0100_add_samples_to_request( self ):
+ target_library_info = dict( library='none', folder='none' )
# Sample fields - the tuple represents a sample name and a list of sample form field values
sample_value_tuples = \
[ ( 'Sample1', target_library_info, [ 'option1', 'sample1 field2 value', 'sample1 field3 value' ] ),
@@ -710,7 +741,7 @@
'<input type="text" name="sample_0_name" value="Sample_1" size="10"/>' ], # sample name input field
strings_displayed_after_submit=strings_displayed_after_submit )
# Submit the request
- select_target_library_message = "Select a target data library and folder for a sample before selecting it's datasets to transfer from the external service"
+ select_target_library_message = "Select a target data library and folder for a sample before selecting its datasets to transfer from the external service"
self.submit_request( cntrller='requests_admin',
request_id=self.security.encode_id( request2.id ),
request_name=request2.name,
@@ -728,6 +759,8 @@
self.check_request_grid( cntrller='requests_admin',
state='All',
strings_displayed=[ request1.name, request2.name ] )
+
+ def test_0105_set_request_target_library( self ):
# list folders that populates folder selectfield when a data library is selected
folder_options = [ library2_folder1.name, library2_folder2.name, library2_folder3.name, library2_folder4.name ]
# set the target data library to library2 using sample operation user interface
@@ -749,7 +782,8 @@
strings_displayed=strings_displayed,
strings_not_displayed=[ select_target_library_message ],
strings_displayed_count=strings_displayed_count )
- def test_065_reject_request( self ):
+
+ def test_0110_reject_request( self ):
"""Testing rejecting a request"""
# Logged in as admin_user
rejection_reason="This is why the sequencing request was rejected."
@@ -790,7 +824,8 @@
strings_not_displayed=[ request1.states.SUBMITTED,
request1.states.COMPLETE,
request1.states.NEW] )
- def __test_070_select_datasets_for_transfer( self ):
+
+ def __test_0115_select_datasets_for_transfer( self ):
"""Testing selecting datasets for data transfer"""
# Logged in as admin_user
self.logout()
@@ -820,7 +855,8 @@
sample1_dataset.transfer_status.NOT_STARTED ]
self.view_sample_dataset( sample_dataset_id=self.security.encode_id( sample1_dataset.id ),
strings_displayed=strings_displayed )
- def __test_075_manage_sample_datasets( self ):
+
+ def __test_0120_manage_sample_datasets( self ):
"""Testing renaming, deleting and initiating transfer of sample datasets"""
# Logged in as admin_user
# Check renaming datasets
@@ -873,6 +909,7 @@
sample1_dataset.transfer_status.NOT_STARTED ]
self.view_sample_dataset( sample_dataset_id=self.security.encode_id( sample1_dataset.id ),
strings_displayed=strings_displayed )
+
def test_999_reset_data_for_later_test_runs( self ):
"""Reseting data to enable later test runs to pass"""
# Logged in as admin_user
@@ -887,8 +924,7 @@
self.security.encode_id( library.id ),
library.name,
item_type='library' )
- self.purge_library( self.security.encode_id( library.id ), library.name )
-
+ self.purge_library( self.security.encode_id( library.id ), library.name )
##################
# Mark all requests deleted and delete all their samples
##################
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/76ad26875b62/
Changeset: 76ad26875b62
User: dan
Date: 2014-04-17 21:05:18
Summary: Some better error handling for external display applications when e.g. files have been deleted but are still active in applications.
Affected #: 1 file
diff -r c4291f95313abcb1ad91ffe4faaa2c30b05149dc -r 76ad26875b62c8ff3257b845df86a5864f0d1c91 lib/galaxy/webapps/galaxy/controllers/dataset.py
--- a/lib/galaxy/webapps/galaxy/controllers/dataset.py
+++ b/lib/galaxy/webapps/galaxy/controllers/dataset.py
@@ -686,10 +686,19 @@
msg = []
refresh = False
display_app = trans.app.datatypes_registry.display_applications.get( app_name )
- assert display_app, "Unknown display application has been requested: %s" % app_name
+ if not display_app:
+ log.debug( "Unknown display application has been requested: %s", app_name )
+ return paste.httpexceptions.HTTPNotFound( "The requested display application (%s) is not available." % ( app_name ) )
dataset_hash, user_hash = encode_dataset_user( trans, data, user )
- display_link = display_app.get_link( link_name, data, dataset_hash, user_hash, trans, app_kwds )
- assert display_link, "Unknown display link has been requested: %s" % link_name
+ try:
+ display_link = display_app.get_link( link_name, data, dataset_hash, user_hash, trans, app_kwds )
+ except Exception, e:
+ log.debug( "Error generating display_link: %s", e )
+ # User can sometimes recover from, e.g. conversion errors by fixing input metadata, so use conflict
+ return paste.httpexceptions.HTTPConflict( "Error generating display_link: %s" % e )
+ if not display_link:
+ log.debug( "Unknown display link has been requested: %s", link_name )
+ return paste.httpexceptions.HTTPNotFound( "Unknown display link has been requested: %s" % link_name )
if data.state == data.states.ERROR:
msg.append( ( 'This dataset is in an error state, you cannot view it at an external display application.', 'error' ) )
elif data.deleted:
@@ -715,8 +724,12 @@
assert value, "An invalid parameter name was provided: %s" % action_param
assert value.parameter.viewable, "This parameter is not viewable."
if value.parameter.type == 'data':
- content_length = os.path.getsize( value.file_name )
- rval = open( value.file_name )
+ try:
+ content_length = os.path.getsize( value.file_name )
+ rval = open( value.file_name )
+ except OSError, e:
+ log.debug( "Unable to access requested file in display application: %s", e )
+ return paste.httpexceptions.HTTPNotFound( "This file is no longer available." )
else:
rval = str( value )
content_length = len( rval )
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.