def setUp(self): super().setUp() # We can't test if query conditions actualy return the correct objects # so mock any Synchronizers with custom query conditions. mocks.create_mock_call( 'djautotask.sync.TicketSynchronizer._get_query_conditions', None) fixture_utils.init_statuses()
def init_tasks(): mocks.create_mock_call( 'djautotask.sync.TaskSynchronizer._get_query_conditions', None) sync_objects( 'Task', fixtures.API_TASK_LIST, sync.TaskSynchronizer )
def init_tickets(): mocks.create_mock_call( 'djautotask.sync.TicketSynchronizer._get_query_conditions', None) return sync_objects( 'Ticket', fixtures.API_TICKET_LIST, sync.TicketSynchronizer )
def init_ticket_notes(): mocks.create_mock_call( 'djautotask.sync.TicketNoteSynchronizer._get_query_conditions', None) sync_objects( 'TicketNote', fixtures.API_TICKET_NOTE_LIST, sync.TicketNoteSynchronizer )
def test_batch_queries_creates_multiple_batches(self): """ Verify that build batch query method returns multiple batches ticket and task queries. """ max_id_limit = 500 settings = DjautotaskSettings().get_settings() batch_size = settings.get('batch_query_size') synchronizer = sync.TimeEntrySynchronizer() sync_job = SyncJob.objects.filter(entity_name='TimeEntry') # Simulate ticket IDs object_ids = random.sample(range(1, max_id_limit), batch_size + 50) _, _patch = mocks.create_mock_call( 'django.db.models.query.QuerySet.values_list', object_ids) batch_query_list = synchronizer.build_batch_queries(sync_job) # With a max batch size of 400, a set of 450 object IDs should result # in 4 Query objects being returned in the list. (2 for tickets, 2 for # tasks) self.assertEqual(len(batch_query_list), 4) _patch.stop()
def test_fetch_sync_by_id(self): test_instance = fixture_utils.generate_objects( 'Ticket', fixtures.API_TICKET_LIST) _, patch = mocks.create_mock_call(mocks.WRAPPER_QUERY_METHOD, test_instance) result = self.synchronizer.fetch_sync_by_id(fixtures.API_TICKET['id']) self._assert_sync(result, fixtures.API_TICKET) patch.stop()
def test_add(self): self.assertEqual(Ticket.objects.count(), 0) test_instance = fixture_utils.generate_objects( 'Ticket', fixtures.API_TICKET_LIST) _, patch = mocks.create_mock_call(mocks.WRAPPER_QUERY_METHOD, test_instance) self._test_synced(fixtures.API_TICKET) patch.stop()
def test_add(self): self.assertEqual(Ticket.objects.count(), 0) fixture_utils.init_statuses() _, patch = mocks.service_api_get_ticket_call(fixtures.API_TICKET_BY_ID) _, _checklist_patch = mocks.create_mock_call( "djautotask.sync_rest.TicketChecklistItemsSynchronizer.sync_items", None) self._test_synced(fixtures.API_TICKET_BY_ID['item']) patch.stop() _checklist_patch.stop()
def test_batch_queries_returns_query_list(self): """ Verify that an empty list is returned when no tickets or tasks are present in the database. """ _, _patch = mocks.create_mock_call( 'django.db.models.query.QuerySet.values_list', []) synchronizer = sync.TimeEntrySynchronizer() sync_job = SyncJob.objects.filter(entity_name='TimeEntry') batch_query_list = synchronizer.build_batch_queries(sync_job) self.assertEqual(len(batch_query_list), 0) _patch.stop()
def test_update(self): fixture_utils.init_tickets() self.assertEqual(Ticket.objects.count(), 1) # Change the description of the local record to make our test # meaningful. t = Ticket.objects.get(id=7688) t.description = 'foobar' t.save() test_instance = fixture_utils.generate_objects( 'Ticket', fixtures.API_TICKET_LIST) _, patch = mocks.create_mock_call(mocks.WRAPPER_QUERY_METHOD, test_instance) self._test_synced(fixtures.API_TICKET) patch.stop()
def test_update(self): fixture_utils.init_statuses() fixture_utils.init_tickets() self.assertEqual(Ticket.objects.count(), 1) # Change the description of the local record to make our test # meaningful. t = Ticket.objects.get(id=7688) t.description = 'foobar' t.save() _, patch = mocks.service_api_get_ticket_call(fixtures.API_TICKET_BY_ID) _, _checklist_patch = mocks.create_mock_call( "djautotask.sync_rest.TicketChecklistItemsSynchronizer.sync_items", None) self._test_synced(fixtures.API_TICKET_BY_ID['item']) patch.stop() _checklist_patch.stop()
def setUp(self): super().setUp() mocks.init_api_connection(Wrapper) mocks.create_mock_call( 'djautotask.sync.TaskSynchronizer._get_query_conditions', None) mocks.create_mock_call( 'djautotask.sync.TicketNoteSynchronizer._get_query_conditions', None) mocks.create_mock_call( 'djautotask.sync.TaskNoteSynchronizer._get_query_conditions', None) mocks.create_mock_call( 'djautotask.sync.QueryConditionMixin._get_query_conditions', None) # Mock API calls to return values based on what entity # is being requested mocks.get_field_info_api_calls( fixture_utils.manage_sync_picklist_return_data) mocks.wrapper_query_api_calls( fixture_utils.manage_full_sync_return_data) sync_test_cases = [ TestSyncTicketCommand, TestSyncTaskCommand, TestSyncStatusCommand, TestSyncResourceCommand, TestSyncPriorityCommand, TestSyncQueueCommand, TestSyncAccountCommand, TestSyncProjectCommand, TestSyncProjectStatusCommand, TestSyncProjectTypeCommand, TestSyncTicketCategoryCommand, TestSyncSourceCommand, TestSyncIssueTypeCommand, TestSyncSubIssueTypeCommand, TestSyncTicketTypeCommand, TestDisplayColorCommand, TestLicenseTypeCommand, TestSyncTaskSecondaryResourceCommand, TestSyncPhaseCommand, TestSyncTicketNoteCommand, TestSyncTaskNoteCommand, TestSyncTimeEntryCommand, TestSyncTaskTypeLinkCommand, TestUseTypeCommand, TestAllocationCodeCommand, TestSyncRoleCommand, TestSyncDepartmentCommand, TestResourceRoleDepartmentCommand, TestResourceServiceDeskRoleCommand ] self.test_args = [] for test_case in sync_test_cases: self.test_args.append(test_case.args)
def test_sync_filters_tasks_on_inactive_project(self): # Add copied task to project in 'Complete' status to ensure it is # filtered out during the sync. task_fixture = deepcopy(fixtures.API_TASK) task_fixture['id'] = '7740' task_fixture['ProjectID'] = self.inactive_project.id task_instance = fixture_utils.generate_objects( 'Task', [task_fixture, fixtures.API_TASK]) _, patch = mocks.create_mock_call(mocks.WRAPPER_QUERY_METHOD, task_instance) synchronizer = sync.TaskSynchronizer(full=True) synchronizer.sync() synced_task_ids = Task.objects.values_list('id', flat=True) self.assertGreater(Task.objects.all().count(), 0) self.assertNotIn(task_fixture['id'], synced_task_ids) self.assertIn(fixtures.API_TASK['id'], synced_task_ids) patch.stop()
def test_sync_assigns_null_relation(self): model_type = self.model_class.__name__ model_object = self.model_class.objects.first() self.assertIsNotNone(model_object.assigned_resource) fixture_instance = deepcopy( getattr(fixtures, 'API_{}'.format(model_type.upper()))) fixture_instance.pop('AssignedResourceID') object_instance = fixture_utils.generate_objects( model_type, [fixture_instance]) _, patch = mocks.create_mock_call(mocks.WRAPPER_QUERY_METHOD, object_instance) synchronizer = self.sync_class(full=True) synchronizer.sync() model_object = self.model_class.objects.get(id=model_object.id) self.assertIsNone(model_object.assigned_resource) patch.stop()
def test_sync_filters_projects_in_complete_status(self): """ Test to ensure that sync does not persist projects in an inactive project status. """ project_in_complete_status = fixtures.API_PROJECT_LIST[0] project_fixture = deepcopy(project_in_complete_status) project_fixture['id'] = '6' project_fixture['Status'] = self.complete_status.id project_instance = fixture_utils.generate_objects( 'Project', [project_fixture, fixtures.API_PROJECT_LIST[0]]) _, patch = mocks.create_mock_call(mocks.WRAPPER_QUERY_METHOD, project_instance) synchronizer = sync.ProjectSynchronizer(full=True) synchronizer.sync() synced_project_ids = Project.objects.values_list('id', flat=True) self.assertGreater(Project.objects.all().count(), 0) self.assertNotIn(project_fixture['id'], synced_project_ids) self.assertIn(project_in_complete_status['id'], synced_project_ids) patch.stop()
def test_sync_filters_tasks_on_complete_project(self): """ Test to ensure that sync does not persist tasks on a complete project. """ project = Project.objects.create(name='Complete Project') project.status = self.complete_status project.save() task_fixture = deepcopy(fixtures.API_TASK) task_fixture['id'] = '7741' task_fixture['ProjectID'] = project.id task_instance = fixture_utils.generate_objects( 'Task', [task_fixture, fixtures.API_TASK]) _, patch = mocks.create_mock_call(mocks.WRAPPER_QUERY_METHOD, task_instance) synchronizer = sync.TaskSynchronizer(full=True) synchronizer.sync() synced_task_ids = Task.objects.values_list('id', flat=True) self.assertGreater(Task.objects.all().count(), 0) self.assertNotIn(task_fixture['id'], synced_task_ids) self.assertIn(fixtures.API_TASK['id'], synced_task_ids) patch.stop()
def setUp(self): super().setUp() mocks.create_mock_call( 'djautotask.sync.TaskSynchronizer._get_query_conditions', None)
def setUp(self): mocks.init_api_connection(Wrapper) # We can't test if query conditions actualy return the correct objects # so mock any Synchronizers with custom query conditions. mocks.create_mock_call( 'djautotask.sync.TicketSynchronizer._get_query_conditions', None)
def setUp(self): super().setUp() mocks.init_api_connection(Wrapper) mocks.create_mock_call( 'djautotask.sync.TicketNoteSynchronizer._get_query_conditions', None ) mocks.create_mock_call( 'djautotask.sync.TaskNoteSynchronizer._get_query_conditions', None ) fixture_utils.mock_udfs() self._call_service_api() # Mock API calls to return values based on what entity # is being requested mocks.get_field_info_api_calls( fixture_utils.manage_sync_picklist_return_data ) mocks.wrapper_query_api_calls( fixture_utils.manage_full_sync_return_data ) sync_test_cases = [ TestSyncLicenseTypeCommand, TestSyncTaskTypeLinkCommand, TestSyncUseTypeCommand, TestSyncAccountTypeCommand, TestSyncRoleCommand, TestSyncDepartmentCommand, TestSyncTicketCommand, TestSyncTaskCommand, TestSyncStatusCommand, TestSyncResourceCommand, TestSyncPriorityCommand, TestSyncQueueCommand, TestSyncAccountCommand, TestSyncProjectCommand, TestSyncProjectStatusCommand, TestSyncProjectTypeCommand, TestSyncTicketCategoryCommand, TestSyncSourceCommand, TestSyncIssueTypeCommand, TestSyncSubIssueTypeCommand, TestSyncTicketTypeCommand, TestDisplayColorCommand, TestSyncTaskSecondaryResourceCommand, TestSyncPhaseCommand, TestSyncTicketNoteCommand, TestSyncTaskNoteCommand, TestSyncTimeEntryCommand, TestAllocationCodeCommand, TestResourceRoleDepartmentCommand, TestResourceServiceDeskRoleCommand, TestContractCommand, TestSyncServiceCallStatusCommand, TestSyncServiceCallCommand, TestSyncServiceCallTicketCommand, TestSyncServiceCallTaskCommand, TestSyncServiceCallTicketResourceCommand, TestSyncServiceCallTaskResourceCommand, TestSyncAccountLocationCommand, TestSyncTaskPredecessor, TestSyncContactCommand, ] self.test_args = [] for test_case in sync_test_cases: # for REST API if len(test_case.args) == 3: self.test_args.append(test_case.args) # for SOAP API else: new_test_case = [None, *test_case.args] self.test_args.append(new_test_case)