blob: 22141eb1eb6800affab7ee2cf0d3e3f64c8f857b [file] [log] [blame]
# -*- coding: utf-8 -*-
import os
import webapp2
from webapp2_extras import users
import test_base
def set_current_user(email, user_id, is_admin=False):
os.environ['USER_EMAIL'] = email or ''
os.environ['USER_ID'] = user_id or ''
os.environ['USER_IS_ADMIN'] = '1' if is_admin else '0'
class LoginRequiredHandler(webapp2.RequestHandler):
@users.login_required
def get(self):
self.response.write('You are logged in.')
@users.login_required
def post(self):
self.response.write('You are logged in.')
class AdminRequiredHandler(webapp2.RequestHandler):
@users.admin_required
def get(self):
self.response.write('You are admin.')
@users.admin_required
def post(self):
self.response.write('You are admin.')
app = webapp2.WSGIApplication([
('/login_required', LoginRequiredHandler),
('/admin_required', AdminRequiredHandler),
])
class TestUsers(test_base.BaseTestCase):
def test_login_required_allowed(self):
set_current_user('foo@bar.com', 'foo@bar.com')
req = webapp2.Request.blank('/login_required')
rsp = req.get_response(app)
self.assertEqual(rsp.status_int, 200)
self.assertEqual(rsp.body, 'You are logged in.')
def test_login_required_302(self):
req = webapp2.Request.blank('/login_required')
rsp = req.get_response(app)
self.assertEqual(rsp.status_int, 302)
self.assertEqual(rsp.headers.get('Location'),
'https://www.google.com/accounts/Login?continue=http%3A//localhost/login_required')
def test_login_required_post(self):
req = webapp2.Request.blank('/login_required')
req.method = 'POST'
rsp = req.get_response(app)
self.assertEqual(rsp.status_int, 400)
def test_admin_required_allowed(self):
set_current_user('foo@bar.com', 'foo@bar.com', is_admin=True)
req = webapp2.Request.blank('/admin_required')
rsp = req.get_response(app)
self.assertEqual(rsp.status_int, 200)
self.assertEqual(rsp.body, 'You are admin.')
def test_admin_required_not_admin(self):
set_current_user('foo@bar.com', 'foo@bar.com')
req = webapp2.Request.blank('/admin_required')
rsp = req.get_response(app)
self.assertEqual(rsp.status_int, 403)
def test_admin_required_302(self):
req = webapp2.Request.blank('/admin_required')
rsp = req.get_response(app)
self.assertEqual(rsp.status_int, 302)
self.assertEqual(rsp.headers.get('Location'),
'https://www.google.com/accounts/Login?continue=http%3A//localhost/admin_required')
def test_admin_required_post(self):
req = webapp2.Request.blank('/admin_required')
req.method = 'POST'
rsp = req.get_response(app)
self.assertEqual(rsp.status_int, 400)
if __name__ == '__main__':
test_base.main()