Skip to content

Instantly share code, notes, and snippets.

@groovecoder
Created January 26, 2015 18:03
Show Gist options
  • Save groovecoder/e3023235e00323ec8d1c to your computer and use it in GitHub Desktop.
Save groovecoder/e3023235e00323ec8d1c to your computer and use it in GitHub Desktop.
from nose.tools import eq_, ok_
from pyquery import PyQuery as pq
from django.contrib.auth.models import Permission, User
from django.test import TestCase
from kuma.core.urlresolvers import reverse
from kuma.users.tests import user
from ..models import Key
from ..views import ITEMS_PER_PAGE
class KeyViewsTest(TestCase):
def setUp(self):
username = 'tester23'
password = 'trustno1'
email = 'tester23@example.com'
self.user = user(username=username, email=email,
password=password, save=True)
self.client.login(username=username, password=password)
# Give self.user (tester23) keys permissions
add_perm = Permission.objects.get(codename='add_key')
del_perm = Permission.objects.get(codename='delete_key')
self.user.user_permissions.add(add_perm)
self.user.user_permissions.add(del_perm)
# Need to cache-bust the user perms by re-fetching from DB
# https://docs.djangoproject.com/en/1.7/topics/auth/default/#permissions-and-authorization
self.user = User.objects.get(username=self.user.username)
username2 = 'someone'
password2 = 'somepass'
email2 = 'someone@example.com'
self.user2 = user(username=username2, email=email2,
password=password2, save=True)
self.key1 = Key(user=self.user, description='Test Key 1')
self.key1.save()
self.key2 = Key(user=self.user, description='Test Key 2')
self.key2.save()
self.key3 = Key(user=self.user2, description='Test Key 3')
self.key3.save()
def test_new_key_requires_permission(self):
self.client.logout()
self.client.login(username=self.user2.username,
password=self.user2.password)
url = reverse('authkeys.new', locale='en-US')
resp = self.client.get(url)
eq_(403, resp.status_code)
perm = Permission.objects.get(codename='add_key')
self.user2.user_permissions.add(perm)
# Need to cache-bust the user perms
# https://docs.djangoproject.com/en/1.7/topics/auth/default/#permissions-and-authorization
self.user2 = User.objects.get(username=self.user2.username)
resp = self.client.get(url)
eq_(200, resp.status_code)
def test_new_key(self):
self.client.login(username=self.user.username,
password=self.user.password)
data = {"description": "This is meant for a test app"}
url = reverse('authkeys.new', locale='en-US')
# Check out the creation page, look for the form.
resp = self.client.get(url)
eq_(200, resp.status_code)
page = pq(resp.content)
eq_(1, page.find('form.key').length)
# We don't have this key yet, right?
keys = Key.objects.filter(description=data['description'])
eq_(0, keys.count())
# Okay, create it.
resp = self.client.post(url, data, follow=False)
eq_(200, resp.status_code)
# We have the key now, right?
keys = Key.objects.filter(description=data['description'])
eq_(1, keys.count())
# Okay, and it should belong to the logged-in user
key = keys[0]
eq_(key.user, self.user)
# Take a look at the description and key shown on the result page.
page = pq(resp.content)
ok_(data['description'], page.find('.key .description').text())
ok_(key.key, page.find('.key .key').text())
# Ensure the secret on the page checks out.
secret = page.find('.key .secret').text()
ok_(key.check_secret(secret))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment