def test_dependencies_synced(self):
     main_task = task(gid="98",
                      name="Is a dependency for 99",
                      dependents=[task(gid="99")])
     dependent_task = task(gid="99",
                           name="Requires task 98",
                           dependencies=[task(gid="98")])
     # When processed, tasks get modified in place;
     # we need to pass the original twice.
     dependent_copy = dependent_task.copy(), dependent_task.copy()
     self.command.client.tasks.find_all.return_value = [
         main_task, dependent_task
     ]
     self.command.client.tasks.find_by_id.side_effect = [
         main_task,
         dependent_task,
         dependent_copy,
     ]
     self.command.handle(interactive=False)
     self.assertTrue(Task.objects.filter(remote_id=98).exists())
     self.assertTrue(Task.objects.filter(remote_id=99).exists())
     main_task = Task.objects.get(remote_id=98)
     dependent_task = Task.objects.get(remote_id=99)
     self.assertTrue(main_task in dependent_task.dependencies.all())
     self.assertTrue(dependent_task in main_task.dependents.all())
Esempio n. 2
0
 def test_project_deleted(self, mock_client):
     models.Webhook.objects.create(project=self.project, secret=self.secret)
     data = {
         'events': [
             {
                 'action': 'removed',
                 'created_at': '2017-08-21T18:20:37.972Z',
                 'parent': None,
                 'resource': {
                     'gid': '3',
                     'resource_type': 'project',
                 },
                 'user': {
                     'gid': '1123',
                     'resource_type': 'user',
                 },
             },
         ]
     }
     mock_client.access_token().projects.find_by_id.return_value = project()
     mock_client.access_token().tasks.find_by_id.return_value = task(
         parent=task())
     response = self._get_mock_response(mock_client, data)
     self.assertEqual(200, response.status_code)
     self.assertFalse('x-hook-secret' in response)
     with self.assertRaises(models.Project.DoesNotExist):
         models.Project.objects.get(pk=self.project.pk)
Esempio n. 3
0
 def test_task_with_parent(self, mock_client):
     models.Webhook.objects.create(project=self.project, secret=self.secret)
     parent_task = task(id=10, assignee=user())
     child_task = task(id=11, assignee=user(), parent=parent_task.copy())
     mock_client.access_token().tasks.find_all.return_value = [child_task]
     mock_client.access_token().tasks.find_by_id.side_effect = [
         child_task, parent_task
     ]
     data = {
         'events': [
             {
                 'action': 'added',
                 'created_at': '2017-08-21T18:20:37.972Z',
                 'parent': {
                     'id': 10
                 },
                 'resource': 1337,
                 'type': 'task',
                 'user': 1123
             },
         ]
     }
     message = json.dumps(data)
     signature = sign_sha256_hmac(self.secret, message)
     request = self.factory.post('',
                                 content_type='application/json',
                                 data=message,
                                 **{'X-Hook-Signature': signature})
     views.WebhookView.as_view()(request, remote_id=3)
     self.assertEqual(2, models.Task.objects.count())
     parent, child = tuple(models.Task.objects.order_by('remote_id'))
     self.assertEqual(parent, child.parent)
Esempio n. 4
0
 def test_project_deleted(self, mock_client):
     models.Webhook.objects.create(project=self.project, secret=self.secret)
     data = {
         "events": [
             {
                 "action": "removed",
                 "created_at": "2017-08-21T18:20:37.972Z",
                 "parent": None,
                 "resource": {
                     "gid": "3",
                     "resource_type": "project",
                 },
                 "user": {
                     "gid": "1123",
                     "resource_type": "user",
                 },
             },
         ]
     }
     mock_client.access_token().projects.find_by_id.return_value = project()
     mock_client.access_token().tasks.find_by_id.return_value = task(
         parent=task())
     response = self._get_mock_response(mock_client, data)
     self.assertEqual(200, response.status_code)
     self.assertFalse("x-hook-secret" in response)
     with self.assertRaises(models.Project.DoesNotExist):
         models.Project.objects.get(pk=self.project.pk)
Esempio n. 5
0
 def setUp(self):
     self.command = Command()
     self.command.client = MagicMock()
     self.command.client.workspaces.find_all.return_value = [workspace()]
     self.command.client.workspaces.find_by_id.return_value = workspace()
     self.command.client.projects.find_all.return_value = [project()]
     self.command.client.projects.find_by_id.return_value = project()
     self.command.client.tasks.find_all.return_value = [task()]
     self.command.client.tasks.find_by_id.return_value = task()
     self.command.client.tasks.subtasks.return_value = []
Esempio n. 6
0
 def test_subtasks_synced(self):
     parent_task = task()
     child_task = task(id=99, name='Subtask', parent=task())
     # When processed, tasks get modified in place; we need to pass the original twice.
     child_copy = child_task.copy()
     self.command.client.tasks.find_all.return_value = [parent_task, child_task]
     self.command.client.tasks.find_by_id.side_effect = [parent_task, child_task, child_copy]
     self.command.client.tasks.subtasks.side_effect = [[child_task], [], []]
     self.command.handle(interactive=False)
     self.assertTrue(Task.objects.filter(remote_id=99, name='Subtask').exists())
Esempio n. 7
0
    def test_subtask(self):
        """Asserts subtask (task related to a task but not a project) is supported."""
        parent_task = task(projects=None)  # Parent is also a subtask
        subtask = task(id=2, projects=None, parent=parent_task.copy())

        self.command.client.tasks.find_all.return_value = [parent_task.copy()]
        self.command.client.tasks.subtasks.side_effect = [[subtask.copy()], []]
        self.command.client.tasks.find_by_id.side_effect = [parent_task.copy(), subtask.copy()]

        self.command.handle(interactive=False, workspace=['Test Workspace'])
        self.assertEqual(2, Task.objects.count())
Esempio n. 8
0
 def test_task_with_parent(self):
     # When processed, tasks get modified in place; we need to pass the original twice.
     parent_task = task()
     parent_copy = parent_task.copy()
     child_task = task(id=2, parent=parent_task)
     self.command.client.tasks.find_all.return_value = [child_task, parent_task]
     self.command.client.tasks.find_by_id.side_effect = [child_task, parent_task, parent_copy]
     self.command.handle(interactive=False, project=['Test Project'])
     self.assertEqual(2, Task.objects.count())
     parent, child = tuple(Task.objects.order_by('remote_id'))
     self.assertEqual(parent, child.parent)
Esempio n. 9
0
 def test_valid_request(self, mock_client):
     models.Webhook.objects.create(project=self.project, secret=self.secret)
     task_ = models.Task.objects.create(remote_id=99, name='Old task Name')
     mock_client.access_token().tasks.find_by_id.return_value = task(id=99)
     mock_client.access_token().attachments.find_by_task.return_value = [
         attachment()
     ]
     mock_client.access_token(
     ).attachments.find_by_id.return_value = attachment()
     data = {
         'events': [
             {
                 'action': 'changed',
                 'created_at': '2017-08-21T18:20:37.972Z',
                 'parent': None,
                 'resource': 99,
                 'type': 'task',
                 'user': 1123
             },
         ]
     }
     response = self._get_mock_response(mock_client, data)
     self.assertEqual(200, response.status_code)
     self.assertFalse('x-hook-secret' in response)
     task_.refresh_from_db()
     self.assertEqual('Test Task', task_.name)
     try:
         models.Attachment.objects.get(remote_id=1)
     except models.Attachment.DoesNotExist:
         self.fail('Attachment not created')
Esempio n. 10
0
 def test_refresh_from_asana(self, mock_connect):
     mock_client = mock_connect.return_value
     task = fixtures.task(gid='4')
     mock_client.tasks.find_by_id.return_value = task
     self.task.refresh_from_asana()
     self.assertTrue(mock_client.tasks.find_by_id.called)
     self.task.refresh_from_db()
     self.assertEqual(task['name'], self.task.name)
Esempio n. 11
0
 def _get_mock_response(self, mock_client, data):
     message = json.dumps(data)
     signature = sign_sha256_hmac(self.secret, message)
     mock_client.access_token().projects.find_by_id.return_value = project()
     mock_client.access_token().tasks.find_by_id.return_value = task()
     request = self.factory.post('',
                                 content_type='application/json',
                                 data=message,
                                 **{'X-Hook-Signature': signature})
     return views.WebhookView.as_view()(request, remote_id=3)
