Пример #1
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)
Пример #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_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)
Пример #4
0
 def test_duplicate_idea(self):
     """ Test an duplicate POST submission to add an idea. """
     login(self)
     self.assertEquals(models.Idea.objects.all().count(), 0)
     resp = self.client.post(reverse('idea:add_idea'), {'title':'test title', 'summary':'test summary', 'text':'test text', 'tags':'test, tags'})
     self.assertEquals(models.Idea.objects.all().count(), 1)
     resp = self.client.post(reverse('idea:add_idea'), {'title':'test title', 'summary':'new summary', 'text':'new text', 'tags':'new, tags'})
     self.assertEqual(resp.status_code, 302)
     self.assertIn('detail', resp['Location'])
     self.assertEquals(models.Idea.objects.all().count(), 1)
Пример #5
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)
Пример #6
0
    def test_good_idea(self):
        """ Test an normal POST submission to add an idea. """
        login(self)
        self.assertEquals(models.Idea.objects.all().count(), 0)
        num_voters = get_user_model().objects.filter(vote__idea__pk=1, vote__vote=1).count()
        self.assertEqual(num_voters, 0)
        resp = self.client.post(reverse('idea:add_idea'), {'title':'test title', 'summary':'test summary', 'text':'test text', 'tags':'test, tags'})
        self.assertContains(resp, 'Thanks for sharing your Idea')
        self.assertEquals(models.Idea.objects.all().count(), 1)

        num_voters = get_user_model().objects.filter(vote__idea__pk=1, vote__vote=1).count()
        self.assertEqual(num_voters, 1)
Пример #7
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')
Пример #8
0
    def test_bad_idea(self):
        """ Test an incomplete POST submission to add an idea. """

        login(self)
        self.assertEquals(models.Idea.objects.all().count(), 0)
        num_voters = get_user_model().objects.filter(vote__idea__pk=1, vote__vote=1).count()
        self.assertEqual(num_voters, 0)
        resp = self.client.post(reverse('idea:add_idea'), {'text':'test text'})
        self.assertEqual(resp.status_code, 200)
        self.assertIn('This field is required.', resp.content)
        self.assertEquals(models.Idea.objects.all().count(), 0)

        num_voters = get_user_model().objects.filter(vote__idea__pk=1, vote__vote=1).count()
        self.assertEqual(num_voters, 0)
Пример #9
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')
Пример #10
0
 def test_must_be_logged_in(self):
     """ A user must be logged in to edit an idea. """
     user = login(self)
     idea = create_idea(user=user)
     self.client.logout()
     resp = self.client.post(reverse('idea:edit_idea', args=(idea.id,)), {'title':'test title', 'summary':'test summary', 'text':'test text'})
     self.assertEqual(resp.status_code, 302)
     self.assertIn('login', resp['Location'])
Пример #11
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)
Пример #12
0
    def test_bad_idea(self):
        """ Test an incomplete POST submission to add an idea. """

        login(self)
        self.assertEquals(models.Idea.objects.all().count(), 0)
        num_voters = get_user_model().objects.filter(vote__idea__pk=1,
                                                     vote__vote=1).count()
        self.assertEqual(num_voters, 0)
        resp = self.client.post(reverse('idea:add_idea'),
                                {'text': 'test text'})
        self.assertEqual(resp.status_code, 200)
        self.assertIn('This field is required.', resp.content)
        self.assertEquals(models.Idea.objects.all().count(), 0)

        num_voters = get_user_model().objects.filter(vote__idea__pk=1,
                                                     vote__vote=1).count()
        self.assertEqual(num_voters, 0)
Пример #13
0
    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)
Пример #14
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)
Пример #15
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)
Пример #16
0
    def test_tagged_item_creator(self):
        """ Test tag fields from a normal POST submission to add an idea. """

        user = login(self)
        self.assertEquals(models.Idea.objects.all().count(), 0)
        resp = self.client.post(reverse('idea:add_idea'), {'title':'test title', 'summary':'test summary', 'text':'test text', 'tags':'test, tags'})
        tagged_items = TaggedItem.objects.filter(content_type__name='idea')
        self.assertEqual(2, tagged_items.count())
        idea = models.Idea.objects.all()[0]
        for ti in tagged_items:
            self.assertEqual(user, ti.tag_creator)
Пример #17
0
    def test_good_idea(self):
        """ Test an normal POST submission to add an idea. """
        login(self)
        self.assertEquals(models.Idea.objects.all().count(), 0)
        num_voters = get_user_model().objects.filter(vote__idea__pk=1,
                                                     vote__vote=1).count()
        self.assertEqual(num_voters, 0)
        resp = self.client.post(
            reverse('idea:add_idea'), {
                'title': 'test title',
                'summary': 'test summary',
                'text': 'test text',
                'tags': 'test, tags'
            })
        self.assertContains(resp, 'Thanks for sharing your Idea')
        self.assertEquals(models.Idea.objects.all().count(), 1)

        num_voters = get_user_model().objects.filter(vote__idea__pk=1,
                                                     vote__vote=1).count()
        self.assertEqual(num_voters, 1)
Пример #18
0
    def test_edit_ignores_tags(self):
        """ A user must be logged in to edit an idea. """

        user = login(self)
        idea = create_idea(user=user)
        resp = self.client.post(reverse('idea:edit_idea', args=(idea.id,)), {'title':'test title', 'summary':'test summary', 'text':'test text', 'tags':'sample, newtag'})
        self.assertEqual(resp.status_code, 302)
        self.assertIn('detail', resp['Location'])

        refresh_idea = models.Idea.objects.get(id=idea.id)
        self.assertEqual(refresh_idea.tags.count(), 1)
        self.assertEqual(refresh_idea.tags.all()[0].name, "test tag")
Пример #19
0
 def test_must_be_logged_in(self):
     """ A user must be logged in to edit an idea. """
     user = login(self)
     idea = create_idea(user=user)
     self.client.logout()
     resp = self.client.post(reverse('idea:edit_idea', args=(idea.id, )), {
         'title': 'test title',
         'summary': 'test summary',
         'text': 'test text'
     })
     self.assertEqual(resp.status_code, 302)
     self.assertIn('login', resp['Location'])
Пример #20
0
 def test_duplicate_idea(self):
     """ Test an duplicate POST submission to add an idea. """
     login(self)
     self.assertEquals(models.Idea.objects.all().count(), 0)
     resp = self.client.post(
         reverse('idea:add_idea'), {
             'title': 'test title',
             'summary': 'test summary',
             'text': 'test text',
             'tags': 'test, tags'
         })
     self.assertEquals(models.Idea.objects.all().count(), 1)
     resp = self.client.post(
         reverse('idea:add_idea'), {
             'title': 'test title',
             'summary': 'new summary',
             'text': 'new text',
             'tags': 'new, tags'
         })
     self.assertEqual(resp.status_code, 302)
     self.assertIn('detail', resp['Location'])
     self.assertEquals(models.Idea.objects.all().count(), 1)
Пример #21
0
    def test_bad_edit_idea(self):
        """ Test an incomplete POST submission to edit an idea. """
        user = login(self)
        idea = create_idea(user=user)

        resp = self.client.post(reverse('idea:edit_idea', args=(idea.id,)), {'text':'new title'})
        self.assertEqual(resp.status_code, 200)
        self.assertIn('This field is required.', resp.content)
        self.assertEquals(models.Idea.objects.all().count(), 1)

        refresh_idea = models.Idea.objects.get(id=idea.id)
        self.assertEqual(refresh_idea.title, idea.title)
        self.assertEqual(refresh_idea.banner, idea.banner)
Пример #22
0
    def test_anonymous_comment_hidden_name(self):
        idea = create_idea()
        data = get_valid_form_data(idea)
        data['is_anonymous'] = True

        f = MPTTCommentForm(idea, data=data)
        c = f.get_comment_object()
        c.save()

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

        # add a second comment where anonymous = False
        data['is_anonymous'] = False
        data['comment'] = "new comment"
        f = MPTTCommentForm(idea, data=data)
        c = f.get_comment_object()
        c.save()

        resp = self.client.get(reverse('idea:idea_detail', args=(idea.id, )))
        self.assertTrue(data['name'] in resp.content)
Пример #23
0
    def test_bad_edit_idea(self):
        """ Test an incomplete POST submission to edit an idea. """
        user = login(self)
        idea = create_idea(user=user)

        resp = self.client.post(reverse('idea:edit_idea', args=(idea.id, )),
                                {'text': 'new title'})
        self.assertEqual(resp.status_code, 200)
        self.assertIn('This field is required.', resp.content)
        self.assertEquals(models.Idea.objects.all().count(), 1)

        refresh_idea = models.Idea.objects.get(id=idea.id)
        self.assertEqual(refresh_idea.title, idea.title)
        self.assertEqual(refresh_idea.banner, idea.banner)
Пример #24
0
    def test_anonymous_comment_hidden_name(self):
        idea = create_idea()
        data = get_valid_form_data(idea)
        data['is_anonymous'] = True

        f = MPTTCommentForm(idea, data=data)
        c = f.get_comment_object()
        c.save()

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

        # add a second comment where anonymous = False
        data['is_anonymous'] = False
        data['comment'] = "new comment"
        f = MPTTCommentForm(idea, data=data)
        c = f.get_comment_object()
        c.save()

        resp = self.client.get(reverse('idea:idea_detail', args=(idea.id,)))
        self.assertTrue(data['name'] in resp.content)
Пример #25
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)
Пример #26
0
    def test_tagged_item_creator(self):
        """ Test tag fields from a normal POST submission to add an idea. """

        user = login(self)
        self.assertEquals(models.Idea.objects.all().count(), 0)
        resp = self.client.post(
            reverse('idea:add_idea'), {
                'title': 'test title',
                'summary': 'test summary',
                'text': 'test text',
                'tags': 'test, tags'
            })
        tagged_items = TaggedItem.objects.filter(content_type__name='idea')
        self.assertEqual(2, tagged_items.count())
        idea = models.Idea.objects.all()[0]
        for ti in tagged_items:
            self.assertEqual(user, ti.tag_creator)
Пример #27
0
    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)
Пример #28
0
    def test_edit_ignores_tags(self):
        """ A user must be logged in to edit an idea. """

        user = login(self)
        idea = create_idea(user=user)
        resp = self.client.post(
            reverse('idea:edit_idea', args=(idea.id, )), {
                'title': 'test title',
                'summary': 'test summary',
                'text': 'test text',
                'tags': 'sample, newtag'
            })
        self.assertEqual(resp.status_code, 302)
        self.assertIn('detail', resp['Location'])

        refresh_idea = models.Idea.objects.get(id=idea.id)
        self.assertEqual(refresh_idea.tags.count(), 1)
        self.assertEqual(refresh_idea.tags.all()[0].name, "test tag")
Пример #29
0
    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)
Пример #30
0
    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)