Skip to content
Snippets Groups Projects
Commit dd76735c authored by Martin Burchell's avatar Martin Burchell
Browse files

Added creation of free tags for new item

parent ece2e179
No related branches found
No related tags found
1 merge request!46Tagging frontend
......@@ -37,6 +37,20 @@ def item_type():
return {'name': 'question', 'long_name': 'Question'}
@pytest.fixture
def add_view(item_type):
view = AddEditItemView()
view.item_type = item_type
url = reverse('add-item', kwargs={'item_type': item_type['name']})
factory = RequestFactory()
view.request = factory.post(url)
view.request = fix_messages(view.request)
return view
@pytest.fixture
def view(item, item_type):
view = AddEditItemView()
......@@ -725,3 +739,22 @@ def test_free_tags_created_on_item_update(view, form):
taxonomies = [t['taxonomy'] for t in item['terms']]
assert 'free-tags' in taxonomies
@pytest.mark.django_db
def test_free_tags_created_for_new_item(add_view, form):
form.cleaned_data['terms[free-tags]'] = 'Monrovia|Important|age 35-40'
form.cleaned_data['id'] = 0
add_view.form_valid(form)
assert_no_messages(add_view.request, messages.ERROR)
item = transport.items.get(add_view.item['id'])
terms = [t['name'] for t in item['terms']]
assert 'Monrovia' in terms
assert 'Important' in terms
assert 'age 35-40' in terms
taxonomies = [t['taxonomy'] for t in item['terms']]
assert 'free-tags' in taxonomies
......@@ -232,6 +232,29 @@ class AddEditItemView(FormView):
message_code,
message)
def _separate_form_data(self, form):
data = dict(form.cleaned_data)
category = data.pop('category', None)
data.pop('id', None)
free_terms = {}
regular_fields = {}
for (name, value) in data.iteritems():
pattern = re.compile('terms\[([-_\w]+)\]')
matches = re.match(pattern, name)
if matches is not None:
free_terms[matches.groups()[0]] = value
else:
regular_fields[name] = value
return category, free_terms, regular_fields
def _add_free_terms(self, item_id, free_terms):
for (taxonomy, value) in free_terms.iteritems():
terms = value.split('|')
transport.items.add_free_terms(item_id, taxonomy, terms)
def _update_item(self, item_id, form, taxonomy):
""" Update the given item
......@@ -244,19 +267,9 @@ class AddEditItemView(FormView):
Raises:
TransportException: On API errors
"""
data = dict(form.cleaned_data)
category = data.pop('category', None)
taxonomy_terms = {}
regular_fields = {}
for (name, value) in data.iteritems():
pattern = re.compile('terms\[([-_\w]+)\]')
matches = re.match(pattern, name)
if matches is not None:
taxonomy_terms[matches.groups()[0]] = value
else:
regular_fields[name] = value
category, free_terms, regular_fields = self._separate_form_data(
form)
transport.items.update(item_id, regular_fields)
......@@ -267,9 +280,7 @@ class AddEditItemView(FormView):
else:
transport.items.delete_all_terms(item_id, taxonomy)
for (taxonomy, value) in taxonomy_terms.iteritems():
terms = value.split('|')
transport.items.add_free_terms(item_id, taxonomy, terms)
self._add_free_terms(item_id, free_terms)
def _create_item(self, form, taxonomy):
""" Create the given item
......@@ -286,11 +297,10 @@ class AddEditItemView(FormView):
Raises:
TransportException: On API errors
"""
data = dict(form.cleaned_data)
data.pop('id', None)
category = data.pop('category', None)
category, free_terms, regular_fields = self._separate_form_data(
form)
created_item = transport.items.create(data)
created_item = transport.items.create(regular_fields)
# TODO: Combine terms into single transaction
transport.items.add_term(
......@@ -299,6 +309,8 @@ class AddEditItemView(FormView):
if taxonomy and category:
transport.items.add_term(created_item['id'], taxonomy, category)
self._add_free_terms(created_item['id'], free_terms)
return created_item
def form_invalid(self, form):
......
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