Esempio n. 12
0
 def setup_task_for_delete(mock_client):
     mock_client.access_token().tasks.find_by_id.return_value = task()
     mock_client.access_token().attachments.find_by_task.return_value = [
         attachment()
     ]
     mock_client.access_token(
     ).attachments.find_by_id.return_value = attachment()
     mock_client.access_token().stories.find_by_task.return_value = [
         story()
     ]
     mock_client.access_token().stories.find_by_id.return_value = story()
Esempio n. 13
0
 def test_task_with_parent(self, mock_client):
     models.Webhook.objects.create(project=self.project, secret=self.secret)
     parent_task = task(id=10, assignee=user())
     child_task = task(id=11, assignee=user(), parent=parent_task.copy())
     mock_client.access_token().tasks.find_all.return_value = [child_task]
     mock_client.access_token().tasks.find_by_id.side_effect = [
         child_task,
         parent_task,
     ]
     data = {
         "events": [
             {
                 "action": "added",
                 "created_at": "2017-08-21T18:20:37.972Z",
                 "parent": {
                     "gid": "10"
                 },
                 "resource": {
                     "gid": "1337",
                     "resource_type": "task",
                 },
                 "user": {
                     "gid": "1123",
                     "resource_type": "user",
                 },
             },
         ]
     }
     message = json.dumps(data)
     signature = sign_sha256_hmac(self.secret, message)
     request = self.factory.post("",
                                 content_type="application/json",
                                 data=message,
                                 **{"X-Hook-Signature": signature})
     views.WebhookView.as_view()(request, remote_id=3)
     self.assertEqual(2, models.Task.objects.count())
     parent, child = tuple(models.Task.objects.order_by("remote_id"))
     self.assertEqual(parent, child.parent)
Esempio n. 14
0
 def test_task_deleted(self, mock_client):
     models.Webhook.objects.create(project=self.project, secret=self.secret)
     task_ = models.Task.objects.create(remote_id=1337,
                                        name='Old task Name')
     mock_client.access_token().tasks.find_by_id.return_value = task()
     mock_client.access_token().attachments.find_by_task.return_value = [
         attachment()
     ]
     mock_client.access_token(
     ).attachments.find_by_id.return_value = attachment()
     mock_client.access_token().stories.find_by_task.return_value = [
         story()
     ]
     mock_client.access_token().stories.find_by_id.return_value = story()
     data = self.data.copy()
     data['events'][0]['action'] = 'removed'
     response = self._get_mock_response(mock_client, data)
     self.assertEqual(200, response.status_code)
     self.assertFalse('x-hook-secret' in response)
     with self.assertRaises(models.Task.DoesNotExist):
         models.Task.objects.get(pk=task_.pk)
Esempio n. 15
0
 def test_valid_request(self, mock_client):
     models.Webhook.objects.create(project=self.project, secret=self.secret)
     task_ = models.Task.objects.create(remote_id=99, name="Old task Name")
     mock_client.access_token().tasks.find_by_id.return_value = task(
         gid="99")
     mock_client.access_token().attachments.find_by_task.return_value = [
         attachment()
     ]
     mock_client.access_token(
     ).attachments.find_by_id.return_value = attachment()
     data = {
         "events": [
             {
                 "action": "changed",
                 "created_at": "2017-08-21T18:20:37.972Z",
                 "parent": None,
                 "resource": {
                     "gid": "99",
                     "resource_type": "task",
                 },
                 "user": {
                     "gid": "1123",
                     "resource_type": "user",
                 },
             },
         ]
     }
     response = self._get_mock_response(mock_client, data)
     self.assertEqual(200, response.status_code)
     self.assertFalse("x-hook-secret" in response)
     task_.refresh_from_db()
     self.assertEqual("Test Task", task_.name)
     try:
         models.Attachment.objects.get(remote_id=1)
     except models.Attachment.DoesNotExist:
         self.fail("Attachment not created")
Esempio n. 16
0
 def test_sync_to_asana_(self, mock_connect):
     mock_client = mock_connect.return_value
     mock_client.tasks.sync_to_asana.return_value = fixtures.task()
     self.task.sync_to_asana()
     self.assertTrue(mock_client.tasks.update.called)