def test_automated_radio_poll_no_auto_bug(self): """Test the creation of an automated radio poll with a non budget/swag bug. """ BugFactory.create() eq_(Poll.objects.filter(automated_poll=True).count(), 0)
def test_council_reviewer_assigned(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) user = UserFactory.create(groups=['Rep', 'Council']) BugFactory.create(assigned_to=user, council_member_assigned=True) items = ActionItem.objects.filter(content_type=model) eq_(items.count(), 1) eq_(items[0].name, 'Review budget request bug') eq_(items[0].user, user) eq_(items[0].priority, ActionItem.BLOCKER)
def test_waiting_receipts(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) whiteboard = '[waiting receipts]' user = UserFactory.create(groups=['Rep']) BugFactory.create(whiteboard=whiteboard, assigned_to=user) items = ActionItem.objects.filter(content_type=model) eq_(items.count(), 1) eq_(items[0].name, 'Add receipts to bug') eq_(items[0].user, user) eq_(items[0].priority, ActionItem.NORMAL)
def test_list(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) whiteboard = '[waiting receipts]' user = UserFactory.create(groups=['Rep']) BugFactory.create(whiteboard=whiteboard, assigned_to=user) items = ActionItem.objects.filter(content_type=model) response = self.get(user=user, url=reverse('list_action_items')) self.assertTemplateUsed(response, 'list_action_items.html') eq_(response.context['pageheader'], 'My Action Items') eq_(response.status_code, 200) eq_(set(response.context['actions'].object_list), set([items[0]]))
def test_extend_voting_period_majority(self): bug = BugFactory.create() start = now().replace(microsecond=0) end = datetime.combine(get_date(days=1), datetime.min.time()) user = UserFactory.create(groups=['Admin']) group = Group.objects.get(name='Council') User.objects.filter(groups__name='Council').delete() UserFactory.create_batch(9, groups=['Council']) automated_poll = PollFactoryNoSignals.create(name='poll', start=start, end=end, valid_groups=group, created_by=user, automated_poll=True, bug=bug) radio_poll = RadioPollFactory.create(poll=automated_poll, question='Budget Approval') RadioPollChoiceFactory.create(answer='Approved', votes=5, radio_poll=radio_poll) RadioPollChoiceFactory.create(answer='Denied', votes=3, radio_poll=radio_poll) extend_voting_period() poll = Poll.objects.get(pk=automated_poll.id) eq_(poll.end.year, end.year) eq_(poll.end.month, end.month) eq_(poll.end.day, end.day) eq_(poll.end.hour, 0) eq_(poll.end.minute, 0) eq_(poll.end.second, 0) ok_(not poll.is_extended)
def test_view_post_a_comment(self, fake_messages): """Post a comment on an automated poll.""" poll_start = now() - timedelta(days=5) poll_user = UserFactory.create(groups=['Council']) poll_group = Group.objects.get(name='Council') bug = BugFactory.create() swag_poll = PollFactory.create(name='swag poll', start=poll_start, end=poll_start + timedelta(days=15), created_by=poll_user, valid_groups=poll_group, bug=bug, automated_poll=True, description='Swag poll description.', slug='swag-poll') vote_url = reverse('voting_view_voting', kwargs={'slug': 'swag-poll'}) factory = RequestFactory() request = factory.post(vote_url, {'comment': 'This is a comment'}, follow=True) request.user = poll_user view_voting(request, slug=swag_poll.slug) poll_comment = PollComment.objects.get(poll=swag_poll) eq_(poll_comment.user, poll_user) eq_(poll_comment.comment, 'This is a comment') fake_messages.success.assert_called_once_with( mock.ANY, 'Comment saved successfully.')
def test_view_delete_automated_poll(self): with mute_signals(post_save): poll_start = now() - timedelta(days=5) poll_user = UserFactory.create(groups=['Review']) poll_group = Group.objects.get(name='Review') bug = BugFactory.create() swag_poll = PollFactory.create(name='swag poll', start=poll_start, end=poll_start + timedelta(days=15), created_by=poll_user, valid_groups=poll_group, bug=bug, automated_poll=True, description='Swag poll description.', slug='swag-poll') with mock.patch('remo.voting.views.messages.success') as faked_message: with self.login(self.admin) as client: response = client.post(reverse('voting_delete_voting', kwargs={'slug': swag_poll.slug}), follow=True) self.assertJinja2TemplateUsed(response, 'list_votings.jinja') ok_(faked_message.called) eq_(faked_message.call_args_list[0][0][1], 'Voting successfully deleted.') ok_(not Poll.objects.filter(id=swag_poll.id).exists()) ok_(not Bug.objects.filter(id=bug.id).exists())
def test_resolve_mentor_validation(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) mentor = UserFactory.create(groups=['Rep', 'Mentor']) UserFactory.create(groups=['Rep'], userprofile__mentor=mentor) bug = BugFactory.build(pending_mentor_validation=True, assigned_to=mentor) bug.save() items = ActionItem.objects.filter(content_type=model) eq_(items.count(), 1) eq_(items[0].name, 'Waiting mentor validation for ' + bug.summary) eq_(items[0].user, mentor) eq_(items[0].priority, ActionItem.BLOCKER) bug.pending_mentor_validation = False bug.save() items = ActionItem.objects.filter(content_type=model, object_id=bug.id) for item in items: ok_(item.completed) ok_(item.resolved)
def test_budget_vote_action_item(self): model = ContentType.objects.get_for_model(Poll) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) council = Group.objects.get(name='Council') user = UserFactory.create(groups=['Council']) bug = BugFactory.create() start = now() - timedelta(hours=3) poll = PollFactory.create(valid_groups=council, automated_poll=True, bug=bug, start=start) items = ActionItem.objects.filter(content_type=model, object_id=poll.id) eq_(items.count(), 1) for item in items: eq_(item.name, 'Cast your vote for budget request ' + poll.bug.summary) eq_(item.user, user) ok_(item.priority, ActionItem.NORMAL) ok_(not item.completed)
def test_view_post_a_comment(self, fake_messages): """Post a comment on poll.""" poll_start = now() - timedelta(days=5) poll_user = UserFactory.create(groups=["Council"]) poll_group = Group.objects.get(name="Council") bug = BugFactory.create() swag_poll = PollFactory.create( name="swag poll", start=poll_start, end=poll_start + timedelta(days=15), created_by=poll_user, valid_groups=poll_group, bug=bug, automated_poll=True, description="Swag poll description.", slug="swag-poll", ) vote_url = reverse("voting_view_voting", kwargs={"slug": "swag-poll"}) factory = RequestFactory() request = factory.post(vote_url, {"comment": "This is a comment"}, follow=True) request.user = poll_user response = view_voting(request, slug=swag_poll.slug) self.assertTemplateUsed(response, "list_votings.html") poll_comment = PollComment.objects.get(poll=swag_poll) eq_(poll_comment.user, poll_user) eq_(poll_comment.comment, "This is a comment") fake_messages.success.assert_called_once_with(mock.ANY, "Your vote has been successfully registered.")
def test_budget_vote_action_item(self): model = ContentType.objects.get_for_model(Poll) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) council = Group.objects.get(name='Council') user = UserFactory.create(groups=['Council']) bug = BugFactory.create() start = now() - timedelta(hours=3) poll = PollFactory.create(valid_groups=council, automated_poll=True, bug=bug, start=start) create_poll_action_items() items = ActionItem.objects.filter(content_type=model, object_id=poll.id) eq_(items.count(), 1) for item in items: eq_(item.name, 'Cast your vote for budget request ' + poll.bug.summary) eq_(item.user, user) ok_(item.priority, ActionItem.NORMAL) ok_(not item.completed)
def test_mentor_validation(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) mentor = UserFactory.create(groups=['Rep', 'Mentor']) UserFactory.create(groups=['Rep'], userprofile__mentor=mentor) BugFactory.create(pending_mentor_validation=True, assigned_to=mentor) items = ActionItem.objects.filter(content_type=model) eq_(items.count(), 1) eq_(items[0].name, 'Waiting mentor validation') eq_(items[0].user, mentor) eq_(items[0].priority, ActionItem.BLOCKER)
def test_automated_radio_poll_valid_bug(self): """Test the creation of an automated radio poll.""" bug = BugFactory.create(flag_name='remo-review', flag_status='?', component='Budget Requests') poll = Poll.objects.get(bug=bug) eq_(poll.bug.bug_id, bug.bug_id) eq_(poll.description, bug.first_comment) eq_(poll.name, bug.summary)
def test_automated_radio_poll_valid_bug(self): """Test the creation of an automated radio poll.""" UserFactory.create(username='******') bug = BugFactory.create(council_vote_requested=True, component='Budget Requests') poll = Poll.objects.get(bug=bug) eq_(poll.bug.bug_id, bug.bug_id) eq_(poll.description, bug.first_comment) eq_(poll.name, bug.summary)
def test_automated_radio_poll_valid_bug(self): """Test the creation of an automated radio poll.""" bug = BugFactory.create(council_vote_requested=True, component='Budget Requests') poll = Poll.objects.get(bug=bug) eq_(poll.bug.bug_id, bug.bug_id) eq_(poll.description, bug.first_comment) eq_(poll.name, bug.summary)
def test_mentor_change_update_action_items(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) mentor = UserFactory.create(groups=['Rep', 'Mentor']) user = UserFactory.create(groups=['Rep'], userprofile__mentor=mentor) BugFactory.create(pending_mentor_validation=True, assigned_to=mentor) new_mentor = UserFactory.create(groups=['Rep', 'Mentor']) user.userprofile.mentor = new_mentor user.userprofile.save() items = ActionItem.objects.filter(content_type=model) eq_(items[0].user, new_mentor)
def test_send_discussion_email_to_council_edit(self): bug = BugFactory.create(bug_id=989812) automated_poll = PollFactory.build( name='automated_poll', automated_poll=True, bug=bug) with patch('remo.voting.models.send_remo_mail') as mocked_send_mail: automated_poll_discussion_email(None, automated_poll, False, {}) ok_(not mocked_send_mail.called)
def test_uppercase_status(self): """Test that status and resolution are always saved in uppercase.""" mentor = UserFactory.create() user = UserFactory.create(userprofile__mentor=mentor) bug = BugFactory.create(bug_id=0000, status='foo', resolution='bar', assigned_to=user) eq_(bug.status, 'FOO') eq_(bug.resolution, 'BAR')
def test_automated_radio_poll_already_exists(self): """Test that a radio poll is not created if the bug already exists. """ bug = BugFactory.create(flag_name='remo-review', flag_status='?', component='Budget Requests') bug.first_comment = 'My first comment.' bug.save() eq_(Poll.objects.filter(automated_poll=True).count(), 1)
def test_automated_radio_poll_already_exists(self): """Test that a radio poll is not created if the bug already exists. """ bug = BugFactory.create(council_vote_requested=True, component='Budget Requests') bug.first_comment = 'My first comment.' bug.save() eq_(Poll.objects.filter(automated_poll=True).count(), 1)
def test_waiting_multiple_documents(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) whiteboard = '[waiting receipts][waiting report][waiting photos]' user = UserFactory.create(groups=['Rep']) BugFactory.create(whiteboard=whiteboard, assigned_to=user) items = ActionItem.objects.filter(content_type=model) eq_(items.count(), 3) namelist = ['Add receipts to bug', 'Add report to bug', 'Add photos to bug'] for item in items: ok_(item.name in namelist) eq_(item.user, user) eq_(item.priority, ActionItem.NORMAL)
def test_send_discussion_email_to_council_edit(self): bug = BugFactory.create(bug_id=989812) automated_poll = PollFactory.build(name='automated_poll', automated_poll=True, bug=bug) with patch('remo.voting.models.send_remo_mail') as mocked_send_mail: automated_poll_discussion_email(None, automated_poll, False, {}) ok_(not mocked_send_mail.called)
def test_council_reviewer_assigned(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) user = UserFactory.create(groups=['Rep', 'Council']) bug = BugFactory.create(assigned_to=user, council_member_assigned=True) items = ActionItem.objects.filter(content_type=model, object_id=bug.id) eq_(items.count(), 1) eq_(items[0].name, 'Review budget request ' + bug.summary) eq_(items[0].user, user) eq_(items[0].priority, ActionItem.BLOCKER)
def test_remove_needinfo(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) user = UserFactory.create(groups=['Rep']) bug = BugFactory.create() bug.budget_needinfo.add(user) bug.budget_needinfo.clear() items = ActionItem.objects.filter(content_type=model, object_id=bug.id) for item in items: ok_(item.completed) ok_(item.resolved)
def test_list(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items) whiteboard = '[waiting receipts]' user = UserFactory.create(groups=['Rep']) bug = BugFactory.create(whiteboard=whiteboard, assigned_to=user) item = ActionItem.objects.get(content_type=model, object_id=bug.id) response = self.get(user=user, url=reverse('list_action_items')) self.assertTemplateUsed(response, 'list_action_items.html') eq_(response.context['pageheader'], 'My Action Items') eq_(response.status_code, 200) eq_(set(response.context['objects'].object_list), set([item]))
def test_waiting_receipts(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) whiteboard = '[waiting receipts]' user = UserFactory.create(groups=['Rep']) bug = BugFactory.create(whiteboard=whiteboard, assigned_to=user, summary=u'À summary') items = ActionItem.objects.filter(content_type=model, object_id=bug.id) eq_(items.count(), 1) eq_(items[0].name, 'Add receipts for ' + bug.summary) eq_(items[0].user, user) eq_(items[0].priority, ActionItem.NORMAL)
def test_council_reviewer_removed(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) user = UserFactory.create(groups=['Council']) bug = BugFactory.create(assigned_to=user, council_member_assigned=True) bug.council_member_assigned = False bug.save() items = ActionItem.objects.filter(content_type=model) for item in items: ok_(item.completed) ok_(item.resolved)
def test_list(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items) whiteboard = '[waiting receipts]' user = UserFactory.create(groups=['Rep']) bug = BugFactory.create(whiteboard=whiteboard, assigned_to=user) item = ActionItem.objects.get(content_type=model, object_id=bug.id) with self.login(user) as client: response = client.get(reverse('list_action_items'), user=user) self.assertJinja2TemplateUsed(response, 'list_action_items.jinja') eq_(response.context['pageheader'], 'My Action Items') eq_(response.status_code, 200) eq_(set(response.context['objects'].object_list), set([item]))
def test_council_reviewer_removed(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) user = UserFactory.create(groups=['Council']) bug = BugFactory.create(assigned_to=user, council_member_assigned=True) bug.council_member_assigned = False bug.save() items = ActionItem.objects.filter(content_type=model, object_id=bug.id) for item in items: ok_(item.completed) ok_(item.resolved)
def test_send_discussion_email_to_council(self): bug = BugFactory.create(bug_id=989812) automated_poll = PollFactory.build( name='automated_poll', automated_poll=True, bug=bug) with patch('remo.voting.models.send_remo_mail') as mocked_send_mail: automated_poll_discussion_email(None, automated_poll, True, {}) subject = 'Discuss [Bug 989812] - Bug summary' data = {'bug': bug, 'BUGZILLA_URL': BUGZILLA_URL, 'poll': automated_poll} mocked_send_mail.delay.assert_called_once_with( subject=subject, email_template='emails/review_budget_notify_council.txt', recipients_list=[settings.REPS_COUNCIL_ALIAS], data=data)
def test_change_assigned_user(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) user_1 = UserFactory.create(groups=['Rep']) user_2 = UserFactory.create(groups=['Rep']) bug = BugFactory.create(assigned_to=user_1, pending_mentor_validation=True) item = ActionItem.objects.get(content_type=model, object_id=bug.id) eq_(item.user, user_1) bug.assigned_to = user_2 bug.save() item = ActionItem.objects.get(content_type=model, object_id=bug.id) eq_(item.user, user_2)
def test_extend_voting_period_no_majority(self): bug = BugFactory.create() start = now().replace(microsecond=0) end = get_date(days=1) new_end = get_date(days=2) user = UserFactory.create(groups=['Admin']) group = Group.objects.get(name='Council') User.objects.filter(groups__name='Council').delete() council = UserFactory.create_batch(9, groups=['Council']) automated_poll = PollFactoryNoSignals.create(name='poll', start=start, end=end, valid_groups=group, created_by=user, automated_poll=True, bug=bug) radio_poll = RadioPollFactory.create(poll=automated_poll, question='Budget Approval') RadioPollChoiceFactory.create(answer='Approved', votes=3, radio_poll=radio_poll) RadioPollChoiceFactory.create(answer='Denied', votes=4, radio_poll=radio_poll) VoteFactory.create(user=council[0], poll=automated_poll) extend_voting_period() poll = Poll.objects.get(pk=automated_poll.id) eq_(poll.end.year, new_end.year) eq_(poll.end.month, new_end.month) eq_(poll.end.day, new_end.day) eq_(poll.end.hour, 0) eq_(poll.end.minute, 0) eq_(poll.end.second, 0) ok_(poll.is_extended) reminders = map(lambda x: x.subject, mail.outbox) msg = '[Urgent] Voting extended for poll' # Test that those who voted don't receive notification eq_(reminders.count(msg), 8)
def test_extend_voting_period_no_majority(self): bug = BugFactory.create() start = now().replace(microsecond=0) end = datetime.combine(get_date(days=1), datetime.min.time()) new_end = datetime.combine(get_date(days=2), datetime.min.time()) user = UserFactory.create(groups=['Admin']) group = Group.objects.get(name='Review') User.objects.filter(groups__name='Review').delete() review = UserFactory.create_batch(9, groups=['Review']) with mute_signals(post_save): automated_poll = PollFactory.create(name='poll', start=start, end=end, valid_groups=group, created_by=user, automated_poll=True, bug=bug) radio_poll = RadioPollFactory.create(poll=automated_poll, question='Budget Approval') RadioPollChoiceFactory.create(answer='Approved', votes=3, radio_poll=radio_poll) RadioPollChoiceFactory.create(answer='Denied', votes=4, radio_poll=radio_poll) VoteFactory.create(user=review[0], poll=automated_poll) with patch('remo.voting.tasks.send_remo_mail.delay') as mocked_mail: extend_voting_period() poll = Poll.objects.get(pk=automated_poll.id) eq_(poll.end.year, new_end.year) eq_(poll.end.month, new_end.month) eq_(poll.end.day, new_end.day) eq_(poll.end.hour, 0) eq_(poll.end.minute, 0) eq_(poll.end.second, 0) ok_(poll.is_extended) # Test that only the 1 that hasn't voted gets a notification ok_(mocked_mail.called) eq_(mocked_mail.call_count, 1)
def test_needinfo(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) needinfo = UserFactory.create(groups=['Rep']) user = UserFactory.create(groups=['Rep']) bug = BugFactory.create(assigned_to=user) bug.budget_needinfo.add(needinfo) items = ActionItem.objects.filter(content_type=model, object_id=bug.id) ok_(items.count(), 1) for item in items: eq_(item.name, 'Need info for ' + bug.summary) eq_(item.user, needinfo) ok_(item.priority, ActionItem.MINOR)
def test_budget_vote_action_item(self): model = ContentType.objects.get_for_model(Poll) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) council = Group.objects.get(name='Council') user = UserFactory.create(groups=['Council']) bug = BugFactory.create() PollFactory.create(valid_groups=council, automated_poll=True, bug=bug) items = ActionItem.objects.filter(content_type=model) eq_(items.count(), 1) for item in items: eq_(item.name, 'Cast your vote for budget request') eq_(item.user, user) ok_(item.priority, ActionItem.NORMAL) ok_(not item.completed)
def test_extend_voting_period_by_24hours(self, fake_now): """Test extending voting period by 24hours if less than 50% of the valid users have voted and the poll ends in less than 8 hours. """ bug = BugFactory.create() automated_poll = Poll(name='poll', start=self.start, end=self.end, valid_groups=self.group, created_by=self.user, automated_poll=True, bug=bug) automated_poll.save() # act like it's 4 hours before the end of the poll fake_now.return_value = now() + datetime.timedelta(hours=116) args = ['extend_voting_period'] management.call_command('cron', *args) poll = Poll.objects.get(pk=automated_poll.id) eq_(poll.end - automated_poll.end, datetime.timedelta(hours=24))
def test_send_discussion_email_to_council(self): bug = BugFactory.create(bug_id=989812) automated_poll = PollFactory.build(name='automated_poll', automated_poll=True, bug=bug) with patch('remo.voting.models.send_remo_mail') as mocked_send_mail: automated_poll_discussion_email(None, automated_poll, True, {}) subject = 'Discuss [Bug 989812] - Bug summary' data = {'bug': bug, 'BUGZILLA_URL': BUGZILLA_URL} headers = {'Reply-To': settings.REPS_COUNCIL_ALIAS} mocked_send_mail.delay.assert_called_once_with( subject=subject, email_template='emails/review_budget_notify_council.txt', recipients_list=[settings.REPS_COUNCIL_ALIAS], data=data, headers=headers)
def test_update_bug_whiteboard(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) whiteboard = '[waiting receipts][waiting report][waiting photos]' user = UserFactory.create(groups=['Rep']) bug = BugFactory.create(whiteboard=whiteboard, assigned_to=user) items = ActionItem.objects.filter(content_type=model) eq_(items.count(), 3) bug.whiteboard = '' bug.save() items = ActionItem.objects.filter(content_type=model, object_id=bug.id) for item in items: ok_(item.completed) ok_(item.resolved)
def test_update_bug_whiteboard(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) whiteboard = '[waiting receipts][waiting report][waiting photos]' user = UserFactory.create(groups=['Rep']) bug = BugFactory.create(whiteboard=whiteboard, assigned_to=user) items = ActionItem.objects.filter(content_type=model) eq_(items.count(), 3) bug.whiteboard = "" bug.save() items = ActionItem.objects.filter(content_type=model) for item in items: ok_(item.completed) ok_(item.resolved)
def test_extend_voting_period(self): bug = BugFactory.create() end = get_date(days=1) new_end = get_date(days=2) automated_poll = Poll(name='poll', start=self.start, end=end, valid_groups=self.group, created_by=self.user, automated_poll=True, bug=bug) automated_poll.save() args = ['extend_voting_period'] management.call_command('cron', *args) poll = Poll.objects.get(pk=automated_poll.id) eq_(poll.end.year, new_end.year) eq_(poll.end.month, new_end.month) eq_(poll.end.day, new_end.day) eq_(poll.end.hour, 0) eq_(poll.end.minute, 0) eq_(poll.end.second, 0)
def test_extend_voting_period_no_majority(self): bug = BugFactory.create() start = now().replace(microsecond=0) end = datetime.combine(get_date(days=1), datetime.min.time()) new_end = datetime.combine(get_date(days=2), datetime.min.time()) user = UserFactory.create(groups=['Admin']) group = Group.objects.get(name='Council') User.objects.filter(groups__name='Council').delete() council = UserFactory.create_batch(9, groups=['Council']) automated_poll = PollFactoryNoSignals.create(name='poll', start=start, end=end, valid_groups=group, created_by=user, automated_poll=True, bug=bug) radio_poll = RadioPollFactory.create(poll=automated_poll, question='Budget Approval') RadioPollChoiceFactory.create(answer='Approved', votes=3, radio_poll=radio_poll) RadioPollChoiceFactory.create(answer='Denied', votes=4, radio_poll=radio_poll) VoteFactory.create(user=council[0], poll=automated_poll) extend_voting_period() poll = Poll.objects.get(pk=automated_poll.id) eq_(poll.end.year, new_end.year) eq_(poll.end.month, new_end.month) eq_(poll.end.day, new_end.day) eq_(poll.end.hour, 0) eq_(poll.end.minute, 0) eq_(poll.end.second, 0) ok_(poll.is_extended) reminders = map(lambda x: x.subject, mail.outbox) msg = '[Urgent] Voting extended for poll' # Test that those who voted don't receive notification eq_(reminders.count(msg), 8)
def test_waiting_multiple_documents(self): model = ContentType.objects.get_for_model(Bug) items = ActionItem.objects.filter(content_type=model) ok_(not items.exists()) whiteboard = '[waiting receipts][waiting report][waiting photos]' user = UserFactory.create(groups=['Rep']) bug = BugFactory.create(whiteboard=whiteboard, assigned_to=user) items = ActionItem.objects.filter(content_type=model, object_id=bug.id) eq_(items.count(), 3) namelist = ['Add receipts for ' + bug.summary, 'Add report for ' + bug.summary, 'Add photos for ' + bug.summary] for item in items: ok_(item.name in namelist) eq_(item.user, user) eq_(item.priority, ActionItem.NORMAL)
def test_send_discussion_email_to_council(self): bug = BugFactory.create(bug_id=989812) automated_poll = PollFactory.build(name='automated_poll', automated_poll=True, bug=bug) with patch('remo.voting.models.send_remo_mail') as mocked_send_mail: automated_poll_discussion_email(None, automated_poll, True, {}) subject = 'Discuss [Bug 989812] - Bug summary' data = { 'bug': bug, 'BUGZILLA_URL': get_bugzilla_url(bug), 'poll': automated_poll } mocked_send_mail.delay.assert_called_once_with( subject=subject, email_template='emails/review_budget_notify_review_team.jinja', recipients_list=[settings.REPS_REVIEW_ALIAS], data=data)