Beispiel #1
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 = []
 def test_sync_events(self):
     workspace_ = Workspace.objects.create(remote_id=1,
                                           name="New Workspace")
     team_ = Team.objects.create(remote_id=2, name="New Team")
     project_ = Project.objects.create(
         remote_id=1,
         name="New Project",
         public=True,
         team=team_,
         workspace=workspace_,
     )
     SyncToken.objects.create(sync="foo", project=project_)
     data = {
         "data": [
             {
                 "action": "changed",
                 "created_at": "2017-08-21T18:20:37.972Z",
                 "parent": None,
                 "resource": {
                     "gid": "1",
                     "name": "Test Project"
                 },
                 "type": "project",
                 "user": "******",
             },
             {
                 "action": "changed",
                 "created_at": "2017-08-21T18:20:37.972Z",
                 "parent": None,
                 "resource": {
                     "gid": "1337",
                     "name": "Test Task"
                 },
                 "type": "task",
                 "user": "******",
             },
             {
                 "action": "added",
                 "created_at": "2017-08-21T18:20:37.972Z",
                 "parent": None,
                 "resource": {
                     "gid": "1",
                     "name": "Test Story"
                 },
                 "type": "story",
                 "user": "******",
             },
         ]
     }
     self.command.client.events.get.return_value = data
     self.command.client.projects.find_by_id.return_value = project()
     self.command.client.tasks.find_by_id.side_effect = task
     self.command.client.stories.find_by_id.return_value = story()
     self.command.handle(interactive=False)
     project_.refresh_from_db()
     self.assertEqual("Test Project", project_.name)
     try:
         Story.objects.get(remote_id=1)
     except Story.DoesNotExist:
         self.fail("Story not created")
 def test_custom_fields(self):
     workspace_ = Workspace.objects.create(remote_id=1, name="Workspace")
     team_ = Team.objects.create(remote_id=2, name="Team")
     Project.objects.create(
         remote_id=3,
         name="New Project",
         public=True,
         team=team_,
         workspace=workspace_,
     )
     self.command.client.custom_fields.find_by_id.return_value = (
         custom_field().copy())
     self.command.client.projects.find_by_id.return_value = project(
         gid="3",
         custom_field_settings=[{
             "gid": "258147",
             "custom_field": custom_field().copy(),
             "project": {
                 "gid": "3",
                 "name": "New Project"
             },
         }],
         workspace={
             "gid": "1",
             "name": "Workspace"
         },
     )
     self.command._sync_project_id(project_id=3, models=[])
     self.assertTrue(
         CustomField.objects.filter(remote_id=1,
                                    name="Test Custom Field").exists())
     self.assertTrue(
         CustomFieldSetting.objects.filter(remote_id=258147,
                                           project_id=3).exists())
Beispiel #4
0
 def test_custom_fields(self):
     workspace_ = Workspace.objects.create(remote_id=1, name='Workspace')
     team_ = Team.objects.create(remote_id=2, name='Team')
     Project.objects.create(remote_id=3,
                            name='New Project',
                            public=True,
                            team=team_,
                            workspace=workspace_)
     self.command.client.custom_fields.find_by_id.return_value = custom_field(
     ).copy()
     self.command.client.projects.find_by_id.return_value = project(
         gid='3',
         custom_field_settings=[{
             'gid': '258147',
             'custom_field': custom_field().copy(),
             'project': {
                 'gid': '3',
                 'name': 'New Project'
             }
         }],
         workspace={
             'gid': '1',
             'name': 'Workspace'
         })
     self.command._sync_project_id(project_id=3, models=[])
     self.assertTrue(
         CustomField.objects.filter(remote_id=1,
                                    name='Test Custom Field').exists())
     self.assertTrue(
         CustomFieldSetting.objects.filter(remote_id=258147,
                                           project_id=3).exists())
 def test_custom_fields(self):
     workspace_ = Workspace.objects.create(remote_id=1, name='Workspace')
     team_ = Team.objects.create(remote_id=2, name='Team')
     Project.objects.create(remote_id=3,
                            name='New Project',
                            public=True,
                            team=team_,
                            workspace=workspace_)
     self.command.client.projects.find_by_id.return_value = project(
         custom_field_settings=[{
             'id': 258147,
             'custom_field': {
                 'id': 1646,
                 'name': 'Priority',
                 'type': 'enum'
             },
             'project': {
                 'id': 3,
                 'name': 'New Project'
             }
         }],
         workspace={
             'id': 1,
             'name': 'Workspace'
         })
     self.command._sync_project_id(project_id=3,
                                   workspace=workspace_,
                                   models=[])
     self.assertTrue(
         CustomField.objects.filter(remote_id=1646,
                                    name='Priority').exists())
     self.assertTrue(
         CustomFieldSettings.objects.filter(remote_id=258147,
                                            project_id=3).exists())
