Exemple #1
0
 def test_get_current_banners(self):
     # Banners should be ordered by end date, nearest end date first
     yesterday = get_relative_date(-1)
     today = datetime.date.today()
     tomorrow = get_relative_date(+1)
     self.assertEqual(views.get_current_banners().count(), 0)
     banner1 = models.Banner(title="How would you improve our vacation policy?", 
             text="We would like to know what we can do to improve your work/life balance",
             start_date=yesterday, end_date=today)
     banner1.save()
     self.assertEqual(list(views.get_current_banners()), [banner1])
     banner2 = models.Banner(title="How would you improve our vacation policy?", 
             text="We would like to know what we can do to improve your work/life balance",
             start_date=today)
     banner2.save()
     self.assertEqual(list(views.get_current_banners()), [banner1,banner2])
     banner3 = models.Banner(title="How would you improve our vacation policy?", 
             text="We would like to know what we can do to improve your work/life balance",
             start_date=yesterday, end_date=yesterday)
     banner3.save()
     self.assertEqual(list(views.get_current_banners()), [banner1,banner2])
     banner4 = models.Banner(title="How would you improve our vacation policy?", 
             text="We would like to know what we can do to improve your work/life balance",
             start_date=tomorrow, end_date=tomorrow)
     banner4.save()
     self.assertEqual(list(views.get_current_banners()), [banner1,banner2])
     banner5 = models.Banner(title="How would you improve our vacation policy?", 
             text="We would like to know what we can do to improve your work/life balance",
             start_date=today, end_date=tomorrow)
     banner5.save()
     self.assertEqual(list(views.get_current_banners()), [banner1,banner5,banner2])
Exemple #2
0
    def test_add_idea_with_anonymous_option(self, render):
        """
        Verify that the anonymous field auto-populates only for
        ideas where banner is preset and the banner is private
        """

        banner1 = models.Banner(id=1,
                                title="AAAA",
                                text="text1",
                                start_date=date.today(),
                                is_private=True)
        banner1.save()
        banner2 = models.Banner(id=2,
                                title="BBBB",
                                text="text2",
                                start_date=date.today())
        banner2.save()

        views.add_idea(mock_req(), banner1.id)
        context = render.call_args[0][2]
        self.assertTrue(isinstance(context['form'], PrivateIdeaForm))
        self.assertIn("is_anonymous", context['form'].fields)
        self.assertNotIn("is_anonymous", context['form'].initial)

        views.add_idea(mock_req(), banner2.id)
        context = render.call_args[0][2]
        self.assertTrue(isinstance(context['form'], IdeaForm))
        self.assertNotIn("is_anonymous", context['form'].fields)
        self.assertNotIn("is_anonymous", context['form'].initial)
    def test_edit_idea_with_private_banner(self, render):
        """
        Verify that the private banner field auto-populates properly
        """
        user = login(self)
        state = models.State.objects.get(name='Active')

        idea1 = models.Idea(creator=user,
                            title='Transit subsidy to Venus',
                            text='Aliens need assistance.',
                            state=state)
        banner1 = models.Banner(id=1,
                                title="AAAA",
                                text="text1",
                                start_date=date.today(),
                                is_private=True)
        banner1.save()
        idea1.banner = banner1
        idea1.save()

        idea2 = models.Idea(creator=user,
                            title='Transit subsidy to Venus',
                            text='Aliens need assistance.',
                            state=state)
        banner2 = models.Banner(id=2,
                                title="BBBB",
                                text="text2",
                                start_date=date.today())
        banner2.save()
        idea2.banner = banner2
        idea2.save()

        views.edit_idea(mock_req(user=user), idea1.id)
        context = render.call_args[0][2]
        self.assertTrue('form' in context)
        self.assertTrue(isinstance(context['form'], PrivateIdeaForm))
        banner_field = context['form'].fields['banner']
        selected = context['form'].initial['banner']
        self.assertEqual(banner1.id, selected)
        self.assertEqual(
            context['form'].fields['banner'].widget.choices.field.empty_label,
            None)
        self.assertIn(banner1, banner_field._queryset)
        self.assertNotIn(banner2, banner_field._queryset)

        views.edit_idea(mock_req(user=user), idea2.id)
        context = render.call_args[0][2]
        self.assertTrue('form' in context)
        self.assertTrue(isinstance(context['form'], IdeaForm))
        self.assertFalse(isinstance(context['form'], PrivateIdeaForm))
        banner_field = context['form'].fields['banner']
        selected = context['form'].initial['banner']
        self.assertEqual(banner2.id, selected)
        self.assertEqual(
            context['form'].fields['banner'].widget.choices.field.empty_label,
            'Select')
        self.assertNotIn(banner1, banner_field._queryset)
        self.assertIn(banner2, banner_field._queryset)
