Exemplo n.º 1
0
    def test_send_mail(self, fake_messages):
        """Test EmailRepsForm email sending functionality."""

        data = {'subject': 'Test email subject',
                'body': 'Test email body',
                'functional_area': self.functional_area.id}

        form = EmailRepsForm(data=data)
        ok_(form.is_valid())

        area = self.functional_area
        UserFactory.create_batch(20, userprofile__functional_areas=[area])

        factory = RequestFactory()
        request = factory.request()
        request.user = UserFactory.create()

        reps = User.objects.filter(userprofile__functional_areas__name=area)

        form.send_email(request, reps)

        eq_(len(mail.outbox), 1)

        address = lambda u: '%s %s <%s>' % (u.first_name, u.last_name, u.email)
        recipients = map(address, reps)

        eq_(set(mail.outbox[0].to), set(recipients))
        eq_(mail.outbox[0].subject, data['subject'])
        eq_(mail.outbox[0].body, data['body'])
        fake_messages.assert_called_with(ANY, 'Email sent successfully.')
Exemplo n.º 2
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)
Exemplo n.º 3
0
    def test_send_mail(self, fake_messages):
        """Test EmailRepsForm email sending functionality."""

        fake_messages.expects('success')

        data = {
            'subject': 'Test email subject',
            'body': 'Test email body',
            'functional_area': self.functional_area.id
        }

        form = EmailRepsForm(data=data)
        ok_(form.is_valid())

        area = self.functional_area
        UserFactory.create_batch(20, userprofile__functional_areas=[area])

        factory = RequestFactory()
        request = factory.request()
        request.user = UserFactory.create()

        reps = User.objects.filter(userprofile__functional_areas__name=area)

        form.send_email(request, reps)

        eq_(len(mail.outbox), 1)

        address = lambda u: '%s %s <%s>' % (u.first_name, u.last_name, u.email)
        recipients = map(address, reps)

        eq_(set(mail.outbox[0].to), set(recipients))
        eq_(mail.outbox[0].subject, data['subject'])
        eq_(mail.outbox[0].body, data['body'])
