diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c309532f..1fa7ab3f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -33,6 +33,7 @@ Changed - Upgrade to iRODS v4.3.3 in CI (#1815) - Upgrade to python-irodsclient v2.1.0 (#2007) - Upgrade minimum supported iRODS version to v4.3.3 (#1815, #2007) + - Use constants for timeline event status types (#2010) - **Irodsinfo** - Update REST API versioning (#1936) - **Landingzones** diff --git a/landingzones/tests/test_views_taskflow.py b/landingzones/tests/test_views_taskflow.py index d8ae2270..f4ecd82a 100644 --- a/landingzones/tests/test_views_taskflow.py +++ b/landingzones/tests/test_views_taskflow.py @@ -98,7 +98,7 @@ def make_zone_taskflow( user=user, event_name='zone_create', description='create landing zone', - status_type='SUBMIT', + status_type=timeline.TL_STATUS_SUBMIT, ) flow_data = { @@ -396,6 +396,7 @@ class TestZoneMoveView( def setUp(self): super().setUp() + self.timeline = get_backend_api('timeline_backend') # Make project with owner in Taskflow and Django self.project, self.owner_as = self.make_project_taskflow( title='TestProject', @@ -715,7 +716,9 @@ def test_move_lock_failure(self): self.assertEqual(len(mail.outbox), 1) # TODO: Should this send email? tl_event = TimelineEvent.objects.filter(event_name='zone_move').first() self.assertIsInstance(tl_event, TimelineEvent) - self.assertEqual(tl_event.get_status().status_type, ZONE_STATUS_FAILED) + self.assertEqual( + tl_event.get_status().status_type, self.timeline.TL_STATUS_FAILED + ) # TODO: Create app alerts for async failures (see #1499) self.assertEqual( AppAlert.objects.filter(alert_name='zone_move').count(), 0 diff --git a/landingzones/views.py b/landingzones/views.py index 0819644d..9be43c0b 100644 --- a/landingzones/views.py +++ b/landingzones/views.py @@ -168,7 +168,7 @@ def submit_create( event_name='zone_{}'.format(tl_action), description='{} landing zone {{{}}}{} for {{{}}} in ' '{{{}}}'.format(tl_action, 'zone', config_str, 'user', 'assay'), - status_type='SUBMIT', + status_type=timeline.TL_STATUS_SUBMIT, extra_data=tl_extra, ) tl_event.add_object(obj=zone, label='zone', name=zone.title) @@ -265,7 +265,7 @@ def update_zone(self, zone, request=None): user=user, event_name='zone_update', description=description, - status_type='OK', + status_type=timeline.TL_STATUS_OK, extra_data=tl_extra, ) tl_event.add_object(obj=zone, label='zone', name=zone.title) @@ -312,7 +312,7 @@ def submit_delete(self, zone): tl_event.add_object( obj=zone.user, label='user', name=zone.user.username ) - tl_event.set_status('SUBMIT') + tl_event.set_status(timeline.TL_STATUS_SUBMIT) # Check zone root collection status zone_path = irods_backend.get_path(zone) @@ -380,7 +380,7 @@ def _submit_validate_move(self, zone, validate_only, request=None): label='assay', name=zone.assay.get_display_name(), ) - tl_event.set_status('SUBMIT') + tl_event.set_status(timeline.TL_STATUS_SUBMIT) flow_data = self.get_flow_data( zone, diff --git a/samplesheets/management/commands/normalizesheets.py b/samplesheets/management/commands/normalizesheets.py index e5e90412..0db63d53 100644 --- a/samplesheets/management/commands/normalizesheets.py +++ b/samplesheets/management/commands/normalizesheets.py @@ -171,8 +171,9 @@ def handle(self, *args, **options): investigation, description=COMMAND_DESC ) ok_count += 1 - tl_status = 'OK' - tl_desc = None + if timeline: + tl_status = timeline.TL_STATUS_OK + tl_desc = None except Exception as ex: logger.error( 'Error normalizing sheets in project {}: {}'.format( @@ -180,8 +181,9 @@ def handle(self, *args, **options): ) ) err_count += 1 - tl_status = 'FAILED' - tl_desc = str(ex) + if timeline: + tl_status = timeline.TL_STATUS_FAILED + tl_desc = str(ex) if timeline and not check and edit_count > 0: tl_event = timeline.add_event( project=project, diff --git a/samplesheets/tasks_celery.py b/samplesheets/tasks_celery.py index 4b192227..3e5f1adc 100644 --- a/samplesheets/tasks_celery.py +++ b/samplesheets/tasks_celery.py @@ -55,7 +55,7 @@ def update_project_cache_task( user=user, event_name=CACHE_UPDATE_EVENT, description='update cache for project sheets', - status_type='SUBMIT', + status_type=timeline.TL_STATUS_SUBMIT, status_desc='Asynchronous update started', ) @@ -68,8 +68,12 @@ def update_project_cache_task( try: app_plugin.update_cache(project=project, user=user) - tl_status_type = 'OK' - tl_status_desc = 'Update OK' + if tl_event: + tl_status_type = timeline.TL_STATUS_OK + tl_status_desc = 'Update OK' + tl_event.set_status( + status_type=tl_status_type, status_desc=tl_status_desc + ) app_level = 'INFO' app_msg = 'Sample sheet iRODS cache updated' if alert_msg: @@ -78,8 +82,12 @@ def update_project_cache_task( 'Cache update OK for project {}'.format(project.get_log_title()) ) except Exception as ex: - tl_status_type = 'FAILED' - tl_status_desc = 'Update failed: {}'.format(ex) + if tl_event: + tl_status_type = timeline.TL_STATUS_FAILED + tl_status_desc = 'Update failed: {}'.format(ex) + tl_event.set_status( + status_type=tl_status_type, status_desc=tl_status_desc + ) app_level = 'DANGER' app_msg = 'Sample sheet iRODS cache update failed: {}'.format(ex) logger.error( @@ -88,10 +96,6 @@ def update_project_cache_task( ) ) - if tl_event: - tl_event.set_status( - status_type=tl_status_type, status_desc=tl_status_desc - ) if add_alert and user: app_alerts = get_backend_api('appalerts_backend') if app_alerts: @@ -116,7 +120,7 @@ def sheet_sync_task(_self): timeline = get_backend_api('timeline_backend') tl_add = False - tl_status_type = 'OK' + tl_status_type = timeline.TL_STATUS_OK if timeline else 'OK' tl_status_desc = 'Sync OK' for project in Project.objects.filter(type=PROJECT_TYPE_PROJECT): @@ -135,7 +139,7 @@ def sheet_sync_task(_self): fail_msg = 'Sync failed: {}'.format(ex) logger.error(fail_msg) tl_add = True # Add timeline event - tl_status_type = 'FAILED' + tl_status_type = timeline.TL_STATUS_FAILED if timeline else 'FAILED' tl_status_desc = fail_msg if timeline and tl_add: diff --git a/samplesheets/tests/test_views_taskflow.py b/samplesheets/tests/test_views_taskflow.py index 4ab38e28..ce03f33e 100644 --- a/samplesheets/tests/test_views_taskflow.py +++ b/samplesheets/tests/test_views_taskflow.py @@ -418,6 +418,7 @@ def setUp(self): self.investigation = self.import_isa_from_file(SHEET_PATH, self.project) self.study = self.investigation.studies.first() self.assay = self.study.assays.first() + self.timeline = get_backend_api('timeline_backend') self.url = reverse( 'samplesheets:delete', kwargs={'project': self.project.sodar_uuid}, @@ -483,7 +484,9 @@ def test_post(self): # Assert timeline event status self._assert_tl_event_count(1) tl_event = TimelineEvent.objects.get(event_name='sheet_delete') - self.assertEqual(tl_event.get_status().status_type, 'OK') + self.assertEqual( + tl_event.get_status().status_type, self.timeline.TL_STATUS_OK + ) def test_post_colls(self): """Test POST with collections created""" @@ -503,7 +506,9 @@ def test_post_colls(self): ) self._assert_tl_event_count(1) tl_event = TimelineEvent.objects.get(event_name='sheet_delete') - self.assertEqual(tl_event.get_status().status_type, 'OK') + self.assertEqual( + tl_event.get_status().status_type, self.timeline.TL_STATUS_OK + ) def test_post_files_owner(self): """Test sheet deleting with files as owner""" diff --git a/samplesheets/views.py b/samplesheets/views.py index e71fa5b9..07775213 100644 --- a/samplesheets/views.py +++ b/samplesheets/views.py @@ -175,6 +175,9 @@ class SheetImportMixin: #: Whether configs should be regenerated on sheet replace replace_configs = True + #: TimelineAPI + timeline = None + def add_tl_event(self, project, action, tpl_name=None): """ Add timeline event for sample sheet import, replace or create. @@ -186,8 +189,9 @@ def add_tl_event(self, project, action, tpl_name=None): """ if action not in ['create', 'import', 'replace']: raise ValueError('Invalid action "{}"'.format(action)) - timeline = get_backend_api('timeline_backend') - if not timeline: + if not self.timeline: + self.timeline = get_backend_api('timeline_backend') + if not self.timeline: return None if action == 'replace': @@ -199,7 +203,7 @@ def add_tl_event(self, project, action, tpl_name=None): if tpl_name: tl_desc += ' from template "{}"'.format(tpl_name) - return timeline.add_event( + return self.timeline.add_event( project=project, app_name=APP_NAME, user=self.request.user, @@ -334,9 +338,11 @@ def _add_crits(legend, warnings, eh): if ui_mode: messages.error(self.request, ex_msg) - if tl_event: + if tl_event and self.timeline: tl_event.set_status( - 'FAILED', status_desc=ex_msg, extra_data=extra_data + self.timeline.TL_STATUS_FAILED, + status_desc=ex_msg, + extra_data=extra_data, ) def finalize_import( @@ -354,7 +360,7 @@ def finalize_import( investigation.save() # Add investigation data in Timeline - if tl_event: + if tl_event and self.timeline: extra_data = ( {'warnings': investigation.parser_warnings} if investigation.parser_warnings @@ -363,7 +369,9 @@ def finalize_import( ) status_desc = WARNING_STATUS_MSG if extra_data else None tl_event.set_status( - 'OK', status_desc=status_desc, extra_data=extra_data + self.timeline.TL_STATUS_OK, + status_desc=status_desc, + extra_data=extra_data, ) if ui_mode: @@ -666,7 +674,7 @@ def create_colls(self, investigation, request=None, sync=False): event_name='sheet_colls_' + tl_action, description=tl_action + ' iRODS collection structure for ' '{investigation}', - status_type='SUBMIT', + status_type=timeline.TL_STATUS_SUBMIT, ) tl_event.add_object( obj=investigation, @@ -694,7 +702,7 @@ def create_colls(self, investigation, request=None, sync=False): APP_NAME, 'public_access_ticket', ticket_str, project=project ) if tl_event: - tl_event.set_status('OK') + tl_event.set_status(timeline.TL_STATUS_OK) if settings.SHEETS_ENABLE_CACHE: from samplesheets.tasks_celery import update_project_cache_task @@ -739,7 +747,7 @@ def add_tl_event(cls, ticket, action): event_name='irods_ticket_{}'.format(action), description=tl_desc, extra_data=extra_data, - status_type='OK', + status_type=timeline.TL_STATUS_OK, ) tl_event.add_object(ticket, 'ticket', ticket.get_display_name()) tl_event.add_object( @@ -813,7 +821,7 @@ def add_tl_event(self, irods_request, action): user=irods_request.user, event_name='irods_request_{}'.format(action), description=action + ' iRODS data request {irods_request}', - status_type='OK', + status_type=self.timeline.TL_STATUS_OK, extra_data=extra_data, ) tl_event.add_object( @@ -942,7 +950,7 @@ def accept_request( status = IRODS_REQUEST_STATUS_FAILED else: description = 'accept iRODS data request {irods_request}' - status = 'OK' + status = timeline.TL_STATUS_OK if timeline else 'OK' if timeline: tl_event = timeline.add_event( project=project, @@ -1738,7 +1746,8 @@ def post(self, request, *args, **kwargs): 'Incorrect host name for confirming sheet ' 'deletion: "{}"'.format(host_confirm) ) - tl_event.set_status('FAILED', msg) + if tl_event: + tl_event.set_status(timeline.TL_STATUS_FAILED, msg) logger.error(msg + ' (correct={})'.format(actual_host)) messages.error( request, 'Host name input incorrect, deletion cancelled.' @@ -1748,25 +1757,30 @@ def post(self, request, *args, **kwargs): delete_success = True if taskflow and investigation.irods_status: if tl_event: - tl_event.set_status('SUBMIT') + tl_event.set_status(timeline.TL_STATUS_SUBMIT) try: taskflow.submit( project=project, flow_name='sheet_delete', flow_data={} ) - tl_event.set_status('OK') + if tl_event: + tl_event.set_status(timeline.TL_STATUS_OK) except taskflow.FlowSubmitException as ex: delete_success = False messages.error( self.request, 'Failed to delete sample sheets: {}'.format(ex), ) - tl_event.set_status('FAILED', status_info=str(ex)) + if tl_event: + tl_event.set_status( + timeline.TL_STATUS_FAILED, status_info=str(ex) + ) else: # Clear cached study tables (force delete) for study in investigation.studies.all(): table_builder.clear_study_cache(study, delete=True) investigation.delete() - tl_event.set_status('OK') + if tl_event: + tl_event.set_status(timeline.TL_STATUS_OK) if delete_success: # Delete ISA-Tab versions @@ -2130,7 +2144,7 @@ def get_success_url(self): user=self.request.user, event_name='version_delete', description='delete sample sheet version {isatab}', - status_type='OK', + status_type=timeline.TL_STATUS_OK, ) tl_event.add_object( obj=self.object, @@ -2188,7 +2202,7 @@ def post(self, request, **kwargs): user=self.request.user, event_name='version_delete', description='delete sample sheet version {isatab}', - status_type='OK', + status_type=timeline.TL_STATUS_OK, ) tl_event.add_object( obj=sv, label='isatab', name=sv.get_full_name() @@ -2914,7 +2928,7 @@ def get(self, request, *args, **kwargs): project = self.get_project() timeline = get_backend_api('timeline_backend') tl_add = False - tl_status_type = 'OK' + tl_status_type = timeline.TL_STATUS_OK if timeline else 'OK' tl_status_desc = 'Sync OK' sheet_sync_enable = app_settings.get( APP_NAME, 'sheet_sync_enable', project=project @@ -2936,7 +2950,7 @@ def get(self, request, *args, **kwargs): request, 'Sample sheet sync skipped, no changes detected.' ) except Exception as ex: - tl_status_type = 'FAILED' + tl_status_type = timeline.TL_STATUS_FAILED if timeline else 'FAILED' tl_status_desc = 'Sync failed: {}'.format(ex) messages.error(request, '{}: {}'.format(SYNC_FAIL_PREFIX, ex)) tl_add = True # Add timeline event diff --git a/samplesheets/views_ajax.py b/samplesheets/views_ajax.py index 2340fcd6..2d9541b6 100644 --- a/samplesheets/views_ajax.py +++ b/samplesheets/views_ajax.py @@ -1616,7 +1616,11 @@ def post(self, request, *args, **kwargs): export_ex = str(ex) if timeline: - tl_status = 'FAILED' if export_ex else 'OK' + tl_status = ( + timeline.TL_STATUS_FAILED + if export_ex + else timeline.TL_STATUS_OK + ) tl_desc = 'save sheet version' if not export_ex and isa_version: tl_desc += ' as {isatab}' @@ -1627,7 +1631,11 @@ def post(self, request, *args, **kwargs): event_name='sheet_version_save', description=tl_desc, status_type=tl_status, - status_desc=export_ex if tl_status == 'FAILED' else None, + status_desc=( + export_ex + if tl_status == timeline.TL_STATUS_FAILED + else None + ), ) if not export_ex and isa_version: tl_event.add_object( @@ -1672,7 +1680,11 @@ def post(self, request, *args, **kwargs): export_ex = str(ex) if timeline: - tl_status = 'FAILED' if export_ex else 'OK' + tl_status = ( + timeline.TL_STATUS_FAILED + if export_ex + else timeline.TL_STATUS_OK + ) tl_desc = 'finish editing sheets' if not export_ex and isa_version: tl_desc += ' and save version as {isatab}' @@ -1683,7 +1695,11 @@ def post(self, request, *args, **kwargs): event_name='sheet_edit_finish', description=tl_desc, status_type=tl_status, - status_desc=export_ex if tl_status == 'FAILED' else None, + status_desc=( + export_ex + if tl_status == timeline.TL_STATUS_FAILED + else None + ), ) if not export_ex and isa_version: tl_event.add_object( @@ -1815,7 +1831,7 @@ def post(self, request, *args, **kwargs): event_name='field_update', description='update field configuration for "{}" ' 'in {{{}}}'.format(c['name'].title(), tl_label), - status_type='OK', + status_type=timeline.TL_STATUS_OK, extra_data={'config': c}, ) tl_event.add_object( @@ -1869,7 +1885,7 @@ def post(self, request, *args, **kwargs): event_name='display_update', description='update default column display configuration ' 'for {study}', - status_type='OK', + status_type=timeline.TL_STATUS_OK, ) tl_event.add_object( obj=study, label='study', name=study.get_display_name() diff --git a/taskflowbackend/plugins.py b/taskflowbackend/plugins.py index cb4df571..483e2547 100644 --- a/taskflowbackend/plugins.py +++ b/taskflowbackend/plugins.py @@ -191,7 +191,7 @@ def perform_project_modify( description='{} {} in iRODS'.format( tl_action, project.type.lower() ), - status_type='OK', + status_type=timeline.TL_STATUS_OK, ) def revert_project_modify( @@ -242,7 +242,7 @@ def revert_project_modify( user=request.user if request else None, event_name='project_create_revert', description='revert project creation in iRODS', - status_type='OK', + status_type=timeline.TL_STATUS_OK, ) def perform_role_modify(self, role_as, action, old_role=None, request=None): @@ -301,7 +301,7 @@ def perform_role_modify(self, role_as, action, old_role=None, request=None): description='update {} iRODS access for user {{{}}}'.format( project.type.lower(), 'user' ), - status_type='OK', + status_type=timeline.TL_STATUS_OK, ) tl_event.add_object(obj=user, label='user', name=user.username) @@ -365,7 +365,7 @@ def revert_role_modify(self, role_as, action, old_role=None, request=None): event_name='role_update_revert', description='revert adding iRODS access for ' 'user {{{}}}'.format('user'), - status_type='OK', + status_type=timeline.TL_STATUS_OK, ) tl_event.add_object(user, 'user', user_name) @@ -426,7 +426,7 @@ def perform_role_delete(self, role_as, request=None): user=request.user if request else None, event_name='role_delete', description='remove project iRODS access from user {user}', - status_type='OK', + status_type=timeline.TL_STATUS_OK, ) tl_event.add_object(obj=user, label='user', name=user_name) @@ -488,7 +488,7 @@ def revert_role_delete(self, role_as, request=None): event_name='role_delete_revert', description='revert removing iRODS access from ' 'user {{{}}}'.format('user'), - status_type='OK', + status_type=timeline.TL_STATUS_OK, ) tl_event.add_object(role_as.user, 'user', user_name) @@ -539,7 +539,7 @@ def perform_owner_transfer( event_name='role_owner_transfer', description='update iRODS access for ownership transfer ' 'from {old_owner} to {new_owner}', - status_type='OK', + status_type=timeline.TL_STATUS_OK, ) tl_event.add_object( obj=old_owner, label='old_owner', name=o_user_name diff --git a/taskflowbackend/tests/test_plugins.py b/taskflowbackend/tests/test_plugins.py index c75a65f3..7473541d 100644 --- a/taskflowbackend/tests/test_plugins.py +++ b/taskflowbackend/tests/test_plugins.py @@ -8,7 +8,7 @@ # Projectroles dependency from projectroles.app_settings import AppSettingAPI from projectroles.models import RoleAssignment, SODAR_CONSTANTS -from projectroles.plugins import BackendPluginPoint +from projectroles.plugins import BackendPluginPoint, get_backend_api # Irodsbackend dependency from irodsbackend.api import USER_GROUP_TEMPLATE @@ -45,6 +45,7 @@ def setUp(self): self.req_factory = RequestFactory() self.request = self.req_factory.get('/') self.request.user = self.user + self.timeline = get_backend_api('timeline_backend') class TestPerformProjectModify(ModifyAPITaskflowTestBase): @@ -104,7 +105,10 @@ def test_create(self): event_name='project_create', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) def test_create_inherited_members(self): """Test project creation in iRODS with inherited members""" @@ -453,7 +457,10 @@ def test_revert_create(self): event_name='project_create_revert', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) class TestPerformRoleModify(ModifyAPITaskflowTestBase): @@ -492,7 +499,10 @@ def test_create(self): event_name='role_update', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) def test_create_parent(self): """Test creating parent assignment""" @@ -515,7 +525,10 @@ def test_create_parent(self): event_name='role_update', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) def test_create_parent_finder(self): """Test creating parent finder assignment""" @@ -705,7 +718,10 @@ def test_revert_create(self): event_name='role_update_revert', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) def test_revert_create_parent(self): """Test reverting parent role creation""" @@ -728,7 +744,10 @@ def test_revert_create_parent(self): event_name='role_update_revert', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) def test_revert_create_parent_override(self): """Test reverting parent role creation with overriding child role""" @@ -907,7 +926,10 @@ def test_delete(self): event_name='role_delete', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) def test_delete_parent(self): """Test deleting parent role""" @@ -924,7 +946,10 @@ def test_delete_parent(self): event_name='role_delete', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) def test_delete_parent_with_local(self): """Test deleting parent role with local role also set""" @@ -991,7 +1016,10 @@ def test_revert(self): event_name='role_delete_revert', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) def test_revert_parent(self): """Test reverting parent role deletion""" @@ -1011,7 +1039,10 @@ def test_revert_parent(self): event_name='role_delete_revert', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) def test_revert_parent_with_local(self): """Test reverting parent role deletion with local member role""" @@ -1109,7 +1140,10 @@ def test_transfer_category(self): event_name='role_owner_transfer', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) def test_transfer_category_old_owner_finder(self): """Test category owner transfer with finder role for old owner""" @@ -1248,7 +1282,10 @@ def test_sync_new_project(self): event_name='project_sync', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) def test_sync_existing(self): """Test sync with existing identical iRODS project (should not do anything)""" diff --git a/taskflowbackend/tests/test_project_views.py b/taskflowbackend/tests/test_project_views.py index df8c16b5..4f44b2ae 100644 --- a/taskflowbackend/tests/test_project_views.py +++ b/taskflowbackend/tests/test_project_views.py @@ -17,6 +17,7 @@ ProjectInvite, SODAR_CONSTANTS, ) +from projectroles.plugins import get_backend_api from projectroles.tests.test_models import ProjectInviteMixin # Timeline dependency @@ -50,6 +51,10 @@ class TestProjectCreateView(TaskflowViewTestBase): """Tests for Project creation view with taskflow""" + def setUp(self): + super().setUp() + self.timeline = get_backend_api('timeline_backend') + def test_create_project(self): """Test Project creation with taskflow""" self.assertEqual(Project.objects.count(), 1) @@ -144,7 +149,10 @@ def test_create_project(self): event_name='project_create', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) class TestProjectUpdateView(TaskflowViewTestBase): @@ -161,6 +169,7 @@ def setUp(self): description='description', ) self.user_new = self.make_user('user_new') + self.timeline = get_backend_api('timeline_backend') def test_update(self): """Test project update with taskflow""" @@ -240,7 +249,10 @@ def test_update(self): event_name='project_update', ) self.assertEqual(tl_events.count(), 1) - self.assertEqual(tl_events.first().get_status().status_type, 'OK') + self.assertEqual( + tl_events.first().get_status().status_type, + self.timeline.TL_STATUS_OK, + ) def test_update_parent(self): """Test project update with changed parent"""