Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
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']])
Пример #4
0
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
Пример #5
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']]))
Пример #6
0
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
Пример #7
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)
Пример #8
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)
Пример #9
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()

        self._generate_data(entry_data=None)

        #   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, 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)
        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']])
Пример #10
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'])
Пример #11
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]))
Пример #12
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()

        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)
Пример #13
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 = connections['default'].get_backend()
            backend.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]))
Пример #14
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()

        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)
Пример #15
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)
Пример #16
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)
Пример #17
0
    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)
Пример #18
0
    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)
Пример #19
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'])
Пример #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'])
Пример #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'])
Пример #22
0
def get_valid_form_data(obj):
    f = MPTTCommentForm(obj)
    data = {}
    data['comment'] = "sample comment"
    user = random_user()
    data['name'] = user.username
    data['email'] = user.email
    data.update(f.initial)
    return data
Пример #23
0
def get_valid_form_data(obj):
    f = MPTTCommentForm(obj)
    data = {}
    data['comment'] = "sample comment"
    user = random_user()
    data['name'] = user.username
    data['email'] = user.email
    data.update(f.initial)
    return data
Пример #24
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('idea:upvote_idea'), {'idea_id':idea.id, 'next':reverse('idea:idea_detail', args=(idea.id,))})
     self.assertIn('up', resp['Location'])
Пример #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)
Пример #26
0
    def test_private_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)

        # create some dummy tags that are not part of this banner's ideas
        for count in range(2):
            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)
                idea.save()
                idea.tags.add(tag)
        banner = models.Banner(id=2, title="XXXX", text="text", is_private=True,
                               start_date=datetime.date.today())
        banner.save()
        for count in range(2):
            tag = str(count)*4
            for i in range(count+1):
                idea = models.Idea(creator=user, title=str(i)*4+'3', 
                        text=str(i)*4 +'3 Text', state=state, banner_id=2)
                idea.save()
                idea.tags.add(tag)
        banner = models.Banner(id=3, title="XXXX", text="text", is_private=True,
                               start_date=datetime.date.today())
        banner.save()
        for count in range(2):
            tag = str(count)*4
            for i in range(count+1):
                idea = models.Idea(creator=user, title=str(i)*4+'4', 
                        text=str(i)*4 +'4 Text', state=state, banner_id=3)
                idea.save()
                idea.tags.add(tag)

        views.room_detail(mock_req(), slug='xxxx')
        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)
Пример #27
0
 def test_add_idea_title(self):
     """
     Check that adding a new idea allows title to be immediately
     searchable.
     """
     req = RequestFactory().post('/', {'title': 'example_title'})
     req.user = random_user()
     views.add_idea(req)
     results = backend.SearchBackend().search('example_title')
     self.assertEqual(1, results['hits'])
Пример #28
0
 def test_add_idea_title(self):
     """
     Check that adding a new idea allows title to be immediately
     searchable.
     """
     req = RequestFactory().post('/', {'title': 'example_title'})
     req.user = random_user()
     views.add_idea(req)
     results = backend.SearchBackend().search('example_title')
     self.assertEqual(1, results['hits'])
Пример #29
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)
Пример #30
0
    def test_members_with_comments(self):
        user = random_user()
        idea = models.Idea(creator=user, title='Transit subsidy to Mars',
                    text='Aliens need assistance.', state=self.state)
        idea.save()
        
        commenter = random_user()
        self.assertNotEqual(user, commenter)
        comment = Comment()
        comment.user = commenter
        comment.content_object = idea
        comment.comment = 'Test'
        comment.is_public = True
        comment.is_removed = False
        comment.site_id = 1
        comment.save()

        self.assertEqual(len(idea.members), 2)
        self.assertIn(commenter, idea.members)
        self.assertIn(user, idea.members)
Пример #31
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)
Пример #32
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()

        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)
Пример #33
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))
Пример #34
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))
Пример #35
0
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
Пример #36
0
    def test_tag_remove(self):
        """
        Detail page tag form submission should add tags.
        """
        user1 = random_user()
        idea = models.Idea(creator=user1, title='AAAA', 
                state = models.State.objects.get(name='Active'))
        idea.save()
        add_tags(idea, 'AAA', None, user1, 'idea')

        # Attempting to remove as a different user fails
        req = RequestFactory().post('/', {})
        req.user = random_user()
        response = views.remove_tag(req, str(idea.id), 'aaa')
        self.assertEqual(response.status_code, 302)
        self.assertIn('aaa', set([tag.slug for tag in idea.tags.all()]))

        # Attempting to remove as the creator succeeds
        req.user = user1
        response = views.remove_tag(req, str(idea.id), 'aaa')
        self.assertEqual(response.status_code, 302)
        self.assertNotIn('aaa', set([tag.slug for tag in idea.tags.all()]))
