Exemple #1
0
    def test_exclude_private_tags(self, render):
        """
        Check that the tag list does not include tags only used for
        private banners
        """
        user = random_user()
        state = models.State.objects.get(name='Active')
        state.save()

        pub_banner = create_banner('Public')
        priv_banner = create_banner('Private', is_private=True)

        pub_idea = models.Idea(creator=user,
                               title='AAAA',
                               text='AAAA Text',
                               state=state,
                               banner_id=pub_banner.id)
        pub_idea.save()
        priv_idea = models.Idea(creator=user,
                                title='BBBB',
                                text='BBBB Text',
                                state=state,
                                banner_id=priv_banner.id)
        priv_idea.save()

        pub_idea.tags.add('bbb', 'ccc', 'ddd')
        priv_idea.tags.add('ddd', 'eee', 'fff')
        views.list(mock_req())
        context = render.call_args[0][2]
        self.assertTrue('tags' in context)
        self.assertEqual(3, len(context['tags']))
        self.assertEqual(set(['bbb', 'ccc', 'ddd']),
                         set([t.name for t in context['tags']]))
    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)
    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_tags_top_list(self, render):
        """
        Tag list should be in proper order.
        """
        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(30):
            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)

        views.list(mock_req())
        context = render.call_args[0][2]
        self.assertTrue('tags' in context)
        self.assertEqual(25, len(context['tags']))
        # 29292929, 28282828, 27272727, ...
        self.assertEqual([str(i) * 4 for i in range(29, 4, -1)],
                         [t.name for t in context['tags']])
Exemple #5
0
    def test_vote_twice(self):
        """
            Voting twice shouldn't do anything to the vote count (it's
            idempotent).
        """
        idea = models.Idea(creator=random_user(),
                           title='Transit subsidy to Mars',
                           text='Aliens need assistance.',
                           state=self.state)
        idea.save()

        self.client.login(username='******', password='******')
        resp = self.client.post(
            reverse('upvote_idea'), {
                'idea_id': idea.id,
                'next': reverse('idea_detail', args=(idea.id, ))
            })
        self.assertEqual(resp.status_code, 302)
        self.assertEqual(len(idea.vote_set.all()), 1)

        resp = self.client.post(
            reverse('upvote_idea'), {
                'idea_id': idea.id,
                'next': reverse('idea_detail', args=(idea.id, ))
            })
        self.assertEqual(resp.status_code, 302)
        self.assertEqual(len(idea.vote_set.all()), 1)
    def test_tags_count(self, render):
        """
        Tag list should include tag count.
        """
        user = random_user()
        state = models.State.objects.get(name='Active')
        state.save()

        self._generate_data(entry_data=None)

        #   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,
                                   banner_id=1)
                idea.save()
                idea.tags.add(tag)

        views.challenge_detail(mock_req(), banner_id=1)
        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 = random_user()
    state = models.State.objects.get(name='Active')
    state.save()
    idea = models.Idea(creator=user, title='AAAA', text='AA Text', state=state)
    idea.save()
    return idea
Exemple #8
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)
Exemple #9
0
 def test_idea_correct(self, render):
     """
     The idea passed to the ui should be that identified by the id.
     """
     user = User.objects.create_user('example')
     state = models.State.objects.get(name='Active')
     idea1 = models.Idea(creator=user, title='title', text='text',
             state=state)
     idea2 = models.Idea(creator=user, title='title', text='text',
             state=state)
     idea1.save()
     idea2.save()
     views.detail(mock_req(), str(idea2.id))
     context = render.call_args[0][2]
     self.assertTrue('idea' in context)
     self.assertEqual(idea2.id, context['idea'].id)
     self.assertEqual(idea2.title, context['idea'].title)
Exemple #10
0
    def test_members(self):
        user = random_user()
        idea = models.Idea(creator=user,
                           title='Transit subsidy to Mars',
                           text='Aliens need assistance.',
                           state=self.state)
        idea.save()

        self.assertEqual(len(idea.members), 1)
        self.assertIn(user, idea.members)