Exemplo n.º 4
0
    def test_update_valid_groups(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')
        reps = Group.objects.get(name='Rep')
        UserFactory.create_batch(3, groups=['Council'])
        UserFactory.create_batch(4, groups=['Rep'])
        start = now() - timedelta(hours=3)
        poll = PollFactory.create(valid_groups=council, start=start)

        create_poll_action_items()

        poll.valid_groups = reps
        poll.save()

        items = ActionItem.objects.filter(content_type=model,
                                          object_id=poll.id)
        eq_(items.count(), 4)

        for user in reps.user_set.all():
            ok_(items.filter(user=user).exists())

        for user in council.user_set.all():
            ok_(not items.filter(user=user).exists())
Exemplo n.º 5
0
    def test_update_valid_groups(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')
        reps = Group.objects.get(name='Rep')
        UserFactory.create_batch(3, groups=['Council'])
        UserFactory.create_batch(4, groups=['Rep'])
        start = now() - timedelta(hours=3)
        poll = PollFactory.create(valid_groups=council, start=start)

        create_poll_action_items()

        poll.valid_groups = reps
        poll.save()

        items = ActionItem.objects.filter(content_type=model,
                                          object_id=poll.id)
        eq_(items.count(), 4)

        for user in reps.user_set.all():
            ok_(items.filter(user=user).exists())

        for user in council.user_set.all():
            ok_(not items.filter(user=user).exists())
Exemplo n.º 6
0
    def test_send_mail(self, fake_messages):
        """Test EmailRepsForm email sending functionality."""

        data = {'subject': 'Test email subject',
                'body': 'Test email body',
                'functional_area': self.functional_area.id}

        form = EmailRepsForm(data=data)
        ok_(form.is_valid())

        area = self.functional_area
        UserFactory.create_batch(20, userprofile__functional_areas=[area])

        factory = RequestFactory()
        request = factory.request()
        request.user = UserFactory.create()

        reps = User.objects.filter(userprofile__functional_areas__name=area)

        form.send_email(request, reps)

        eq_(len(mail.outbox), 20)

        def format_name(user):
            return '%s %s <%s>' % (user.first_name, user.last_name, user.email)
        recipients = map(format_name, reps)

        receivers = []
        for i in range(0, len(mail.outbox)):
            eq_(mail.outbox[i].subject, data['subject'])
            eq_(mail.outbox[i].body, data['body'])
            receivers.append(mail.outbox[i].to[0])

        eq_(set(receivers), set(recipients))
        fake_messages.assert_called_with(ANY, 'Email sent successfully.')
Exemplo n.º 7
0
    def test_send_mail(self, fake_messages):
        """Test EmailRepsForm email sending functionality."""

        data = {"subject": "Test email subject", "body": "Test email body", "functional_area": self.functional_area.id}

        form = EmailRepsForm(data=data)
        ok_(form.is_valid())

        area = self.functional_area
        UserFactory.create_batch(20, userprofile__functional_areas=[area])

        factory = RequestFactory()
        request = factory.request()
        request.user = UserFactory.create()

        reps = User.objects.filter(userprofile__functional_areas__name=area)

        form.send_email(request, reps)

        eq_(len(mail.outbox), 20)

        address = lambda u: "%s %s <%s>" % (u.first_name, u.last_name, u.email)
        recipients = map(address, reps)

        receivers = []
        for i in range(0, len(mail.outbox)):
            eq_(mail.outbox[i].subject, data["subject"])
            eq_(mail.outbox[i].body, data["body"])
            receivers.append(mail.outbox[i].to[0])

        eq_(set(receivers), set(recipients))
        fake_messages.assert_called_with(ANY, "Email sent successfully.")
Exemplo n.º 8
0
    def test_invalid_date(self, mocked_date):
        model = ContentType.objects.get_for_model(UserProfile)
        items = ActionItem.objects.filter(content_type=model)
        ok_(not items.exists())

        UserFactory.create_batch(2, groups=['Mentor'])
        mocked_date.return_value = datetime(now().year, now().month, 2)
        send_rotm_nomination_reminder()

        items = ActionItem.objects.filter(content_type=model)
        ok_(not items.exists())
Exemplo n.º 9
0
    def test_invalid_date(self, mocked_date):
        model = ContentType.objects.get_for_model(UserProfile)
        items = ActionItem.objects.filter(content_type=model)
        ok_(not items.exists())

        UserFactory.create_batch(2, groups=['Mentor'])
        mocked_date.return_value = datetime(now().year, now().month, 2)
        send_rotm_nomination_reminder()

        items = ActionItem.objects.filter(content_type=model)
        ok_(not items.exists())
Exemplo n.º 10
0
    def test_comment_multiple_users(self):
        """Test sending email when a new comment is added on a Poll
        and the users have the option enabled in their settings.
        """
        commenter = UserFactory.create()
        creator = UserFactory.create(
            userprofile__receive_email_on_add_voting_comment=True)
        poll = PollFactoryNoSignals.create(created_by=creator)
        users_with_comments = UserFactory.create_batch(
            2, userprofile__receive_email_on_add_voting_comment=True)
        # disconnect the signals in order to add two users in PollComment
        for user_obj in users_with_comments:
            PollCommentFactoryNoSignals.create(user=user_obj,
                                               poll=poll,
                                               comment='This is a comment')
        PollCommentFactory.create(user=commenter,
                                  poll=poll,
                                  comment='This is a comment')

        eq_(len(mail.outbox), 3)
        recipients = [
            '%s <%s>' % (creator.get_full_name(), creator.email),
            '%s <%s>' % (users_with_comments[0].get_full_name(),
                         users_with_comments[0].email),
            '%s <%s>' % (users_with_comments[1].get_full_name(),
                         users_with_comments[1].email)
        ]
        receivers = [
            mail.outbox[0].to[0], mail.outbox[1].to[0], mail.outbox[2].to[0]
        ]
        eq_(set(recipients), set(receivers))
        msg = ('[Voting] User {0} commented on {1}'.format(
            commenter.get_full_name(), poll))
        eq_(mail.outbox[0].subject, msg)
Exemplo n.º 11
0
    def test_comment_multiple_users(self):
        """Test sending email when a new comment is added on a Poll
        and the users have the option enabled in their settings.
        """
        commenter = UserFactory.create()
        creator = UserFactory.create(
            userprofile__receive_email_on_add_voting_comment=True)
        poll = PollFactoryNoSignals.create(created_by=creator)
        users_with_comments = UserFactory.create_batch(
            2, userprofile__receive_email_on_add_voting_comment=True)
        # disconnect the signals in order to add two users in PollComment
        for user_obj in users_with_comments:
            PollCommentFactoryNoSignals.create(
                user=user_obj, poll=poll, comment='This is a comment')
        PollCommentFactory.create(user=commenter, poll=poll,
                                  comment='This is a comment')

        eq_(len(mail.outbox), 3)
        recipients = ['%s <%s>' % (creator.get_full_name(), creator.email),
                      '%s <%s>' % (users_with_comments[0].get_full_name(),
                                   users_with_comments[0].email),
                      '%s <%s>' % (users_with_comments[1].get_full_name(),
                                   users_with_comments[1].email)]
        receivers = [mail.outbox[0].to[0], mail.outbox[1].to[0],
                     mail.outbox[2].to[0]]
        eq_(set(recipients), set(receivers))
        msg = ('[Voting] User {0} commented on {1}'
               .format(commenter.get_full_name(), poll))
        eq_(mail.outbox[0].subject, msg)
Exemplo n.º 12
0
    def test_comment_multiple_users(self, mocked_mail):
        """Test sending email when a new comment is added on a NGReport
        and the users have the option enabled in their settings.
        """
        commenter = UserFactory.create()
        reporter = UserFactory.create(
            userprofile__receive_email_on_add_comment=True)
        report = NGReportFactory.create(user=reporter)
        users_with_comments = UserFactory.create_batch(
            2, userprofile__receive_email_on_add_comment=True)
        # disconnect the signals in order to add two users in NGReportComment
        with mute_signals(post_save):
            for user_obj in users_with_comments:
                NGReportCommentFactory.create(user=user_obj,
                                              report=report,
                                              comment='This is a comment')
        NGReportCommentFactory.create(user=commenter,
                                      report=report,
                                      comment='This is a comment')

        ok_(mocked_mail.called)
        eq_(mocked_mail.call_count, 3)
        msg = '[Report] User {0} commented on {1}'.format(
            commenter.get_full_name(), report)
        mocked_data = mocked_mail.call_args_list[0][1]
        eq_(mocked_data['subject'], msg)
Exemplo n.º 13
0
    def test_comment_multiple_users(self):
        """Test sending email when a new comment is added on a NGReport
        and the users have the option enabled in their settings.
        """
        commenter = UserFactory.create()
        reporter = UserFactory.create(
            userprofile__receive_email_on_add_comment=True)
        report = NGReportFactory.create(user=reporter)
        users_with_comments = UserFactory.create_batch(
            2, userprofile__receive_email_on_add_comment=True)
        # disconnect the signals in order to add two users in NGReportComment
        for user_obj in users_with_comments:
            NGReportCommentFactoryNoSignals.create(
                user=user_obj, report=report, comment='This is a comment')
        NGReportCommentFactory.create(user=commenter, report=report,
                                      comment='This is a comment')

        eq_(len(mail.outbox), 3)
        recipients = ['%s <%s>' % (reporter.get_full_name(), reporter.email),
                      '%s <%s>' % (users_with_comments[0].get_full_name(),
                                   users_with_comments[0].email),
                      '%s <%s>' % (users_with_comments[1].get_full_name(),
                                   users_with_comments[1].email)]
        receivers = [mail.outbox[0].to[0], mail.outbox[1].to[0],
                     mail.outbox[2].to[0]]
        eq_(set(recipients), set(receivers))
        msg = ('[Report] User {0} commented on {1}'
               .format(commenter.get_full_name(), report))
        eq_(mail.outbox[0].subject, msg)
Exemplo n.º 14
0
    def test_send_email_on_report_comment_settings_True_multiple_users(self):
        """Test sending email when a new comment is added on a NGReport

        and the users have the option enabled in their settings.
        """
        commenter = UserFactory.create()
        reporter = UserFactory.create(
            userprofile__receive_email_on_add_comment=True)
        report = NGReportFactory.create(user=reporter)
        users_with_comments = UserFactory.create_batch(
            2, userprofile__receive_email_on_add_comment=True)
        # disconnect the signals in order to add two users in NGReportComment
        for user_obj in users_with_comments:
            NGReportCommentFactoryNoSignals.create(user=user_obj,
                                                   report=report,
                                                   comment='This is a comment')
        NGReportCommentFactory.create(user=commenter,
                                      report=report,
                                      comment='This is a comment')

        eq_(len(mail.outbox), 3)
        recipients = [
            reporter.email, users_with_comments[0].email,
            users_with_comments[1].email
        ]
        receivers = [
            mail.outbox[0].to[0], mail.outbox[1].to[0], mail.outbox[2].to[0]
        ]
        eq_(set(recipients), set(receivers))
        msg = ('[Report] User {0} commented on {1}'.format(
            commenter.get_full_name(), report))
        eq_(mail.outbox[0].subject, msg)
Exemplo n.º 15
0
    def test_overview(self):
        UserFactory.create_batch(10, groups=['Rep'])
        NGReportFactory.create_batch(12)

        # Past events
        EventFactory.create_batch(5)
        # Current and future events
        EventFactory.create_batch(10, start=now() + timedelta(days=3),
                                  end=now() + timedelta(days=4))

        response = self.get(reverse('stats_dashboard'))

        eq_(response.status_code, 200)
        self.assertTemplateUsed(response, 'stats_dashboard.html')
        eq_(response.context['reps'], 10)
        eq_(response.context['past_events'], 5)
        eq_(response.context['future_events'], 10)
        eq_(response.context['activities'], 27)
Exemplo n.º 16
0
    def test_overview(self):
        UserFactory.create_batch(10, groups=['Rep'])
        NGReportFactory.create_batch(12)

        # Past events
        EventFactory.create_batch(5)
        # Current and future events
        EventFactory.create_batch(10, start=now() + timedelta(days=3),
                                  end=now() + timedelta(days=4))

        response = self.get(reverse('stats_dashboard'))

        eq_(response.status_code, 200)
        self.assertTemplateUsed(response, 'stats_dashboard.html')
        eq_(response.context['reps'], 10)
        eq_(response.context['past_events'], 5)
        eq_(response.context['future_events'], 10)
        eq_(response.context['activities'], 27)
Exemplo n.º 17
0
    def test_inactive(self):
        reps = UserFactory.create_batch(12, groups=['Rep'])
        active = timedelta(days=5)
        inactive_low = timedelta(weeks=5)
        inactive_high = timedelta(weeks=9)

        active_reps = reps[:5]
        inactive_low_reps = reps[5:9]
        inactive_high_reps = reps[9:]

        for user in active_reps:
            # Activities in future and past 4 weeks
            NGReportFactory.create(user=user,
                                   report_date=now().date() - active)
            NGReportFactory.create(user=user,
                                   report_date=now().date() + active)

            # Activities in future and past 4+ weeks
            NGReportFactory.create(user=user,
                                   report_date=now().date() - inactive_low)
            NGReportFactory.create(user=user,
                                   report_date=now().date() + inactive_low)

            # Activities in future and past 8+ weeks
            NGReportFactory.create(user=user,
                                   report_date=now().date() - inactive_high)
            NGReportFactory.create(user=user,
                                   report_date=now().date() + inactive_high)

        for user in inactive_low_reps:
            # Activities in future and past 4+ weeks
            NGReportFactory.create(user=user,
                                   report_date=now().date() - inactive_low)
            NGReportFactory.create(user=user,
                                   report_date=now().date() + inactive_low)

            # Activities in future and past 8+ weeks
            NGReportFactory.create(user=user,
                                   report_date=now().date() - inactive_high)
            NGReportFactory.create(user=user,
                                   report_date=now().date() + inactive_high)

        for user in inactive_high_reps:
            # Activities in future and past 8+ weeks
            NGReportFactory.create(user=user,
                                   report_date=now().date() - inactive_high)
            NGReportFactory.create(user=user,
                                   report_date=now().date() + inactive_high)

        response = self.get(reverse('stats_dashboard'))

        eq_(response.status_code, 200)
        self.assertTemplateUsed(response, 'stats_dashboard.html')
        eq_(response.context['active_users'], 5)
        eq_(response.context['inactive_low_users'], 4)
        eq_(response.context['inactive_high_users'], 3)
Exemplo n.º 18
0
    def test_inactive(self):
        reps = UserFactory.create_batch(12, groups=['Rep'])
        active = timedelta(days=5)
        inactive_low = timedelta(weeks=5)
        inactive_high = timedelta(weeks=9)

        active_reps = reps[:5]
        inactive_low_reps = reps[5:9]
        inactive_high_reps = reps[9:]

        for user in active_reps:
            # Activities in future and past 4 weeks
            NGReportFactory.create(user=user,
                                   report_date=now().date() - active)
            NGReportFactory.create(user=user,
                                   report_date=now().date() + active)

            # Activities in future and past 4+ weeks
            NGReportFactory.create(user=user,
                                   report_date=now().date() - inactive_low)
            NGReportFactory.create(user=user,
                                   report_date=now().date() + inactive_low)

            # Activities in future and past 8+ weeks
            NGReportFactory.create(user=user,
                                   report_date=now().date() - inactive_high)
            NGReportFactory.create(user=user,
                                   report_date=now().date() + inactive_high)

        for user in inactive_low_reps:
            # Activities in future and past 4+ weeks
            NGReportFactory.create(user=user,
                                   report_date=now().date() - inactive_low)
            NGReportFactory.create(user=user,
                                   report_date=now().date() + inactive_low)

            # Activities in future and past 8+ weeks
            NGReportFactory.create(user=user,
                                   report_date=now().date() - inactive_high)
            NGReportFactory.create(user=user,
                                   report_date=now().date() + inactive_high)

        for user in inactive_high_reps:
            # Activities in future and past 8+ weeks
            NGReportFactory.create(user=user,
                                   report_date=now().date() - inactive_high)
            NGReportFactory.create(user=user,
                                   report_date=now().date() + inactive_high)

        response = self.get(reverse('stats_dashboard'))

        eq_(response.status_code, 200)
        self.assertTemplateUsed(response, 'stats_dashboard.html')
        eq_(response.context['active_users'], 5)
        eq_(response.context['inactive_low_users'], 4)
        eq_(response.context['inactive_high_users'], 3)
Exemplo n.º 19
0
    def test_overview(self):
        UserFactory.create_batch(10, groups=['Rep'])
        NGReportFactory.create_batch(12)

        # Past events
        EventFactory.create_batch(5)
        # Current and future events
        EventFactory.create_batch(10,
                                  start=now() + timedelta(days=3),
                                  end=now() + timedelta(days=4))

        response = Client().get(reverse('kpi'))

        eq_(response.status_code, 200)
        self.assertJinja2TemplateUsed(response, 'kpi.jinja')
        eq_(response.context['reps_count'], 10)
        eq_(response.context['past_events'], 5)
        eq_(response.context['future_events'], 10)
        eq_(response.context['activities'], 27)
Exemplo n.º 20
0
    def test_base(self, mocked_date):
        model = ContentType.objects.get_for_model(UserProfile)
        items = ActionItem.objects.filter(content_type=model)
        ok_(not items.exists())

        mentors = UserFactory.create_batch(2, groups=['Mentor'])
        mocked_date.return_value = datetime(now().year, now().month, 1)
        send_rotm_nomination_reminder()

        items = ActionItem.objects.filter(content_type=model)

        eq_(items.count(), 2)
        eq_(set([mentor.id for mentor in mentors]),
            set(items.values_list('object_id', flat=True)))
Exemplo n.º 21
0
    def test_base(self, mocked_date):
        model = ContentType.objects.get_for_model(UserProfile)
        items = ActionItem.objects.filter(content_type=model)
        ok_(not items.exists())

        mentors = UserFactory.create_batch(2, groups=['Mentor'])
        mocked_date.return_value = datetime(now().year, now().month, 1)
        send_rotm_nomination_reminder()

        items = ActionItem.objects.filter(content_type=model)

        eq_(items.count(), 2)
        eq_(set([mentor.id for mentor in mentors]),
            set(items.values_list('object_id', flat=True)))
Exemplo n.º 22
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)
Exemplo n.º 23
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)
Exemplo n.º 24
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)
Exemplo n.º 25
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)
Exemplo n.º 26
0
    def test_comment_multiple_users(self, mocked_mail):
        """Test sending email when a new comment is added on a NGReport
        and the users have the option enabled in their settings.
        """
        commenter = UserFactory.create()
        reporter = UserFactory.create(userprofile__receive_email_on_add_comment=True)
        report = NGReportFactory.create(user=reporter)
        users_with_comments = UserFactory.create_batch(
            2, userprofile__receive_email_on_add_comment=True)
        # disconnect the signals in order to add two users in NGReportComment
        with mute_signals(post_save):
            for user_obj in users_with_comments:
                NGReportCommentFactory.create(user=user_obj, report=report,
                                              comment='This is a comment')
        NGReportCommentFactory.create(user=commenter, report=report,
                                      comment='This is a comment')

        ok_(mocked_mail.called)
        eq_(mocked_mail.call_count, 3)
        msg = '[Report] User {0} commented on {1}'.format(commenter.get_full_name(), report)
        mocked_data = mocked_mail.call_args_list[0][1]
        eq_(mocked_data['subject'], msg)
