Skip to content

Commit

Permalink
Cleanup and tests of quotas form
Browse files Browse the repository at this point in the history
  • Loading branch information
dcramer committed Aug 25, 2013
1 parent 11247d2 commit a66605f
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 5 deletions.
8 changes: 5 additions & 3 deletions src/sentry/web/forms/projects.py
Expand Up @@ -184,14 +184,16 @@ def __init__(self, project, *args, **kwargs):
self.project = project
super(ProjectQuotasForm, self).__init__(*args, **kwargs)
per_minute = ProjectOption.objects.get_value(
self.project, 'quotas:per_minute', ''
self.project, 'quotas:per_minute', None
)
if per_minute == '':
if per_minute is None:
per_minute = settings.SENTRY_DEFAULT_MAX_EVENTS_PER_MINUTE
self.fields['per_minute'].initial = per_minute

def clean_per_minute(self):
value = self.cleaned_data.get('per_minute')
if not value:
return value
if value.endswith('%'):
try:
pct = int(value[:-1])
Expand All @@ -200,7 +202,7 @@ def clean_per_minute(self):
if pct > 100:
raise forms.ValidationError('Invalid percentage')
if pct == 0:
value = 0
value = '0'
return value

def save(self):
Expand Down
30 changes: 28 additions & 2 deletions tests/sentry/web/forms/projects/tests.py
@@ -1,5 +1,5 @@
from django.contrib.auth.models import User
from sentry.web.forms.projects import RemoveProjectForm
from sentry.models import User, Project
from sentry.web.forms.projects import RemoveProjectForm, ProjectQuotasForm
from sentry.testutils import TestCase


Expand All @@ -14,3 +14,29 @@ def test_requires_password_on_valid_accounts(self):
user.set_password('foo')
form = RemoveProjectForm(user=user, project_list=[])
self.assertIn('password', form.fields)


class ProjectQuotasFormTest(TestCase):
def test_accepts_percentage(self):
project = Project(id=1)
form = ProjectQuotasForm(project, {'per_minute': '50%'})
assert form.is_valid()
assert form.cleaned_data['per_minute'] == '50%'

def test_invalidates_101_percent(self):
project = Project(id=1)
form = ProjectQuotasForm(project, {'per_minute': '101%'})
assert not form.is_valid()
assert 'per_minute' in form.errors

def test_accepts_numbers(self):
project = Project(id=1)
form = ProjectQuotasForm(project, {'per_minute': '100'})
assert form.is_valid()
assert form.cleaned_data['per_minute'] == '100'

def test_discards_0_percent(self):
project = Project(id=1)
form = ProjectQuotasForm(project, {'per_minute': '0%'})
assert form.is_valid()
assert form.cleaned_data['per_minute'] == '0'

0 comments on commit a66605f

Please sign in to comment.