Exemple #11
0
 def test_404s(self):
     """
     Should get a 404 when using a bad idea_id.
     """
     user = User.objects.create_user('example')
     state = models.State.objects.get(name='Active')
     idea = models.Idea(creator=user, title='title', text='text',
             state=state)
     idea.save()
     self.assertRaises(Http404, views.detail, mock_req(), '1234')
Exemple #12
0
 def make_idea(nonce, title):
     kwargs = {
         'creator': user,
         'title': title,
         'text': title + ' Text',
         'state': state
     }
     paramfn(kwargs, nonce)
     idea = models.Idea(**kwargs)
     idea.save()
     postfn(idea, nonce)
     return idea
Exemple #13
0
    def test_tag_form_exists(self, render):
        """
        Detail page should have a form for adding tags.
        """
        idea = models.Idea(creator=random_user(), title='AAAA', 
                state = models.State.objects.get(name='Active'))
        idea.save()

        views.detail(mock_req(), str(idea.id))
        context = render.call_args[0][2]
        self.assertTrue('tag_form' in context)
        self.assertTrue(isinstance(context['tag_form'], IdeaTagForm))
Exemple #14
0
    def test_tag_remove_not_exists_for_different_idea(self):
        """
        Detail page does not allow for removal of tags created by a different user
        """
        user1 = login(self)
        user2 = random_user()
        idea = models.Idea(creator=user1,
                           title='AAAA',
                           state=models.State.objects.get(name='Active'))
        idea.save()
        idea2 = models.Idea(creator=user2,
                            title='BBBB',
                            state=models.State.objects.get(name='Active'))
        idea2.save()
        add_tags(idea, 'AAA', None, user1, 'idea')
        add_tags(idea2, 'AAA', None, user2, 'idea')

        response = self.client.get(
            reverse("idea:idea_detail", args=(str(idea2.id), )))
        self.assertContains(response, 'aaa')
        self.assertNotContains(response, 'tag_remove')
Exemple #15
0
    def test_similar(self, render):
        """
        List of similar ideas should make sense.
        """
        class Mock():
            pass

        with patch('idea.views.more_like_text') as mlt:
            backend.SearchBackend().clear()
            user = random_user()
            state = models.State.objects.get(name='Active')
            similar1 = models.Idea(creator=user,
                                   title='airplanes',
                                   state=state,
                                   text="Title is enough said.")
            similar1.save()
            similar2 = models.Idea(creator=user,
                                   title='exexex',
                                   state=state,
                                   text="I, too, love submarines.")
            similar2.save()

            models.Idea(creator=user,
                        title='AAAAAA',
                        state=state,
                        text='BBBBBB').save()

            m1, m2 = Mock(), Mock()
            m1.object = similar1
            m2.object = similar2
            mlt.return_value = [m1, m2]

            views.add_idea(
                mock_req('/?idea_title=' + 'Airplanes%20and%20submarines'))
            context = render.call_args[0][2]
            self.assertTrue('similar' in context)
            self.assertEqual(2, len(context['similar']))
            self.assertEqual(set(context['similar']), set([similar1,
                                                           similar2]))
Exemple #16
0
 def test_must_logged_in(self):
     """ 
         A user must be logged in to vote. 
     """
     idea = models.Idea(creator=random_user(),
                        title='Transit subsidy to Mars',
                        text='Aliens need assistance.',
                        state=self.state)
     idea.save()
     resp = self.client.post(
         reverse('upvote_idea'), {
             'idea_id': idea.id,
             'next': reverse('idea_detail', args=(idea.id, ))
         })
     self.assertIn('up', resp['Location'])
    def test_anonymous_idea_hidden_name(self):
        user = random_user()
        state = models.State.objects.get(name='Active')
        state.save()
        idea = models.Idea(creator=user,
                           title='AAAA',
                           text='AA Text',
                           state=state)
        idea.save()

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

        idea2 = models.Idea(creator=user,
                            title='BBBB',
                            text='BB Text',
                            state=state,
                            is_anonymous=True)
        idea2.save()

        resp = self.client.get(reverse('idea:idea_detail', args=(idea2.id, )))
        self.assertFalse(user.first_name in resp.content)