Exemple #4
0
    def test_add_idea_with_private_banner(self, render):
        """
        Verify that the private banner field auto-populates properly
        """

        banner1 = models.Banner(id=1,
                                title="AAAA",
                                text="text1",
                                start_date=date.today(),
                                is_private=True)
        banner1.save()
        banner2 = models.Banner(id=2,
                                title="BBBB",
                                text="text2",
                                start_date=date.today())
        banner2.save()

        views.add_idea(mock_req())
        context = render.call_args[0][2]
        self.assertTrue('form' in context)
        self.assertTrue(isinstance(context['form'], IdeaForm))
        self.assertFalse(isinstance(context['form'], PrivateIdeaForm))
        banner_field = context['form'].fields['banner']
        selected = context['form'].initial['banner']
        self.assertEqual(None, selected)
        self.assertEqual(
            context['form'].fields['banner'].widget.choices.field.empty_label,
            'Select')
        self.assertNotIn(banner1, banner_field._queryset)
        self.assertIn(banner2, banner_field._queryset)

        views.add_idea(mock_req(), banner1.id)
        context = render.call_args[0][2]
        self.assertTrue(isinstance(context['form'], PrivateIdeaForm))
        banner_field = context['form'].fields['banner']
        selected = context['form'].initial['banner']
        self.assertEqual(banner1.id, selected)
        self.assertEqual(
            context['form'].fields['banner'].widget.choices.field.empty_label,
            None)
        self.assertIn(banner1, banner_field._queryset)
        self.assertNotIn(banner2, banner_field._queryset)

        views.add_idea(mock_req(), banner2.id)
        context = render.call_args[0][2]
        self.assertTrue(isinstance(context['form'], IdeaForm))
        self.assertFalse(isinstance(context['form'], PrivateIdeaForm))
        banner_field = context['form'].fields['banner']
        selected = context['form'].initial['banner']
        self.assertEqual(
            context['form'].fields['banner'].widget.choices.field.empty_label,
            'Select')
        self.assertEqual(banner2.id, selected)
        self.assertNotIn(banner1, banner_field._queryset)
        self.assertIn(banner2, banner_field._queryset)
def create_banner(title, delta_days=0, is_private=False):
    banner = models.Banner(title=title,
                           text=title + ' Text',
                           is_private=is_private,
                           start_date=datetime.datetime.now())
    banner.save()
    return banner
 def make_banner(nonce, title):
     kwargs = {'title': title, 'text': title + ' Text'}
     paramfn(kwargs, nonce)
     banner = models.Banner(**kwargs)
     banner.save()
     postfn(banner, nonce)
     return banner
    def test_anonymous_checkbox_absent(self):
        """
        Detail page should NOT have an anonymous checkbox for non-private
        banners and ideas without a banner
        """
        banner = models.Banner(id=1,
                               title="XXXX",
                               text="text",
                               is_private=False,
                               start_date=datetime.date.today())
        banner.save()

        idea = models.Idea(creator=random_user(),
                           title='AAAA',
                           banner=banner,
                           state=models.State.objects.get(name='Active'))
        idea.save()

        create_superuser()
        login(self)
        resp = self.client.get(reverse('idea:idea_detail', args=(idea.id, )))
        self.assertFalse('id_is_anonymous' in resp.content)

        idea2 = models.Idea(creator=random_user(),
                            title='BBBB',
                            banner=None,
                            state=models.State.objects.get(name='Active'))
        idea2.save()

        resp = self.client.get(reverse('idea:idea_detail', args=(idea2.id, )))
        self.assertFalse('id_is_anonymous' in resp.content)
Exemple #8
0
def create_banner(title, delta_days=0, is_private=False):
    banner = models.Banner(title=title,
                           text=title + ' Text',
                           is_private=is_private,
                           start_date=get_relative_date(-delta_days),
                           end_date=get_relative_date(delta_days))
    banner.save()
    return banner
Exemple #9
0
    def test_timed_before_indefinite(self):
        yesterday = get_relative_date(-1)
        tommorow = get_relative_date(+1)

        timed_banner = models.Banner(
            text="How would you improve our vacation policy?",
            start_date=yesterday,
            end_date=tommorow)
        timed_banner.save()

        banner = models.Banner(
            text="How would you improve our promotion process?",
            start_date=yesterday)
        banner.save()

        b = views.get_banner()
        self.assertIsNotNone(b)
        self.assertEquals(b.text, "How would you improve our vacation policy?")
