Issue #16 Se crea la entidad en caso que no exista al agregarla a una lista

This commit is contained in:
Daniel Cortes
2020-07-04 01:57:07 -04:00
parent bea3eac644
commit 15ce254088
3 changed files with 47 additions and 3 deletions

View File

@@ -1,6 +1,12 @@
from django import forms from django import forms
from lists.models import ListItem, Tag from lists.models import ListItem, Tag, Entity
class EntityForm(forms.ModelForm):
class Meta:
model = Entity
fields = ['mbid', 'entity_type']
class ListItemForm(forms.ModelForm): class ListItemForm(forms.ModelForm):

View File

@@ -67,6 +67,30 @@ class TestList(TestCase):
def test_add_to_list(self): def test_add_to_list(self):
to_add = { to_add = {
'entity': 'b', 'entity': 'b',
'entity_type': 'artist',
'tags': ['1', '2']
}
response = self.client.post('/api/lists/list/1/', json.dumps(to_add),
content_type='application/json',
HTTP_AUTHORIZATION=self._user_bearer_token())
self.assertEqual(response.status_code, 200)
list_item = ListItem.objects.filter(pk=2)
self.assertEqual(list_item.count(), 1)
list_item = list_item[0]
self.assertEqual(list_item.user_id, self.user.id)
self.assertEqual(list_item.entity_id, to_add['entity'])
self.assertEqual(list_item.tags.count(), len(to_add['tags']))
def test_add_to_list_non_exists_entity(self):
to_add = {
'entity': 'd',
'entity_type': 'artist',
'tags': ['1', '2'] 'tags': ['1', '2']
} }

View File

@@ -4,8 +4,8 @@ from json.decoder import JSONDecodeError
from django.http import JsonResponse from django.http import JsonResponse
from oauth2_provider.decorators import protected_resource from oauth2_provider.decorators import protected_resource
from lists.forms import ListItemForm, TagForm from lists.forms import ListItemForm, TagForm, EntityForm
from lists.models import ListItem, Tag from lists.models import ListItem, Tag, Entity
from users.models import User from users.models import User
@@ -124,6 +124,20 @@ def _add_to_list(request, user):
list_item = ListItem(user=user) list_item = ListItem(user=user)
if request_data.get('entity') and Entity.objects.filter(mbid=request_data['entity']).count() == 0:
# Entity no existe en la base de datos, se crea
data = {
'mbid': request_data.get('entity', None),
'entity_type': request_data.get('entity_type', None)
}
entity_form = EntityForm(data)
if not entity_form.is_valid():
return JsonResponse({'status': 400, 'error': entity_form.errors.as_json()}, status=400)
entity_form.save()
form = ListItemForm(request_data, instance=list_item) form = ListItemForm(request_data, instance=list_item)
if not form.is_valid(): if not form.is_valid():