Exemple #18
0
    def test_tag_remove_exists_for_creator(self):
        """
        Detail page allows for removal of tags created by the current user
        """
        user1 = login(self)
        idea = models.Idea(creator=user1,
                           title='AAAA',
                           state=models.State.objects.get(name='Active'))
        idea.save()
        add_tags(idea, 'AAA', None, user1, 'idea')

        response = self.client.get(
            reverse("idea:idea_detail", args=(str(idea.id), )))
        self.assertContains(response, 'aaa')
        self.assertContains(response, 'tag_remove')
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
Exemple #20
0
    def test_idea_no_support(self, render):
        """
        Check support = False if no votes.
        """
        user = random_user()
        state = models.State.objects.get(name='Active')
        idea = models.Idea(creator=user, title='title', text='text',
                state=state)
        idea.save()

        for _ in range(7):
            models.Vote(creator=random_user(), idea=idea).save()

        views.detail(mock_req(), str(idea.id))
        context = render.call_args[0][2]
        self.assertTrue('support' in context)
        self.assertFalse(context['support'])
Exemple #21
0
    def test_edit_idea_tag(self):
        """
        Check that adding a new idea allows the associated tag to be
        immediately searchable.
        """
        idea = models.Idea(creator=random_user(),
                           title='title',
                           state=models.State.objects.get(name='Active'))
        idea.save()
        results = backend.SearchBackend().search('example_tag')
        self.assertEqual(0, results['hits'])

        req = RequestFactory().post('/', {'tags': 'example_tag'})
        req.user = random_user()
        views.detail(req, str(idea.id))
        results = backend.SearchBackend().search('example_tag')
        self.assertEqual(1, results['hits'])
