from base.twilltestcase import TwillTestCase from base.test_db_util import ( get_user, get_private_role, get_form, get_library, get_folder, get_user_address, get_latest_ldda_by_name, get_latest_hda, mark_obj_deleted, refresh ) import galaxy.model AddressField_form = None CheckboxField_form = None SelectField_form = None TextArea_form = None TextField_form = None WorkflowField_form = None address_field_name = checkbox_field_name = select_field_name = None workflow_field_name = textfield_name = textarea_name = None user_address1 = user_address2 = None ldda1 = library1 = library2 = library3 = library4 = library5 = library6 = None folder1 = folder2 = folder3 = folder4 = folder5 = folder6 = None admin_user = None regular_user1 = regular_user2 = regular_user3 = None class TestLibraryFeatures( TwillTestCase ): def test_000_initiate_users( self ): """Ensuring all required user accounts exist""" self.logout() self.login( email='test1@bx.psu.edu', username='regular-user1' ) global regular_user1 regular_user1 = get_user( 'test1@bx.psu.edu' ) assert regular_user1 is not None, 'Problem retrieving user with email "test1@bx.psu.edu" from the database' global regular_user1_private_role regular_user1_private_role = get_private_role( regular_user1 ) self.logout() self.login( email='test2@bx.psu.edu', username='regular-user2' ) global regular_user2 regular_user2 = get_user( 'test2@bx.psu.edu' ) assert regular_user2 is not None, 'Problem retrieving user with email "test2@bx.psu.edu" from the database' global regular_user2_private_role regular_user2_private_role = get_private_role( regular_user2 ) self.logout() self.login( email='test3@bx.psu.edu', username='regular-user3' ) global regular_user3 regular_user3 = get_user( 'test3@bx.psu.edu' ) assert regular_user3 is not None, 'Problem retrieving user with email "test3@bx.psu.edu" from the database' global regular_user3_private_role regular_user3_private_role = get_private_role( regular_user3 ) self.logout() self.login( email='test@bx.psu.edu', username='admin-user' ) global admin_user admin_user = get_user( 'test@bx.psu.edu' ) assert admin_user is not None, 'Problem retrieving user with email "test@bx.psu.edu" from the database' global admin_user_private_role admin_user_private_role = get_private_role( admin_user ) def test_005_create_library_templates( self ): """Testing creating several LibraryInformationTemplate form definitions""" # Logged in as admin_user for type in [ 'AddressField', 'CheckboxField', 'SelectField', 'TextArea', 'TextField', 'WorkflowField' ]: field_name = type.lower() form_desc = '%s description' % type num_options = 0 if type == 'SelectField': # Pass number of options we want in our SelectField num_options = 2 # Create form for library template strings_displayed_after_submit = [ "The form '%s' has been updated with the changes." % type ] self.create_form( name=type, description=form_desc, form_type=galaxy.model.FormDefinition.types.LIBRARY_INFO_TEMPLATE, field_type=type, num_options=num_options, field_name=field_name, strings_displayed_after_submit=strings_displayed_after_submit ) # Get all of the new form definitions for later use global AddressField_form AddressField_form = get_form( 'AddressField' ) # NOTE: each of these names need to be the same as field_name defined above # for each type. global address_field_name address_field_name = 'addressfield' global CheckboxField_form CheckboxField_form = get_form( 'CheckboxField' ) global checkbox_field_name checkbox_field_name = 'checkboxfield' global SelectField_form SelectField_form = get_form( 'SelectField' ) global select_field_name select_field_name = 'selectfield' global TextArea_form TextArea_form = get_form( 'TextArea' ) global textarea_name textarea_name = 'textarea' global TextField_form TextField_form = get_form( 'TextField' ) global textfield_name textfield_name = 'textfield' global WorkflowField_form WorkflowField_form = get_form( 'WorkflowField' ) global workflow_field_name workflow_field_name = 'workflowfield' def test_010_create_libraries( self ): """Testing creating a new library for each template""" # Logged in as admin_user # library1 -> AddressField # library2 -> CheckboxField # library3 -> SelectField # library4 -> TextArea # library5 -> TextField # library6 -> WorkflowField for index, form in enumerate( [ AddressField_form, CheckboxField_form, SelectField_form, TextArea_form, TextField_form, WorkflowField_form ] ): name = 'library%s' % str( index + 1 ) description = '%s description' % name synopsis = '%s synopsis' % name self.create_library( name=name, description=description, synopsis=synopsis ) # Get the libraries for later use global library1 library1 = get_library( 'library1', 'library1 description', 'library1 synopsis' ) global library2 library2 = get_library( 'library2', 'library2 description', 'library2 synopsis' ) global library3 library3 = get_library( 'library3', 'library3 description', 'library3 synopsis' ) global library4 library4 = get_library( 'library4', 'library4 description', 'library4 synopsis' ) global library5 library5 = get_library( 'library5', 'library5 description', 'library5 synopsis' ) global library6 library6 = get_library( 'library6', 'library6 description', 'library6 synopsis' ) def test_015_add_template_to_library1( self ): """Testing add an inheritable template containing an AddressField to library1""" # Logged in as admin_user # Add a template containing an AddressField to library1 self.add_template( cntrller='library_admin', item_type='library', form_type=galaxy.model.FormDefinition.types.LIBRARY_INFO_TEMPLATE, form_id=self.security.encode_id( AddressField_form.id ), form_name=AddressField_form.name, library_id=self.security.encode_id( library1.id ) ) def test_020_add_folder_to_library1( self ): """Testing adding a folder to library1""" # Logged in as admin_user # Add a folder to library1 folder = library1.root_folder name = "folder" description = "folder description" self.add_folder( 'library_admin', self.security.encode_id( library1.id ), self.security.encode_id( folder.id ), name=name, description=description ) global folder1 folder1 = get_folder( folder.id, name, description ) def test_025_check_library1( self ): """Checking library1 and its root folder""" # Logged in as admin_user self.browse_library( cntrller='library_admin', library_id=self.security.encode_id( library1.id ), strings_displayed=[ folder1.name, folder1.description ] ) # Make sure the template and contents were inherited to folder1 self.folder_info( cntrller='library_admin', folder_id=self.security.encode_id( folder1.id ), library_id=self.security.encode_id( library1.id ), template_refresh_field_name=address_field_name, strings_displayed=[ AddressField_form.name, 'This is an inherited template and is not required to be used with this folder' ] ) def test_030_add_dataset_to_folder1( self ): """Testing adding a ldda1 to folder1, and adding a new UserAddress on the upload form.""" # Logged in as admin_user # The AddressField template should be inherited to the library dataset upload form. Passing # the value 'new' should submit the form via refresh_on_change and allow new UserAddress information # to be posted as part of the upload. filename = '1.bed' ldda_message = '1.bed message' short_desc = 'Office' self.upload_library_dataset( cntrller='library_admin', library_id=self.security.encode_id( library1.id ), folder_id=self.security.encode_id( folder1.id ), filename=filename, file_type='bed', dbkey='hg18', template_refresh_field_name=address_field_name, ldda_message=ldda_message, template_refresh_field_contents='new', template_fields=[ ( '%s_short_desc' % address_field_name, short_desc ), ( '%s_name' % address_field_name, 'Dick' ), ( '%s_institution' % address_field_name, 'PSU' ), ( '%s_address' % address_field_name, '32 O Street' ), ( '%s_city' % address_field_name, 'Anywhere' ), ( '%s_state' % address_field_name, 'AK' ), ( '%s_postal_code' % address_field_name, '0000000' ), ( '%s_country' % address_field_name, 'USA' ) ], strings_displayed=[ 'Upload files' ] ) global user_address1 user_address1 = get_user_address( admin_user, short_desc ) assert user_address1 is not None, 'Problem retrieving user_address1 from the database' global ldda1 ldda1 = get_latest_ldda_by_name( filename ) assert ldda1 is not None, 'Problem retrieving LibraryDatasetDatasetAssociation ldda1 from the database' self.browse_library( cntrller='library_admin', library_id=self.security.encode_id( library1.id ), strings_displayed=[ ldda1.name, ldda1.message, 'bed' ] ) # Make sure the library template contents were correctly saved self.ldda_edit_info( 'library_admin', self.security.encode_id( library1.id ), self.security.encode_id( folder1.id ), self.security.encode_id( ldda1.id ), ldda1.name, strings_displayed=[ 'Dick' ] ) def test_035_edit_contents_of_ldda1_tempplate( self ): """Testing editing the contents of ldda1 AddressField template by adding a new user_address""" short_desc = 'Home' # Now add a new user_address to ldda1 self.ldda_edit_info( 'library_admin', self.security.encode_id( library1.id ), self.security.encode_id( folder1.id ), self.security.encode_id( ldda1.id ), ldda1.name, template_refresh_field_name=address_field_name, template_refresh_field_contents='new', template_fields=[ ( '%s_short_desc' % address_field_name, short_desc ), ( '%s_name' % address_field_name, 'Richard' ), ( '%s_institution' % address_field_name, 'PSU' ), ( '%s_address' % address_field_name, '32 O Street' ), ( '%s_city' % address_field_name, 'Anywhere' ), ( '%s_state' % address_field_name, 'AK' ), ( '%s_postal_code' % address_field_name, '0000000' ), ( '%s_country' % address_field_name, 'USA' ) ], strings_displayed=[ short_desc ] ) global user_address2 user_address2 = get_user_address( admin_user, short_desc ) assert user_address2 is not None, 'Problem retrieving user_address2 from the database' def test_040_edit_contents_of_folder1_template( self ): """Testing editing the contents of folder1 AddressField template""" # Make sure the template and contents were inherited to folder1 self.folder_info( cntrller='library_admin', folder_id=self.security.encode_id( folder1.id ), library_id=self.security.encode_id( library1.id ), template_refresh_field_name=address_field_name, template_refresh_field_contents=str( user_address2.id ), strings_displayed=[ AddressField_form.name, 'This is an inherited template and is not required to be used with this folder' ], strings_displayed_after_submit=[ 'Richard' ] ) def test_045_add_dataset_to_folder1( self ): """Testing adding another ldda to folder1""" # The upload form should now inherit user_address2 on the upload form filename = '2.bed' ldda_message = '2.bed message' self.upload_library_dataset( cntrller='library_admin', library_id=self.security.encode_id( library1.id ), folder_id=self.security.encode_id( folder1.id ), filename=filename, file_type='bed', dbkey='hg18', template_refresh_field_name=address_field_name, ldda_message=ldda_message, strings_displayed=[ 'Upload files' ] ) # Make sure user_address2 is associated with ldda. self.ldda_edit_info( cntrller='library_admin', library_id=self.security.encode_id( library1.id ), folder_id=self.security.encode_id( folder1.id ), ldda_id=self.security.encode_id( ldda1.id ), ldda_name=ldda1.name, template_refresh_field_name=address_field_name, strings_displayed=[ user_address2.desc ] ) def test_050_add_template_to_library2( self ): """ Testing add an inheritable template containing an CheckboxField to library2""" # Add a template containing an CheckboxField to library1 self.add_template( cntrller='library_admin', item_type='library', form_type=galaxy.model.FormDefinition.types.LIBRARY_INFO_TEMPLATE, form_id=self.security.encode_id( CheckboxField_form.id ), form_name=CheckboxField_form.name, library_id=self.security.encode_id( library2.id ) ) # Check the CheckboxField to make sure the template contents are inherited self.library_info( 'library_admin', self.security.encode_id( library2.id ), template_fields=[ ( checkbox_field_name, '1' ) ] ) def test_055_add_folder2_to_library2( self ): """Testing adding a folder to library2""" # Logged in as admin_user # Add a folder to library2 folder = library2.root_folder name = "folder" description = "folder description" self.add_folder( 'library_admin', self.security.encode_id( library2.id ), self.security.encode_id( folder.id ), name=name, description=description ) global folder2 folder2 = get_folder( folder.id, name, description ) def test_060_check_library2( self ): """Checking library2 and its root folder""" # Logged in as admin_user self.browse_library( cntrller='library_admin', library_id=self.security.encode_id( library2.id ), strings_displayed=[ folder2.name, folder2.description ] ) def test_065_save_folder2_inherited_template( self ): """Saving the inherited template for folder2""" # Logged in as admin_user # Save the inherited template self.folder_info( cntrller='library_admin', folder_id=self.security.encode_id( folder2.id ), library_id=self.security.encode_id( library2.id ), template_fields=[ ( checkbox_field_name, '1' ) ], strings_displayed=[ CheckboxField_form.name, 'This is an inherited template and is not required to be used with this folder' ] ) def test_070_add_ldda_to_folder2( self ): """ Testing adding a new library dataset to library2's folder, making sure the CheckboxField is checked on the upload form. """ # Logged in as admin_user filename = '1.bed' ldda_message = '1.bed message' self.upload_library_dataset( cntrller='library_admin', library_id=self.security.encode_id( library2.id ), folder_id=self.security.encode_id( folder2.id ), filename=filename, file_type='bed', dbkey='hg18', ldda_message=ldda_message, strings_displayed=[ 'CheckboxField', 'checked' ] ) ldda = get_latest_ldda_by_name( filename ) assert ldda is not None, 'Problem retrieving LibraryDatasetDatasetAssociation ldda from the database' self.browse_library( cntrller='library_admin', library_id=self.security.encode_id( library2.id ), strings_displayed=[ ldda.name, ldda.message, 'bed' ] ) # Make sure the library template contents were correctly saved self.ldda_edit_info( 'library_admin', self.security.encode_id( library2.id ), self.security.encode_id( folder2.id ), self.security.encode_id( ldda.id ), ldda.name, strings_displayed=[ 'CheckboxField', 'checked' ] ) def test_080_add_template_to_library3( self ): """ Testing add an inheritable template containing an SelectField to library3""" # Logged in as admin_user self.add_template( cntrller='library_admin', item_type='library', form_type=galaxy.model.FormDefinition.types.LIBRARY_INFO_TEMPLATE, form_id=self.security.encode_id( SelectField_form.id ), form_name=SelectField_form.name, library_id=self.security.encode_id( library3.id ) ) # Select the 2nd option in the SelectField to make sure the template contents are inherited # SelectField option names are zero-based self.library_info( 'library_admin', self.security.encode_id( library3.id ), template_fields=[ ( select_field_name, 'Option1' ) ] ) def test_085_add_folder3_to_library3( self ): """Testing adding a folder to library3""" # Logged in as admin_user # Add a folder to library3 folder = library3.root_folder name = "folder" description = "folder description" self.add_folder( 'library_admin', self.security.encode_id( library3.id ), self.security.encode_id( folder.id ), name=name, description=description ) global folder3 folder3 = get_folder( folder.id, name, description ) def test_090_check_library3( self ): """Checking library3 and its root folder""" # Logged in as admin_user self.browse_library( cntrller='library_admin', library_id=self.security.encode_id( library3.id ), strings_displayed=[ folder3.name, folder3.description ] ) def test_095_save_folder3_inherited_template( self ): """Saving the inherited template for folder3""" # Logged in as admin_user # Save the inherited template self.folder_info( cntrller='library_admin', folder_id=self.security.encode_id( folder3.id ), library_id=self.security.encode_id( library3.id ), template_fields=[ ( select_field_name, 'Option1' ) ], strings_displayed=[ SelectField_form.name, 'This is an inherited template and is not required to be used with this folder', 'Option1' ] ) def test_100_add_ldda_to_folder3( self ): """ Testing adding a new library dataset to library3's folder, making sure the SelectField setting is correct on the upload form. """ filename = '3.bed' ldda_message = '3.bed message' # Logged in as admin_user self.upload_library_dataset( cntrller='library_admin', library_id=self.security.encode_id( library3.id ), folder_id=self.security.encode_id( folder3.id ), filename=filename, file_type='bed', dbkey='hg18', ldda_message=ldda_message, strings_displayed=[ 'SelectField', 'selected>Option1' ] ) ldda = get_latest_ldda_by_name( filename ) assert ldda is not None, 'Problem retrieving LibraryDatasetDatasetAssociation ldda from the database' self.browse_library( cntrller='library_admin', library_id=self.security.encode_id( library3.id ), strings_displayed=[ ldda.name, ldda.message, 'bed' ] ) # Make sure the library template contents were correctly saved self.ldda_edit_info( 'library_admin', self.security.encode_id( library3.id ), self.security.encode_id( folder3.id ), self.security.encode_id( ldda.id ), ldda.name, strings_displayed=[ 'SelectField', 'Option1' ] ) # Import a dataset from the current history filename = '8.bed' self.new_history( name='import+with+SelectField' ) self.upload_file( filename ) hda = get_latest_hda() self.upload_library_dataset( cntrller='library_admin', library_id=self.security.encode_id( library3.id ), folder_id=self.security.encode_id( folder3.id ), upload_option='import_from_history', hda_ids=self.security.encode_id( hda.id ), strings_displayed=[ '