Exemplo n.º 27
0
    def setUp(self):
        """Initial setup for the tests."""
        self.poll = PollFactory.create()
        self.radio_poll = RadioPollFactory.create(poll=self.poll)
        self.radio_poll_choice = (RadioPollChoiceFactory.create(
            radio_poll=self.radio_poll))
        self.range_poll = RangePollFactory.create(poll=self.poll)
        self.range_poll_choice = (RangePollChoiceFactory.create(
            range_poll=self.range_poll))
        UserFactory.create_batch(20, groups=['Rep'])
        self.user_list = (User.objects.filter(
            groups__name='Rep', userprofile__registration_complete=True))
        self.user = self.user_list[0]

        self.form_data = {
            'description': u'This is a description.',
            'end_form_0_day': u'1',
            'end_form_0_month': u'1',
            'end_form_0_year': u'2019',
            'end_form_1_hour': u'12',
            'end_form_1_minute': u'00',
            'name': u'Form data.',
            'start_form_0_day': u'1',
            'start_form_0_month': u'1',
            'start_form_0_year': u'2018',
            'start_form_1_hour': u'12',
            'start_form_1_minute': u'00',
            'valid_groups': u'1'
        }

        self.radio_formset_data = {
            'radio_polls-0-id':
            u'%d' % self.radio_poll.id,
            'radio_polls-0-question':
            u'Radio Poll Example 2 - Question 1',
            'radio_polls-TOTAL_FORMS':
            u'1',
            'radio_polls-INITIAL_FORMS':
            u'1',
            'radio_polls-MAX_NUM_FORMS':
            u'1000',
            '%d_radio_choices-TOTAL_FORMS' % self.radio_poll.id:
            u'1',
            '%d_radio_choices-INITIAL_FORMS' % self.radio_poll.id:
            u'1',
            '%d_radio_choices-MAX_NUM_FORMS' % self.radio_poll.id:
            u'1000',
            '%d_radio_choices-0-id' % self.radio_poll.id:
            (u'%d' % self.radio_poll_choice.id),
            '%d_radio_choices-0-answer' % self.radio_poll.id:
            u'Answer 1',
            '%d_radio_choices-0-DELETE' % self.radio_poll.id:
            False
        }

        self.range_formset_data = {
            'range_polls-TOTAL_FORMS':
            u'1',
            'range_polls-INITIAL_FORMS':
            u'1',
            'range_polls-MAX_NUM_FORMS':
            u'1000',
            'range_polls-0-id':
            u'%d' % self.range_poll.id,
            'range_polls-0-name':
            u'Current Range Poll 1',
            '%d_range_choices-0-id' % self.range_poll.id:
            (u'%d' % self.range_poll.id),
            '%d_range_choices-0-nominee' % self.range_poll.id:
            (u'%d' % self.user.id),
            '%d_range_choices-0-DELETE' % self.range_poll.id:
            False,
            '%d_range_choices-TOTAL_FORMS' % self.range_poll.id:
            u'1',
            '%d_range_choices-INITIAL_FORMS' % self.range_poll.id:
            u'1',
            '%d_range_choices-MAX_NUM_FORMS' % self.range_poll.id:
            u'1000'
        }

        self.empty_radio_formset = {
            'radio_polls-TOTAL_FORMS': u'0',
            'radio_polls-INITIAL_FORMS': u'0',
            'radio_polls-MAX_NUM_FORMS': u'1000'
        }

        self.empty_range_formset = {
            'range_polls-TOTAL_FORMS': u'0',
            'range_polls-INITIAL_FORMS': u'0',
            'range_polls-MAX_NUM_FORMS': u'1000'
        }

        RangePollFormset = inlineformset_factory(
            Poll,
            RangePoll,
            formset=forms.BaseRangePollInlineFormSet,
            extra=1,
            can_delete=True)
        RadioPollFormset = inlineformset_factory(
            Poll,
            RadioPoll,
            formset=forms.BaseRadioPollInlineFormSet,
            extra=1,
            can_delete=True)

        self.range_poll_formset = (RangePollFormset(self.range_formset_data,
                                                    instance=self.poll,
                                                    user_list=self.user_list))
        self.radio_poll_formset = (RadioPollFormset(self.radio_formset_data,
                                                    instance=self.poll))
        self.radio_poll_formset_empty = (RadioPollFormset(
            self.empty_radio_formset, instance=self.poll))
        self.range_poll_formset_empty = (RangePollFormset(
            self.empty_range_formset,
            instance=self.poll,
            user_list=self.user_list))
