Skip to content

Instantly share code, notes, and snippets.

@herberthamaral
Created November 13, 2011 23:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save herberthamaral/1362936 to your computer and use it in GitHub Desktop.
Save herberthamaral/1362936 to your computer and use it in GitHub Desktop.
Exemplo de uso de decorators na vida real utilizando views no django
import fudge
from django.test import TestCase
from django.contrib.auth.models import User
from django.http import Http404
import views
def stub(name = 'stub'):
return fudge.Fake(name).is_a_stub()
class AuthTest(TestCase):
def setUp(self):
self.user = User()
self.user.username = 'root'
self.user.set_password('123')
self.user.is_staff = True
self.user.is_superuser = True
self.user.save()
def test_auth_should_not_pass_through_when_user_is_inside_local_network(self):
request = stub('request')
request.REMOTE_ADDR = '10.0.0.1'
self.assertFalse(views.user_should_pass(request))
def test_auth_should_pass_through_when_user_is_inside_local_network(self):
request = stub('request')
request.REMOTE_ADDR = '192.168.0.1'
self.assertTrue(views.user_should_pass(request))
def test_user_should_pass_to_index_page_if_it_is_inside_the_network(self):
request = stub('request')
request.REMOTE_ADDR = '192.168.0.1'
views.root_login = stub().is_callable()
try:
views.index(request)
except Http404:
self.fail('User deveria passar')
def test_user_should_not_pass_to_index_page_if_it_isnt_inside_the_network(self):
request = stub('request')
request.REMOTE_ADDR = '10.0.0.1'
request.session = []
views.root_login = stub().is_callable()
try:
views.index(request)
self.fail('User nao deveria passar')
except Http404:
pass
from django.http import Http404, HttpResponse
from django.contrib.auth.models import User
from django.contrib.auth import login
def user_should_pass(request):
return request.REMOTE_ADDR.startswith('192.168.0')
def pass_if_it_is_inside_network(the_view):
def decorated(request, *args, **kwargs):
if user_should_pass(request):
root_login(request)
return the_view(request)
else:
raise Http404
return decorated
def root_login(request):
user = User.objects.filter(username = 'root')[0]
login(request, user)
@pass_if_it_is_inside_network
def index(request):
return HttpResponse('You are in! Welcome root!')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment