Skip to content

Commit

Permalink
Fix ValueQuotaValidator and add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jochenklar committed Nov 16, 2023
1 parent a5c916f commit e31c155
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 9 deletions.
65 changes: 65 additions & 0 deletions rdmo/projects/tests/test_validator_quota.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import pytest

from rest_framework.exceptions import ValidationError as RestFameworkValidationError

from ..serializers.v1 import ValueSerializer
from ..validators import ValueQuotaValidator

project_id = 1
attribute_path = attribute__path='individual/single/text'


def test_serializer_create_file(db):
class MockedProject:
file_size = 1

class MockedView:
action = 'create'
project = MockedProject()

validator = ValueQuotaValidator()
serializer = ValueSerializer()
serializer.context['view'] = MockedView()

validator({
'value_type': 'file'
}, serializer)


def test_serializer_create_file_error(db, settings):
class MockedProject:
file_size = 1

class MockedView:
action = 'create'
project = MockedProject()

settings.PROJECT_FILE_QUOTA = '0'

validator = ValueQuotaValidator()
serializer = ValueSerializer()
serializer.context['view'] = MockedView()

with pytest.raises(RestFameworkValidationError):
validator({
'value_type': 'file'
}, serializer)


def test_serializer_create_text(db, settings):
class MockedProject:
file_size = 1

class MockedView:
action = 'create'
project = MockedProject()

settings.PROJECT_FILE_QUOTA = '0'

validator = ValueQuotaValidator()
serializer = ValueSerializer()
serializer.context['view'] = MockedView()

validator({
'value_type': 'text'
}, serializer)
15 changes: 6 additions & 9 deletions rdmo/projects/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,9 @@ class ValueQuotaValidator:
requires_context = True

def __call__(self, data, serializer):
if data.get('value_type') == VALUE_TYPE_FILE:
try:
serializer.context['view'].get_object()
except AssertionError as e:
project = serializer.context['view'].project
if project.file_size > human2bytes(settings.PROJECT_FILE_QUOTA):
raise serializers.ValidationError({
'quota': [_('The file quota for this project has been reached.')]
}) from e
if serializer.context['view'].action == 'create' and data.get('value_type') == VALUE_TYPE_FILE:
project = serializer.context['view'].project
if project.file_size > human2bytes(settings.PROJECT_FILE_QUOTA):
raise serializers.ValidationError({
'quota': [_('The file quota for this project has been reached.')]
})

0 comments on commit e31c155

Please sign in to comment.