Skip to content
Snippets Groups Projects
Commit 1dc6bbe9 authored by Bastien Abadie's avatar Bastien Abadie
Browse files

Merge branch 'fix-ml-tool-slug' into 'master'

Fix handling of nonexistent MLTools in API

See merge request !273
parents 971c8b14 2711137e
No related branches found
No related tags found
1 merge request!273Fix handling of nonexistent MLTools in API
......@@ -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