Beispiel #6
0
 def test_new_story(self, mock_client):
     models.Webhook.objects.create(project=self.project, secret=self.secret)
     data = {
         'events': [
             {
                 'action': 'added',
                 'created_at': '2017-08-21T18:20:37.972Z',
                 'parent': {
                     'gid': '1337',
                     'resource_type': 'task',
                 },
                 'resource': {
                     'gid': '12',
                     'resource_type': 'story',
                     'resource_subtype': 'comment_added',
                 },
                 'user': {
                     'gid': '1123',
                     'resource_type': 'user',
                 },
             },
         ]
     }
     mock_client.access_token().projects.find_by_id.return_value = project()
     mock_client.access_token().stories.find_by_id.return_value = story()
     response = self._get_mock_response(mock_client, data)
     self.assertEqual(200, response.status_code)
     try:
         models.Story.objects.get(remote_id=12)
     except models.Story.DoesNotExist:
         self.fail('Story not created')
Beispiel #7
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)
Beispiel #8
0
 def test_new_story(self, mock_client):
     models.Webhook.objects.create(project=self.project, secret=self.secret)
     data = {
         "events": [
             {
                 "action": "added",
                 "created_at": "2017-08-21T18:20:37.972Z",
                 "parent": {
                     "gid": "1337",
                     "resource_type": "task",
                 },
                 "resource": {
                     "gid": "12",
                     "resource_type": "story",
                     "resource_subtype": "comment_added",
                 },
                 "user": {
                     "gid": "1123",
                     "resource_type": "user",
                 },
             },
         ]
     }
     mock_client.access_token().projects.find_by_id.return_value = project()
     mock_client.access_token().stories.find_by_id.return_value = story()
     response = self._get_mock_response(mock_client, data)
     self.assertEqual(200, response.status_code)
     try:
         models.Story.objects.get(remote_id=12)
     except models.Story.DoesNotExist:
         self.fail("Story not created")
Beispiel #9
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)
Beispiel #10
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)
Beispiel #11
0
 def test_sync_events(self):
     workspace_ = Workspace.objects.create(remote_id=1, name='New Workspace')
     team_ = Team.objects.create(remote_id=2, name='New Team')
     project_ = Project.objects.create(
         remote_id=1, name='New Project', public=True, team=team_, workspace=workspace_)
     SyncToken.objects.create(sync='foo', project=project_)
     data = {
         'data': [
             {
                 'action': 'changed',
                 'created_at': '2017-08-21T18:20:37.972Z',
                 'parent': None,
                 'resource': {
                     'id': 1,
                     'name': 'Test Project'
                 },
                 'type': 'project',
                 'user': 1123
             },
             {
                 'action': 'changed',
                 'created_at': '2017-08-21T18:20:37.972Z',
                 'parent': None,
                 'resource': {
                     'id': 1337,
                     'name': 'Test Task'
                 },
                 'type': 'task',
                 'user': 1123
             },
             {
                 'action': 'added',
                 'created_at': '2017-08-21T18:20:37.972Z',
                 'parent': None,
                 'resource': {
                     'id': 1,
                     'name': 'Test Story'
                 },
                 'type': 'story',
                 'user': 1123
             }
         ]
     }
     self.command.client.events.get.return_value = data
     self.command.client.projects.find_by_id.return_value = project()
     self.command.client.tasks.find_by_id.side_effect = task
     self.command.client.stories.find_by_id.return_value = story()
     self.command.handle(interactive=False)
     project_.refresh_from_db()
     self.assertEqual('Test Project', project_.name)
     try:
         Story.objects.get(remote_id=1)
     except Story.DoesNotExist:
         self.fail('Story not created')
Beispiel #12
0
 def test_task_not_in_asana_is_deleted(self):
     workspace_ = Workspace.objects.create(remote_id=1, name='Workspace')
     team_ = Team.objects.create(remote_id=2, name='Team')
     project_ = Project.objects.create(
         remote_id=3, name='Another Project', public=True, team=team_, workspace=workspace_)
     task_ = Task.objects.create(remote_id=4, name='Orphan Task', completed=False)
     task_.projects.add(project_)
     project_dict = project(id=3)
     self.command.client.projects.find_all.return_value = [project_dict]
     self.command.client.projects.find_by_id.return_value = project_dict
     self.command.client.tasks.find_all.return_value = []
     self.command.handle(interactive=False, project=['Test Project'])
     self.assertFalse(Task.objects.filter(pk=task_.pk).exists())
Beispiel #13
0
 def test_redundant_webhooks_are_deleted(self):
     workspace_ = Workspace.objects.create(remote_id=1, name='Workspace')
     team_ = Team.objects.create(remote_id=2, name='Team')
     project_ = Project.objects.create(
         remote_id=3, name='Test Project', public=True, team=team_, workspace=workspace_)
     secret = 'x' * 32
     Webhook.objects.create(secret=secret, project=project_)
     Webhook.objects.create(secret=secret, project=project_)
     project_dict = project(id=3)
     self.command.client.projects.find_all.return_value = [project_dict]
     self.command.client.projects.find_by_id.return_value = project_dict
     webhook_ = webhook(project=project_dict)
     self.command.client.webhooks.get_all.return_value = [webhook_, webhook_]
     self.command.handle(interactive=False, project=['Test Project'])
     self.assertEqual(2, self.command.client.webhooks.delete_by_id.call_count)
     self.assertEqual(1, Webhook.objects.filter(project=project_).count())
Beispiel #14
0
 def test_skip_archived_project(self):
     self.command.client.projects.find_by_id.return_value = project(archived='true')
     self.command.handle(interactive=False)
     self.assertEqual(1, Project.objects.count())
     self.assertEqual(0, Task.objects.count())