def SignOut(request): """ A simple view - No form, no complexity - just logout and pop the user back home """ if request.user.is_authenticated(): PageVisit.record(request) logout(request=request) return HttpResponseRedirect(reverse("Home"), {})
def post(self, request): if not request.user.is_authenticated(): logging.warning('Unauthorised attempt to access dashboard') return redirect( reverse("GetInvolved")) try: cyclist = cyclists.models.Cyclist.objects.get(user = request.user) except ObjectDoesNotExist: raise NoDashboard() if request.POST.get('confirmation',''): return redirect('Dashboard:MyDetails') form = RegisteredUsers.forms.PasswordReset(request.POST) if form.is_valid(): user, pwd = form.save() user = authenticate(username=user.username, password=pwd) if user and user.is_active: login(request, user) else: return HttpResponseServerError("unable to re-authenticate user !!!!") PageVisit.record(request) return render(request, 'dashboard/pages/PasswordChange.html', context={'confirmation': {'title':'Password Changed', 'message': 'Your new password has been saved. Click OK to return to your dashboard'}}) else: context = self.context.copy() context['form'] = form return render(request, 'dashboard/pages/PasswordChange.html', context=context)
def the_event(request): """The Event page - with a summary of the event""" PageVisit.record(request) legs = cyclists.models.Leg.objects.all().order_by('date', '-morning') if legs: stats = cyclists.models.Leg.Totals() first_leg = legs[0] last_leg = cyclists.models.Leg.objects.all().order_by( '-date', 'morning')[0] else: stats = {} first_leg = None last_leg = None return render(request, "SuffolkCycleRide/pages/theevent.html", context={ 'event': { 'stats': stats, 'legs': legs, 'first_leg': first_leg, 'last_leg': last_leg } })
def get(self, request): PageVisit.record(request) context = self.context.copy() context['form'] = context['form']() return render(request=request, template_name='base/SingleForm.html', context=context)
def fundme(request, username): cyclist = get_object_or_404(cyclists.models.Cyclist, user__username = username) PageVisit.record(request=request, document_name='FundMe', user = cyclist.user ) return render(request, 'SuffolkCycleRide/pages/fundme.html', context={'cyclist':cyclist, 'no_menu':True})
def get(self, request): if not request.user.is_authenticated(): logging.warning('Unauthorised attempt to access dashboard') return redirect(reverse("GetInvolved")) try: cyclist = cyclists.models.Cyclist.objects.get(user=request.user) except ObjectDoesNotExist: raise NoDashboard() progress = sum( (1 if getattr(cyclist, attr_name) else 0) for attr_name in ['picture', 'statement', 'fundraising_site', 'targetAmount']) if cyclist.legs.all(): progress += 1 PageVisit.record(request) return render(request, "dashboard/pages/dashboard.html", context={ 'cyclist': cyclist, 'progress': { 'count': progress, 'limit': 5 } })
def post(self, request): super(GetInvolved, self).post(request) if self.this_form.is_valid(): if self.this_form.prefix == 'nl': PageVisit.record(request, sub_document='Newsletter SignUp') sub = self.this_form.save() return render( request, "newsletter/pages/subscription_confirmation.html", context={'email': sub.email}) if self.this_form.prefix == 'r': PageVisit.record(request, sub_document='New User Reqistration') user = self.this_form.save() send_mail( from_email = settings.DEFAULT_FROM_EMAIL, recipient_list=[ user.email ], subject="Welcome to the Great Suffolk Cycle Ride", message=render_to_string( "RegisteredUsers/Email/NewUserConfirmation.txt", context=dict( {'user': user, 'ResetUrl': request.build_absolute_uri( reverse("User:ResetRequest") ), 'PrivacyUrl': request.build_absolute_uri( reverse("Privacy") ), 'HOST': request.get_host() }.items() +\ settings_base_url(request).items() ))) self.this_form.login(request) logging.info('Successful Registration') return HttpResponseRedirect(reverse('Dashboard:Home')) return render(request, "base/VerticalForm.html", context=self.context)
def post(self, request): c = self.context.copy() form = forms.PasswordResetRequest(request.POST) if form.is_valid(): # The save form creates an instance of the PasswordResetRequestModel: expiry date is 14 days from 'today' reset = form.save() reset_local = reset.get_url() # Send the email to the identified user: Email contains a URL unique to that reset (128 bit UUID) send_mail( from_email = settings.DEFAULT_FROM_EMAIL, recipient_list=[reset.user.email], subject="Great Suffolk Cycle Ride : Password reset", message=render_to_string("RegisteredUsers/Email/PasswordResetRequest.txt", context={'user': reset.user, 'ResetUrl': request.build_absolute_uri(reset_local), 'ExpireBy': reset.expiry, 'HOST': request.get_host() }) ) # This will record the page visit - but not who requested the reset - only record a successful attempt # Pop the user to the ResetConfirmation page PageVisit.record(request) return render(request, "RegisteredUsers/pages/ResetConfirmed.html", context={ 'email': reset.user.email, 'expiry': dt.strftime(reset.expiry, "%d %b %Y") }) else: # Remder the form with any errors c['form'] = form return render(request, "base/SingleForm.html", context=c)
def post(self, request): super(GetInvolved, self).post(request) if self.this_form.is_valid(): if self.this_form.prefix == 'nl': PageVisit.record(request, sub_document='Newsletter SignUp') sub = self.this_form.save() return render( request, "newsletter/pages/subscription_confirmation.html", context = {'email': sub.email }) if self.this_form.prefix == 'r': PageVisit.record(request, sub_document='New User Reqistration') user = self.this_form.save() send_mail( from_email = settings.DEFAULT_FROM_EMAIL, recipient_list=[ user.email ], subject="Welcome to the Great Suffolk Cycle Ride", message=render_to_string( "RegisteredUsers/Email/NewUserConfirmation.txt", context=dict( {'user': user, 'ResetUrl': request.build_absolute_uri( reverse("User:ResetRequest") ), 'PrivacyUrl': request.build_absolute_uri( reverse("Privacy") ), 'HOST': request.get_host() }.items() +\ settings_base_url(request).items() ))) self.this_form.login(request) logging.info('Successful Registration') return HttpResponseRedirect( reverse('Dashboard:Home') ) return render(request, "base/VerticalForm.html", context=self.context)
def main(request): PageVisit.record(request) available = models.Opportunity.objects.filter(available=True, taken=False). \ annotate(order_value=Coalesce('value', 'max_value')). \ order_by('order_value') sponsors = models.Sponsor.objects.annotate(support_count=Count('supports')).filter(support_count__gt=0) return render(request, 'Sponsors/main.html', context={'sponsors': sponsors, 'available': available})
def Download(request, id ): PageVisit.record(request) nl = Newsletter.objects.get(reset_uuid=id) path = os.path.join(settings.MEDIA_ROOT, nl.content.name) name = os.path.basename(nl.content.name) d = open(path,"rb").read() response = HttpResponse(d, content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="{}"'.format(name) return response
def Download(request, id): PageVisit.record(request) nl = Newsletter.objects.get(reset_uuid=id) path = os.path.join(settings.MEDIA_ROOT, nl.content.name) name = os.path.basename(nl.content.name) d = open(path, "rb").read() response = HttpResponse(d, content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="{}"'.format(name) return response
def get(self, request, opportunity_slug): opportunity = get_object_or_404(models.Opportunity, slug=opportunity_slug) PageVisit.record(request, sub_document=opportunity.name) form = forms.Communications(initial={'opportunity': opportunity.id}) context = self.context.copy() context['form'] = form context['description'] = context['description'].format(opportunity.name) return render(request, 'Sponsors/communicate.html', context=context)
def post(self, request): if not request.user.is_authenticated(): logging.warning('Unauthorised attempt to access dashboard') return redirect(reverse("GetInvolved")) if request.POST.get('confirmation', ''): return redirect(reverse('Dashboard:MyDetails')) if request.POST['submit'] == 'Change Password': return redirect("Dashboard:PasswordReset") me = request.user try: cyclist = cyclists.models.Cyclist.objects.get(user=me) except: raise NoDashboard() form = forms.MyDetails(instance=[me, cyclist], data=request.POST, files=request.FILES) context = self.context.copy() if form.is_valid(): PageVisit.record(request, 'Details Changed') for k in ['first_name', 'last_name', 'email']: if form.cleaned_data[k] != getattr(me, k): setattr(me, k, form.cleaned_data[k]) me.save() if 'picture-clear' in form.cleaned_data: cyclist.picture = '' else: if form.cleaned_data['picture'] != cyclist.picture: cyclist.picture = form.cleaned_data['picture'] cyclist.save() return render( request, 'dashboard/pages/MyDetails.html', context={ 'confirmation': { 'title': 'Personal details saved', 'message': 'Your changes have been saved. Click OK to return to your dashboard' } }) context['form'] = form context['cyclist'] = cyclist return render(request, 'dashboard/pages/MyDetails.html', context=context)
def main(request): """The Read more page - a list of the newsletter posts""" PageVisit.record(request) dl_url = reverse('Newsletter:Download', kwargs={'id': '0000'}).strip('0') qs = Newsletter.objects.order_by('-pub_date') return render(request, "newsletter/pages/newsletter.html", context={ 'newsletter': qs, "dl_base": dl_url })
def post(self, request, email): form = NewsletterUnsubscribeForm(request.POST) if form.is_valid(): PageVisit.record(request) # Only record successfull unsubscribes success = form.save() if success: return render( request, "newsletter/pages/unsubscribe.html", context={'email': form.cleaned_data['email']} ) self.context['form'] = form return render(request, "base/SingleForm.html", context=self.context)
def post(self, request, email): form = NewsletterUnsubscribeForm(request.POST) if form.is_valid(): PageVisit.record(request) # Only record successfull unsubscribes success = form.save() if success: return render(request, "newsletter/pages/unsubscribe.html", context={'email': form.cleaned_data['email']}) self.context['form'] = form return render(request, "base/SingleForm.html", context=self.context)
def fundme(request, username): cyclist = get_object_or_404(cyclists.models.Cyclist, user__username=username) PageVisit.record(request=request, document_name='FundMe', user=cyclist.user) return render(request, 'SuffolkCycleRide/pages/fundme.html', context={ 'cyclist': cyclist, 'no_menu': True })
def home(request): """ The front page - where everybody first lands""" PageVisit.record(request) funds = cyclists.models.Cyclist.total_funds() if funds['target'] and funds['pledges']: funds['target'] = max(2000, funds['target']) funds['percentage'] = round(100*funds['pledges']/funds['target']) else: funds = {} return render(request, "SuffolkCycleRide/pages/home.html", context={ 'funding':{'pledges':"{:.0f}".format(funds['pledges']), 'target':"{:.0f}".format(funds['target']), 'percentage':"{:.0f}".format(funds['percentage']) } if funds else {} } )
def get(self, request, page=0, tag_slug=None, year=None, month=None): PageVisit.record(request) # Dictionary for arguments to be passed to queryset and pages - need two distinct dictionaries query_args, page_args = {}, {} # Normalise the current page page = int(page) if page else 1 if tag_slug: query_args['tags__slug'] = page_args['tag_slug'] = tag_slug else: if year: query_args['pub_date__year'] = page_args['year'] = year if month: query_args['pub_date__month'] = page_args['month'] = month # Build the queryset - filter by the relevant arguments, qs = models.Entry.objects.filter(**query_args) # furthering filtering depends on whether this user has their own unpublished posts if not request.user.is_anonymous(): qs = qs.filter( Q(is_published=True) | Q(is_published=False, author=request.user)) else: qs = qs.filter(is_published=True) qs = qs.order_by("is_published", "-pub_date") # Split the query set into pages : discard the page_count information for now. qs, page_args['prev_page'], page_args[ 'next_page'], _ = self.pagination(qs, page, page_args) return render(request, self.template, context={ 'entries': qs, 'archive': self.get_archive(request, int(year) if year else None, int(month) if month else None), 'tags': self.get_tag_cloud(), 'args': page_args })
def test_012_privacy(self): ts = now() r = self.client.get(reverse('Privacy')) self.assertEqual(r.status_code, 200) self.assertEqual(r.resolver_match.func.__name__, views.privacy.__name__) self.assertEqual(r.templates[0].name, 'SuffolkCycleRide/pages/privacy.html') self.assertAlmostEqual(PageVisit.most_recent('Privacy').timestamp, ts, delta=timedelta(milliseconds=500))
def test_022_ChangePasswordSubmit(self): """Test that the change Password works correctly""" ts = now() prr = RegisteredUsers.models.PasswordResetRequest(user=self.user, expiry=date.today() + timedelta(days=1)) prr.save() self.client.force_login(user=self.user) r = self.client.post(reverse('Dashboard:PasswordReset'), data={ 'uuid': str(prr.uuid), 'newPassword': '******', 'confirmPassword': '******' }) self.assertTemplateUsed(r, "dashboard/pages/PasswordChange.html") self.assertTrue('confirmation' in r.context[-1]) # Check that the PasswordResetRequest instance is deleted with self.assertRaises(ObjectDoesNotExist): RegisteredUsers.models.PasswordResetRequest.objects.get( uuid=prr.uuid) self.assertEqual(authenticate(username='******', password='******'), self.user) # Check the Password change is recorded in the stats self.assertAlmostEqual(PageVisit.most_recent( document='Dashboard:PasswordReset', user=self.user).timestamp, ts, delta=timedelta(milliseconds=500))
def test_010_ContactUsGet(self): ts = now() r = self.client.get(reverse('ContactUs')) self.assertEqual(r.status_code, 200) self.assertEqual(r.resolver_match.func.__name__, views.ContactUs.as_view().__name__) self.assertEqual(r.templates[0].name, 'base/SingleForm.html') self.assertAlmostEqual(PageVisit.most_recent('ContactUs').timestamp, ts, delta=timedelta(milliseconds=100))
def post(self, request): """ Process the Form contents """ c = self.context.copy() form = forms.SignInForm(request.POST) # Is the form filled in correctly - including is it a valid username/password combo if form.is_valid(): # This form.save logs the user in, and therefore needs the request as well as the form, and record this form.save(request=request) PageVisit.record(request) logging.info('Successful Signin') return HttpResponseRedirect(reverse("Dashboard:Home")) # If we get here we have errors c['form'] = form return render(request, "RegisteredUsers/pages/SignIn.html", context=c)
def test_011_SignInPost(self): """Test that Posting valid details to the SignIn page results in a correctly logged in user""" ts = now() r = self.client.post(reverse('User:SignIn'), data={'username': '******', 'password': '******'}) self.assertEqual(r.resolver_match.func.__name__, views.SignIn.as_view().__name__) self.assertTrue(self.client.session['_auth_user_id'], self.chester.pk) self.assertRedirects(r, reverse('Dashboard:Home')) self.assertAlmostEqual(PageVisit.most_recent('User:SignIn').timestamp, ts, delta=timedelta(milliseconds=200))
def test_011_SignOutOk(self): """Sign Out when user is signed in - must result in correct logout""" ts = now() self.assertTrue(self.client.login(username='******', password='******')) self.assertTrue(self.client.session['_auth_user_id'], self.chester.pk) response = self.client.get(reverse('User:SignOut')) self.assertRedirects(response, reverse('Home')) self.assertFalse('_auth_user_id' in self.client.session) self.assertAlmostEqual(PageVisit.most_recent('User:SignOut').timestamp, ts, delta=timedelta(milliseconds=200))
def test_010_SignOutNotSignedIn(self): """Sign Out when no-one is signed in - should not result in an error""" ts = now() self.assertFalse('_auth_user_id' in self.client.session) r = self.client.get(reverse('User:SignOut')) self.assertEqual(r.resolver_match.func.__name__, views.SignOut.__name__) self.assertRedirects(r, reverse('Home')) self.assertFalse('_auth_user_id' in self.client.session) self.assertTrue(PageVisit.most_recent(document='User:SignOut', user=None) is None)
def post(self, request): if not request.user.is_authenticated(): logging.warning('Unauthorised attempt to access dashboard') return redirect(reverse("GetInvolved")) try: cyclist = cyclists.models.Cyclist.objects.get(user=request.user) except ObjectDoesNotExist: raise NoDashboard() if request.POST.get('confirmation', ''): return redirect('Dashboard:MyDetails') form = RegisteredUsers.forms.PasswordReset(request.POST) if form.is_valid(): user, pwd = form.save() user = authenticate(username=user.username, password=pwd) if user and user.is_active: login(request, user) else: return HttpResponseServerError( "unable to re-authenticate user !!!!") PageVisit.record(request) return render( request, 'dashboard/pages/PasswordChange.html', context={ 'confirmation': { 'title': 'Password Changed', 'message': 'Your new password has been saved. Click OK to return to your dashboard' } }) else: context = self.context.copy() context['form'] = form return render(request, 'dashboard/pages/PasswordChange.html', context=context)
def the_event(request): """The Event page - with a summary of the event""" PageVisit.record(request) legs = cyclists.models.Leg.objects.all().order_by('date','-morning') if legs: stats = cyclists.models.Leg.Totals() first_leg = legs[0] last_leg = cyclists.models.Leg.objects.all().order_by('-date','morning')[0] else: stats = {} first_leg = None last_leg = None return render(request, "SuffolkCycleRide/pages/theevent.html", context={'event':{ 'stats':stats, 'legs':legs, 'first_leg':first_leg, 'last_leg':last_leg }})
def test_010_GetInvolvedGet(self): ts = now() r = self.client.get(reverse('GetInvolved')) self.assertEqual(r.status_code, 200) self.assertEqual(r.resolver_match.func.__name__, views.GetInvolved.as_view().__name__) self.assertEqual(r.templates[0].name, 'base/VerticalForm.html') # Issue 19 - Temporarily Disable Newsletter Capability # self.assertIsInstance(r.context[-1]['forms'][0]['form'], newsletter.forms.NewsletterSignUpForm) self.assertIsInstance(r.context[-1]['forms'][0]['form'], RegisteredUsers.forms.NewUserForm) self.assertAlmostEqual(PageVisit.most_recent('GetInvolved').timestamp, ts, delta=timedelta(milliseconds=100))
def test_001_TestBasicAccess(self): ts = now() r = self.client.get( reverse('TheEvent')) self.assertEqual(r.status_code, 200) self.assertEqual(r.resolver_match.func, views.the_event) self.assertEqual(r.templates[0].name, 'SuffolkCycleRide/pages/theevent.html') self.assertAlmostEqual(PageVisit.most_recent('TheEvent').timestamp, ts, delta=timedelta(milliseconds=100)) # Confirm that no legs are passed to the template self.assertInContext(response=r, attr_name = 'event.legs', expected=[])
def post(self, request): if not request.user.is_authenticated(): logging.warning('Unauthorised attempt to access dashboard') return redirect( reverse("GetInvolved")) if request.POST.get('confirmation',''): return redirect(reverse('Dashboard:MyDetails')) if request.POST['submit'] == 'Change Password': return redirect("Dashboard:PasswordReset") me = request.user try: cyclist = cyclists.models.Cyclist.objects.get(user = me) except: raise NoDashboard() form = forms.MyDetails(instance=[me,cyclist], data=request.POST, files=request.FILES) context = self.context.copy() if form.is_valid(): PageVisit.record(request, 'Details Changed') for k in ['first_name','last_name', 'email']: if form.cleaned_data[k] != getattr(me, k): setattr(me, k, form.cleaned_data[k]) me.save() if 'picture-clear' in form.cleaned_data: cyclist.picture = '' else: if form.cleaned_data['picture'] != cyclist.picture: cyclist.picture = form.cleaned_data['picture'] cyclist.save() return render(request, 'dashboard/pages/MyDetails.html', context={'confirmation': {'title':'Personal details saved', 'message': 'Your changes have been saved. Click OK to return to your dashboard'}}) context['form'] = form context['cyclist'] = cyclist return render(request, 'dashboard/pages/MyDetails.html', context=context )
def get(self, request): if not request.user.is_authenticated(): logging.warning('Unauthorised attempt to access dashboard') return redirect( reverse("GetInvolved")) try: cyclist = cyclists.models.Cyclist.objects.get(user = request.user) except ObjectDoesNotExist: raise NoDashboard() progress = sum( (1 if getattr(cyclist, attr_name) else 0) for attr_name in ['picture', 'statement', 'fundraising_site', 'targetAmount'] ) if cyclist.legs.all(): progress += 1 PageVisit.record(request) return render(request, "dashboard/pages/dashboard.html", context={'cyclist': cyclist, 'progress': {'count':progress, 'limit':5}})
def test_010_SignOutNotSignedIn(self): """Sign Out when no-one is signed in - should not result in an error""" ts = now() self.assertFalse('_auth_user_id' in self.client.session) r = self.client.get(reverse('User:SignOut')) self.assertEqual(r.resolver_match.func.__name__, views.SignOut.__name__) self.assertRedirects(r, reverse('Home')) self.assertFalse('_auth_user_id' in self.client.session) self.assertTrue( PageVisit.most_recent(document='User:SignOut', user=None) is None)
def home(request): """ The front page - where everybody first lands""" PageVisit.record(request) funds = cyclists.models.Cyclist.total_funds() if funds['target'] and funds['pledges']: funds['target'] = max(2000, funds['target']) funds['percentage'] = round(100 * funds['pledges'] / funds['target']) else: funds = {} return render(request, "SuffolkCycleRide/pages/home.html", context={ 'funding': { 'pledges': "{:.0f}".format(funds['pledges']), 'target': "{:.0f}".format(funds['target']), 'percentage': "{:.0f}".format(funds['percentage']) } if funds else {} })
def get(self, request): if not request.user.is_authenticated(): logging.warning('Unauthorised attempt to access dashboard') return redirect( reverse("GetInvolved")) context = self.context.copy() PageVisit.record(request) me = request.user try: cyclist = cyclists.models.Cyclist.objects.get(user = me) except ObjectDoesNotExist: raise NoDashboard() form = forms.MyDetails(instance=[me,cyclist]) context['form'] = form context['cyclist'] = cyclist return render(request, 'dashboard/pages/MyDetails.html', context=context)
def test_011_SignOutOk(self): """Sign Out when user is signed in - must result in correct logout""" ts = now() self.assertTrue( self.client.login(username='******', password='******')) self.assertTrue(self.client.session['_auth_user_id'], self.chester.pk) response = self.client.get(reverse('User:SignOut')) self.assertRedirects(response, reverse('Home')) self.assertFalse('_auth_user_id' in self.client.session) self.assertAlmostEqual(PageVisit.most_recent('User:SignOut').timestamp, ts, delta=timedelta(milliseconds=200))
def post(self, request): c = self.context.copy() form = forms.PasswordResetRequest(request.POST) if form.is_valid(): # The save form creates an instance of the PasswordResetRequestModel: expiry date is 14 days from 'today' reset = form.save() reset_local = reset.get_url() # Send the email to the identified user: Email contains a URL unique to that reset (128 bit UUID) send_mail(from_email=settings.DEFAULT_FROM_EMAIL, recipient_list=[reset.user.email], subject="Great Suffolk Cycle Ride : Password reset", message=render_to_string( "RegisteredUsers/Email/PasswordResetRequest.txt", context={ 'user': reset.user, 'ResetUrl': request.build_absolute_uri(reset_local), 'ExpireBy': reset.expiry, 'HOST': request.get_host() })) # This will record the page visit - but not who requested the reset - only record a successful attempt # Pop the user to the ResetConfirmation page PageVisit.record(request) return render(request, "RegisteredUsers/pages/ResetConfirmed.html", context={ 'email': reset.user.email, 'expiry': dt.strftime(reset.expiry, "%d %b %Y") }) else: # Remder the form with any errors c['form'] = form return render(request, "base/SingleForm.html", context=c)
def get(self, request): if not request.user.is_authenticated(): logging.warning('Unauthorised attempt to access dashboard') return redirect(reverse("GetInvolved")) context = self.context.copy() PageVisit.record(request) me = request.user try: cyclist = cyclists.models.Cyclist.objects.get(user=me) except ObjectDoesNotExist: raise NoDashboard() form = forms.MyDetails(instance=[me, cyclist]) context['form'] = form context['cyclist'] = cyclist return render(request, 'dashboard/pages/MyDetails.html', context=context)
def test_BasicAccess(self): """Prove that access is available to the FundMe page - even when not logged in""" ts = now() r = self.client.get( reverse('FundMe', kwargs={'username':self.user.username})) self.assertEqual(r.status_code, 200) self.assertEqual(r.resolver_match.func.__name__, views.fundme.__name__) self.assertEqual(r.templates[0].name, 'SuffolkCycleRide/pages/fundme.html') self.assertAlmostEqual(PageVisit.most_recent('FundMe', user=self.user).timestamp, ts, delta=timedelta(milliseconds=100)) self.assertInContext(response=r, attr_name='cyclist', expected=self.cyclist) self.assertNotInContext(response=r, attr_name='mockup') # Prove that there is no site menu accessible on this page self.assertHTMLNotMatchSelector(r.content, 'ul.chevronbar')
def get(self, request, page=0, tag_slug=None, year=None, month=None): PageVisit.record(request) # Dictionary for arguments to be passed to queryset and pages - need two distinct dictionaries query_args, page_args = {}, {} # Normalise the current page page = int(page) if page else 1 if tag_slug: query_args['tags__slug'] = page_args['tag_slug'] = tag_slug else: if year: query_args['pub_date__year'] = page_args['year'] = year if month : query_args['pub_date__month'] = page_args['month'] = month # Build the queryset - filter by the relevant arguments, qs = models.Entry.objects.filter(**query_args) # furthering filtering depends on whether this user has their own unpublished posts if not request.user.is_anonymous(): qs = qs.filter( Q(is_published = True) | Q( is_published=False, author = request.user )) else: qs = qs.filter( is_published = True ) qs = qs.order_by( "is_published", "-pub_date") # Split the query set into pages : discard the page_count information for now. qs, page_args['prev_page'], page_args['next_page'], _ = self.pagination(qs, page, page_args) return render(request,self.template, context={ 'entries': qs, 'archive': self.get_archive( request, int(year) if year else None, int(month) if month else None ), 'tags': self.get_tag_cloud(), 'args': page_args })
def test_011_SignInPost(self): """Test that Posting valid details to the SignIn page results in a correctly logged in user""" ts = now() r = self.client.post(reverse('User:SignIn'), data={ 'username': '******', 'password': '******' }) self.assertEqual(r.resolver_match.func.__name__, views.SignIn.as_view().__name__) self.assertTrue(self.client.session['_auth_user_id'], self.chester.pk) self.assertRedirects(r, reverse('Dashboard:Home')) self.assertAlmostEqual(PageVisit.most_recent('User:SignIn').timestamp, ts, delta=timedelta(milliseconds=200))
def test_002_TestEventList(self): self.create_legs() ts = now() r = self.client.get( reverse('TheEvent')) self.assertEqual(r.status_code, 200) self.assertEqual(r.resolver_match.func, views.the_event) self.assertEqual(r.templates[0].name, 'SuffolkCycleRide/pages/theevent.html') self.assertAlmostEqual(PageVisit.most_recent('TheEvent').timestamp, ts, delta=timedelta(milliseconds=100)) # Test that the legs appear in the right order self.assertInContext(response=r, attr_name = 'event.legs', expected=self.legs) # Test the distance and start/end location appear st = BeautifulSoup(r.content, 'html5lib') summary = st.select('div.summary')[0].select('p') self.assertIn(self.legs[0].start, unicode(summary[0].text)) self.assertIn(self.legs[-1].end, unicode(summary[0].text))
def test_012_MyDetailsMainSubmit(self): """Test that the Details Page gets Posted Correctly - just change the email address for now""" ts = now() self.client.force_login(user=self.user) r = self.client.post(reverse('Dashboard:MyDetails'), data={'email': '*****@*****.**', 'submit': u'Save'}) self.assertEqual(r.status_code, 200) self.assertEqual(r.resolver_match.func.__name__, views.MyDetails.__name__) self.assertTemplateUsed(r, "dashboard/pages/MyDetails.html") self.assertTrue('confirmation' in r.context[-1]) # Test that the db has changed self.user.refresh_from_db() self.assertEqual(self.user.email, '*****@*****.**') # Test that the Page Visit has been recorded self.assertAlmostEqual(PageVisit.most_recent(document='Details Changed').timestamp, ts, delta=timedelta(milliseconds=500))
def test_022_ChangePasswordSubmit(self): """Test that the change Password works correctly""" ts = now() prr = RegisteredUsers.models.PasswordResetRequest(user=self.user, expiry=date.today() + timedelta(days=1)) prr.save() self.client.force_login(user=self.user) r = self.client.post(reverse('Dashboard:PasswordReset'), data={'uuid': str(prr.uuid), 'newPassword': '******', 'confirmPassword': '******'}) self.assertTemplateUsed(r, "dashboard/pages/PasswordChange.html") self.assertTrue('confirmation' in r.context[-1]) # Check that the PasswordResetRequest instance is deleted with self.assertRaises(ObjectDoesNotExist): RegisteredUsers.models.PasswordResetRequest.objects.get(uuid=prr.uuid) self.assertEqual(authenticate(username='******', password='******'), self.user) # Check the Password change is recorded in the stats self.assertAlmostEqual(PageVisit.most_recent(document='Dashboard:PasswordReset', user=self.user).timestamp, ts, delta=timedelta(milliseconds=500))
def test_012_MyDetailsMainSubmit(self): """Test that the Details Page gets Posted Correctly - just change the email address for now""" ts = now() self.client.force_login(user=self.user) r = self.client.post(reverse('Dashboard:MyDetails'), data={ 'email': '*****@*****.**', 'submit': u'Save' }) self.assertEqual(r.status_code, 200) self.assertEqual(r.resolver_match.func.__name__, views.MyDetails.__name__) self.assertTemplateUsed(r, "dashboard/pages/MyDetails.html") self.assertTrue('confirmation' in r.context[-1]) # Test that the db has changed self.user.refresh_from_db() self.assertEqual(self.user.email, '*****@*****.**') # Test that the Page Visit has been recorded self.assertAlmostEqual( PageVisit.most_recent(document='Details Changed').timestamp, ts, delta=timedelta(milliseconds=500))
def test_001_012_PageVisit(self): ts = now() p = self.client.get(reverse('Blog:Home')) self.assertAlmostEqual(PageVisit.most_recent('Blog:Home').timestamp, ts, delta=timedelta(milliseconds=60))
def get(self, request): super(GetInvolved, self).get(request) PageVisit.record(request) return render(request, "base/VerticalForm.html", context=self.context)
def get(self, request): PageVisit.record(request) self.context['form'] = NewsletterUploadForm() return render(request, 'base/SingleForm.html', context=self.context)
def main(request): """The Read more page - a list of the newsletter posts""" PageVisit.record(request) dl_url = reverse('Newsletter:Download',kwargs = {'id':'0000'}).strip('0') qs = Newsletter.objects.order_by('-pub_date') return render(request, "newsletter/pages/newsletter.html", context={'newsletter':qs, "dl_base":dl_url})
def privacy(request): """The Read more page - a list of the newsletter posts""" PageVisit.record(request) return render(request, "SuffolkCycleRide/pages/privacy.html")