I am working on an old django project, somewhere there is a class defined as follows:
from django.http import HttpResponse class Response(HttpResponse): def __init__(self, template='', calling_context='' status=None): self.template = template self.calling_context = calling_context HttpResponse.__init__(self, get_template(template).render(calling_context), status)
and this class is used in views as follows
def some_view(request): #do some stuff return Response('some_template.html', RequestContext(request, {'some keys': 'some values'}))
this class was created mainly so that they could use it to execute statements in unit tests. They do not use django.test.Client to check the views, but instead they create a request layout and pass it to view as (calling the view as called) in tests as follows
def test_for_some_view(self): mock_request = create_a_mock_request()
The problem is that halfway through the test suite (a fairly large test suite) some tests begin to explode when executed
return Response('some_template.html', RequestContext(request, {'some keys': 'some values'}))
and stack trace
self.template = template AttributeError: can't set attribute
A full stack trace looks something like this:
====================================================================== ERROR: test_should_list_all_users_for_that_specific_sales_office ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/austiine/Projects/mped/console/metrics/tests/unit/views/sales_office_views_test.py", line 106, in test_should_list_all_users_for_that_specific_sales_office response = show(request, sales_office_id=sales_office.id) File "/Users/austiine/Projects/mped/console/metrics/views/sales_office_views.py", line 63, in show "sales_office_users": sales_office_users})) File "/Users/austiine/Projects/mped/console/metrics/utils/response.py", line 9, in __init__ self.template = template AttributeError: can't set attribute
actual verification failure
def test_should_list_all_users_for_that_specific_sales_office(self): user_company = CompanyFactory.create() request = self.mock_request(user_company)
code for presentation view
def show(request, sales_office_id): user = request.user sales_office = [] sales_office_users = [] associated_market_names = [] try: sales_office = SalesOffice.objects.get(id=sales_office_id) sales_office_users = User.objects.filter(userprofile__sales_office=sales_office) associated_market_names = Market.objects.filter(id__in= (sales_office.associated_markets.all())).values_list("name", flat=True) if user.groups.all()[0].name == UserProfile.COMPANY_AO: associated_market_names = [market.name for market in sales_office.get_sales_office_user_specific_markets(user)] except: pass return Response("sales_office/show.html", RequestContext(request, {'keys': 'values'}))