Exemplo n.º 1
0
    def test_web_hook_does_not_trigger_issue_update_email_if_the_issue_was_not_updated(
            self):
        fields = self.request_data['issue']['fields']
        reporter = factories.SupportUserFactory(
            backend_id=fields['reporter']['key'])
        assignee = factories.SupportUserFactory(
            backend_id=fields['assignee']['key'])
        first_response_sla = fields['customfield_10006']['ongoingCycle'][
            'breachTime']['epochMillis'] / 1000.0

        factories.IssueFactory(
            resolution=fields['resolution']['name'],
            backend_id=self.request_data['issue']['key'],
            status=fields['status']['name'],
            link=self.request_data['issue']['self'],
            summary=fields['summary'],
            priority=fields['priority']['name'],
            description=fields['description'],
            type=fields['issuetype']['name'],
            assignee=assignee,
            reporter=reporter,
            caller=reporter.user,
            first_response_sla=datetime.fromtimestamp(first_response_sla),
        )

        response = self.client.post(self.url, self.request_data)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(mail.outbox), 1)
        new_comment_added_subject = render_to_string(
            'support/notification_comment_added_subject.txt').strip()
        self.assertEqual(mail.outbox[0].subject, new_comment_added_subject)
Exemplo n.º 2
0
    def test_email_notification_is_not_sent_if_assignee_changes(self):
        issue = factories.IssueFactory()

        issue.assignee = factories.SupportUserFactory()
        issue.save()

        self.assertEqual(len(mail.outbox), 0)
Exemplo n.º 3
0
 def test_update_issue_reporter(self):
     reporter = factories.SupportUserFactory(
         backend_id='support_user_backend_id')
     backend_reporter_user = MockSupportUser(key=reporter.backend_id)
     self.backend_issue.fields.reporter = backend_reporter_user
     self.update_issue_from_jira()
     self.assertEqual(self.issue.reporter.id, reporter.id)
Exemplo n.º 4
0
 def test_update_issue_assignee(self):
     assignee = factories.SupportUserFactory(
         backend_id='support_user_backend_id')
     backend_assignee_user = MockSupportUser(key=assignee.backend_id)
     self.backend_issue.fields.assignee = backend_assignee_user
     self.update_issue_from_jira()
     self.assertEqual(self.issue.assignee.id, assignee.id)
Exemplo n.º 5
0
    def test_staff_or_support_can_create_issue_if_he_has_support_user(
            self, user):
        factories.SupportUserFactory(user=getattr(self.fixture, user))
        self.client.force_authenticate(getattr(self.fixture, user))

        response = self.client.post(self.url, data=self._get_valid_payload())

        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Exemplo n.º 6
0
    def test_if_user_is_not_available_he_is_marked_as_disabled(
            self, mocked_backend):
        # Arrange
        mocked_backend().get_users.return_value = [
            models.SupportUser(backend_id='alice'),
        ]
        alice = factories.SupportUserFactory(backend_id='alice')
        bob = factories.SupportUserFactory(backend_id='bob')

        # Act
        tasks.pull_support_users()

        # Assert
        alice.refresh_from_db()
        bob.refresh_from_db()
        self.assertTrue(alice.is_active)
        self.assertFalse(bob.is_active)
Exemplo n.º 7
0
    def test_user_cannot_create_issue_if_his_support_user_is_disabled(self):
        settings.WALDUR_SUPPORT[
            'MAP_WALDUR_USERS_TO_SERVICEDESK_AGENTS'] = True
        factories.SupportUserFactory(user=self.fixture.staff, is_active=False)
        self.client.force_authenticate(self.fixture.staff)

        response = self.client.post(self.url, data=self._get_valid_payload())

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
Exemplo n.º 8
0
    def test_other_user_can_not_specify_priority(self, user):
        factories.SupportUserFactory(user=getattr(self.fixture, user))
        self.client.force_authenticate(getattr(self.fixture, user))

        priority = factories.PriorityFactory()
        response = self.client.post(
            self.url, data=self._get_valid_payload(priority=priority.name))

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
Exemplo n.º 9
0
    def test_email_notification_is_sent_if_assignee_was_changed_with_status(
            self):
        issue = factories.IssueFactory()

        issue.assignee = factories.SupportUserFactory()
        issue.status = 'new_status'
        issue.save()

        self.assertEqual(len(mail.outbox), 1)
Exemplo n.º 10
0
    def test_staff_or_support_can_specify_priority(self, user):
        factories.SupportUserFactory(user=getattr(self.fixture, user))
        self.client.force_authenticate(getattr(self.fixture, user))

        priority = factories.PriorityFactory()
        response = self.client.post(
            self.url, data=self._get_valid_payload(priority=priority.name))

        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response.data['priority'], priority.name)
Exemplo n.º 11
0
 def test_dont_send_notification_for_expert_if_expert_added_comment(self, send_mock):
     expert_support_user = support_factories.SupportUserFactory(user=self.fixture.admin)
     self.comment = support_factories.CommentFactory(issue=self.fixture.issue,
                                                     author=expert_support_user)
     self.fixture.contract
     self.fixture.expert_request
     self.fixture.admin
     serialized_comment = core_utils.serialize_instance(self.comment)
     tasks.send_expert_comment_added_notification(serialized_comment)
     self.assertEqual(send_mock.call_count, 0)
