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_email_notification_is_not_sent_if_assignee_changes(self): issue = factories.IssueFactory() issue.assignee = factories.SupportUserFactory() issue.save() self.assertEqual(len(mail.outbox), 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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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_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)
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 _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()
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 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'])
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
def setUp(self): super(SupportUserRetrieveTest, self).setUp() self.support_user = factories.SupportUserFactory()