Пример #1
0
 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()
Пример #2
0
def init_tasks():
    mocks.create_mock_call(
        'djautotask.sync.TaskSynchronizer._get_query_conditions', None)
    sync_objects(
        'Task',
        fixtures.API_TASK_LIST,
        sync.TaskSynchronizer
    )
Пример #3
0
def init_tickets():
    mocks.create_mock_call(
        'djautotask.sync.TicketSynchronizer._get_query_conditions', None)
    return sync_objects(
        'Ticket',
        fixtures.API_TICKET_LIST,
        sync.TicketSynchronizer
    )
Пример #4
0
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
    )
Пример #5
0
    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()
Пример #6
0
 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()
Пример #7
0
    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()
Пример #8
0
    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()
Пример #9
0
    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()
Пример #10
0
    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()
Пример #11
0
    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()
Пример #12
0
    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)
Пример #13
0
    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()
Пример #14
0
    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()
Пример #15
0
    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()
Пример #16
0
    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()
Пример #17
0
 def setUp(self):
     super().setUp()
     mocks.create_mock_call(
         'djautotask.sync.TaskSynchronizer._get_query_conditions', None)
Пример #18
0
 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)