Exemplo n.º 28
0
    def setUp(self):
        """Initial data for the tests."""
        self.nominee1, self.nominee2, self.nominee3 = UserFactory.create_batch(3, groups=['Rep'])
        self.rep = UserFactory.create(groups=['Rep'])
        self.admin = UserFactory.create(groups=['Admin', 'Rep'])
        self.mozillian = UserFactory.create(groups=['Mozillians'])
        poll_start = now() + timedelta(days=5)
        self.admin_group = Group.objects.get(name='Admin')
        self.rep_group = Group.objects.get(name='Rep')
        self.poll = PollFactory.create(valid_groups=self.admin_group,
                                       start=poll_start,
                                       end=poll_start + timedelta(days=10),
                                       comments_allowed=False)
        self.range_poll = RangePollFactory(poll=self.poll)
        self.range_poll_choice1 = RangePollChoiceFactory(range_poll=self.range_poll,
                                                         nominee=self.nominee1)
        self.range_poll_choice2 = RangePollChoiceFactory(range_poll=self.range_poll,
                                                         nominee=self.nominee2)
        self.radio_poll = RadioPollFactory(poll=self.poll)
        self.radio_poll_choice1, self.radio_poll_choice2 = RadioPollChoiceFactory.create_batch(
            2, radio_poll=self.radio_poll)

        self.post_data = {'range_poll__1': 1,
                          'range_poll__2': 2,
                          'radio_poll__1': 2}

        self.edit_future_data = {
            'name': u'Test edit voting',
            'description': u'This is a description.',
            'created_by': self.poll.created_by.id,
            'valid_groups': self.admin_group.id,
            'start_form_0_year': now().year + 1,
            'start_form_0_month': 10,
            'start_form_0_day': 1,
            'start_form_1_hour': 7,
            'start_form_1_minute': 00,
            'end_form_0_year': now().year + 1,
            'end_form_0_month': 10,
            'end_form_0_day': 4,
            'end_form_1_hour': 7,
            'end_form_1_minute': 00,
            'range_polls-TOTAL_FORMS': u'1',
            'range_polls-INITIAL_FORMS': u'1',
            'range_polls-MAX_NUM_FORMS': u'1000',
            'range_polls-0-id': self.range_poll.id,
            'range_polls-0-name': u'Current Range Poll 1',
            '{0}_range_choices-0-id'.format(self.range_poll.id): self.range_poll_choice1.id,
            '{0}_range_choices-0-nominee'.format(self.range_poll.id): self.nominee1.id,
            '{0}_range_choices-0-DELETE'.format(self.range_poll.id): False,
            '{0}_range_choices-1-id'.format(self.range_poll.id): self.range_poll_choice2.id,
            '{0}_range_choices-1-nominee'.format(self.range_poll.id): self.nominee2.id,
            '{0}_range_choices-1-DELETE'.format(self.range_poll.id): False,
            '{0}_range_choices-2-id'.format(self.range_poll.id): u'',
            '{0}_range_choices-2-nominee'.format(self.range_poll.id): self.nominee3.id,
            '{0}_range_choices-2-DELETE'.format(self.range_poll.id): False,
            '{0}_range_choices-TOTAL_FORMS'.format(self.range_poll.id): u'3',
            '{0}_range_choices-INITIAL_FORMS'.format(self.range_poll.id): u'2',
            '{0}_range_choices-TOTAL_FORMS'.format(self.range_poll.id): u'1000',
            'radio_polls-0-id': self.radio_poll.id,
            'radio_polls-0-question': u'Radio Poll - Question 1',
            'radio_polls-TOTAL_FORMS': u'1',
            'radio_polls-INITIAL_FORMS': u'1',
            'radio_polls-MAX_NUM_FORMS': u'1000',
            '{0}_radio_choices-TOTAL_FORMS'.format(self.radio_poll.id): u'2',
            '{0}_radio_choices-INITIAL_FORMS'.format(self.radio_poll.id): u'2',
            '{0}_radio_choices-MAX_NUM_FORMS'.format(self.radio_poll.id): u'1000',
            '{0}_radio_choices-0-id'.format(self.radio_poll.id): self.radio_poll_choice1.id,
            '{0}_radio_choices-0-answer'.format(self.radio_poll.id): u'Radio Poll - Answer 1',
            '{0}_radio_choices-0-DELETE'.format(self.radio_poll.id): False,
            '{0}_radio_choices-1-id'.format(self.radio_poll.id): self.radio_poll_choice2.id,
            '{0}_radio_choices-1-answer'.format(self.radio_poll.id): u'Radio Poll - Answer 2',
            '{0}_radio_choices-1-DELETE'.format(self.radio_poll.id): False}

        self.edit_current_data = {
            'name': u'Test edit voting',
            'description': u'This is a description.',
            'created_by': self.nominee1.id,
            'valid_groups': self.admin_group.id,
            'start_form_0_year': 2011,
            'end_form_0_year': now().year,
            'end_form_0_month': 10,
            'end_form_0_day': 4,
            'end_form_1_hour': 7,
            'end_form_1_minute': 00}

        # Give permissions to admin group
        group = Group.objects.get(name='Admin')
        permissions = Permission.objects.filter(name__icontains='poll')
        for perm in permissions:
            group.permissions.add(perm)
