# HG changeset patch # User Sylvain Thénault # Date 1454583623 -3600 # Node ID 5758ba784ebd580f19216a228a7f6cd16b7811c0 # Parent 13c9cd75f097030d9f064957b06f786f612f1e2f [autoform] when building inlined-form view for a relation, consider related entities intead of other views by considering previous form-views, we may miss that there exists related entities but which are not editable. Closes #10495602 diff -r 13c9cd75f097 -r 5758ba784ebd web/test/unittest_views_editforms.py --- a/web/test/unittest_views_editforms.py Fri Feb 05 12:26:28 2016 +0100 +++ b/web/test/unittest_views_editforms.py Thu Feb 04 12:00:23 2016 +0100 @@ -15,7 +15,9 @@ # # You should have received a copy of the GNU Lesser General Public License along # with CubicWeb. If not, see . + from logilab.common.testlib import unittest_main, mock_object +from logilab.common import tempattr from cubicweb.devtools.testlib import CubicWebTC from cubicweb.web.views import uicfg @@ -181,6 +183,22 @@ autoform = self.vreg['forms'].select('edition', req, entity=req.user) self.assertEqual(list(autoform.inlined_form_views()), []) + def test_inlined_form_views(self): + # when some relation has + cardinality, and some already linked entities which are not + # updatable, a link to optionally add a new sub-entity should be displayed, not a sub-form + # forcing creation of a sub-entity + from cubicweb.web.views import autoform + with self.admin_access.web_request() as req: + req.create_entity('EmailAddress', address=u'admin@cubicweb.org', + reverse_use_email=req.user.eid) + use_email_schema = self.vreg.schema['CWUser'].rdef('use_email') + with tempattr(use_email_schema, 'cardinality', '+1'): + with self.temporary_permissions(EmailAddress={'update': ()}): + form = self.vreg['forms'].select('edition', req, entity=req.user) + formviews = list(form.inlined_form_views()) + self.assertEqual(len(formviews), 1, formviews) + self.assertIsInstance(formviews[0], autoform.InlineAddNewLinkView) + def test_check_inlined_rdef_permissions(self): # try to check permissions when creating an entity ('user' below is a # fresh entity without an eid) diff -r 13c9cd75f097 -r 5758ba784ebd web/views/autoform.py --- a/web/views/autoform.py Fri Feb 05 12:26:28 2016 +0100 +++ b/web/views/autoform.py Thu Feb 04 12:00:23 2016 +0100 @@ -899,14 +899,13 @@ ttype = tschema.type formviews = list(self.inline_edition_form_view(rschema, ttype, role)) card = rschema.role_rdef(entity.e_schema, ttype, role).role_cardinality(role) - # there is no related entity and we need at least one: we need to - # display one explicit inline-creation view - if self.should_display_inline_creation_form(rschema, formviews, card): + related = entity.has_eid() and entity.related(rschema, role) + if self.should_display_inline_creation_form(rschema, related, card): formviews += self.inline_creation_form_view(rschema, ttype, role) # we can create more than one related entity, we thus display a link # to add new related entities if self.must_display_add_new_relation_link(rschema, role, tschema, - ttype, formviews, card): + ttype, related, card): addnewlink = self._cw.vreg['views'].select( 'inline-addnew-link', self._cw, etype=ttype, rtype=rschema, role=role, card=card,