[IMP] add a bunch of tests for transformation of invisible fields, make View.fields_view_get take a request so it can use the request context for its evaluations
bzr revid: xmo@openerp.com-20110411103118-msx5plh2lnz5obps
This commit is contained in:
parent
d99bacbd60
commit
3412b89d95
|
@ -403,16 +403,20 @@ class DataSet(openerpweb.Controller):
|
|||
return {'result': r}
|
||||
|
||||
class View(openerpweb.Controller):
|
||||
def fields_view_get(self, session, model, view_id, view_type, transform=True, toolbar=False, submenu=False):
|
||||
Model = session.model(model)
|
||||
r = Model.fields_view_get(view_id, view_type, {}, toolbar, submenu)
|
||||
def fields_view_get(self, request, model, view_id, view_type,
|
||||
transform=True, toolbar=False, submenu=False):
|
||||
Model = request.session.model(model)
|
||||
fvg = Model.fields_view_get(view_id, view_type, request.context,
|
||||
toolbar, submenu)
|
||||
if transform:
|
||||
context = {} # TODO: dict(ctx_sesssion, **ctx_action)
|
||||
xml = self.transform_view(r['arch'], session, context)
|
||||
evaluation_context = request.session.evaluation_context(
|
||||
request.context or {})
|
||||
xml = self.transform_view(
|
||||
fvg['arch'], request.session, evaluation_context)
|
||||
else:
|
||||
xml = ElementTree.fromstring(r['arch'])
|
||||
r['arch'] = Xml2Json.convert_element(xml)
|
||||
return r
|
||||
xml = ElementTree.fromstring(fvg['arch'])
|
||||
fvg['arch'] = Xml2Json.convert_element(xml)
|
||||
return fvg
|
||||
|
||||
def normalize_attrs(self, elem, context):
|
||||
""" Normalize @attrs, @invisible, @required, @readonly and @states, so
|
||||
|
@ -507,7 +511,7 @@ class FormView(View):
|
|||
|
||||
@openerpweb.jsonrequest
|
||||
def load(self, req, model, view_id, toolbar=False):
|
||||
fields_view = self.fields_view_get(req.session, model, view_id, 'form', toolbar=toolbar)
|
||||
fields_view = self.fields_view_get(req, model, view_id, 'form', toolbar=toolbar)
|
||||
return {'fields_view': fields_view}
|
||||
|
||||
class ListView(View):
|
||||
|
@ -515,7 +519,7 @@ class ListView(View):
|
|||
|
||||
@openerpweb.jsonrequest
|
||||
def load(self, req, model, view_id, toolbar=False):
|
||||
fields_view = self.fields_view_get(req.session, model, view_id, 'tree', toolbar=toolbar)
|
||||
fields_view = self.fields_view_get(req, model, view_id, 'tree', toolbar=toolbar)
|
||||
return {'fields_view': fields_view}
|
||||
|
||||
class SearchView(View):
|
||||
|
@ -523,7 +527,7 @@ class SearchView(View):
|
|||
|
||||
@openerpweb.jsonrequest
|
||||
def load(self, req, model, view_id):
|
||||
fields_view = self.fields_view_get(req.session, model, view_id, 'search')
|
||||
fields_view = self.fields_view_get(req, model, view_id, 'search')
|
||||
return {'fields_view': fields_view}
|
||||
|
||||
class Action(openerpweb.Controller):
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import copy
|
||||
import xml.etree.ElementTree
|
||||
import mock
|
||||
|
||||
|
@ -8,6 +9,11 @@ import base.controllers.main
|
|||
import openerpweb.nonliterals
|
||||
import openerpweb.openerpweb
|
||||
|
||||
def field_attrs(fields_view_get, fieldname):
|
||||
(field,) = filter(lambda f: f['attrs'].get('name') == fieldname,
|
||||
fields_view_get['arch']['children'])
|
||||
return field['attrs']
|
||||
|
||||
#noinspection PyCompatibility
|
||||
class DomainsAndContextsTest(unittest2.TestCase):
|
||||
def setUp(self):
|
||||
|
@ -130,3 +136,45 @@ class AttrsNormalizationTest(unittest2.TestCase):
|
|||
self.assertEqual(
|
||||
simplejson.loads(element.get('attrs')),
|
||||
{'invisible': [['state', 'not in', ['open', 'closed']]]})
|
||||
|
||||
def test_transform_invisible(self):
|
||||
element = xml.etree.ElementTree.Element(
|
||||
'field', invisible="context.get('invisible_country', False)")
|
||||
|
||||
empty_context = copy.deepcopy(element)
|
||||
self.view.normalize_attrs(empty_context, {})
|
||||
self.assertEqual(empty_context.get('invisible'), None)
|
||||
|
||||
full_context = copy.deepcopy(element)
|
||||
self.view.normalize_attrs(full_context, {'invisible_country': True})
|
||||
self.assertEqual(full_context.get('invisible'), '1')
|
||||
|
||||
def test_transform_invisible_list_column(self):
|
||||
req = mock.Mock()
|
||||
req.context = {'set_editable':True, 'set_visible':True,
|
||||
'gtd_visible':True, 'user_invisible':True}
|
||||
req.session.evaluation_context = \
|
||||
openerpweb.openerpweb.OpenERPSession().evaluation_context
|
||||
req.session.model('project.task').fields_view_get.return_value = {
|
||||
'arch': '''
|
||||
<tree colors="grey:state in ('cancelled','done');blue:state == 'pending';red:date_deadline and (date_deadline<current_date) and (state in ('draft','pending','open'))" string="Tasks">
|
||||
<field name="sequence" invisible="not context.get('seq_visible', False)"/>
|
||||
<field name="user_id" invisible="context.get('user_invisible', False)"/>
|
||||
<field name="delegated_user_id" invisible="context.get('show_delegated', True)"/>
|
||||
<field name="total_hours" invisible="1"/>
|
||||
<field name="date_deadline" invisible="context.get('deadline_visible',True)"/>
|
||||
<field name="type_id" invisible="context.get('set_visible',False)"/>
|
||||
</tree>
|
||||
'''}
|
||||
parsed_view = base.controllers.main.View().fields_view_get(
|
||||
req, 'project.task', 42, 'tree')
|
||||
|
||||
self.assertTrue(field_attrs(parsed_view, 'sequence')['invisible'])
|
||||
self.assertTrue(field_attrs(parsed_view, 'user_id')['invisible'])
|
||||
self.assertTrue(
|
||||
field_attrs(parsed_view, 'delegated_user_id')['invisible'])
|
||||
self.assertTrue(field_attrs(parsed_view, 'total_hours')['invisible'])
|
||||
self.assertTrue(
|
||||
field_attrs(parsed_view, 'date_deadline')['invisible'])
|
||||
self.assertTrue(field_attrs(parsed_view, 'type_id')['invisible'])
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ class CalendarView(View):
|
|||
|
||||
@openerpweb.jsonrequest
|
||||
def load(self, req, model, view_id):
|
||||
fields_view = self.fields_view_get(req.session, model, view_id, 'calendar')
|
||||
fields_view = self.fields_view_get(req, model, view_id, 'calendar')
|
||||
return {'fields_view':fields_view}
|
||||
|
||||
def convert(self, event):
|
||||
|
@ -354,4 +354,3 @@ class CalendarView(View):
|
|||
title = title.strip()
|
||||
description = ', '.join(description).strip()
|
||||
return {'id': event['id'], 'start_date': str(DT.datetime(*starts[:6])), 'end_date': str(DT.datetime(*ends[:6])), 'text': title, 'title': description, 'color': self.colors[event[self.color_field]][-1]}
|
||||
|
Loading…
Reference in New Issue