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

Implement tests for the AddEditItemView

parent 522fdec3
No related branches found
No related tags found
2 merge requests!37Items can be edited when form is submitted,!36Edit item frontend
from datetime import datetime
from django.core.urlresolvers import reverse
from django.test import RequestFactory
from mock import patch
import pytest
from .views_tests import fix_messages
from ..views.item import AddEditItemView
ReqFactory = RequestFactory()
def get_view_for_request(view_class, url_name, args=None, kwargs=None,
request_type='get', post=None, get=None):
""" Instanciate a class based view for the given request, and
return the view object
Args:
view_class (Class): Class of the view
url_name (str): Name of the url to request
args (list): Arguments passed to reverse
kwargs (dict): Arguments passed to reverse
request_type (str): Type of query. Either 'get' or 'post'
post (dict): Arguments passed to post requests
get (dict): Arguemnts passed to get requests
Returns:
object: The instanced view object
"""
if args is None:
args = []
if kwargs is None:
kwargs = {}
if post is None:
post = {}
if get is None:
get = {}
url = reverse(url_name, args=args, kwargs=kwargs)
if request_type == 'get':
request = ReqFactory.get(url, get)
else:
request = ReqFactory.post(url, post)
request = fix_messages(request)
view = view_class()
view.request = request
view.args = args
view.kwargs = kwargs
return view
def make_request(view_class, url_name, args=None, kwargs=None,
request_type='get', post=None, get=None):
""" Perform the given request, and return the view and the response.
Args:
See get_view_for_request
Returns:
(view, response) tupple
"""
view = get_view_for_request(view_class, url_name, args, kwargs,
request_type, post, get)
if request_type == 'get':
response = view.get(view.request, *view.args, **view.kwargs)
else:
response = view.post(view.request, *view.args, **view.kwargs)
return (view, response)
@pytest.fixture
def generic_item():
return {
'id': 1001,
'body': 'hello',
'created': datetime(2015, 5, 5),
'timestamp': datetime(2016, 6, 6),
'last_updated': datetime(2017, 7, 7),
'terms': [
{
'taxonomy': 'item-types',
'name': 'generic',
'long_name': 'Generic'
},
{
'taxonomy': 'a-taxonomy',
'name': 'a-term',
'long_name': 'A Term'
}
]
}
def test_the_item_is_added_to_the_view_on_get_requests(generic_item):
with patch('hid.views.item.list') as list_item:
list_item.return_value = [generic_item]
(view, response) = make_request(
AddEditItemView,
'edit-item',
kwargs={'item_id': 103}
)
assert view.item == generic_item
def test_the_item_type_is_added_to_the_view_on_get_requests(generic_item):
with patch('hid.views.item.list') as list_item:
list_item.return_value = [generic_item]
(view, response) = make_request(
AddEditItemView,
'edit-item',
kwargs={'item_id': 103}
)
assert view.item_type['name'] == 'generic'
def test_the_item_terms_are_added_to_the_view_on_get_requests(generic_item):
with patch('hid.views.item.list') as list_item:
list_item.return_value = [generic_item]
(view, response) = make_request(
AddEditItemView,
'edit-item',
kwargs={'item_id': 103}
)
assert view.item_terms == {
'item-types': [{
'taxonomy': 'item-types',
'name': 'generic',
'long_name': 'Generic'
}],
'a-taxonomy': [{
'taxonomy': 'a-taxonomy',
'name': 'a-term',
'long_name': 'A Term'
}]
}
def test_the_item_is_added_to_the_view_on_post_requests(generic_item):
with patch('hid.views.item.list') as list_item:
list_item.return_value = [generic_item]
(view, response) = make_request(
AddEditItemView,
'edit-item',
kwargs={'item_id': 103},
request_type='post',
post={
'action': 'cancel',
'next': ''
}
)
assert view.item == generic_item
def test_the_item_type_is_added_to_the_view_on_post_requests(generic_item):
with patch('hid.views.item.list') as list_item:
list_item.return_value = [generic_item]
(view, response) = make_request(
AddEditItemView,
'edit-item',
kwargs={'item_id': 103},
request_type='post',
post={
'action': 'cancel',
'next': ''
}
)
assert view.item_type['name'] == 'generic'
def test_the_item_terms_are_added_to_the_view_on_post_requests(generic_item):
with patch('hid.views.item.list') as list_item:
list_item.return_value = [generic_item]
(view, response) = make_request(
AddEditItemView,
'edit-item',
kwargs={'item_id': 103},
request_type='post',
post={
'action': 'cancel',
'next': ''
}
)
assert view.item_terms == {
'item-types': [{
'taxonomy': 'item-types',
'name': 'generic',
'long_name': 'Generic'
}],
'a-taxonomy': [{
'taxonomy': 'a-taxonomy',
'name': 'a-term',
'long_name': 'A Term'
}]
}
def test_form_initial_values_set_that_of_item(generic_item):
with patch('hid.views.item.list') as list_item:
list_item.return_value = [generic_item]
(view, response) = make_request(
AddEditItemView,
'edit-item',
kwargs={'item_id': 103}
)
initial = view.get_initial()
assert initial['id'] == 1001
assert initial['body'] == 'hello'
assert initial['timestamp'] == datetime(2016, 6, 6)
def test_form_next_url_value_set_to_current_url_by_default(generic_item):
with patch('hid.views.item.list') as list_item:
list_item.return_value = [generic_item]
(view, response) = make_request(
AddEditItemView,
'edit-item',
kwargs={'item_id': 103}
)
initial = view.get_initial()
assert initial['next'] == reverse('edit-item', kwargs={'item_id': 103})
def test_form_next_url_value_set_to_provided_url(generic_item):
with patch('hid.views.item.list') as list_item:
list_item.return_value = [generic_item]
(view, response) = make_request(
AddEditItemView,
'edit-item',
kwargs={'item_id': 103},
get={'next': 'http://example.com'}
)
initial = view.get_initial()
assert initial['next'] == 'http://example.com'
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