Exemplo n.º 12
0
    def test_project_issue_populates_customer_field_on_creation(self):
        factories.SupportUserFactory(user=self.fixture.staff)
        self.client.force_authenticate(self.fixture.staff)
        payload = self._get_valid_payload(
            project=structure_factories.ProjectFactory.get_url(
                self.fixture.project))

        response = self.client.post(self.url, data=payload)

        issue = models.Issue.objects.get(
            uuid=json.loads(response.content)['uuid'])
        self.assertEqual(issue.customer, self.fixture.project.customer)
Exemplo n.º 13
0
    def test_issue_update_callback_does_not_create_issue(self):
        # arrange
        backend_id = 'SNT-102'
        reporter = factories.SupportUserFactory(backend_id=backend_id)
        self.assertEqual(models.Issue.objects.count(), 0)

        self.request_data['webhookEvent'] = self.CREATED
        self.request_data['issue']['key'] = backend_id
        self.request_data['issue']['fields']['reporter'][
            'key'] = reporter.backend_id

        # act
        response = self.client.post(self.url, self.request_data)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(models.Issue.objects.count(), 0)
Exemplo n.º 14
0
 def test_create_issue_if_exist_several_backend_users_with_same_email(self):
     self._mock_jira()
     factories.SupportUserFactory(user=self.fixture.staff)
     self.client.force_authenticate(self.fixture.staff)
     mock_backend_users = [
         User({'server': ''}, None, raw={
             'key': 'user_1',
             'active': False
         }),
         User({'server': ''}, None, raw={
             'key': 'user_2',
             'active': True
         }),
     ]
     self.mock_jira().search_users.return_value = mock_backend_users
     response = self.client.post(self.url, data=self._get_valid_payload())
     self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Exemplo n.º 15
0
    def test_issue_update_callback_creates_a_comment(self):
        # arrange
        backend_id, issue, _ = self.set_issue_and_support_user()
        factories.SupportUserFactory(backend_id=backend_id)
        self.assertEqual(issue.comments.count(), 0)

        self.request_data['issue']['key'] = backend_id
        self.request_data['issue']['fields']['reporter'][
            'key'] = issue.reporter.backend_id
        expected_comments_count = self.request_data['issue']['fields'][
            'comment']['total']

        # act
        response = self.client.post(self.url, self.request_data)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        issue.refresh_from_db()
        self.assertEqual(issue.comments.count(), expected_comments_count)
Exemplo n.º 16
0
 def _create_confirmation_comment(self, expected_body):
     user = self.fixture.staff
     factories.SupportUserFactory(user=user)
     mock.patch.stopall()
     with mock.patch(
             'waldur_mastermind.support.backend.atlassian.ServiceDeskBackend.create_issue'
     ):
         with mock.patch(
                 'waldur_mastermind.support.backend.atlassian.ServiceDeskBackend._add_comment'
         ) as _add_comment:
             self.client.force_authenticate(user)
             self.client.post(self.url, data=self._get_valid_payload())
             if expected_body:
                 _add_comment.assert_called_once_with(None,
                                                      expected_body,
                                                      is_internal=False)
             else:
                 _add_comment.assert_not_called()
Exemplo n.º 17
0
    def test_issue_update_callback_updates_issue_reporter(self):
        # arrange
        backend_id, issue, _ = self.set_issue_and_support_user()
        reporter = factories.SupportUserFactory(backend_id='Tiffany')

        self.request_data['issue']['key'] = backend_id
        self.request_data['issue']['fields']['reporter'][
            'key'] = issue.reporter.backend_id
        self.request_data['issue']['fields']['reporter'] = {
            "key": reporter.backend_id
        }

        # act
        response = self.client.post(self.url, self.request_data)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        issue.refresh_from_db()
        self.assertEqual(issue.reporter.id, reporter.id)
Exemplo n.º 18
0
    def test_fill_custom_fields(self):
        self._mock_jira()

        user = self.fixture.staff
        factories.SupportUserFactory(user=user)
        self.client.force_authenticate(user)
        response = self.client.post(
            self.url,
            data=self._get_valid_payload(
                project=structure_factories.ProjectFactory.get_url(
                    self.fixture.project),
                resource=structure_factories.TestNewInstanceFactory.get_url(),
                template=factories.TemplateFactory.get_url(),
            ),
        )
        issue = response.data
        kwargs = self.mock_jira(
        ).create_customer_request.return_value.update.call_args[1]
        self.assertEqual(issue['customer_name'], kwargs['field105'])
        self.assertEqual(issue['project_name'], kwargs['field106'])
        self.assertEqual(issue['resource_name'], kwargs['field107'].name)
        self.assertEqual(issue['template'].name, kwargs['field108'])
Exemplo n.º 19
0
 def set_issue_and_support_user(self):
     backend_id = 'SNT-101'
     issue = factories.IssueFactory(backend_id=backend_id)
     support_user = factories.SupportUserFactory(backend_id='support')
     return backend_id, issue, support_user
Exemplo n.º 20
0
 def setUp(self):
     super(SupportUserRetrieveTest, self).setUp()
     self.support_user = factories.SupportUserFactory()