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

Updated batch UI to remove question types

parent b9132435
No related branches found
No related tags found
1 merge request!31Uncategorise
......@@ -18,6 +18,7 @@ QUESTION_TYPE_TAXONOMY = 'ebola-questions'
ADD_CATEGORY_PREFIX = 'add-category-'
DELETE_COMMAND = 'delete'
NONE_COMMAND = 'none'
REMOVE_QTYPE_COMMAND = 'remove-question-type'
class ViewAndEditTableTab(object):
......@@ -160,7 +161,8 @@ class ViewAndEditTableTab(object):
label=_('Actions'),
items=[
(NONE_COMMAND, '---------'),
(DELETE_COMMAND, _('Delete Selected'))
(DELETE_COMMAND, _('Delete Selected')),
(REMOVE_QTYPE_COMMAND, _('Remove Question Type'))
]
)
]
......@@ -233,6 +235,42 @@ def _get_view_and_edit_form_request_parameters(params):
return new_params
def _handle_batch_action(request, batch_action, selected):
if not batch_action:
# TODO: is this ever called?
messages.error(request, _('Missing batch action'))
return
if batch_action == NONE_COMMAND:
return
if batch_action == DELETE_COMMAND:
_delete_items(request, selected)
return
if batch_action.startswith(ADD_CATEGORY_PREFIX):
_categorize_items(request,
selected,
batch_action[len(ADD_CATEGORY_PREFIX):])
return
if batch_action == REMOVE_QTYPE_COMMAND:
_categorize_items(request,
selected,
None)
return
messages.error(request, _("Unknown batch action '%s'" % batch_action))
def _categorize_items(request, items, category):
# TODO: add the taxonomy to the form.
_add_items_categories(
request,
[(item, QUESTION_TYPE_TAXONOMY, category)
for item in items])
def view_and_edit_table_form_process_items(request):
""" Request to process a selection of items from the
view & edit table page.
......@@ -249,21 +287,8 @@ def view_and_edit_table_form_process_items(request):
params = _get_view_and_edit_form_request_parameters(request.POST)
if params['action'] == 'batchupdate':
selected = ItemTable.get_selected(params)
batch_action = params['batchaction']
if batch_action == DELETE_COMMAND:
_delete_items(request, selected)
elif batch_action and batch_action.startswith(ADD_CATEGORY_PREFIX):
category = batch_action[len(ADD_CATEGORY_PREFIX):]
# TODO: add the taxonomy to the form.
_add_items_categories(
request,
[(item, QUESTION_TYPE_TAXONOMY, category)
for item in selected]
)
elif batch_action == NONE_COMMAND:
pass
else:
messages.error(request, _('Unknown batch action'))
_handle_batch_action(request, params['batchaction'], selected)
elif params['action'] == 'save':
changes = ItemTable.get_row_select_values(params, 'category')
# TODO: Add the taxonomy to the form
......@@ -318,7 +343,7 @@ def _add_items_categories(request, items):
failed = 0
for item_id, taxonomy_slug, term_name in items:
try:
if term_name:
if term_name: # TODO not None
transport.items.add_term(
item_id,
taxonomy_slug,
......
......@@ -11,7 +11,9 @@ from hid.tabs.view_and_edit_table import (
view_and_edit_table_form_process_items,
_delete_items,
_get_view_and_edit_form_request_parameters,
DELETE_COMMAND
DELETE_COMMAND,
QUESTION_TYPE_TAXONOMY,
REMOVE_QTYPE_COMMAND
)
from tabbed_page.tests.factories import (
......@@ -92,6 +94,42 @@ def test_process_items_deletes_items(request_item):
check_item_was_deleted(req)
@pytest.mark.django_db
def test_process_items_removes_question_type():
msg = {'body': "Message text"}
transport.items.create(msg)
[item] = list(transport.items.list())
taxonomy = TaxonomyFactory(name="Ebola Questions")
term_to_delete = TermFactory(name='term to be deleted',
taxonomy=taxonomy)
transport.items.add_term(
item['id'], term_to_delete.taxonomy.slug, term_to_delete.name)
term_to_keep = TermFactory(name='term not to be deleted')
transport.items.add_term(
item['id'], term_to_keep.taxonomy.slug, term_to_keep.name)
url = reverse('data-view-process')
request = ReqFactory.post(url, {
'action': 'batchupdate-top',
'batchaction-top': REMOVE_QTYPE_COMMAND,
'select_item_id': [item['id']],
'next': 'http://localhost/testurl'
})
request = fix_messages(request)
view_and_edit_table_form_process_items(request)
[item] = list(transport.items.list())
term_names = [t['name'] for t in item['terms']]
assert term_to_keep.name in term_names
assert term_to_delete.name not in term_names
def test_empty_process_items_redirects_to_data_view():
url = reverse('data-view-process')
redirect_url = reverse('tabbed-page', kwargs={
......@@ -173,6 +211,44 @@ def test_get_category_options_orders_by_lowercase_name():
assert options == expected
@pytest.mark.django_db
def test_actions_includes_remove_question_type_option():
page = TabbedPageFactory()
tab_instance = TabInstanceFactory(page=page)
request = Mock(GET={})
tab = ViewAndEditTableTab()
term = TermFactory()
categories = [term.taxonomy.slug]
context_data = tab.get_context_data(tab_instance,
request,
categories=categories)
actions = context_data['actions'][0]
assert actions['label'] == 'Actions'
assert 'remove-question-type' in actions['items']
@pytest.mark.django_db
def test_actions_includes_remove_question_type_option():
page = TabbedPageFactory()
tab_instance = TabInstanceFactory(page=page)
request = Mock(GET={})
tab = ViewAndEditTableTab()
term = TermFactory()
categories = [term.taxonomy.slug]
context_data = tab.get_context_data(tab_instance,
request,
categories=categories)
actions = context_data['actions'][0]
assert actions['label'] == 'Actions'
assert 'remove-question-type' in actions['items']
@pytest.mark.django_db
def test_upload_form_source_read_from_settings():
page = TabbedPageFactory()
......
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