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_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_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']])
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
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_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_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)
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']])
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'])
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]))
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 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]))
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 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)
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)
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)
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)
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'])
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'])
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
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'])
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)
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'])
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)
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)
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)
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))
def create_idea(user=None): if not user: user = random_user() state = models.State.objects.get(name='Active') idea = models.Idea(creator=user, title='Transit subsidy to Mars', text='Aliens need assistance.', state=state) banner = models.Banner(id=1, title="AAAA", text="text1", start_date=date.today()) banner.save() idea.banner = banner idea.save() idea.tags.add("test tag") return idea
def test_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()]))
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')
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()]))
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)
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'])
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_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')
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)
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_tags_count(self, render): """ Tag list should include tag count. """ user = random_user() state = models.State.objects.get(name='Active') state.save() # Make 13 tags, and assign each to a set of ideas for count in range(13): tag = str(count) * 4 for i in range(count + 1): idea = models.Idea(creator=user, title=str(i) * 4, text=str(i) * 4 + ' Text', state=state) idea.save() idea.tags.add(tag) # create some dummy tags for private banner ideas # these tags should not be reflected in the tag count banner = models.Banner(id=1, title="XXXX", text="text", is_private=True, start_date=datetime.date.today()) banner.save() for count in range(5): tag = str(count) * 4 for i in range(count + 1): idea = models.Idea(creator=user, title=str(i) * 4 + '2', text=str(i) * 42 + ' Text', state=state, banner_id=1) idea.save() idea.tags.add(tag) views.list(mock_req()) context = render.call_args[0][2] self.assertTrue('tags' in context) for i in range(12, 2, -1): tag = context['tags'][12 - i] self.assertTrue(hasattr(tag, 'count')) self.assertEqual(i + 1, tag.count)
def 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"]]))
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)
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)
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')
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']]))
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)
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']])
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]))
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']]))
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']]))
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)