def test_reopen_a_closed_bug(self): bug = BugFactory(status=False) edit_bug_data = {"bug": bug.pk, "text": "Reopen the bug.", "action": "reopen"} redirect_url = reverse("bugs-get", args=[bug.pk]) response = self.client.post(self.comment_bug_url, edit_bug_data, follow=True) self.assertContains(response, markdown2html(_("*bug reopened*"))) self.assertContains(response, "Reopen the bug.") self.assertRedirects(response, redirect_url) bug.refresh_from_db() self.assertTrue(bug.status)
def setUpTestData(cls): super().setUpTestData() user_should_have_perm(cls.tester, "django_comments.add_comment") user_should_have_perm(cls.tester, "bugs.view_bug") cls.bug = BugFactory() cls.url = reverse("bugs-comment")
def test_notify_assignee_on_bug_creation(self, send_mail): # pylint: disable=no-self-use assignee = UserFactory() bug = BugFactory(assignee=assignee) expected_subject = _("Bug #%(pk)d - %(summary)s") % { "pk": bug.pk, "summary": bug.summary, } expected_body = render_to_string( "email/post_bug_save/email.txt", { "bug": bug, "comment": get_comments(bug).last() }, ) expected_recipients = [assignee.email, bug.reporter.email] expected_recipients.sort() send_mail.assert_called_once_with( settings.EMAIL_SUBJECT_PREFIX + expected_subject, expected_body, settings.DEFAULT_FROM_EMAIL, expected_recipients, fail_silently=False, )
def test_reopen_a_closed_bug(self): bug = BugFactory(status=False) edit_bug_data = { 'bug': bug.pk, 'text': 'Reopen the bug.', 'action': 'reopen' } redirect_url = reverse('bugs-get', args=[bug.pk]) response = self.client.post(self.comment_bug_url, edit_bug_data, follow=True) self.assertContains(response, markdown2html(_('*bug reopened*'))) self.assertContains(response, 'Reopen the bug.') self.assertRedirects(response, redirect_url) bug.refresh_from_db() self.assertTrue(bug.status)
def setUpTestData(cls): cls.bug = BugFactory() cls.url = reverse("bugs-comment") cls.post_data = { "bug": cls.bug.pk, "text": "A comment text", } super().setUpTestData() tests.user_should_have_perm(cls.tester, "bugs.view_bug")
def setUpTestData(cls): cls.bug = BugFactory() cls.url = reverse('bugs-comment') cls.post_data = { 'bug': cls.bug.pk, 'text': 'A comment text', } super().setUpTestData() tests.user_should_have_perm(cls.tester, 'bugs.view_bug')
def _fixture_setup(self): super()._fixture_setup() self.existing_bug = BugFactory() self.execution_1 = TestExecutionFactory() self.execution_1.case.text = "Given-When-Then" self.execution_1.case.save() # will generate history object self.component = ComponentFactory( name='KiwiTCMS integration', product=self.execution_1.run.plan.product) self.execution_1.case.add_component(self.component) bug_system = BugSystem.objects.create( # nosec:B106:hardcoded_password_funcarg name='KiwiTCMS internal bug tracker', tracker_type='tcms.issuetracker.types.KiwiTCMS', base_url="https://%s" % Site.objects.get(id=settings.SITE_ID).domain, # note: ^^^ this is https just because .get_full_url() default to that ! ) self.integration = KiwiTCMS(bug_system, None)
def test_email_sent_when_bug_reopened(self, send_mail): bug = BugFactory(assignee=self.assignee, reporter=self.tester) bug.status = False bug.save() self.client.post(self.url, { "bug": bug.pk, "text": "", "action": "reopen" }, follow=True) expected_body = render_to_string( "email/post_bug_save/email.txt", { "bug": bug, "comment": get_comments(bug).last() }, ) expected_recipients = [self.assignee.email, self.tester.email] expected_recipients.sort() expected_subject = _("Bug #%(pk)d - %(summary)s") % { "pk": bug.pk, "summary": bug.summary, } self.assertTrue(send_mail.called) self.assertEqual( settings.EMAIL_SUBJECT_PREFIX + expected_subject, send_mail.call_args.args[0], ) self.assertEqual(expected_body, send_mail.call_args.args[1]) self.assertEqual(settings.DEFAULT_FROM_EMAIL, send_mail.call_args.args[2]) self.assertTrue( len(send_mail.call_args.args[3]) == len(expected_recipients)) self.assertIn(expected_recipients[0], send_mail.call_args.args[3]) self.assertIn(expected_recipients[1], send_mail.call_args.args[3])
def setUpTestData(cls): cls.bug = BugFactory() cls.url = reverse("bugs-edit", args=(cls.bug.pk,)) cls.post_data = { "summary": "An edited summary", "reporter": cls.bug.reporter.pk, "assignee": cls.bug.assignee.pk, "product": cls.bug.product.pk, "version": cls.bug.version.pk, "build": cls.bug.build.pk, } super().setUpTestData() tests.user_should_have_perm(cls.tester, "bugs.view_bug")
def setUpTestData(cls): cls.bug = BugFactory() cls.url = reverse('bugs-edit', args=(cls.bug.pk, )) cls.post_data = { 'summary': 'An edited summary', 'reporter': cls.bug.reporter.pk, 'assignee': cls.bug.assignee.pk, 'product': cls.bug.product.pk, 'version': cls.bug.version.pk, 'build': cls.bug.build.pk, } super().setUpTestData() tests.user_should_have_perm(cls.tester, 'bugs.view_bug')
def test_notify_assignee_on_bug_creation(self, send_mail): assignee = UserFactory() bug = BugFactory(assignee=assignee) expected_subject = _('NEW: Bug #%(pk)d - %(summary)s') % { 'pk': bug.pk, 'summary': bug.summary } expected_body = render_to_string('email/post_bug_save/email.txt', {'bug': bug}) expected_recipients = [assignee.email] send_mail.assert_called_once_with(settings.EMAIL_SUBJECT_PREFIX + expected_subject, expected_body, settings.DEFAULT_FROM_EMAIL, expected_recipients, fail_silently=False) self.assertTrue(send_mail.called)
def test_email_sent_to_all_commenters(self, send_mail): bug = BugFactory(assignee=self.assignee, reporter=self.tester) commenter = UserFactory() tracker = UserFactory() add_comment([bug], _("*bug created*"), tracker) add_comment([bug], _("*bug created*"), commenter) expected_body = render_to_string( "email/post_bug_save/email.txt", { "bug": bug, "comment": get_comments(bug).last() }, ) expected_recipients = [ self.assignee.email, self.tester.email, commenter.email, tracker.email, ] expected_recipients.sort() expected_subject = _("Bug #%(pk)d - %(summary)s") % { "pk": bug.pk, "summary": bug.summary, } self.assertTrue(send_mail.called) self.assertEqual( settings.EMAIL_SUBJECT_PREFIX + expected_subject, send_mail.call_args.args[0], ) self.assertEqual(expected_body, send_mail.call_args.args[1]) self.assertEqual(settings.DEFAULT_FROM_EMAIL, send_mail.call_args.args[2]) self.assertTrue( len(send_mail.call_args.args[3]) == len(expected_recipients)) self.assertIn(expected_recipients[0], send_mail.call_args.args[3]) self.assertIn(expected_recipients[1], send_mail.call_args.args[3])
def _fixture_setup(self): super()._fixture_setup() self.bug = BugFactory() self.another_bug = BugFactory() self.yet_another_bug = BugFactory()
class TestKiwiTCMSIntegration(APITestCase): def _fixture_setup(self): super()._fixture_setup() self.existing_bug = BugFactory() self.execution_1 = TestExecutionFactory() self.execution_1.case.text = "Given-When-Then" self.execution_1.case.save() # will generate history object self.component = ComponentFactory( name='KiwiTCMS integration', product=self.execution_1.run.plan.product) self.execution_1.case.add_component(self.component) bug_system = BugSystem.objects.create( # nosec:B106:hardcoded_password_funcarg name='KiwiTCMS internal bug tracker', tracker_type='tcms.issuetracker.types.KiwiTCMS', base_url="https://%s" % Site.objects.get(id=settings.SITE_ID).domain, # note: ^^^ this is https just because .get_full_url() default to that ! ) self.integration = KiwiTCMS(bug_system, None) def test_bug_id_from_url(self): result = self.integration.bug_id_from_url( self.existing_bug.get_full_url()) self.assertEqual(self.existing_bug.pk, result) def test_details_for_url(self): result = self.integration.details(self.existing_bug.get_full_url()) self.assertEqual(self.existing_bug.summary, result['title']) expected_description = render_to_string('include/bug_details.html', {'object': self.existing_bug}) self.assertEqual(expected_description, result['description']) def test_auto_update_bugtracker(self): # make sure bug is not associated with execution self.assertFalse( self.existing_bug.executions.filter( pk=self.execution_1.pk).exists()) # simulate user adding a new bug URL to a TE and clicking # 'Automatically update bug tracker' result = self.rpc_client.TestExecution.add_link( { 'execution_id': self.execution_1.pk, 'is_defect': True, 'url': self.existing_bug.get_full_url(), }, True) # making sure RPC above returned the same URL self.assertEqual(self.existing_bug.get_full_url(), result['url']) # bug is now associated with execution self.assertTrue( self.existing_bug.executions.filter( pk=self.execution_1.pk).exists()) def test_report_issue_from_test_execution_1click_works(self): # simulate user clicking the 'Report bug' button in TE widget, TR page result = self.rpc_client.Bug.report(self.execution_1.pk, self.integration.bug_system.pk) self.assertEqual(result['rc'], 0) self.assertIn(self.integration.bug_system.base_url, result['response']) self.assertIn('/bugs/', result['response']) new_bug_id = self.integration.bug_id_from_url(result['response']) bug = Bug.objects.get(pk=new_bug_id) self.assertEqual("Failed test: %s" % self.execution_1.case.summary, bug.summary) first_comment = get_comments(bug).first() for expected_string in [ "Filed from execution %s" % self.execution_1.get_full_url(), self.execution_1.run.plan.product.name, self.component.name, "Steps to reproduce", self.execution_1.case.text ]: self.assertIn(expected_string, first_comment.comment) # verify that LR has been added to TE self.assertTrue( LinkReference.objects.filter( execution=self.execution_1, url=result['response'], is_defect=True, ).exists())
def test_notification_even_there_is_no_assignee(self, send_mail): BugFactory(assignee=None) self.assertTrue(send_mail.called)
class TestEditBug(LoggedInTestCase): @classmethod def setUpTestData(cls): super().setUpTestData() user_should_have_perm(cls.tester, "bugs.change_bug") user_should_have_perm(cls.tester, "bugs.view_bug") def setUp(self): super().setUp() self.bug = BugFactory() self.created_at = self.bug.created_at self.url = reverse("bugs-edit", args=(self.bug.pk, )) def test_edit_bug(self): summary_edit = "An edited summary" version_edit = VersionFactory() build_edit = BuildFactory() edit_data = { "summary": summary_edit, "version": version_edit.pk, "build": build_edit.pk, "reporter": self.bug.reporter.pk, "assignee": self.bug.assignee.pk, "product": self.bug.product.pk, } response = self.client.post(self.url, edit_data, follow=True) self.assertRedirects( response, reverse("bugs-get", args=(self.bug.pk, )), status_code=302, target_status_code=200, ) self.bug.refresh_from_db() self.assertEqual(self.bug.summary, summary_edit) self.assertEqual(self.bug.version, version_edit) self.assertEqual(self.bug.build, build_edit) self.assertEqual(self.bug.created_at, self.created_at) def test_record_changes(self): old_summary = self.bug.summary new_summary = "An edited summary" old_comment_count = get_comments(self.bug).count() edit_data = { "summary": new_summary, "version": self.bug.version.pk, "build": self.bug.build.pk, "reporter": self.bug.reporter.pk, "assignee": self.bug.assignee.pk, "product": self.bug.product.pk, } self.client.post(self.url, edit_data, follow=True) self.bug.refresh_from_db() comments = get_comments(self.bug) self.assertEqual(comments.count(), old_comment_count + 1) self.assertEqual(comments.last().comment, "Summary: %s -> %s\n" % (old_summary, new_summary))
def setUp(self): super().setUp() self.bug = BugFactory() self.created_at = self.bug.created_at self.url = reverse("bugs-edit", args=(self.bug.pk, ))
def _fixture_setup(self): super()._fixture_setup() self.bug = BugFactory(status=False) self.another_bug = BugFactory(status=True) self.yet_another_bug = BugFactory(status=True)
class TestKiwiTCMSIntegration(APITestCase): def _fixture_setup(self): super()._fixture_setup() self.existing_bug = BugFactory() self.execution_1 = TestExecutionFactory() self.execution_1.case.text = "Given-When-Then" self.execution_1.case.save() # will generate history object self.component = ComponentFactory( name="KiwiTCMS integration", product=self.execution_1.run.plan.product ) self.execution_1.case.add_component(self.component) site = Site.objects.get(id=settings.SITE_ID) self.base_url = f"https://{site.domain}" # note: ^^^ this is https just because .get_full_url() default to that ! bug_system = BugSystem.objects.create( # nosec:B106:hardcoded_password_funcarg name="KiwiTCMS internal bug tracker", tracker_type="tcms.issuetracker.types.KiwiTCMS", base_url=self.base_url, ) self.integration = KiwiTCMS(bug_system, None) def test_bug_id_from_url(self): result = self.integration.bug_id_from_url(self.existing_bug.get_full_url()) self.assertEqual(self.existing_bug.pk, result) def test_details_for_url(self): result = self.integration.details(self.existing_bug.get_full_url()) self.assertEqual(self.existing_bug.summary, result["title"]) expected_description = render_to_string( "include/bug_details.html", {"object": self.existing_bug} ) self.assertEqual(expected_description, result["description"]) def test_auto_update_bugtracker(self): # make sure bug is not associated with execution self.assertFalse( self.existing_bug.executions.filter(pk=self.execution_1.pk).exists() ) # simulate user adding a new bug URL to a TE and clicking # 'Automatically update bug tracker' result = self.rpc_client.TestExecution.add_link( { "execution_id": self.execution_1.pk, "is_defect": True, "url": self.existing_bug.get_full_url(), }, True, ) # making sure RPC above returned the same URL self.assertEqual(self.existing_bug.get_full_url(), result["url"]) # bug is now associated with execution self.assertTrue( self.existing_bug.executions.filter(pk=self.execution_1.pk).exists() ) def test_report_issue_from_test_execution_1click_works(self): # simulate user clicking the 'Report bug' button in TE widget, TR page result = self.rpc_client.Bug.report( self.execution_1.pk, self.integration.bug_system.pk ) self.assertEqual(result["rc"], 0) self.assertIn(self.integration.bug_system.base_url, result["response"]) self.assertIn("/bugs/", result["response"]) new_bug_id = self.integration.bug_id_from_url(result["response"]) bug = Bug.objects.get(pk=new_bug_id) self.assertEqual(f"Failed test: {self.execution_1.case.summary}", bug.summary) first_comment = get_comments(bug).first() for expected_string in [ f"Filed from execution {self.execution_1.get_full_url()}", self.execution_1.run.plan.product.name, self.component.name, "Steps to reproduce", self.execution_1.case.text, ]: self.assertIn(expected_string, first_comment.comment) # verify that LR has been added to TE self.assertTrue( LinkReference.objects.filter( execution=self.execution_1, url=result["response"], is_defect=True, ).exists() ) def test_empty_details_when_bug_dont_exist(self): non_existing_bug_id = -1 self.assertFalse(Bug.objects.filter(pk=non_existing_bug_id).exists()) result = self.integration.details(f"{self.base_url}/{non_existing_bug_id}") self.assertEqual(result, {})
def _fixture_setup(self): super()._fixture_setup() self.bug = BugFactory() self.tag = TagFactory() self.bug.tags.add(self.tag)
def test_no_notification_if_assignee_not_set(self, send_mail): BugFactory(assignee=None) self.assertFalse(send_mail.called)
def setUpTestData(cls): super().setUpTestData() initiate_user_with_default_setups(cls.tester) cls.test_bug = BugFactory()