Exemple #10
0
 def test_outside_timed(self):
     tomorrow = get_relative_date(+1)
     end = get_relative_date(+5)
     banner = models.Banner(title="How would you improve our vacation policy?", 
             text="We would like to know what we can do to improve your work/life balance",
             start_date=tomorrow, end_date=end)
     banner.save()
     b = views.get_banner()
     self.assertIsNone(b)
Exemple #11
0
    def test_timed_before_indefinite(self):
        yesterday = get_relative_date(-1)
        tomorrow = get_relative_date(+1)

        timed_banner = models.Banner(title="How would you improve our vacation policy?", 
                text="We would like to know what we can do to improve your work/life balance",
                start_date=yesterday, end_date=tomorrow)
        timed_banner.save()

        banner = models.Banner(title="How would you improve our promotion process?", 
                text="We would like to know what we can do to improve your work/life balance",
                start_date=yesterday)
        banner.save()

        b = views.get_banner()
        self.assertIsNotNone(b)
        self.assertEquals(b.title, "How would you improve our vacation policy?")
        self.assertEquals(b.text, "We would like to know what we can do to improve your work/life balance")
Exemple #12
0
 def test_outside_timed(self):
     tommorow = get_relative_date(+1)
     end = get_relative_date(+5)
     banner = models.Banner(
         text="How would you improve our vacation policy?",
         start_date=tommorow,
         end_date=end)
     banner.save()
     b = views.get_banner()
     self.assertIsNone(b)
Exemple #13
0
    def test_indefinite_banner(self):
        yesterday = get_relative_date(-1)
        banner = models.Banner(
            text="How would you improve our vacation policy?",
            start_date=yesterday)
        banner.save()

        b = views.get_banner()
        self.assertIsNotNone(b)
        self.assertEquals(b.text, "How would you improve our vacation policy?")
Exemple #14
0
    def test_timebound_banner(self):
        yesterday = get_relative_date(-1)
        tomorrow = get_relative_date(+1)
        banner = models.Banner(title="How would you improve our vacation policy?",
                text="We would like to know what we can do to improve your work/life balance",
                start_date=yesterday, end_date=tomorrow)
        banner.save()

        b = views.get_banner()
        self.assertIsNotNone(b)
Exemple #15
0
    def test_timebound_banner(self):
        yesterday = get_relative_date(-1)
        tommorow = get_relative_date(+1)
        banner = models.Banner(
            text="How would you improve our vacation policy?",
            start_date=yesterday,
            end_date=tommorow)
        banner.save()

        b = views.get_banner()
        self.assertIsNotNone(b)
    def test_banner_is_current(self, render):
        """
        Test boolean flag for banner status (active or not)
        """
        yesterday = get_relative_date(-1)
        today = datetime.date.today()
        tomorrow = get_relative_date(+1)

        banner = models.Banner(id=1,
                               title="XXXX",
                               text="text",
                               start_date=today)
        banner.save()

        banner2 = models.Banner(id=2,
                                title="XXXX",
                                text="text",
                                start_date=tomorrow)
        banner2.save()

        banner3 = models.Banner(id=3,
                                title="XXXX",
                                text="text",
                                start_date=yesterday,
                                end_date=today)
        banner3.save()

        views.challenge_detail(mock_req(), banner_id=1)
        context = render.call_args[0][2]
        self.assertTrue('is_current_banner' in context)
        self.assertTrue(context['is_current_banner'])

        views.challenge_detail(mock_req(), banner_id=2)
        context = render.call_args[0][2]
        self.assertTrue('is_current_banner' in context)
        self.assertFalse(context['is_current_banner'])

        views.challenge_detail(mock_req(), banner_id=3)
        context = render.call_args[0][2]
        self.assertTrue('is_current_banner' in context)
        self.assertTrue(context['is_current_banner'])
Exemple #17
0
    def test_add_idea_with_no_banner(self, render):
        """
        Verify that the banner field disappears if no current challenge
        """

        banner1 = models.Banner(id=1,
                                title="AAAA",
                                text="text1",
                                start_date=date.today() - timedelta(days=2),
                                end_date=date.today() - timedelta(days=1))
        banner1.save()
        banner2 = models.Banner(id=2,
                                title="BBBB",
                                text="text2",
                                start_date=date.today() + timedelta(days=1))
        banner2.save()

        views.add_idea(mock_req())
        context = render.call_args[0][2]
        self.assertTrue('form' in context)
        self.assertTrue(isinstance(context['form'], IdeaForm))
        self.assertNotIn('banner', context['form'].fields.keys())