Exemple #22
0
    def test_good_vote(self):
        user = random_user()
        idea = models.Idea(creator=user,
                           title='Transit subsidy to Mars',
                           text='Aliens need assistance.',
                           state=self.state)
        idea.save()

        self.client.login(username='******', password='******')

        resp = self.client.post(
            reverse('upvote_idea'), {
                'idea_id': idea.id,
                'next': reverse('idea_detail', args=(idea.id, ))
            })
        self.assertEqual(resp.status_code, 302)
        self.assertEqual(len(idea.vote_set.all()), 1)
    def test_tag_form_submission(self):
        """
        Detail page tag form submission should add tags.
        """
        idea = models.Idea(creator=random_user(),
                           title='AAAA',
                           state=models.State.objects.get(name='Active'))
        idea.save()
        idea.tags.add('aaa', 'bbb', 'ccc')

        req = RequestFactory().post('/', {'tags': 'DDD, EEE, ZZZ,'})
        req.user = random_user()
        views.detail(req, str(idea.id))

        idea = models.Idea.objects.get(id=idea.id)
        tags = set([tag.name for tag in idea.tags.all()])
        self.assertEqual(set(['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'zzz']), tags)
Exemple #24
0
    def test_like_display(self):
        user = random_user()
        idea = models.Idea(
            creator=user,
            title='We need more meetings',
            text='Seriously - more meetings are productivity++.',
            state=self.state)
        idea.save()

        self.client.login(username='******', password='******')

        resp = self.client.post(
            reverse('idea:upvote_idea'), {
                'idea_id': idea.id,
                'next': reverse('idea:idea_detail', args=(idea.id, ))
            })
        self.assertEqual(resp.status_code, 302)
        self.assertEqual(len(idea.vote_set.all()), 1)
Exemple #25
0
    def test_members_with_voters(self):
        user = random_user()
        idea = models.Idea(creator=user,
                           title='Transit subsidy to Mars',
                           text='Aliens need assistance.',
                           state=self.state)
        idea.save()

        voter = random_user()
        self.assertNotEqual(user, voter)
        vote = models.Vote()
        vote.idea = idea
        vote.creator = voter
        vote.save()

        self.assertEqual(len(idea.members), 1)
        self.assertNotIn(voter, idea.members)
        self.assertIn(user, idea.members)
Exemple #26
0
    def test_vote_twice(self):
        """
            When a vote exists from a user, the user should see the "Liked" button.
            When another vote_up function is called, the user should see the "Like" button
            and the initial vote should be deleted.
        """
        idea = models.Idea(creator=random_user(),
                           title='Transit subsidy to Mars',
                           text='Aliens need assistance.',
                           state=self.state)
        idea.save()

        #Login and create a vote
        login(self)
        resp = self.client.post(
            reverse('idea:upvote_idea'), {
                'idea_id': idea.id,
                'next': reverse('idea:idea_detail', args=(idea.id, ))
            })
        self.assertEqual(resp.status_code, 302)
        self.assertEqual(len(idea.vote_set.all()), 1)

        #Check to see that the vote appears, and that button displays liked
        resp = self.client.get(reverse('idea:idea_detail', args=(idea.id, )))
        self.assertContains(resp,
                            'value="Liked" id="vote_down"',
                            status_code=200,
                            html=False)

        #Click unlike and remove the vote and confirm it doesn't exist
        resp = self.client.post(
            reverse('idea:upvote_idea'), {
                'idea_id': idea.id,
                'next': reverse('idea:idea_detail', args=(idea.id, ))
            })
        self.assertEqual(resp.status_code, 302)
        self.assertEqual(len(idea.vote_set.all()), 0)

        #Check to see that the button on page displays Like option
        resp = self.client.get(reverse('idea:idea_detail', args=(idea.id, )))
        self.assertContains(resp,
                            'value="Like" id="vote_up"',
                            status_code=200,
                            html=False)
Exemple #27
0
    def test_tags(self, render):
        """
        Include a sorted list of tags for this idea.
        """
        user = random_user()
        state = models.State.objects.get(name='Active')
        idea = models.Idea(creator=user, title='title', text='text',
                state=state)
        idea.save()

        tags = [str(random.randint(11111, 99999)) for _ in range(20)]
        idea.tags.add(*tags)

        views.detail(mock_req(), str(idea.id))
        context = render.call_args[0][2]
        self.assertTrue('tags' in context)
        self.assertEqual(20, len(context['tags']))

        tags.sort()
        self.assertEqual(tags, [tag.name for tag in context['tags']])
Exemple #28
0
    def test_idea_voters(self, render):
        """
        The idea passed to the ui should have the correct voters.
        """
        user = User.objects.create_user('example')
        state = models.State.objects.get(name='Active')
        idea = models.Idea(creator=user, title='title', text='text',
                state=state)
        idea.save()

        users = []
        for i in range(5):
            users.append(User.objects.create_user('example' + str(i)))
            models.Vote(creator=users[i], idea=idea).save()

        views.detail(mock_req(), str(idea.id))
        context = render.call_args[0][2]
        self.assertTrue('voters' in context)
        self.assertEqual(5, len(context['voters']))
        self.assertEqual(set([u.id for u in users]), 
                set([v.id for v in context['voters']]))
Exemple #29
0
    def test_members_with_comment_by_same_user(self):
        user = random_user()
        idea = models.Idea(creator=user,
                           title='Transit subsidy to Mars',
                           text='Aliens need assistance.',
                           state=self.state)
        idea.save()

        commenter = user

        comment = MPTTComment()
        comment.user = commenter
        comment.content_object = idea
        comment.comment = 'Test'
        comment.is_public = True
        comment.is_removed = False
        comment.site_id = 1
        comment.submit_date = datetime.now()
        comment.save()

        self.assertEqual(len(idea.members), 1)
        self.assertIn(user, idea.members)
Exemple #30
0
    def test_tags_exist(self, render):
        """
        Check that the tag list is populated and only shows the top ten
        tags.
        """
        user = random_user()
        state = models.State.objects.get(name='Active')
        state.save()

        idea = models.Idea(creator=user,
                           title='AAAA',
                           text='AAAA Text',
                           state=state)
        idea.save()

        idea.tags.add('bbb', 'ccc', 'ddd')
        views.list(mock_req())
        context = render.call_args[0][2]
        self.assertTrue('tags' in context)
        self.assertEqual(3, len(context['tags']))
        self.assertEqual(set(['bbb', 'ccc', 'ddd']),
                         set([t.name for t in context['tags']]))