Пример #37
0
    def test_tag_remove_not_exists_for_random_user(self):
        """
        Detail page does not allow for removal of tags created by a different user
        """
        login(self)
        user1 = random_user()
        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.assertNotContains(response, 'tag_remove')
Пример #38
0
    def test_tag_remove(self):
        """
        Detail page tag form submission should add tags.
        """
        user1 = random_user()
        idea = models.Idea(creator=user1,
                           title='AAAA',
                           state=models.State.objects.get(name='Active'))
        idea.save()
        add_tags(idea, 'AAA', None, user1, 'idea')

        # Attempting to remove as a different user fails
        req = RequestFactory().post('/', {})
        req.user = random_user()
        response = views.remove_tag(req, str(idea.id), 'aaa')
        self.assertEqual(response.status_code, 302)
        self.assertIn('aaa', set([tag.slug for tag in idea.tags.all()]))

        # Attempting to remove as the creator succeeds
        req.user = user1
        response = views.remove_tag(req, str(idea.id), 'aaa')
        self.assertEqual(response.status_code, 302)
        self.assertNotIn('aaa', set([tag.slug for tag in idea.tags.all()]))
Пример #39
0
    def test_members_with_comments(self):
        user = random_user()
        idea = models.Idea(creator=user,
                           title='Transit subsidy to Mars',
                           text='Aliens need assistance.',
                           state=self.state)
        idea.save()

        commenter = random_user()
        self.assertNotEqual(user, commenter)
        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), 2)
        self.assertIn(commenter, idea.members)
        self.assertIn(user, idea.members)
Пример #40
0
 def test_add_idea_tag(self):
     """
     Check that adding a new idea allows the associated tag to be
     immediately searchable.
     """
     req = RequestFactory().post('/', {
         'title':'title',
         'summary': 'test summary',
         'text': 'test text',
         'tags': 'example_tag'
     })
     req.user = random_user()
     views.add_idea(req)
     results = self.backend.search('example_tag')
     self.assertEqual(1, results['hits'])
Пример #41
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'])
Пример #42
0
    def test_tag_remove_not_exists_for_random_user(self):
        """
        Detail page does not allow for removal of tags created by a different user
        """
        login(self)
        user1 = random_user()
        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.assertNotContains(response, 'tag_remove')
Пример #43
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('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)

        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)
Пример #44
0
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
Пример #45
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)
Пример #46
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)
Пример #47
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"]]))
Пример #48
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)
Пример #49
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)
Пример #50
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
        """
        self.client.login(username='******', password='******')
        user1 = User.objects.get(username='******')
        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')
Пример #51
0
    def test_private_tags_exist(self, render):
        """
        Check that the tag list is populated with ONLY tags from private belonging ideas.
        """
        user = random_user()
        state = models.State.objects.get(name='Active')
        state.save()

        self._generate_data(entry_data=None)

        # create some dummy tags that are not part of this banner's ideas
        banner = models.Banner(id=2, title="XXXX", text="text", is_private=False,
                               start_date=datetime.date.today())
        banner.save()
        for count in range(2):
            tag = str(count)*4
            for i in range(count+1):
                idea = models.Idea(creator=user, title=str(i)*4+'3', 
                        text=str(i)*4 +'3 Text', state=state, banner_id=2)
                idea.save()
                idea.tags.add(tag)
        banner = models.Banner(id=3, title="XXXX", text="text", is_private=True,
                               start_date=datetime.date.today())
        banner.save()
        for count in range(2):
            tag = str(count)*4
            for i in range(count+1):
                idea = models.Idea(creator=user, title=str(i)*4+'4', 
                        text=str(i)*4 +'4 Text', state=state, banner_id=3)
                idea.save()
                idea.tags.add(tag)

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

        idea.tags.add('bbb', 'ccc', 'ddd')
        views.room_detail(mock_req(), slug='xxxx')
        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']]))
Пример #52
0
    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)
Пример #53
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']])
Пример #54
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']])
Пример #55
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]))
Пример #56
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']]))
Пример #57
0
    def test_tags_exist(self, render):
        """
        Check that the tag list is populated.
        """
        user = random_user()
        state = models.State.objects.get(name='Active')
        state.save()

        self._generate_data(entry_data=None)

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

        idea.tags.add('bbb', 'ccc', 'ddd')
        views.challenge_detail(mock_req(), banner_id=1)
        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']]))
Пример #58
0
    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)