Exemple #18
0
    def test_tags_count(self, render):
        """
        Tag list should include tag count.
        """
        user = random_user()
        state = models.State.objects.get(name='Active')
        state.save()

        #   Make 13 tags, and assign each to a set of ideas
        for count in range(13):
            tag = str(count) * 4
            for i in range(count + 1):
                idea = models.Idea(creator=user,
                                   title=str(i) * 4,
                                   text=str(i) * 4 + ' Text',
                                   state=state)
                idea.save()
                idea.tags.add(tag)

        # create some dummy tags for private banner ideas
        # these tags should not be reflected in the tag count
        banner = models.Banner(id=1,
                               title="XXXX",
                               text="text",
                               is_private=True,
                               start_date=datetime.date.today())
        banner.save()
        for count in range(5):
            tag = str(count) * 4
            for i in range(count + 1):
                idea = models.Idea(creator=user,
                                   title=str(i) * 4 + '2',
                                   text=str(i) * 42 + ' Text',
                                   state=state,
                                   banner_id=1)
                idea.save()
                idea.tags.add(tag)

        views.list(mock_req())
        context = render.call_args[0][2]
        self.assertTrue('tags' in context)

        for i in range(12, 2, -1):
            tag = context['tags'][12 - i]
            self.assertTrue(hasattr(tag, 'count'))
            self.assertEqual(i + 1, tag.count)
def create_idea(user=None):
    if not user:
        user = random_user()
    state = models.State.objects.get(name='Active')
    idea = models.Idea(creator=user,
                       title='Transit subsidy to Mars',
                       text='Aliens need assistance.',
                       state=state)
    banner = models.Banner(id=1,
                           title="AAAA",
                           text="text1",
                           start_date=date.today())
    banner.save()
    idea.banner = banner
    idea.save()
    idea.tags.add("test tag")
    return idea
    def test_edit_good_idea(self):
        """ Test an normal POST submission to edit an idea. """
        user = login(self)
        idea = create_idea(user=user)

        self.assertEquals(models.Idea.objects.all().count(), 1)
        new_title = "new title"
        new_summary = "new summary"
        new_text = "new text"
        new_banner = models.Banner(id=2,
                                   title="BBB",
                                   text="text2",
                                   start_date=date.today())
        new_banner.save()
        resp = self.client.post(
            reverse('idea:edit_idea', args=(idea.id, )), {
                'title': new_title,
                'summary': new_summary,
                'text': new_text,
                'banner': new_banner.id
            })
        self.assertEqual(resp.status_code, 302)
        self.assertIn('detail', resp['Location'])
        self.assertEquals(models.Idea.objects.all().count(), 1)

        # ensure editing an idea does not up the vote count
        # vote count is 0 because votes are added in views.add_idea, which is not used in this test
        num_voters = get_user_model().objects.filter(vote__idea__pk=idea.id,
                                                     vote__vote=1).count()
        self.assertEqual(num_voters, 0)

        refresh_idea = models.Idea.objects.get(id=idea.id)
        self.assertEqual(refresh_idea.title, new_title)
        self.assertEqual(refresh_idea.summary, new_summary)
        self.assertEqual(refresh_idea.text, new_text)
        self.assertEqual(refresh_idea.banner, new_banner)

        # verify the expected fields remain the same
        self.assertEqual(refresh_idea.tags.count(), 1)
        self.assertEqual(refresh_idea.tags.all()[0].name, "test tag")
        self.assertEqual(refresh_idea.creator, idea.creator)
    def _generate_data(self,
                       paramfn=lambda x, y: None,
                       postfn=lambda x, y: None,
                       entry_data=[(5, 'AAAA'), (9, 'BBBB'), (3, 'CCCC'),
                                   (7, 'DDDD'), (1, 'EEEE'), (11, 'FFFF')]):
        """
        Helper function to handle the idea (and related models) creation.
        """
        user = get_user_model().objects.create_user('example')
        state = models.State.objects.get(name='Active')
        state.save()

        banner = models.Banner(id=1,
                               title="XXXX",
                               text="text",
                               start_date=datetime.date.today())
        banner.save()

        def make_idea(nonce, title, banner=banner):
            kwargs = {
                'creator': user,
                'title': title,
                'banner': banner,
                'text': title + ' Text',
                'state': state
            }
            paramfn(kwargs, nonce)
            idea = models.Idea(**kwargs)
            idea.save()
            postfn(idea, nonce)
            return idea

        if entry_data:
            ideas = [make_idea(pair[0], pair[1]) for pair in entry_data]

        extra_ideas = [make_idea(pair[0], pair[1], pair[2]) \
                      for pair in [(24, 'ZZZZ', None), (25,'YYYY', None)]]