Skip to content
Snippets Groups Projects
Commit 54142fb9 authored by Alice Heaton's avatar Alice Heaton :speech_balloon:
Browse files

Merge remote-tracking branch 'origin/staging' into chart_widget

parents bddcc0f0 100d5e6c
No related branches found
No related tags found
No related merge requests found
......@@ -17,26 +17,12 @@ def delete_item(id):
@pytest.mark.django_db
def test_delete_item():
ItemFactory(body="test1")
item = ItemFactory()
assert Item.objects.count() == 1
assert Item.objects.count() == 2
response = delete_item(item.id)
assert status.is_success(response.status_code)
assert Item.objects.count() == 0
def delete_items(item_ids):
request = APIRequestFactory().delete('/items/', {'ids': item_ids})
view = ItemViewSet.as_view(actions={'delete': 'bulk_destroy'})
return view(request)
@pytest.mark.django_db
def test_delete_items():
items = [ItemFactory().id for i in range(10)]
response = delete_items(items)
assert status.is_success(response.status_code)
assert Item.objects.count() == 0
assert Item.objects.count() == 1
assert Item.objects.get().body == "test1"
from rest_framework import generics
from rest_framework_bulk.mixins import BulkDestroyModelMixin
from rest_framework import viewsets
......
import items
__all__ = ['items', ]
......@@ -6,18 +6,20 @@ from rest_api.views import ItemViewSet
from .exceptions import TransportException
url_name = 'item-list'
actions = {
'get': 'list',
'post': 'create',
'delete': 'bulk_destroy',
'delete': 'destroy',
}
request_factory = APIRequestFactory()
def url():
return reverse(url_name)
def list_url():
return reverse('item-list')
def detail_url(id):
return reverse('item-detail', args=[id])
def get_view():
......@@ -32,13 +34,14 @@ def list(**kwargs):
"""
# FIXME: currently only body exact filtering is supported
view = get_view()
request = request_factory.get(url(), kwargs)
request = request_factory.get(list_url(), kwargs)
return view(request).data
def create(item):
""" Create an Item from the given dict """
view = get_view()
request = request_factory.post(url(), item)
request = request_factory.post(list_url(), item)
response = view(request)
if status.is_success(response.status_code):
return response.data
......@@ -46,18 +49,17 @@ def create(item):
response.data['status_code'] = response.status_code
raise TransportException(response.data)
# TODO: I suspect we're actually not using this. Because the tool currently
# uses bulk delete. And of course we could use bulk delete and filter for
# the one item to delete.
def delete(id):
""" Delete the Item wit the given ID """
view = get_view()
url = '/items/{}/'.format(id)
request = request_factory.delete(url)
request = request_factory.delete(detail_url(id))
return view(request, pk=id)
def bulk_delete(ids):
""" Delete all Items whose ids appear in the given list """
view = get_view()
request = request_factory.delete(url(), ids=ids)
return view(request)
# DELETE http requests appear not to send query parameters so
# for the moment I'm mapping this onto multiple calls to delete()
for id in ids:
delete(id)
......@@ -7,19 +7,21 @@ from transport import items
@pytest.mark.django_db
def test_delete_item():
ItemFactory()
item = ItemFactory()
assert len(items.list()) == 1
assert len(items.list()) == 2
items.delete(item.id)
assert len(items.list()) == 0
assert len(items.list()) == 1
@pytest.mark.django_db
def test_delete_items():
def test_bulk_delete():
ItemFactory()
ids = [ItemFactory().id for i in range(10)]
assert len(items.list()) == 10
assert len(items.list()) == 11
items.bulk_delete(ids)
assert len(items.list()) == 0
assert len(items.list()) == 1
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