Exemplo n.º 29
0
    def setUp(self):
        """Initial setup for the tests."""
        self.poll = PollFactory.create()
        self.radio_poll = RadioPollFactory.create(poll=self.poll)
        self.radio_poll_choice = (
            RadioPollChoiceFactory.create(radio_poll=self.radio_poll))
        self.range_poll = RangePollFactory.create(poll=self.poll)
        self.range_poll_choice = (
            RangePollChoiceFactory.create(range_poll=self.range_poll))
        UserFactory.create_batch(20, groups=['Rep'])
        self.user_list = (
            User.objects.filter(groups__name='Rep',
                                userprofile__registration_complete=True))
        self.user = self.user_list[0]

        self.form_data = {
            'description': u'This is a description.',
            'end_form_0_day': u'10',
            'end_form_0_month': u'2',
            'end_form_0_year': u'{0}'.format(now().year + 2),
            'end_form_1_hour': u'12',
            'end_form_1_minute': u'00',
            'name': u'Form data.',
            'start_form_0_day': u'10',
            'start_form_0_month': u'2',
            'start_form_0_year': u'{0}'.format(now().year + 1),
            'start_form_1_hour': u'12',
            'start_form_1_minute': u'00',
            'valid_groups': u'1'}

        self.radio_formset_data = {
            'radio_polls-0-id': u'%d' % self.radio_poll.id,
            'radio_polls-0-question': u'Radio Poll Example 2 - Question 1',
            'radio_polls-TOTAL_FORMS': u'1',
            'radio_polls-INITIAL_FORMS': u'1',
            'radio_polls-MAX_NUM_FORMS': u'1000',
            '%d_radio_choices-TOTAL_FORMS' % self.radio_poll.id: u'1',
            '%d_radio_choices-INITIAL_FORMS' % self.radio_poll.id: u'1',
            '%d_radio_choices-MAX_NUM_FORMS' % self.radio_poll.id: u'1000',
            '%d_radio_choices-0-id' % self.radio_poll.id: (
                u'%d' % self.radio_poll_choice.id),
            '%d_radio_choices-0-answer' % self.radio_poll.id: u'Answer 1',
            '%d_radio_choices-0-DELETE' % self.radio_poll.id: False}

        self.range_formset_data = {
            'range_polls-TOTAL_FORMS': u'1',
            'range_polls-INITIAL_FORMS': u'1',
            'range_polls-MAX_NUM_FORMS': u'1000',
            'range_polls-0-id': u'%d' % self.range_poll.id,
            'range_polls-0-name': u'Current Range Poll 1',
            '%d_range_choices-0-id' % self.range_poll.id: (
                u'%d' % self.range_poll.id),
            '%d_range_choices-0-nominee' % self.range_poll.id: (
                u'%d' % self.user.id),
            '%d_range_choices-0-DELETE' % self.range_poll.id: False,
            '%d_range_choices-TOTAL_FORMS' % self.range_poll.id: u'1',
            '%d_range_choices-INITIAL_FORMS' % self.range_poll.id: u'1',
            '%d_range_choices-MAX_NUM_FORMS' % self.range_poll.id: u'1000'}

        self.empty_radio_formset = {
            'radio_polls-TOTAL_FORMS': u'0',
            'radio_polls-INITIAL_FORMS': u'0',
            'radio_polls-MAX_NUM_FORMS': u'1000'}

        self.empty_range_formset = {
            'range_polls-TOTAL_FORMS': u'0',
            'range_polls-INITIAL_FORMS': u'0',
            'range_polls-MAX_NUM_FORMS': u'1000'}

        RangePollFormset = inlineformset_factory(Poll,
                                                 RangePoll,
                                                 formset=forms.BaseRangePollInlineFormSet,
                                                 extra=1,
                                                 exclude=('votes',),
                                                 can_delete=True)
        RadioPollFormset = inlineformset_factory(Poll,
                                                 RadioPoll,
                                                 formset=forms.BaseRadioPollInlineFormSet,
                                                 extra=1,
                                                 can_delete=True,
                                                 exclude=('votes',))

        self.range_poll_formset = RangePollFormset(self.range_formset_data,
                                                   instance=self.poll,
                                                   user_list=self.user_list)
        self.radio_poll_formset = RadioPollFormset(self.radio_formset_data, instance=self.poll)
        self.radio_poll_formset_empty = RadioPollFormset(self.empty_radio_formset,
                                                         instance=self.poll)
        self.range_poll_formset_empty = RangePollFormset(self.empty_range_formset,
                                                         instance=self.poll,
                                                         user_list=self.user_list)