Skip to content
Snippets Groups Projects
Commit 2711137e authored by Erwan Rouchet's avatar Erwan Rouchet Committed by Bastien Abadie
Browse files

Fix handling of nonexistent MLTools in API

parent 971c8b14
No related branches found
No related tags found
No related merge requests found
......@@ -34,4 +34,7 @@ class MLToolField(serializers.CharField):
return obj.slug
def to_internal_value(self, data):
return MLTool.get(settings.ML_CLASSIFIERS_DIR, self.tool_type, data)
try:
return MLTool.get(settings.ML_CLASSIFIERS_DIR, self.tool_type, data)
except ValueError as e:
raise serializers.ValidationError(str(e))
from unittest.mock import patch, call, MagicMock
from rest_framework.serializers import ValidationError
from arkindex_common.ml_tool import MLTool, MLToolType
from arkindex.project.tests import FixtureTestCase
from arkindex.project.serializer_fields import MLToolField
@patch('arkindex.project.serializer_fields.MLTool.get')
class TestMLToolField(FixtureTestCase):
def test_to_representation(self, get_mock):
tool = MagicMock(spec=MLTool)
tool.slug = 'something'
field = MLToolField(MLToolType.Classifier)
self.assertEqual(field.to_representation(tool), 'something')
def test_to_internal_value(self, get_mock):
field = MLToolField(MLToolType.Classifier)
with self.settings(ML_CLASSIFIERS_DIR='/somewhere'):
self.assertEqual(
field.to_internal_value('something'),
get_mock.return_value,
)
self.assertEqual(get_mock.call_count, 1)
self.assertEqual(get_mock.call_args, call('/somewhere', MLToolType.Classifier, 'something'))
def test_not_type(self, get_mock):
with self.assertRaises(AssertionError):
MLToolField('Potato')
def test_missing(self, get_mock):
get_mock.side_effect = ValueError('Not found!')
field = MLToolField(MLToolType.Recognizer)
with self.assertRaisesMessage(ValidationError, 'Not found!'):
field.to_internal_value('something')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment