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)
    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)
    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)
    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)
 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