def __init__(self, driver, base_url, pathspec): # pathspec = (pagename, {param: value}) self.driver = driver self.base_url = base_url self.url = Url().for_page(pathspec[0], include_hostname=True, **(pathspec[1] if len(pathspec) > 1 else {}))
def test_missing_key_gives_error(self): missing_charity_identifier = '1' request = webapp2.Request.blank(Url().for_page('view_charity', include_hostname=False, charity_identifier=missing_charity_identifier)) response = webapp2.Response() ViewCharityPage(request=request, response=response).get(charity_id=missing_charity_identifier) self.assertIn('Could not find', response.body)
def post(self): POST = self.request.POST email = POST['email'] user = User(email=email) try: self.user_repo.create_unconfirmed_user(user=user, send_email=True) response = self.redirect(Url().for_page('signedup')) return response except AlreadyExistsException: self.write_template('signup', {'title': 'Givabit - Sign up', 'success': False, 'error': 'User already exists'})
def test_fails_if_email_already_exists(self): email = '*****@*****.**' user = User(email=email) self.user_repo.create_unconfirmed_user(user) request = webapp2.Request.blank(Url().for_page('signup')) request.method = 'POST' request.POST['email'] = email response = webapp2.Response() SignupPage(request=request, response=response).post() self.assertIn('already exists', response.body)
def test_user_confirmation_mail_contains_confirmation_code(self): confirmation_code = str(uuid.uuid4()) email = '*****@*****.**' % str(uuid.uuid4()) user = User(email=email, confirmation_code=confirmation_code) EmailService().send_user_confirmation_mail(user) messages = self.mail_stub.get_sent_messages() self.assertEquals(len(messages), 1) message = messages[0] self.assertEquals(message.to, email) self.assertIn( Url().for_page('confirmation', confirmation_code=confirmation_code, email=email), str(message.body))
def test_signing_up_requires_confirmation(self): email = '*****@*****.**' % self.get_random_value() self._assert_no_confirmed_user(email=email) self._assert_no_unconfirmed_user(email=email) request = webapp2.Request.blank(Url().for_page('signup')) request.method = 'POST' request.POST['email'] = email SignupPage(request=request, response=webapp2.Response()).post() user = self.user_repo.get_unconfirmed_user(email=email) self.assertEquals(user.email, email) self._assert_no_confirmed_user(email=email)
def test_sends_email_with_confirmation_link(self): email = '*****@*****.**' % self.get_random_value() self._assert_no_confirmed_user(email=email) self._assert_no_unconfirmed_user(email=email) request = webapp2.Request.blank(Url().for_page('signup')) request.method = 'POST' request.POST['email'] = email class MockEmailService(object): def send_user_confirmation_mail(self, user): self.user = user email_service = MockEmailService() user_repo = UserRepository(email_service=email_service) SignupPage(request=request, response=webapp2.Response(), user_repository=user_repo).post() user = self.user_repo.get_unconfirmed_user(email=email) self.assertEquals(email_service.user, user)
def send_user_confirmation_mail(self, user): self.send_mail(to=user.email, subject='Welcome to givabit', sender='*****@*****.**', body='Please visit %s to confirm your account' % Url().for_page('confirmation', confirmation_code=user.confirmation_code, email=user.email, include_hostname=True), )
import os import webapp2 from givabit.webapp.template_cache import TemplateCache from givabit.webapp.url import Url from jinja2 import Environment, FileSystemLoader env = Environment(loader=TemplateCache(FileSystemLoader(os.path.abspath(os.path.join(__file__, '..', 'templates'))))) url = Url() class BasePage(webapp2.RequestHandler): def _render_template(self, template_name, data): template = env.get_template('%s.html' % template_name) return template.render(data) def _write_html(self, response, html): response.headers['Content-Type'] = 'text/html' response.out.write(html) def write_template(self, template_name, data=None): if data is None: data = {} data['URL'] = url self._write_html(self.response, self._render_template(template_name, data))