Skip to content

Commit

Permalink
bug 1405675 - update crashstats/tokens/tests/* to pytest
Browse files Browse the repository at this point in the history
  • Loading branch information
willkg committed Oct 14, 2017
1 parent 937f649 commit 5e733d1
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 52 deletions.
33 changes: 15 additions & 18 deletions webapp-django/crashstats/tokens/tests/test_middleware.py
@@ -1,7 +1,7 @@
import datetime
import json

from nose.tools import eq_, ok_, assert_raises
import pytest

from django.contrib.auth.models import User, Permission
from django.conf import settings
Expand All @@ -24,11 +24,8 @@ class TestMiddleware(DjangoTestCase):

def test_impropertly_configured(self):
request = RequestFactory().get('/')
assert_raises(
ImproperlyConfigured,
self.middleware.process_request,
request
)
with pytest.raises(ImproperlyConfigured):
self.middleware.process_request(request)

def _get_request(self, **headers):
# boilerplate stuff
Expand All @@ -40,16 +37,16 @@ def _get_request(self, **headers):

def test_no_token_key(self):
request = self._get_request()
eq_(self.middleware.process_request(request), None)
assert self.middleware.process_request(request) is None

def test_non_existant_token_key(self):
request = self._get_request(HTTP_AUTH_TOKEN='xxx')

response = self.middleware.process_request(request)
eq_(response.status_code, 403)
assert response.status_code == 403
# the response content will be JSON
result = json.loads(response.content)
eq_(result['error'], 'API Token not matched')
assert result['error'] == 'API Token not matched'

def test_expired_token(self):
user = User.objects.create(username='peterbe')
Expand All @@ -63,9 +60,9 @@ def test_expired_token(self):
request = self._get_request(HTTP_AUTH_TOKEN=token.key)

response = self.middleware.process_request(request)
eq_(response.status_code, 403)
assert response.status_code == 403
result = json.loads(response.content)
eq_(result['error'], 'API Token found but expired')
assert result['error'] == 'API Token found but expired'

def test_token_valid(self):
user = User.objects.create(username='peterbe')
Expand All @@ -75,8 +72,8 @@ def test_token_valid(self):
request = self._get_request(HTTP_AUTH_TOKEN=token.key)

response = self.middleware.process_request(request)
eq_(response, None)
eq_(request.user, user)
assert response is None
assert request.user == user

def test_token_permissions(self):
user = User.objects.create(username='peterbe')
Expand All @@ -101,9 +98,9 @@ def test_token_permissions(self):
request = self._get_request(HTTP_AUTH_TOKEN=token.key)
# do the magic to the request
self.middleware.process_request(request)
eq_(request.user, user)
ok_(request.user.has_perm('crashstats.play'))
ok_(not request.user.has_perm('crashstats.fire'))
assert request.user == user
assert request.user.has_perm('crashstats.play')
assert not request.user.has_perm('crashstats.fire')

def test_token_on_inactive_user(self):
user = User.objects.create(username='peterbe')
Expand All @@ -115,6 +112,6 @@ def test_token_on_inactive_user(self):
request = self._get_request(HTTP_AUTH_TOKEN=token.key)

response = self.middleware.process_request(request)
eq_(response.status_code, 403)
assert response.status_code == 403
result = json.loads(response.content)
eq_(result['error'], 'User of API token not active')
assert result['error'] == 'User of API token not active'
23 changes: 9 additions & 14 deletions webapp-django/crashstats/tokens/tests/test_models.py
@@ -1,7 +1,5 @@
import datetime

from nose.tools import eq_, ok_

from django.utils import timezone
from django.contrib.auth.models import User, Permission, Group
from django.conf import settings
Expand All @@ -18,19 +16,16 @@ def test_create_token(self):
user=bob,
notes='Some notes'
)
eq_(len(token.key), 32)
assert len(token.key) == 32

now = timezone.now()
future = now + datetime.timedelta(
days=settings.TOKENS_DEFAULT_EXPIRATION_DAYS
)
eq_(
token.expires.strftime('%Y%m%d%H%M'),
future.strftime('%Y%m%d%H%M')
)
assert token.expires.strftime('%Y%m%d%H%M') == future.strftime('%Y%m%d%H%M')

# using __repr__ shouldn't reveal the key
ok_(token.key not in repr(token))
assert token.key not in repr(token)

def test_token_manager(self):
bob = User.objects.create(username='bob')
Expand All @@ -45,21 +40,21 @@ def test_token_manager(self):
notes='First one',
expires=now
)
eq_(models.Token.objects.all().count(), 2)
eq_(models.Token.objects.active().count(), 1)
assert models.Token.objects.all().count() == 2
assert models.Token.objects.active().count() == 1

def test_is_expired(self):
bob = User.objects.create(username='bob')
token = models.Token.objects.create(
user=bob,
notes='Some notes'
)
ok_(not token.is_expired)
assert not token.is_expired
now = timezone.now()
yesterday = now - datetime.timedelta(days=1)
token.expires = yesterday
token.save()
ok_(token.is_expired)
assert token.is_expired

def test_api_token_losing_permissions(self):
bob = User.objects.create(username='bob')
Expand All @@ -82,6 +77,6 @@ def test_api_token_losing_permissions(self):

# reload the token
token = models.Token.objects.get(id=token.id)
ok_(permission not in token.permissions.all())
assert permission not in token.permissions.all()
# it should still have this one though
ok_(permission2 in token.permissions.all())
assert permission2 in token.permissions.all()
39 changes: 19 additions & 20 deletions webapp-django/crashstats/tokens/tests/test_views.py
@@ -1,5 +1,4 @@
import pyquery
from nose.tools import eq_, ok_

from django.core.urlresolvers import reverse
from django.contrib.contenttypes.models import ContentType
Expand Down Expand Up @@ -38,7 +37,7 @@ def test_home_page(self):

user = self._login()
response = self.client.get(url)
eq_(response.status_code, 200)
assert response.status_code == 200

user.is_active = False
user.save()
Expand All @@ -52,10 +51,10 @@ def test_generate_new_token_form(self):
url = reverse('tokens:home')
user = self._login()
response = self.client.get(url)
eq_(response.status_code, 200)
assert response.status_code == 200
# which choices you have depend in your owned permissions
doc = pyquery.PyQuery(response.content)
eq_(len(doc('#id_permissions')), 0)
assert len(doc('#id_permissions')) == 0

p1 = self._make_permission('Make a mess', 'make-mess')
p2 = self._make_permission('Clean Things', 'cool-things')
Expand All @@ -70,10 +69,10 @@ def test_generate_new_token_form(self):
assert user.has_perm('crashstats.%s' % p3.codename)

response = self.client.get(url)
eq_(response.status_code, 200)
assert response.status_code == 200
# which choices you have depend in your owned permissions
doc = pyquery.PyQuery(response.content)
eq_(len(doc('#id_permissions option')), 2)
assert len(doc('#id_permissions option')) == 2

def test_generate_new_token(self):
url = reverse('tokens:home')
Expand All @@ -95,18 +94,18 @@ def test_generate_new_token(self):
response = self.client.post(url, {
'notes': ' Some notes ',
})
eq_(response.status_code, 302)
assert response.status_code == 302
token, = models.Token.objects.all()
eq_(token.notes, 'Some notes')
eq_(token.permissions.all().count(), 0)
assert token.notes == 'Some notes'
assert token.permissions.all().count() == 0
token.delete()

# The 'notes' field can't been too long
response = self.client.post(url, {
'notes': 'X' * 10000,
})
eq_(response.status_code, 200)
ok_('Text too long' in response.content)
assert response.status_code == 200
assert 'Text too long' in response.content

group = Group.objects.create(name='Cool people')
group.permissions.add(p1)
Expand All @@ -119,20 +118,20 @@ def test_generate_new_token(self):
})
# Because you tried to assign this token permissions you
# don't have.
eq_(response.status_code, 403)
assert response.status_code == 403

response = self.client.post(url, {
'notes': ' Some notes ',
'permissions': [p1.pk, p3.pk]
})
eq_(response.status_code, 302)
assert response.status_code == 302
token, = models.Token.objects.active().filter(user=user)
eq_(set(token.permissions.all()), set([p1, p3]))
assert set(token.permissions.all()) == set([p1, p3])

# this should be listed on the home page now
response = self.client.get(url)
eq_(response.status_code, 200)
ok_('data-key="{}"'.format(token.key) in response.content)
assert response.status_code == 200
assert 'data-key="{}"'.format(token.key) in response.content

def test_delete_token(self):
user = self._login()
Expand All @@ -148,13 +147,13 @@ def test_delete_token(self):
url = reverse('tokens:delete_token', args=(token1.pk,))
# Just like a good logout endpoint, shouldn't be able to GET there.
response = self.client.get(url)
eq_(response.status_code, 405)
assert response.status_code == 405
# It has to be post.
response = self.client.post(url)
eq_(response.status_code, 302)
ok_(not models.Token.objects.filter(notes='Some note'))
assert response.status_code == 302
assert not models.Token.objects.filter(notes='Some note')

# but you can't delete someone elses
url = reverse('tokens:delete_token', args=(token_other_user.pk,))
response = self.client.post(url)
eq_(response.status_code, 404)
assert response.status_code == 404

0 comments on commit 5e733d1

Please sign in to comment.