def test_get_current_banners(self): # Banners should be ordered by end date, nearest end date first yesterday = get_relative_date(-1) today = datetime.date.today() tomorrow = get_relative_date(+1) self.assertEqual(views.get_current_banners().count(), 0) banner1 = models.Banner(title="How would you improve our vacation policy?", text="We would like to know what we can do to improve your work/life balance", start_date=yesterday, end_date=today) banner1.save() self.assertEqual(list(views.get_current_banners()), [banner1]) banner2 = models.Banner(title="How would you improve our vacation policy?", text="We would like to know what we can do to improve your work/life balance", start_date=today) banner2.save() self.assertEqual(list(views.get_current_banners()), [banner1,banner2]) banner3 = models.Banner(title="How would you improve our vacation policy?", text="We would like to know what we can do to improve your work/life balance", start_date=yesterday, end_date=yesterday) banner3.save() self.assertEqual(list(views.get_current_banners()), [banner1,banner2]) banner4 = models.Banner(title="How would you improve our vacation policy?", text="We would like to know what we can do to improve your work/life balance", start_date=tomorrow, end_date=tomorrow) banner4.save() self.assertEqual(list(views.get_current_banners()), [banner1,banner2]) banner5 = models.Banner(title="How would you improve our vacation policy?", text="We would like to know what we can do to improve your work/life balance", start_date=today, end_date=tomorrow) banner5.save() self.assertEqual(list(views.get_current_banners()), [banner1,banner5,banner2])
def test_add_idea_with_anonymous_option(self, render): """ Verify that the anonymous field auto-populates only for ideas where banner is preset and the banner is private """ banner1 = models.Banner(id=1, title="AAAA", text="text1", start_date=date.today(), is_private=True) banner1.save() banner2 = models.Banner(id=2, title="BBBB", text="text2", start_date=date.today()) banner2.save() views.add_idea(mock_req(), banner1.id) context = render.call_args[0][2] self.assertTrue(isinstance(context['form'], PrivateIdeaForm)) self.assertIn("is_anonymous", context['form'].fields) self.assertNotIn("is_anonymous", context['form'].initial) views.add_idea(mock_req(), banner2.id) context = render.call_args[0][2] self.assertTrue(isinstance(context['form'], IdeaForm)) self.assertNotIn("is_anonymous", context['form'].fields) self.assertNotIn("is_anonymous", context['form'].initial)
def test_edit_idea_with_private_banner(self, render): """ Verify that the private banner field auto-populates properly """ user = login(self) state = models.State.objects.get(name='Active') idea1 = models.Idea(creator=user, title='Transit subsidy to Venus', text='Aliens need assistance.', state=state) banner1 = models.Banner(id=1, title="AAAA", text="text1", start_date=date.today(), is_private=True) banner1.save() idea1.banner = banner1 idea1.save() idea2 = models.Idea(creator=user, title='Transit subsidy to Venus', text='Aliens need assistance.', state=state) banner2 = models.Banner(id=2, title="BBBB", text="text2", start_date=date.today()) banner2.save() idea2.banner = banner2 idea2.save() views.edit_idea(mock_req(user=user), idea1.id) context = render.call_args[0][2] self.assertTrue('form' in context) self.assertTrue(isinstance(context['form'], PrivateIdeaForm)) banner_field = context['form'].fields['banner'] selected = context['form'].initial['banner'] self.assertEqual(banner1.id, selected) self.assertEqual( context['form'].fields['banner'].widget.choices.field.empty_label, None) self.assertIn(banner1, banner_field._queryset) self.assertNotIn(banner2, banner_field._queryset) views.edit_idea(mock_req(user=user), idea2.id) context = render.call_args[0][2] self.assertTrue('form' in context) self.assertTrue(isinstance(context['form'], IdeaForm)) self.assertFalse(isinstance(context['form'], PrivateIdeaForm)) banner_field = context['form'].fields['banner'] selected = context['form'].initial['banner'] self.assertEqual(banner2.id, selected) self.assertEqual( context['form'].fields['banner'].widget.choices.field.empty_label, 'Select') self.assertNotIn(banner1, banner_field._queryset) self.assertIn(banner2, banner_field._queryset)
def test_add_idea_with_private_banner(self, render): """ Verify that the private banner field auto-populates properly """ banner1 = models.Banner(id=1, title="AAAA", text="text1", start_date=date.today(), is_private=True) banner1.save() banner2 = models.Banner(id=2, title="BBBB", text="text2", start_date=date.today()) banner2.save() views.add_idea(mock_req()) context = render.call_args[0][2] self.assertTrue('form' in context) self.assertTrue(isinstance(context['form'], IdeaForm)) self.assertFalse(isinstance(context['form'], PrivateIdeaForm)) banner_field = context['form'].fields['banner'] selected = context['form'].initial['banner'] self.assertEqual(None, selected) self.assertEqual( context['form'].fields['banner'].widget.choices.field.empty_label, 'Select') self.assertNotIn(banner1, banner_field._queryset) self.assertIn(banner2, banner_field._queryset) views.add_idea(mock_req(), banner1.id) context = render.call_args[0][2] self.assertTrue(isinstance(context['form'], PrivateIdeaForm)) banner_field = context['form'].fields['banner'] selected = context['form'].initial['banner'] self.assertEqual(banner1.id, selected) self.assertEqual( context['form'].fields['banner'].widget.choices.field.empty_label, None) self.assertIn(banner1, banner_field._queryset) self.assertNotIn(banner2, banner_field._queryset) views.add_idea(mock_req(), banner2.id) context = render.call_args[0][2] self.assertTrue(isinstance(context['form'], IdeaForm)) self.assertFalse(isinstance(context['form'], PrivateIdeaForm)) banner_field = context['form'].fields['banner'] selected = context['form'].initial['banner'] self.assertEqual( context['form'].fields['banner'].widget.choices.field.empty_label, 'Select') self.assertEqual(banner2.id, selected) self.assertNotIn(banner1, banner_field._queryset) self.assertIn(banner2, banner_field._queryset)
def create_banner(title, delta_days=0, is_private=False): banner = models.Banner(title=title, text=title + ' Text', is_private=is_private, start_date=datetime.datetime.now()) banner.save() return banner
def make_banner(nonce, title): kwargs = {'title': title, 'text': title + ' Text'} paramfn(kwargs, nonce) banner = models.Banner(**kwargs) banner.save() postfn(banner, nonce) return banner
def test_anonymous_checkbox_absent(self): """ Detail page should NOT have an anonymous checkbox for non-private banners and ideas without a banner """ banner = models.Banner(id=1, title="XXXX", text="text", is_private=False, start_date=datetime.date.today()) banner.save() idea = models.Idea(creator=random_user(), title='AAAA', banner=banner, state=models.State.objects.get(name='Active')) idea.save() create_superuser() login(self) resp = self.client.get(reverse('idea:idea_detail', args=(idea.id, ))) self.assertFalse('id_is_anonymous' in resp.content) idea2 = models.Idea(creator=random_user(), title='BBBB', banner=None, state=models.State.objects.get(name='Active')) idea2.save() resp = self.client.get(reverse('idea:idea_detail', args=(idea2.id, ))) self.assertFalse('id_is_anonymous' in resp.content)
def create_banner(title, delta_days=0, is_private=False): banner = models.Banner(title=title, text=title + ' Text', is_private=is_private, start_date=get_relative_date(-delta_days), end_date=get_relative_date(delta_days)) banner.save() return banner
def test_timed_before_indefinite(self): yesterday = get_relative_date(-1) tommorow = get_relative_date(+1) timed_banner = models.Banner( text="How would you improve our vacation policy?", start_date=yesterday, end_date=tommorow) timed_banner.save() banner = models.Banner( text="How would you improve our promotion process?", start_date=yesterday) banner.save() b = views.get_banner() self.assertIsNotNone(b) self.assertEquals(b.text, "How would you improve our vacation policy?")
def test_outside_timed(self): tomorrow = get_relative_date(+1) end = get_relative_date(+5) banner = models.Banner(title="How would you improve our vacation policy?", text="We would like to know what we can do to improve your work/life balance", start_date=tomorrow, end_date=end) banner.save() b = views.get_banner() self.assertIsNone(b)
def test_timed_before_indefinite(self): yesterday = get_relative_date(-1) tomorrow = get_relative_date(+1) timed_banner = models.Banner(title="How would you improve our vacation policy?", text="We would like to know what we can do to improve your work/life balance", start_date=yesterday, end_date=tomorrow) timed_banner.save() banner = models.Banner(title="How would you improve our promotion process?", text="We would like to know what we can do to improve your work/life balance", start_date=yesterday) banner.save() b = views.get_banner() self.assertIsNotNone(b) self.assertEquals(b.title, "How would you improve our vacation policy?") self.assertEquals(b.text, "We would like to know what we can do to improve your work/life balance")
def test_outside_timed(self): tommorow = get_relative_date(+1) end = get_relative_date(+5) banner = models.Banner( text="How would you improve our vacation policy?", start_date=tommorow, end_date=end) banner.save() b = views.get_banner() self.assertIsNone(b)
def test_indefinite_banner(self): yesterday = get_relative_date(-1) banner = models.Banner( text="How would you improve our vacation policy?", start_date=yesterday) banner.save() b = views.get_banner() self.assertIsNotNone(b) self.assertEquals(b.text, "How would you improve our vacation policy?")
def test_timebound_banner(self): yesterday = get_relative_date(-1) tomorrow = get_relative_date(+1) banner = models.Banner(title="How would you improve our vacation policy?", text="We would like to know what we can do to improve your work/life balance", start_date=yesterday, end_date=tomorrow) banner.save() b = views.get_banner() self.assertIsNotNone(b)
def test_timebound_banner(self): yesterday = get_relative_date(-1) tommorow = get_relative_date(+1) banner = models.Banner( text="How would you improve our vacation policy?", start_date=yesterday, end_date=tommorow) banner.save() b = views.get_banner() self.assertIsNotNone(b)
def test_banner_is_current(self, render): """ Test boolean flag for banner status (active or not) """ yesterday = get_relative_date(-1) today = datetime.date.today() tomorrow = get_relative_date(+1) banner = models.Banner(id=1, title="XXXX", text="text", start_date=today) banner.save() banner2 = models.Banner(id=2, title="XXXX", text="text", start_date=tomorrow) banner2.save() banner3 = models.Banner(id=3, title="XXXX", text="text", start_date=yesterday, end_date=today) banner3.save() views.challenge_detail(mock_req(), banner_id=1) context = render.call_args[0][2] self.assertTrue('is_current_banner' in context) self.assertTrue(context['is_current_banner']) views.challenge_detail(mock_req(), banner_id=2) context = render.call_args[0][2] self.assertTrue('is_current_banner' in context) self.assertFalse(context['is_current_banner']) views.challenge_detail(mock_req(), banner_id=3) context = render.call_args[0][2] self.assertTrue('is_current_banner' in context) self.assertTrue(context['is_current_banner'])
def test_add_idea_with_no_banner(self, render): """ Verify that the banner field disappears if no current challenge """ banner1 = models.Banner(id=1, title="AAAA", text="text1", start_date=date.today() - timedelta(days=2), end_date=date.today() - timedelta(days=1)) banner1.save() banner2 = models.Banner(id=2, title="BBBB", text="text2", start_date=date.today() + timedelta(days=1)) banner2.save() views.add_idea(mock_req()) context = render.call_args[0][2] self.assertTrue('form' in context) self.assertTrue(isinstance(context['form'], IdeaForm)) self.assertNotIn('banner', context['form'].fields.keys())
def test_tags_count(self, render): """ Tag list should include tag count. """ user = random_user() state = models.State.objects.get(name='Active') state.save() # Make 13 tags, and assign each to a set of ideas for count in range(13): tag = str(count) * 4 for i in range(count + 1): idea = models.Idea(creator=user, title=str(i) * 4, text=str(i) * 4 + ' Text', state=state) idea.save() idea.tags.add(tag) # create some dummy tags for private banner ideas # these tags should not be reflected in the tag count banner = models.Banner(id=1, title="XXXX", text="text", is_private=True, start_date=datetime.date.today()) banner.save() for count in range(5): tag = str(count) * 4 for i in range(count + 1): idea = models.Idea(creator=user, title=str(i) * 4 + '2', text=str(i) * 42 + ' Text', state=state, banner_id=1) idea.save() idea.tags.add(tag) views.list(mock_req()) context = render.call_args[0][2] self.assertTrue('tags' in context) for i in range(12, 2, -1): tag = context['tags'][12 - i] self.assertTrue(hasattr(tag, 'count')) self.assertEqual(i + 1, tag.count)
def create_idea(user=None): if not user: user = random_user() state = models.State.objects.get(name='Active') idea = models.Idea(creator=user, title='Transit subsidy to Mars', text='Aliens need assistance.', state=state) banner = models.Banner(id=1, title="AAAA", text="text1", start_date=date.today()) banner.save() idea.banner = banner idea.save() idea.tags.add("test tag") return idea
def test_edit_good_idea(self): """ Test an normal POST submission to edit an idea. """ user = login(self) idea = create_idea(user=user) self.assertEquals(models.Idea.objects.all().count(), 1) new_title = "new title" new_summary = "new summary" new_text = "new text" new_banner = models.Banner(id=2, title="BBB", text="text2", start_date=date.today()) new_banner.save() resp = self.client.post( reverse('idea:edit_idea', args=(idea.id, )), { 'title': new_title, 'summary': new_summary, 'text': new_text, 'banner': new_banner.id }) self.assertEqual(resp.status_code, 302) self.assertIn('detail', resp['Location']) self.assertEquals(models.Idea.objects.all().count(), 1) # ensure editing an idea does not up the vote count # vote count is 0 because votes are added in views.add_idea, which is not used in this test num_voters = get_user_model().objects.filter(vote__idea__pk=idea.id, vote__vote=1).count() self.assertEqual(num_voters, 0) refresh_idea = models.Idea.objects.get(id=idea.id) self.assertEqual(refresh_idea.title, new_title) self.assertEqual(refresh_idea.summary, new_summary) self.assertEqual(refresh_idea.text, new_text) self.assertEqual(refresh_idea.banner, new_banner) # verify the expected fields remain the same self.assertEqual(refresh_idea.tags.count(), 1) self.assertEqual(refresh_idea.tags.all()[0].name, "test tag") self.assertEqual(refresh_idea.creator, idea.creator)
def _generate_data(self, paramfn=lambda x, y: None, postfn=lambda x, y: None, entry_data=[(5, 'AAAA'), (9, 'BBBB'), (3, 'CCCC'), (7, 'DDDD'), (1, 'EEEE'), (11, 'FFFF')]): """ Helper function to handle the idea (and related models) creation. """ user = get_user_model().objects.create_user('example') state = models.State.objects.get(name='Active') state.save() banner = models.Banner(id=1, title="XXXX", text="text", start_date=datetime.date.today()) banner.save() def make_idea(nonce, title, banner=banner): kwargs = { 'creator': user, 'title': title, 'banner': banner, 'text': title + ' Text', 'state': state } paramfn(kwargs, nonce) idea = models.Idea(**kwargs) idea.save() postfn(idea, nonce) return idea if entry_data: ideas = [make_idea(pair[0], pair[1]) for pair in entry_data] extra_ideas = [make_idea(pair[0], pair[1], pair[2]) \ for pair in [(24, 'ZZZZ', None), (25,'YYYY', None)]]