def test_post_edit_entity_invalid_id(self): self._create_entity_data("edittype") self._check_entity_data_values("edittype") # Form post with ID malformed f = default_view_form_data(entity_id="!badentity", orig_id="edittype", action="edit") u = entitydata_edit_url("edit", "testcoll", "testtype", entity_id="edittype") r = self.client.post(u, f) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") self.assertContains(r, "<h3>Problem with entity identifier</h3>") # Test context for re-rendered form expect_context = default_view_context_data( entity_id="!badentity", orig_id="edittype", action="edit", type_ref="_type/testtype", type_choices=self.type_ids, record_type="/testsite/c/testcoll/d/_type/testtype/") self.assertDictionaryMatch(context_bind_fields(r.context), expect_context) # Check stored entity is unchanged self._check_entity_data_values("edittype") return
def test_dup_field_display(self): # Create entity with duplicate fields self._create_entity_data("entitydupfield") self._check_entity_data_values( "entitydupfield", type_id="testtype", update="Entity", comment2="Comment field 2", comment3="Comment field 3" ) # Display entity in view with duplicate fields u = entitydata_edit_url( "edit", "testcoll", "testtype", entity_id="entitydupfield", view_id="DupField_view" ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check display context expect_context = dupfield_view_context_data( coll_id="testcoll", type_id="testtype", entity_id="entitydupfield", orig_id=None, type_ref="testtype", type_choices=self.type_ids, entity_label="Entity testcoll/testtype/entitydupfield", entity_descr="Entity coll testcoll, type testtype, entity entitydupfield", entity_descr2="Comment field 2", entity_descr3="Comment field 3", record_type="/testsite/c/testcoll/d/_type/testtype/", action="edit", update="Entity", continuation_url="" ) self.assertEqual(len(r.context['fields']), 5) self.assertDictionaryMatch(context_bind_fields(r.context), expect_context)
def test_get_edit(self): u = entitydata_edit_url("edit", "testcoll", "testtype", entity_id="entity1") r = self.client.get(u + "?continuation_url=/xyzzy/") self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # log.info(r.content) self.assertContains( r, "<title>Entity testcoll/testtype/entity1 - Default record view - Collection testcoll</title>" ) # Test context expect_context = default_view_context_data( coll_id="testcoll", type_id="testtype", entity_id="entity1", type_ref="testtype", type_choices=self.type_ids, entity_label="Entity testcoll/testtype/entity1", entity_descr="Entity coll testcoll, type testtype, entity entity1", action="edit", update="Entity", continuation_url="/xyzzy/") self.assertEqual(len(r.context['fields']), 3) # 4 fields over 3 rows self.assertDictionaryMatch(context_bind_fields(r.context), expect_context) return
def _check_context_fields(self, response, action="", vocab_id="", orig_vocab_id=None, vocab_label=None, vocab_descr=None, vocab_uri=None, vocab_seealso=[], update="RecordVocab", continuation_url=None): expect_context = vocab_view_context_data( coll_id="testcoll", vocab_id=vocab_id, orig_id=orig_vocab_id, action=action, vocab_label=vocab_label, vocab_descr=vocab_descr, vocab_uri=vocab_uri, vocab_seealso=[{ "@id": v } for v in vocab_seealso], update=update, continuation_url=continuation_url) actual_context = context_bind_fields(response.context) self.assertEqual(len(response.context['fields']), 5) self.assertDictionaryMatch(actual_context, expect_context) return
def test_RenderRepeatGroup_no_labels(self): # Create view with repeat-field and repeat-group testview = self._create_testview() Test_repeat_field = self._create_testrepeatfield( label_add=None, label_delete="") # Render view u = entitydata_edit_url("new", "testcoll", "testtype", view_id="testview") response = self.client.get(u) self.assertEqual(response.status_code, 200) self.assertEqual(response.reason_phrase, "OK") # Check render context expect_context = self._create_repeat_group_view_context( entity_id="00000001", action="new", label_add="Add Test_repeat_field", label_delete="Remove Test_repeat_field", field_value="", continuation_url="" ) actual_context = context_bind_fields(response.context) self.assertEqual(len(response.context['fields']), 2) self.assertDictionaryMatch(actual_context, expect_context) return
def test_post_new_entity_missing_id(self): f = entitydata_form_data(action="new") u = entitydata_edit_url("new", "testcoll", "testtype") r = self.client.post(u, f) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") self.assertContains(r, "<h3>Problem with entity identifier</h3>") # Test context expect_context = entitydata_context_data(action="new") self.assertDictionaryMatch(context_bind_fields(r.context), expect_context) return
def test_post_copy_entity_invalid_id(self): f = entitydata_form_data(entity_id="!badentity", orig_id="orig_entity_id", action="copy") u = entitydata_edit_url("copy", "testcoll", "testtype", entity_id="entity1") r = self.client.post(u, f) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") self.assertContains(r, "<h3>Problem with entity identifier</h3>") expect_context = entitydata_context_data(entity_id="!badentity", orig_id="orig_entity_id", action="copy") self.assertDictionaryMatch(context_bind_fields(r.context), expect_context) return
def test_post_copy_entity_missing_id(self): f = default_view_form_data(action="copy", entity_id="", orig_id="entity1") u = entitydata_edit_url("copy", "testcoll", "testtype", entity_id="entity1") r = self.client.post(u, f) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") self.assertContains(r, "<h3>Problem with entity identifier</h3>") expect_context = default_view_context_data(action="copy", orig_id="entity1", type_ref="", type_choices=self.type_ids) self.assertDictionaryMatch(context_bind_fields(r.context), expect_context) return
def test_post_new_entity_missing_id(self): f = default_view_form_data(action="new", entity_id="") u = entitydata_edit_url("new", "testcoll", "testtype") r = self.client.post(u, f) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") self.assertContains(r, "<h3>Problem with entity identifier</h3>") # Test context expect_context = default_view_context_data(coll_id="testcoll", type_id="testtype", entity_id="", orig_id="orig_entity_id", type_ref="", type_choices=self.type_ids, action="new") self.assertEqual(len(r.context['fields']), 3) # 4 fields over 3 rows self.assertDictionaryMatch(context_bind_fields(r.context), expect_context) return
def test_post_edit_entity_missing_id(self): self._create_entity_data("edittype") self._check_entity_data_values("edittype") # Form post with ID missing f = entitydata_form_data(action="edit", update="Updated entity") u = entitydata_edit_url("edit", "testcoll", "testtype", entity_id="edittype") r = self.client.post(u, f) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") self.assertContains(r, "<h3>Problem with entity identifier</h3>") # Test context for re-rendered form expect_context = entitydata_context_data(action="edit", update="Updated entity") self.assertDictionaryMatch(context_bind_fields(r.context), expect_context) # Check stored entity is unchanged self._check_entity_data_values("edittype") return
def test_get_new(self): u = entitydata_edit_url("new", "testcoll", "testtype") r = self.client.get(u + "?continuation_url=/xyzzy/") self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Test context expect_context = default_view_context_data(coll_id="testcoll", type_id="testtype", entity_id="00000001", orig_id=None, type_ref="testtype", type_choices=self.type_ids, entity_label="", entity_descr="", action="new", update="Entity", continuation_url="/xyzzy/") self.assertEqual(len(r.context['fields']), 3) # 4 fields over 3 rows self.assertDictionaryMatch(context_bind_fields(r.context), expect_context) return
def test_Repeat_Ref_Multifield_edit(self): self._create_image_multifield_repeat_ref_and_view() # Render view of multifield reference u = entitydata_edit_url("edit", "testcoll", "ref_type", "Test_rpt_entity", view_id="Test_rptimg_view") response = self.client.get(u) self.assertEqual(response.status_code, 200) self.assertEqual(response.reason_phrase, "OK") # Check render context expect_context = self._create_rptref_view_context( entity_id="Test_rpt_entity", action="edit", continuation_url="" ) actual_context = context_bind_fields(response.context) self.assertEqual(len(response.context['fields']), 2) self.assertDictionaryMatch(actual_context, expect_context) f0 = context_view_field(response.context, 0, 0) f1 = context_view_field(response.context, 1, 0) # Test rendered result field_vals = default_fields( coll_id="testcoll", type_id="ref_type", entity_id="Test_rpt_entity", view_id="Test_rptimg_view", basepath=TestBasePath, tooltip1=f0['field_tooltip'], ) formrow1 = """ <div class="small-12 medium-6 columns" title="%(tooltip1)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Id</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="entity_id" placeholder="(entity id)" value="%(entity_id)s"/> </div> </div> </div> """%field_vals(width=6) formrow2a = """ <div class="group-label small-12 medium-2 columns"> <span>Repeat image reference</span> </div> """ formrow2b = """ <div class="small-12 medium-10 columns hide-for-small-only"> <div class="row"> <div class="small-1 columns"> </div> <div class="small-11 columns"> <div class="edit-grouprow col-head row"> <div class="%(col_head_classes)s"> <span>Image reference</span> </div> </div> </div> </div> </div> """%field_vals(width=6) tgt_field_vals = default_fields( coll_id="testcoll", type_id="img_type", entity_id="Test_img_entity", view_id="Test_rptimg_view", repeat_id="Test_rptref_field", field_id="Test_refimg_field", tooltip3b=f1._field_description['group_field_descs'][0]['field_tooltip_test'] ) formrow3a = """ <div class="small-12 medium-2 columns hide-for-small-only"> </div> """%tgt_field_vals(width=6) formrow3b = (""" <div class="small-12 medium-10 columns"> <div class="tbody row select-row"> <div class="small-1 columns checkbox-in-edit-padding"> <input type="checkbox" class="select-box right" name="%(repeat_id)s__select_fields" value="0" /> </div> <div class="small-11 columns"> <div class="edit-grouprow row"> <div class="%(col_item_classes)s" title="%(tooltip3b)s"> <div class="row show-for-small-only"> <div class="view-label small-12 columns"> <span>Image reference</span> </div> </div> <div class="row view-value-col"> <div class="view-value small-12 columns"> """+ render_select_options( "%(repeat_id)s__0__%(field_id)s", "Image reference", [FieldChoice("%(type_id)s/%(entity_id)s", label="Label %(entity_id)s")], "%(type_id)s/%(entity_id)s" )+ """ </div> </div> </div> </div> </div> </div> </div> """)%tgt_field_vals(width=6) # log.info(r.content) self.assertContains(response, formrow1, html=True) self.assertContains(response, formrow2a, html=True) self.assertContains(response, formrow2b, html=True) self.assertContains(response, formrow3a, html=True) self.assertContains(response, formrow3b, html=True) return
def test_Repeat_Ref_Multifield_view(self): self._create_image_multifield_repeat_ref_and_view() # Render view of multifield reference u = entitydata_edit_url("view", "testcoll", "ref_type", "Test_rpt_entity", view_id="Test_rptimg_view") response = self.client.get(u) self.assertEqual(response.status_code, 200) self.assertEqual(response.reason_phrase, "OK") # Check render context expect_context = self._create_rptref_view_context( entity_id="Test_rpt_entity", action="view", continuation_url="" ) actual_context = context_bind_fields(response.context) self.assertEqual(len(response.context['fields']), 2) self.assertDictionaryMatch(actual_context, expect_context) # Test rendered result field_vals = default_fields( coll_id="testcoll", type_id="ref_type", entity_id="Test_rpt_entity", view_id="Test_rptimg_view", basepath=TestBasePath, cont_uri_param="" ) cont_uri_param = ( "?continuation_url=%(basepath)s/c/%(coll_id)s/v/%(view_id)s/%(type_id)s/%(entity_id)s/!view"% field_vals() ) field_vals = default_fields( coll_id="testcoll", type_id="ref_type", entity_id="Test_rpt_entity", view_id="Test_rptimg_view", basepath=TestBasePath, cont_uri_param=cont_uri_param, ) formrow1 = """ <div class="small-12 medium-6 columns"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Id</span> </div> <div class="%(input_classes)s"> <a href="%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(cont_uri_param)s">%(entity_id)s</a> </div> </div> </div> """%field_vals(width=6) formrow2a = """ <div class="group-label small-12 medium-2 columns"> <span>Repeat image reference</span> </div> """ # Note two group wrappers here: one for repeat and one for multifield ref... formrow2b = """ <div class="small-12 medium-10 columns hide-for-small-only"> <div class="row"> <div class="small-12 columns"> <div class="view-grouprow col-head row"> <div class="view-label col-head small-12 medium-6 columns"> <div class="view-grouprow col-head row"> <div class="%(col_head_classes)s"> <span>View comment field</span> </div> <div class="%(col_head_classes)s"> <span>View image field</span> </div> </div> </div> </div> </div> </div> </div> """%field_vals(width=6) tgt_field_vals = default_fields( coll_id="testcoll", type_id="img_type", entity_id="Test_img_entity", view_id="Test_rptimg_view", field_id="image_field", basepath=TestBasePath, ref_image="%s/c/testcoll/d/img_type/Test_img_entity/image_field.jpeg"%(TestBasePath,), cont_uri_param=cont_uri_param, ) formrow3a = """ <div class="small-12 medium-2 columns"> </div> """%tgt_field_vals(width=6) formrow3b = (""" <div class="small-12 medium-10 columns"> <div class="row select-row"> <div class="small-12 columns"> <div class="view-grouprow row"> <div class="small-12 medium-6 columns"> <div class="row show-for-small-only"> <div class="view-label small-12 columns"> <span>Image reference</span> </div> </div> <div class="row view-value-col"> <div class="view-value small-12 columns"> <div class="view-grouprow row"> <div class="%(col_item_classes)s"> <div class="row show-for-small-only"> <div class="view-label small-12 columns"> <span>View comment field</span> </div> </div> <div class="row view-value-col"> <div class="view-value small-12 columns"> <span class="markdown"><p>Description of image</p></span> </div> </div> </div> <div class="%(col_item_classes)s"> <div class="row show-for-small-only"> <div class="view-label small-12 columns"> <span>View image field</span> </div> </div> <div class="row view-value-col"> <div class="view-value small-12 columns"> <a href="%(ref_image)s" target="_blank"> <img src="%(ref_image)s" alt="Image at '%(ref_image)s'" /> </a> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> """)%tgt_field_vals(width=6) # log.info(r.content) self.assertContains(response, formrow1, html=True) self.assertContains(response, formrow2a, html=True) self.assertContains(response, formrow2b, html=True) self.assertContains(response, formrow3a, html=True) self.assertContains(response, formrow3b, html=True) return
def test_Ref_Multifield_edit(self): self._create_image_multifield_ref_and_view() # Render edit view of multifield reference u = entitydata_edit_url("edit", "testcoll", "ref_type", "Test_ref_entity", view_id="Test_refimg_view") response = self.client.get(u) self.assertEqual(response.status_code, 200) self.assertEqual(response.reason_phrase, "OK") # Check render context expect_context = self._create_refimg_view_context( entity_id="Test_ref_entity", entity_ref="Test_img_entity", action="edit", continuation_url="" ) actual_context = context_bind_fields(response.context) self.assertEqual(len(response.context['fields']), 1) self.assertDictionaryMatch(actual_context, expect_context) # Test rendered result f0 = context_view_field(response.context, 0, 0) f1 = context_view_field(response.context, 0, 1) field_vals = default_fields( coll_id="testcoll", type_id="ref_type", entity_id="Test_ref_entity", view_id="Test_refimg_view", basepath=TestBasePath, tooltip1=f0['field_tooltip'], ) formrow1 = """ <div class="small-12 medium-6 columns" title="%(tooltip1)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Id</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="entity_id" placeholder="(entity id)" value="%(entity_id)s"/> </div> </div> </div> """%field_vals(width=6) tgt_field_vals = default_fields( coll_id="testcoll", type_id="img_type", entity_id="Test_img_entity", view_id="Test_refimg_view", field_id="Test_refimg_field", basepath=TestBasePath, tooltip2=f1['field_tooltip'], ) formrow2 = (""" <div class="small-12 medium-6 columns" title="%(tooltip2)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Image reference</span> </div> <div class="%(input_classes)s"> """+ render_select_options( "%(field_id)s", "Image reference", [FieldChoice("%(type_id)s/%(entity_id)s", label="Label %(entity_id)s")], "%(type_id)s/%(entity_id)s" )+ """ </div> </div> </div> """)%tgt_field_vals(width=6) # log.info(r.content) self.assertContains(response, formrow1, html=True) self.assertContains(response, formrow2, html=True) return
def test_Ref_Multifield_view(self): self._create_image_multifield_ref_and_view() # Render view of multifield imageb reference u = entitydata_edit_url( "view", "testcoll", "ref_type", "Test_ref_entity", view_id="Test_refimg_view" ) response = self.client.get(u) self.assertEqual(response.status_code, 200) self.assertEqual(response.reason_phrase, "OK") # Check render context expect_context = self._create_refimg_view_context( entity_id="Test_ref_entity", entity_ref="Test_img_entity", action="view", continuation_url="" ) actual_context = context_bind_fields(response.context) self.assertEqual(len(response.context['fields']), 1) self.assertDictionaryMatch(actual_context, expect_context) # Test rendered result field_vals = default_fields( coll_id="testcoll", type_id="ref_type", entity_id="Test_ref_entity", view_id="Test_refimg_view", basepath=TestBasePath, cont_uri_param="", ) cont_uri_param = ( "?continuation_url=%(basepath)s/c/%(coll_id)s/v/%(view_id)s/%(type_id)s/%(entity_id)s/!view"% field_vals() ) field_vals = default_fields( coll_id="testcoll", type_id="ref_type", entity_id="Test_ref_entity", view_id="Test_refimg_view", basepath=TestBasePath, cont_uri_param=cont_uri_param, ) formrow1 = """ <div class="small-12 medium-6 columns"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Id</span> </div> <div class="%(input_classes)s"> <a href="%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(cont_uri_param)s">%(entity_id)s</a> </div> </div> </div> """%field_vals(width=6) tgt_field_vals = default_fields( coll_id="testcoll", type_id="img_type", entity_id="Test_img_entity", view_id="Test_refimg_view", field_id="image_field", basepath=TestBasePath, ref_image="%s/c/testcoll/d/img_type/Test_img_entity/image_field.jpeg"%(TestBasePath,), cont_uri_param=cont_uri_param, tooltip2a="", tooltip2b="", ) formrow2a = """ <div class="small-12 medium-6 columns" %(tooltip2a)s> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>View comment field</span> </div> <div class="%(input_classes)s"> <span class="markdown"><p>Description of image</p></span> </div> </div> </div> """%tgt_field_vals(width=6) formrow2b = """ <div class="small-12 medium-6 columns" %(tooltip2b)s> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>View image field</span> </div> <div class="%(input_classes)s"> <a href="%(ref_image)s" target="_blank"> <img src="%(ref_image)s" alt="Image at '%(ref_image)s'" /> </a> </div> </div> </div> """%tgt_field_vals(width=6) # log.info(r.content) self.assertContains(response, formrow1, html=True) self.assertContains(response, formrow2a, html=True) self.assertContains(response, formrow2b, html=True) return
def test_RenderRepeatGroup(self): # Create view with repeat-field and repeat-group testview = self._create_testview() testrepeatfield = self._create_testrepeatfield( label_add="Add group", label_delete="Remove group") # Render view u = entitydata_edit_url("new", "testcoll", "testtype", view_id="testview") response = self.client.get(u) self.assertEqual(response.status_code, 200) self.assertEqual(response.reason_phrase, "OK") # Check render context expect_context = self._create_repeat_group_view_context( entity_id="00000001", action="new", label_add="Add group", label_delete="Remove group", field_value="", continuation_url="" ) actual_context = context_bind_fields(response.context) self.assertEqual(len(response.context['fields']), 2) self.assertDictionaryMatch(actual_context, expect_context) # Test rendered result f0 = context_view_field(response.context, 0, 0) f1 = context_view_field(response.context, 1, 0) field_vals = default_fields( coll_id="testcoll", type_id="testtype", entity_id="00000001", tooltip1=f0['field_tooltip'], ) formrow1 = """ <div class="small-12 medium-6 columns" title="%(tooltip1)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Id</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="entity_id" placeholder="(entity id)" value="00000001"/> </div> </div> </div> """%field_vals(width=6) formrow2a = """ <div class="%(group_label_classes)s"> <span>Test repeat field label</span> </div> """%field_vals(width=12) formrow2b = """ <div class="%(group_row_head_classes)s"> <div class="row"> <div class="small-1 columns"> </div> <div class="small-11 columns"> <div class="edit-grouprow col-head row"> <div class="%(col_head_classes)s"> <span>Comment</span> </div> </div> </div> </div> </div> """%field_vals(width=12) formrow2c = """ <div class="%(group_buttons_classes)s"> <div class="row"> <div class="small-1 columns"> </div> <div class="small-11 columns"> <input type="submit" name="Test_repeat_field__remove" value="Remove group" /> <input type="submit" name="Test_repeat_field__add" value="Add group" /> <input type="submit" name="Test_repeat_field__up" value="Move ⬆" /> <input type="submit" name="Test_repeat_field__down" value="Move ⬇" /> </div> </div> </div> """%field_vals(width=12) # log.info(r.content) self.assertContains(response, formrow1, html=True) self.assertContains(response, formrow2a, html=True) self.assertContains(response, formrow2b, html=True) self.assertContains(response, formrow2c, html=True) return