Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
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)
Exemple #4
0
    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)
Exemple #5
0
    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]]))
Exemple #6
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)
Exemple #7
0
    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.')
Exemple #8
0
    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())
Exemple #9
0
    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)
Exemple #10
0
    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)
Exemple #11
0
    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.")
Exemple #12
0
    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)
Exemple #13
0
    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)
Exemple #14
0
    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)
Exemple #15
0
 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)
Exemple #16
0
 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)
Exemple #17
0
 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)
Exemple #18
0
    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)
Exemple #19
0
    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)
Exemple #20
0
    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')
Exemple #21
0
    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)
Exemple #22
0
    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)
Exemple #23
0
    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)
Exemple #24
0
    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)
Exemple #25
0
    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)
Exemple #26
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'])
        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)
Exemple #27
0
    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)
Exemple #28
0
    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]))
Exemple #29
0
    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)
Exemple #30
0
    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)
Exemple #31
0
    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]))
Exemple #32
0
    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)
Exemple #33
0
    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)
Exemple #34
0
    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)
Exemple #35
0
    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)
Exemple #36
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='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)
Exemple #37
0
    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)
Exemple #38
0
    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)
Exemple #39
0
    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))
Exemple #40
0
    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)
Exemple #41
0
    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)
Exemple #42
0
    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)
Exemple #43
0
    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)
Exemple #44
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)
Exemple #45
0
    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)
Exemple #46
0
    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)