def test_view_entity_references(self): u = entity_url(coll_id="testcoll", type_id="testsrc_type", entity_id="testsrc1") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Test context self.assertEqual(len(r.context['fields']), 3) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "testsrc1") self.assertEqual(f0.field_value_link, None) self.assertEqual(f0.options, self.no_options) f1 = context_view_field(r.context, 0, 1) self.assertEqual(f1.field_id, "testtgtref_field") self.assertEqual(f1.field_value, "testtgt_type/testtgt1") self.assertEqual(f1.field_value_link, "/testsite/c/testcoll/d/testtgt_type/testtgt1/") self.assertEqual(f1.options, self.tgt_options) f2 = context_view_field(r.context, 1, 0) self.assertEqual(f2.field_id, "Entity_label") self.assertEqual(f2.field_value, "testsrc_entity testsrc1 label") self.assertEqual(f2.field_value_link, None) self.assertEqual(f2.options, self.no_options) f3 = context_view_field(r.context, 2, 0) self.assertEqual(f3.field_id, "Entity_comment") self.assertEqual(f3.field_value, "testsrc_entity testsrc1 comment") self.assertEqual(f3.field_value_link, None) self.assertEqual(f3.options, self.no_options) return
def test_select_subtype1_fields(self): ref_view = self._create_ref_type_view(view_id="Test_ref_type1_view", record_type="test:testtypes") ref_field = self._create_ref_type_field(entity_type="test:testtype1") u = entitydata_edit_url( "new", "testcoll", "ref_type", view_id="Test_ref_type1_view" ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check render context self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "ref_type") # Fields head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 2 cols.. self.assertEqual(len(head_fields[0]['row_field_descs']), 2) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) self.assertEqual(f0['field_id'], "Entity_id") self.assertEqual(f1['field_id'], "Test_ref_type_field") baselabel = "Entity testcoll/" baseuri = TestBasePath+"/c/testcoll/d/%s/" ref_options = ( [ FieldChoice(opt, label=baselabel+opt, link=baseuri%opt) for opt in ['testtype1/entity1'] ]) self.assertEqual(f1['options'], ref_options) return
def test_get_types_scope_all_list(self): # List types in current collection and site-wide u = entitydata_list_type_url( "testcoll", "_type", list_id="Type_list", scope="all" ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Test context self.assertEqual(r.context['title'], "Entity types - Collection testcoll") self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "_type") # Fields head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 2 cols.. self.assertEqual(len(head_fields[0]['row_field_descs']), 2) # 1st field f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0['field_id'], 'Entity_id') self.assertEqual(f0['field_name'], 'entity_id') # 2nd field f1 = context_view_field(r.context, 0, 1) self.assertEqual(f1['field_id'], 'Entity_label') self.assertEqual(f1['field_name'], 'Entity_label') # Entities entities = context_list_entities(r.context) listed_entities = { e['entity_id']: e for e in entities } type_entities = get_site_bib_types() | {"testtype", "testtype2"} self.assertEqual(set(listed_entities.keys()), type_entities) return
def test_select_subtype1_fields(self): ref_view = self._create_ref_type_view(view_id="Test_ref_type1_view", record_type="test:testtypes") ref_field = self._create_ref_type_field(entity_type="test:testtype1") u = entitydata_edit_url("new", "testcoll", "ref_type", view_id="Test_ref_type1_view") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check render context self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "ref_type") # Fields head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 2 cols.. self.assertEqual(len(head_fields[0]['row_field_descs']), 2) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) self.assertEqual(f0['field_id'], "Entity_id") self.assertEqual(f1['field_id'], "Test_ref_type_field") baselabel = "Entity testcoll/" baseuri = TestBasePath + "/c/testcoll/d/%s/" ref_options = ([ FieldChoice(opt, label=baselabel + opt, link=baseuri % opt) for opt in ['testtype1/entity1'] ]) self.assertEqual(f1['options'], ref_options) return
def test_image_edit_field(self): # Upload to an image view field with open(self.imagepath) as fp: f = entitydata_default_view_form_data(type_id="testimgtype", entity_id="test1", action="edit") f['img_field'] = fp # Upload file with submission u = entitydata_edit_url("edit", "testcoll", "testimgtype", entity_id="test1", view_id="testimgview") r = self.client.post(u, f) self.assertEqual(r.status_code, 302) self.assertEqual(r.reason_phrase, "FOUND") # Read back and compare entity resource just created siteobj = open(self.imagepath, "rb") testobj = self.test_img_type_info.get_fileobj( "test1", "img_field", "annal:Image", "image/jpeg", "rb" ) self.assertTrue(siteobj.read() == testobj.read(), "Referenced image != original") # Retrieve updated form r = self.client.get(u) # Test context # print "@@ "+context_field_map(r.context) self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") f3 = context_view_field(r.context, 3, 0) self.assertEqual(f3.field_id, "Test_image") self.assertDictionaryMatch(f3.field_value, test_image_field_value()) return
def test_select_notype_fields(self): ref_view = self._create_ref_type_view(view_id="Test_ref_notype_view", view_entity_type="test:notypes") ref_field = self._create_ref_type_field( field_entity_type="test:sometypes") u = entitydata_edit_url("new", "testcoll", "ref_type", view_id="Test_ref_notype_view") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check render context self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "ref_type") # Fields head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 2 cols.. self.assertEqual(len(head_fields[0].description['row_field_descs']), 2) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f1.field_id, "Test_ref_type_field") baselabel = "Entity testcoll/" baseuri = TestBasePath + "/c/testcoll/d/%s/" ref_options = [] self.assertEqual(f1['options'], ref_options) return
def test_upload_image_resource(self): # See https://docs.djangoproject.com/en/1.7/topics/testing/tools/#django.test.Client.post with open(self.imagepath) as fp: f = entitydata_default_view_form_data(type_id="testupltype", entity_id="test1", action="edit") f['upl_field'] = fp # Upload file with submission u = entitydata_edit_url("edit", "testcoll", "testupltype", entity_id="test1", view_id="testuplimageview") r = self.client.post(u, f) self.assertEqual(r.status_code, 302) self.assertEqual(r.reason_phrase, "FOUND") # Retrieve updated form r = self.client.get(u) # Test context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") f3 = context_view_field(r.context, 3, 0) self.assertEqual(f3.field_id, "Test_upload_image") self.assertDictionaryMatch(f3.field_value, test_upload_image_field_value()) # Read back and compare entity resource just created siteobj = open(self.imagepath, "rb") testobj = self.test_upl_type_info.get_fileobj( "test1", "upl_field", "annal:Image", "image/jpeg", "rb" ) self.assertTrue(siteobj.read() == testobj.read(), "Uploaded image != original") # self.assertEqual(siteobj.read(), testobj.read()) return
def test_view_entity_references(self): u = entity_url(coll_id="testcoll", type_id="testsrc_type", entity_id="testsrc1") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Test context self.assertEqual(len(r.context['fields']), 3) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "testsrc1") self.assertEqual(f0.field_value_link, None) self.assertEqual(f0.options, self.no_options) f1 = context_view_field(r.context, 0, 1) self.assertEqual(f1.field_id, "testtgtref_field") self.assertEqual(f1.field_value, "testtgt_type/testtgt1") self.assertEqual(f1.field_value_link, "/testsite/c/testcoll/d/testtgt_type/testtgt1/") self.assertEqual(f1.options, self.tgt_options) f2 = context_view_field(r.context, 1, 0) self.assertEqual(f2.field_id, "Entity_label") self.assertEqual(f2.field_value, "testsrc_entity testsrc1 label") self.assertEqual(f2.field_value_link, None) self.assertEqual(f2.options, self.no_options) f3 = context_view_field(r.context, 2, 0) self.assertEqual(f3.field_id, "Entity_comment") self.assertEqual(f3.field_value, "testsrc_entity testsrc1 comment") self.assertEqual(f3.field_value_link, None) self.assertEqual(f3.options, self.no_options) return
def test_image_view_field(self): # This test is for an image field that supports file upload in the same entity # Upload image self.test_image_edit_field() # Display resource in view mode u = entitydata_edit_url("view", "testcoll", "testimgtype", entity_id="test1", view_id="testimgview") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check display context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") f3 = context_view_field(r.context, 3, 0) basepath = TestBasePath + "/c/testcoll/d/testimgtype/" # print "\n*****\n"+repr(context_view_field(r.context, i, 0).target_value)+"\n*****\n" self.assertEqual(f3.field_id, "Test_image") self.assertEqual(f3.field_value, test_image_field_value()) self.assertEqual(f3.target_value_link, basepath + "test1/img_field.jpg") # Check for rendered image link # log.info(r.content) field_details = ({ "basepath": TestBasePath, "coll_id": "testcoll", "type_id": "testimgtype", "entity_id": "test1", "field_id": "img_field", "tooltip": "" }) img_element = """ <div class="small-12 columns" %(tooltip)s> <div class="row view-value-row"> <div class="view-label small-12 medium-2 columns"> <span>test_image_field label</span> </div> <div class="view-value small-12 medium-10 columns"> <a href="%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(field_id)s.jpg" target="_blank"> <img src="%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(field_id)s.jpg" alt="Image at '%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(field_id)s.jpg'" /> </a> </div> </div> </div> """ % field_details self.assertContains(r, img_element, html=True) return
def test_reference_uploaded_image(self): self.test_upload_image_resource() # Display resource with image reference u = entitydata_edit_url("view", "testcoll", "testreftype", entity_id="test1", view_id="testimgrefview") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check display context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") self.assertEqual(f1.field_value, "test_ref_entity test1 label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") self.assertEqual(f2.field_value, "test_ref_entity test1 comment") f3 = context_view_field(r.context, 3, 0) basepath = TestBasePath + "/c/testcoll/d/testupltype/" # print "\n*****\n"+repr(context_view_field(r.context, i, 0).target_value)+"\n*****\n" self.assertEqual(f3.field_id, "Test_image_ref") self.assertEqual(f3.field_value, "testupltype/test1") self.assertEqual(f3.field_value_link, basepath+"test1/") self.assertEqual(f3.target_value['upload_name'], "upl_field") self.assertEqual(f3.target_value['resource_name'], "upl_field.jpg") self.assertEqual(f3.target_value['resource_type'], "image/jpeg") self.assertEqual(f3.target_value['uploaded_file'], "test-image.jpg") self.assertEqual(f3.target_value['uploaded_size'], 1547926) self.assertEqual(f3.target_value_link, basepath+"test1/upl_field.jpg") # Check for rendered image link # log.info(r.content) field_details = ( { "basepath": TestBasePath , "coll_id": "testcoll" , "type_id": "testupltype" , "entity_id": "test1" , "field_id": "upl_field" , "tooltip": "" }) img_element = """ <div class="small-12 columns" %(tooltip)s> <div class="row view-value-row"> <div class="view-label small-12 medium-2 columns"> <span>test_image_ref_field label</span> </div> <div class="view-value small-12 medium-10 columns"> <a href="%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(field_id)s.jpg" target="_blank"> <img src="%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(field_id)s.jpg" alt="Image at '%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(field_id)s.jpg'" /> </a> </div> </div> </div> """%field_details self.assertContains(r, img_element, html=True) return
def test_reference_image(self): # Display resource with image reference u = entitydata_edit_url("view", "testcoll", "testreftype", entity_id="test1", view_id="testrefview") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check display context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") self.assertEqual(f1.field_value, "test_ref_image label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") self.assertEqual(f2.field_value, "test_ref_image comment") f3 = context_view_field(r.context, 3, 0) basepath = TestBasePath + "/c/testcoll/d/testreftype/" # print "\n*****\n"+repr(f3)+"\n*****\n" self.assertEqual(f3.field_id, "Test_image_ref") self.assertEqual(f3.field_value, self.imageuri) self.assertEqual(f3.field_value_link, None) self.assertEqual(f3.target_value, self.imageuri) self.assertEqual(f3.target_value_link, self.imageuri) # Check for rendered image link # log.info(r.content) field_details = ({ "basepath": TestBasePath, "coll_id": "testcoll", "type_id": "testupltype", "entity_id": "test1", "image_uri": self.imageuri, "field_id": "ref_image", "tooltip": "" # 'title="%s"'%r.context['fields'][i].field_help }) img_element = """ <div class="small-12 columns" %(tooltip)s> <div class="row view-value-row"> <div class="view-label small-12 medium-2 columns"> <span>test_image_ref_field label</span> </div> <div class="view-value small-12 medium-10 columns"> <a href="%(image_uri)s" target="_blank"> <img src="%(image_uri)s" alt="Image at '%(image_uri)s'" /> </a> </div> </div> </div> """ % field_details self.assertContains(r, img_element, html=True) return
def test_view_subproperty_list(self): self.create_subproperty_field_view_entity() self.create_subproperty_list_field_view_entity() # Post edit form response u = entitydata_edit_url("view", "testcoll", "testtype", entity_id="testlistentity", view_id="testlistview") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Test context url = entity_url(coll_id="testcoll", type_id="testtype", entity_id="testlistentity") self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "testtype") self.assertEqual(r.context['entity_id'], "testlistentity") self.assertEqual(r.context['orig_id'], "testlistentity") self.assertEqual(r.context['action'], "view") # Fields self.assertEqual(len(r.context['fields']), 2) # Check id field for sanity f1 = context_view_field(r.context, 0, 0) self.assertEqual(f1.field_id, "Entity_id") self.assertEqual(f1.description['field_property_uri'], ANNAL.CURIE.id) self.assertEqual(f1['field_value'], self.testlistentity_data[ANNAL.CURIE.id]) # Check superproperty field value f2 = context_view_field(r.context, 1, 0) self.assertEqual(f2.field_id, "Test_sup_list") self.assertEqual(f2.description['field_property_uri'], "test:superprop_list_uri") f2rfs = context_view_repeat_fields(r.context, f2) self.assertEqual(f2rfs[0][0].field_value, "Test field 1 value") self.assertEqual(f2rfs[1][0].field_value, "Test field 2 value") # Check rendered list item1data = (""" <div class="row view-value-col"> <div class="view-value small-12 columns"> <span>Test field 1 value</span> </div> </div> """) self.assertContains(r, item1data, html=True) item2data = (""" <div class="row view-value-col"> <div class="view-value small-12 columns"> <span>Test field 1 value</span> </div> </div> """) self.assertContains(r, item2data, html=True) return
def test_reference_image(self): # Display resource with image reference u = entitydata_edit_url("view", "testcoll", "testreftype", entity_id="test1", view_id="testrefview") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check display context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") self.assertEqual(f1.field_value, "test_ref_image label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") self.assertEqual(f2.field_value, "test_ref_image comment") f3 = context_view_field(r.context, 3, 0) basepath = TestBasePath + "/c/testcoll/d/testreftype/" # print "\n*****\n"+repr(f3)+"\n*****\n" self.assertEqual(f3.field_id, "Test_image_ref") self.assertEqual(f3.field_value, self.imageuri) self.assertEqual(f3.field_value_link, None) self.assertEqual(f3.target_value, self.imageuri) self.assertEqual(f3.target_value_link, self.imageuri) # Check for rendered image link # log.info(r.content) field_details = ( { "basepath": TestBasePath , "coll_id": "testcoll" , "type_id": "testupltype" , "entity_id": "test1" , "image_uri": self.imageuri , "field_id": "ref_image" , "tooltip": "" # 'title="%s"'%r.context['fields'][i].field_help }) img_element = """ <div class="small-12 columns" %(tooltip)s> <div class="row view-value-row"> <div class="view-label small-12 medium-2 columns"> <span>test_image_ref_field label</span> </div> <div class="view-value small-12 medium-10 columns"> <a href="%(image_uri)s" target="_blank"> <img src="%(image_uri)s" alt="Image at '%(image_uri)s'" /> </a> </div> </div> </div> """%field_details self.assertContains(r, img_element, html=True) return
def test_image_view_field(self): # This test is for an image field that supports file upload in the same entity # Upload image self.test_image_edit_field() # Display resource in view mode u = entitydata_edit_url("view", "testcoll", "testimgtype", entity_id="test1", view_id="testimgview") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check display context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") f3 = context_view_field(r.context, 3, 0) basepath = TestBasePath + "/c/testcoll/d/testimgtype/" # print "\n*****\n"+repr(context_view_field(r.context, i, 0).target_value)+"\n*****\n" self.assertEqual(f3.field_id, "Test_image") self.assertEqual(f3.field_value, test_image_field_value()) self.assertEqual(f3.target_value_link, basepath+"test1/img_field.jpg") # Check for rendered image link # log.info(r.content) field_details = ( { "basepath": TestBasePath , "coll_id": "testcoll" , "type_id": "testimgtype" , "entity_id": "test1" , "field_id": "img_field" , "tooltip": "" }) img_element = """ <div class="small-12 columns" %(tooltip)s> <div class="row view-value-row"> <div class="view-label small-12 medium-2 columns"> <span>test_image_field label</span> </div> <div class="view-value small-12 medium-10 columns"> <a href="%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(field_id)s.jpg" target="_blank"> <img src="%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(field_id)s.jpg" alt="Image at '%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(field_id)s.jpg'" /> </a> </div> </div> </div> """%field_details self.assertContains(r, img_element, html=True) return
def test_reference_uploaded_resource(self): # Create uploaded resource (see previous test) with open(self.filepath) as fp: f = entitydata_default_view_form_data(type_id="testupltype", entity_id="test1", action="edit") f['upl_field'] = fp # Upload file with submission u = entitydata_edit_url("view", "testcoll", "testupltype", entity_id="test1", view_id="testuplfileview") r = self.client.post(u, f) self.assertEqual(r.status_code, 302) self.assertEqual(r.reason_phrase, "FOUND") # Display resource with reference u = entitydata_edit_url("view", "testcoll", "testreftype", entity_id="test1", view_id="testrefview") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check display context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") self.assertEqual(f1.field_value, "test_ref_entity test1 label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") self.assertEqual(f2.field_value, "test_ref_entity test1 comment") f3 = context_view_field(r.context, 3, 0) basepath = TestBasePath + "/c/testcoll/d/testupltype/" # print "\n*****\n"+repr(context_view_field(r.context, i, 0).target_value)+"\n*****\n" self.assertEqual(f3.field_id, "Test_reference") self.assertEqual(f3.field_value, "testupltype/test1") self.assertEqual(f3.field_value_link, basepath + "test1/") self.assertEqual(f3.target_value['upload_name'], "upl_field") self.assertEqual(f3.target_value['resource_name'], "upl_field.md") self.assertEqual(f3.target_value['resource_type'], "text/markdown") self.assertEqual(f3.target_value['uploaded_file'], "testdatafile.md") self.assertEqual(f3.target_value['uploaded_size'], 137) self.assertEqual(f3.target_value_link, basepath + "test1/upl_field.md") 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") self.assertContains(r, "Collection testcoll") # Check display context self.assertEqual(len(r.context['fields']), 5) f3 = context_view_field(r.context, 2, 0) f4 = context_view_field(r.context, 3, 0) f5 = context_view_field(r.context, 4, 0) # 4th field - 1st comment comment_value = "Entity coll testcoll, type testtype, entity entitydupfield" self.assertEqual(f3['field_id'], 'Entity_comment') self.assertEqual(f3['field_name'], 'Entity_comment') self.assertEqual(f3['field_label'], 'Comment') self.assertEqual(f3['field_property_uri'], "rdfs:comment") self.assertEqual(f3['field_placement'].field, "small-12 columns") self.assertEqual(f3['field_value'], comment_value) # 5th field - 2nd comment comment2_value = "Comment field 2" self.assertEqual(f4['field_id'], 'Entity_comment') self.assertEqual(f4['field_name'], 'Entity_comment__2') self.assertEqual(f4['field_label'], 'Comment') self.assertEqual(f4['field_property_uri'], "rdfs:comment__2") self.assertEqual(f4['field_placement'].field, "small-12 columns") self.assertEqual(f4['field_value'], comment2_value) # 6th field - 3rd comment comment2_value = "Comment field 3" self.assertEqual(f5['field_id'], 'Entity_comment') self.assertEqual(f5['field_name'], 'Entity_comment__3') self.assertEqual(f5['field_label'], 'Comment') self.assertEqual(f5['field_property_uri'], "rdfs:comment_alt") self.assertEqual(f5['field_placement'].field, "small-12 columns") self.assertEqual(f5['field_value'], comment2_value) 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") self.assertContains(r, "Collection testcoll") # Check display context self.assertEqual(len(r.context['fields']), 5) f3 = context_view_field(r.context, 2, 0) f4 = context_view_field(r.context, 3, 0) f5 = context_view_field(r.context, 4, 0) # 4th field - 1st comment comment_value = "Entity coll testcoll, type testtype, entity entitydupfield" self.assertEqual(f3['field_id'], 'Entity_comment') self.assertEqual(f3['field_name'], 'Entity_comment') self.assertEqual(f3['field_label'], 'Comment') self.assertEqual(f3['field_property_uri'], "rdfs:comment") self.assertEqual(f3['field_placement'].field, "small-12 columns") self.assertEqual(f3['field_value'], comment_value) # 5th field - 2nd comment comment2_value = "Comment field 2" self.assertEqual(f4['field_id'], 'Entity_comment') self.assertEqual(f4['field_name'], 'Entity_comment__2') self.assertEqual(f4['field_label'], 'Comment') self.assertEqual(f4['field_property_uri'], "rdfs:comment__2") self.assertEqual(f4['field_placement'].field, "small-12 columns") self.assertEqual(f4['field_value'], comment2_value) # 6th field - 3rd comment comment2_value = "Comment field 3" self.assertEqual(f5['field_id'], 'Entity_comment') self.assertEqual(f5['field_name'], 'Entity_comment__3') self.assertEqual(f5['field_label'], 'Comment') self.assertEqual(f5['field_property_uri'], "rdfs:comment_alt") self.assertEqual(f5['field_placement'].field, "small-12 columns") self.assertEqual(f5['field_value'], comment2_value) return
def test_user_permissions_form_rendering(self): # Test rendering of permissions from list in entity u = entitydata_edit_url( "edit", "testcoll", layout.USER_TYPEID, "testuser", view_id="User_view" ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") field_vals = default_fields( coll_id="testcoll", type_id=layout.USER_TYPEID, entity_id="testuser", tooltip=context_view_field(r.context, 4, 0)['field_help'] ) formrow5 = """ <div class="small-12 columns" title="%(tooltip)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Permissions</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="User_permissions" placeholder="(user permissions; e.g. 'VIEW CREATE UPDATE DELETE CONFIG')" value="VIEW CREATE UPDATE DELETE CONFIG ADMIN"/> </div> </div> </div> """%field_vals(width=12) # log.info(r.content) # log.info # for i in range(len(r.context['fields'])): # log.info("Field %d: %r"%(i, r.context['fields'][i])) self.assertContains(r, formrow5, html=True) return
def test_view_field_alias(self): # View BibEntry field in Default_view u = entitydata_edit_url("edit", "testcoll", "BibEntry_type", entity_id="bibentity1", view_id="Default_view") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Test context url = entity_url(coll_id="testcoll", type_id="BibEntry_type", entity_id="bibentity1") self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "BibEntry_type") self.assertEqual(r.context['entity_id'], "bibentity1") self.assertEqual(r.context['orig_id'], "bibentity1") self.assertEqual(r.context['action'], "edit") # Fields self.assertEqual(len(r.context['fields']), 3) # Check aliased label field f2 = context_view_field(r.context, 1, 0) self.assertEqual(f2['field_id'], 'Entity_label') self.assertEqual(f2['field_property_uri'], RDFS.CURIE.label) self.assertEqual(f2['field_value'], self.bibentity1_data['bib:title']) return
def test_bad_user_permissions_form_rendering(self): # Test handling of permissions not stored in entity as a list of values create_user_permissions(self.testcoll, "baduserperms", user_permissions="VIEW CREATE UPDATE DELETE" ) u = entitydata_edit_url( "edit", "testcoll", layout.USER_TYPEID, "baduserperms", view_id="User_view" ) with SuppressLogging(logging.WARNING): r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") field_vals = default_fields( coll_id="testcoll", type_id=layout.USER_TYPEID, entity_id="baduserperms", tooltip=context_view_field(r.context, 4, 0)['field_help'] ) formrow5 = """ <div class="small-12 columns" title="%(tooltip)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Permissions</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="User_permissions" placeholder="(user permissions; e.g. 'VIEW CREATE UPDATE DELETE CONFIG')" value="VIEW CREATE UPDATE DELETE"/> </div> </div> </div> """%field_vals(width=12) # log.info(r.content) self.assertContains(r, formrow5, html=True) return
def test_view_field_alias(self): # View BibEntry field in Default_view u = entitydata_edit_url( "edit", "testcoll", "BibEntry_type", entity_id="bibentity1", view_id="Default_view" ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Test context url = entity_url(coll_id="testcoll", type_id="BibEntry_type", entity_id="bibentity1") self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "BibEntry_type") self.assertEqual(r.context['entity_id'], "bibentity1") self.assertEqual(r.context['orig_id'], "bibentity1") self.assertEqual(r.context['action'], "edit") # Fields self.assertEqual(len(r.context['fields']), 3) # Check aliased label field f2 = context_view_field(r.context, 1, 0) self.assertEqual(f2['field_id'], 'Entity_label') self.assertEqual(f2['field_property_uri'], RDFS.CURIE.label) self.assertEqual(f2['field_value'], self.bibentity1_data['bib:title']) return
def test_user_permissions_form_rendering(self): # Test rendering of permissions from list in entity u = entitydata_edit_url("edit", "testcoll", layout.USER_TYPEID, "testuser", view_id="User_view") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") field_vals = default_fields(coll_id="testcoll", type_id=layout.USER_TYPEID, entity_id="testuser", tooltip=context_view_field( r.context, 4, 0)['field_help']) formrow5 = """ <div class="small-12 columns" title="%(tooltip)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Permissions</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="User_permissions" placeholder="(user permissions; e.g. 'VIEW CREATE UPDATE DELETE CONFIG')" value="VIEW CREATE UPDATE DELETE CONFIG ADMIN"/> </div> </div> </div> """ % field_vals(width=12) # log.info(r.content) # log.info # for i in range(len(r.context['fields'])): # log.info("Field %d: %r"%(i, r.context['fields'][i])) self.assertContains(r, formrow5, html=True) return
def test_get_fields_list_search(self): u = entitydata_list_type_url( "testcoll", layout.FIELD_TYPEID, list_id="Field_list", scope="all", continuation_url="/xyzzy/", query_params={"search": "Coll_"} ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") list_label = "Field definitions" list_title = "Field definitions - Collection testcoll" self.assertContains(r, "<title>%s</title>"%list_title, html=True) self.assertContains(r, '<h2 class="page-heading">%s</h2>'%list_label, html=True) # Test context self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], layout.FIELD_TYPEID) self.assertEqual(r.context['continuation_url'], "/xyzzy/") self.assertEqual(r.context['search_for'], "Coll_") list_choices = r.context['list_choices'] self.assertEqual(set(list_choices.options), set(self.list_ids)) self.assertEqual(list_choices['field_value'], "Field_list") # Fields head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 4 cols.. self.assertEqual(len(head_fields[0]['row_field_descs']), 4) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) f2 = context_view_field(r.context, 0, 2) f3 = context_view_field(r.context, 0, 3) self.assertEqual(f0['field_id'], 'Entity_id') self.assertEqual(f1['field_id'], 'Field_render_type') self.assertEqual(f2['field_id'], 'Field_value_type') self.assertEqual(f3['field_id'], 'Entity_label') # Entities entities = context_list_entities(r.context) self.assertEqual(len(entities), 7) field_entities = ( { ( "Coll_comment", "Markdown", "annal:Richtext", "Collection metadata" ) , ( "Coll_default_list_id", "Showtext", "annal:Text", "Default list" ) , ( "Coll_default_view_entity", "Showtext", "annal:Text", "Default view entity" ) , ( "Coll_default_view_id", "Showtext", "annal:Text", "Default view" ) , ( "Coll_default_view_type", "Showtext", "annal:Text", "Default view type" ) , ( "Coll_parent", "Enum_choice_opt", "annal:Slug", "Parent" ) , ( "Coll_software_version", "Showtext", "annal:Text", "S/W version" ) }) check_field_list_context_fields(self, r, field_entities) return
def test_reference_imported_resource(self): # Create imported resource (see previous test) f = entitydata_default_view_form_data(entity_id="test1", type_id="testimptype", action="edit", do_import="imp_field__import") f['imp_field'] = self.fileuri u = entitydata_edit_url("edit", "testcoll", "testimptype", entity_id="test1", view_id="testimpview") r = self.client.post(u, f) self.assertEqual(r.status_code, 302) self.assertEqual(r.reason_phrase, "FOUND") # Display resource with reference u = entitydata_edit_url("view", "testcoll", "testreftype", entity_id="test1", view_id="testrefview") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check display context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") self.assertEqual(f1.field_value, "test_ref_entity test1 label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") self.assertEqual(f2.field_value, "test_ref_entity test1 comment") f3 = context_view_field(r.context, 3, 0) basepath = TestBasePath + "/c/testcoll/d/testimptype/" self.assertEqual(f3.field_id, "Test_reference") self.assertEqual(f3.field_value, "testimptype/test1") self.assertEqual(f3.field_value_link, basepath + "test1/") self.assertEqual(f3.target_value['import_name'], "imp_field") self.assertEqual(f3.target_value['resource_name'], "imp_field.md") self.assertEqual(f3.target_value['resource_type'], "text/markdown") self.assertEqual(f3.target_value_link, basepath + "test1/imp_field.md") return
def test_image_edit(self): # This test that entity editing leaves attachment intact # Upload image self.test_image_edit_field() # Edit entity f = entitydata_default_view_form_data(type_id="testimgtype", entity_id="test1", action="edit", update="Updated") u = entitydata_edit_url("edit", "testcoll", "testimgtype", entity_id="test1", view_id="testimgview") r = self.client.post(u, f) self.assertEqual(r.status_code, 302) self.assertEqual(r.reason_phrase, "FOUND") # Retrieve updated form r = self.client.get(u) # Test context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") self.assertEqual(f1.field_value, "Updated testcoll/testimgtype/test1") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") f3 = context_view_field(r.context, 3, 0) self.assertEqual(f3.field_id, "Test_image") self.assertDictionaryMatch(f3.field_value, test_image_field_value()) # Read back and compare entity resource siteobj = open(self.imagepath, "rb") testobj = self.test_img_type_info.get_fileobj("test1", "img_field", "annal:Image", "image/jpeg", "rb") self.assertTrue(siteobj.read() == testobj.read(), "Edited entity image != original") return
def test_get_default_all_scope_all_list(self): # List all entities in current collection and site-wide u = entitydata_list_all_url("testcoll", list_id="Default_list_all", scope="all", continuation_url="/xyzzy/") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") self.assertContains(r, "Collection testcoll") self.assertContains( r, '<h2 class="page-heading">List entities with type information</h2>', html=True) # Test context self.assertEqual( r.context['title'], "List entities with type information - Collection testcoll") self.assertEqual(r.context['heading'], "List entities with type information") self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], None) list_choices = r.context['list_choices'] self.assertEqual(set(list_choices.options), set(self.list_ids)) self.assertEqual(list_choices['field_value'], "Default_list_all") # Unbound field descriptions head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 3 cols.. self.assertEqual(len(head_fields[0].description['row_field_descs']), 3) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) f2 = context_view_field(r.context, 0, 2) self.assertEqual(f0.field_id, 'Entity_id') self.assertEqual(f1.field_id, 'Entity_type') self.assertEqual(f2.field_id, 'Entity_label') # Entities and bound fields entities = context_list_entities(r.context) if len(entities) != 213: for e in entities: log.debug("All entities: %s/%s" % (e['annal:type_id'], e['annal:id'])) self.assertEqual(len(entities), 226) # Will change with site data return
def test_reference_uploaded_resource(self): # Create uploaded resource (see previous test) with open(self.filepath) as fp: f = entitydata_default_view_form_data(type_id="testupltype", entity_id="test1", action="edit") f['upl_field'] = fp # Upload file with submission u = entitydata_edit_url( "view", "testcoll", "testupltype", entity_id="test1", view_id="testuplfileview" ) r = self.client.post(u, f) self.assertEqual(r.status_code, 302) self.assertEqual(r.reason_phrase, "FOUND") # Display resource with reference u = entitydata_edit_url( "view", "testcoll", "testreftype", entity_id="test1", view_id="testrefview" ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check display context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") self.assertEqual(f1.field_value, "test_ref_entity test1 label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") self.assertEqual(f2.field_value, "test_ref_entity test1 comment") f3 = context_view_field(r.context, 3, 0) basepath = TestBasePath + "/c/testcoll/d/testupltype/" # print "\n*****\n"+repr(context_view_field(r.context, i, 0).target_value)+"\n*****\n" self.assertEqual(f3.field_id, "Test_reference") self.assertEqual(f3.field_value, "testupltype/test1") self.assertEqual(f3.field_value_link, basepath+"test1/") self.assertEqual(f3.target_value['upload_name'], "upl_field") self.assertEqual(f3.target_value['resource_name'], "upl_field.md") self.assertEqual(f3.target_value['resource_type'], "text/markdown") self.assertEqual(f3.target_value['uploaded_file'], "testdatafile.md") self.assertEqual(f3.target_value['uploaded_size'], 137) self.assertEqual(f3.target_value_link, basepath+"test1/upl_field.md") return
def test_reference_imported_resource(self): # Create imported resource (see previous test) f = entitydata_default_view_form_data( entity_id="test1", type_id="testimptype", action="edit", do_import="imp_field__import" ) f['imp_field'] = self.fileuri u = entitydata_edit_url( "edit", "testcoll", "testimptype", entity_id="test1", view_id="testimpview" ) r = self.client.post(u, f) self.assertEqual(r.status_code, 302) self.assertEqual(r.reason_phrase, "FOUND") # Display resource with reference u = entitydata_edit_url( "view", "testcoll", "testreftype", entity_id="test1", view_id="testrefview" ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check display context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") self.assertEqual(f1.field_value, "test_ref_entity test1 label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") self.assertEqual(f2.field_value, "test_ref_entity test1 comment") f3 = context_view_field(r.context, 3, 0) basepath = TestBasePath + "/c/testcoll/d/testimptype/" self.assertEqual(f3.field_id, "Test_reference") self.assertEqual(f3.field_value, "testimptype/test1") self.assertEqual(f3.field_value_link, basepath+"test1/") self.assertEqual(f3.target_value['import_name'], "imp_field") self.assertEqual(f3.target_value['resource_name'], "imp_field.md") self.assertEqual(f3.target_value['resource_type'], "text/markdown") self.assertEqual(f3.target_value_link, basepath+"test1/imp_field.md") return
def test_image_edit_field(self): # Upload to an image view field with open(self.imagepath) as fp: f = entitydata_default_view_form_data(type_id="testimgtype", entity_id="test1", action="edit") f['img_field'] = fp # Upload file with submission u = entitydata_edit_url("edit", "testcoll", "testimgtype", entity_id="test1", view_id="testimgview") r = self.client.post(u, f) self.assertEqual(r.status_code, 302) self.assertEqual(r.reason_phrase, "FOUND") # Read back and compare entity resource just created siteobj = open(self.imagepath, "rb") testobj = self.test_img_type_info.get_fileobj("test1", "img_field", "annal:Image", "image/jpeg", "rb") self.assertTrue(siteobj.read() == testobj.read(), "Referenced image != original") # Retrieve updated form r = self.client.get(u) # Test context # print "@@ "+context_field_map(r.context) self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") f3 = context_view_field(r.context, 3, 0) self.assertEqual(f3.field_id, "Test_image") self.assertDictionaryMatch(f3.field_value, test_image_field_value()) return
def test_upload_image_resource(self): # See https://docs.djangoproject.com/en/1.7/topics/testing/tools/#django.test.Client.post with open(self.imagepath) as fp: f = entitydata_default_view_form_data(type_id="testupltype", entity_id="test1", action="edit") f['upl_field'] = fp # Upload file with submission u = entitydata_edit_url("edit", "testcoll", "testupltype", entity_id="test1", view_id="testuplimageview") r = self.client.post(u, f) self.assertEqual(r.status_code, 302) self.assertEqual(r.reason_phrase, "FOUND") # Retrieve updated form r = self.client.get(u) # Test context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") f3 = context_view_field(r.context, 3, 0) self.assertEqual(f3.field_id, "Test_upload_image") self.assertDictionaryMatch(f3.field_value, test_upload_image_field_value()) # Read back and compare entity resource just created siteobj = open(self.imagepath, "rb") testobj = self.test_upl_type_info.get_fileobj("test1", "upl_field", "annal:Image", "image/jpeg", "rb") self.assertTrue(siteobj.read() == testobj.read(), "Uploaded image != original") # self.assertEqual(siteobj.read(), testobj.read()) return
def test_get_types_scope_all_list(self): # List types in current collection and site-wide u = entitydata_list_type_url( "testcoll", "_type", list_id="Type_list", scope="all" ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # log.info(r.content) #@@ list_label = "Entity types" list_title = "Entity types - Collection testcoll" self.assertContains(r, "<title>%s</title>"%list_title, html=True) self.assertContains(r, '<h2 class="page-heading">%s</h2>'%list_label, html=True) # Test context self.assertEqual(r.context['title'], list_title) self.assertEqual(r.context['heading'], list_label) self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "_type") # Fields head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 2 cols.. self.assertEqual(len(head_fields[0]['row_field_descs']), 2) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) # 1st field self.assertEqual(f0['field_id'], 'Entity_id') self.assertEqual(f0['field_name'], 'entity_id') # 2nd field self.assertEqual(f1['field_id'], 'Entity_label') self.assertEqual(f1['field_name'], 'Entity_label') # Entities entities = context_list_entities(r.context) listed_entities = { e['entity_id']: e for e in entities } #@@ self.assertIn('_initial_values', listed_entities) type_entities = get_site_types() | {"testtype", "testtype2"} self.assertEqual(set(listed_entities.keys()), type_entities) return
def test_import_resource(self): f = entitydata_default_view_form_data(entity_id="test1", type_id="testimptype", action="edit", do_import="imp_field__import") f['imp_field'] = self.fileuri u = entitydata_edit_url("edit", "testcoll", "testimptype", entity_id="test1", view_id="testimpview") r = self.client.post(u, f) self.assertEqual(r.status_code, 302) self.assertEqual(r.reason_phrase, "FOUND") self.assertMatch(r['location'], TestHostUri + u) # Read back form following redirect r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Test context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") f3 = context_view_field(r.context, 3, 0) self.assertEqual(f3.field_id, "Test_import") self.assertDictionaryMatch(f3.field_value, test_import_field_value()) # Read back and compare entity resource just created siteobj = open(TestBaseDir + "/README.md", "rb") testobj = self.test_imp_type_info.get_fileobj("test1", "imp_field", "annal:Richtext", "text/markdown", "rb") self.assertEqual(siteobj.read(), testobj.read()) return
def test_list_field_alias(self): # List BibEntry fields in Default_list u = entitydata_list_type_url("testcoll", "BibEntry_type", list_id="Default_list") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # log.info(r.content) #@@ # Test context self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "BibEntry_type") self.assertEqual(r.context['list_choices']['field_value'], "Default_list") # Fields head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 2 cols.. self.assertEqual(len(head_fields[0]['row_field_descs']), 2) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) # 1st field self.assertEqual(f0['field_id'], 'Entity_id') self.assertEqual(f0['field_property_uri'], "annal:id") self.assertEqual(f0['field_value'], "") # 2nd field self.assertEqual(f1['field_id'], 'Entity_label') self.assertEqual(f1['field_property_uri'], "rdfs:label") self.assertEqual(f1['field_value'], "") # List entities (actually, just the one) entities = context_list_entities(r.context) self.assertEqual(len(entities), 1) self.assertEqual( context_list_item_field_value(r.context, entities[0], 0), "bibentity1") self.assertEqual( context_list_item_field_value(r.context, entities[0], 1), self.bibentity1_data['bib:title']) return
def test_get_default_all_scope_all_list(self): # List all entities in current collection and site-wide u = entitydata_list_all_url( "testcoll", list_id="Default_list_all", scope="all", continuation_url="/xyzzy/" ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") self.assertContains(r, "Collection testcoll") self.assertContains(r, '<h2 class="page-heading">List entities with type information</h2>', html=True) # Test context self.assertEqual(r.context['title'], "List entities with type information - Collection testcoll") self.assertEqual(r.context['heading'], "List entities with type information") self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "Default_type") list_choices = r.context['list_choices'] self.assertEqual(set(list_choices.options), set(self.list_ids)) self.assertEqual(list_choices['field_value'], "Default_list_all") # Unbound field descriptions head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 3 cols.. self.assertEqual(len(head_fields[0]['row_field_descs']), 3) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) f2 = context_view_field(r.context, 0, 2) self.assertEqual(f0['field_id'], 'Entity_id') self.assertEqual(f1['field_id'], 'Entity_type') self.assertEqual(f2['field_id'], 'Entity_label') # Entities and bound fields entities = context_list_entities(r.context) if len(entities) != 217: for e in entities: log.debug("All entities: %s/%s"%(e['annal:type_id'], e['annal:id'])) self.assertEqual(len(entities), 224) # Will change with site data return
def test_list_field_alias(self): # List BibEntry fields in Default_list u = entitydata_list_type_url("testcoll", "BibEntry_type", list_id="Default_list") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # log.info(r.content) #@@ # Test context self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "BibEntry_type") self.assertEqual(r.context['list_choices']['field_value'], "Default_list") # Fields head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 2 cols.. self.assertEqual(len(head_fields[0]['row_field_descs']), 2) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) # 1st field self.assertEqual(f0['field_id'], 'Entity_id') self.assertEqual(f0['field_property_uri'], "annal:id") self.assertEqual(f0['field_value'], "") # 2nd field self.assertEqual(f1['field_id'], 'Entity_label') self.assertEqual(f1['field_property_uri'], "rdfs:label") self.assertEqual(f1['field_value'], "") # List entities (actually, just the one) entities = context_list_entities(r.context) self.assertEqual(len(entities), 1) self.assertEqual( context_list_item_field_value(r.context, entities[0], 0), "bibentity1" ) self.assertEqual( context_list_item_field_value(r.context, entities[0], 1), self.bibentity1_data['bib:title'] ) return
def test_view_subproperty_field(self): self.create_subproperty_field_view_entity() # Render view u = entitydata_edit_url("view", "testcoll", "testtype", entity_id="testentity", view_id="testview") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Test context url = entity_url(coll_id="testcoll", type_id="testtype", entity_id="testentity") self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "testtype") self.assertEqual(r.context['entity_id'], "testentity") self.assertEqual(r.context['orig_id'], "testentity") self.assertEqual(r.context['action'], "view") # Fields self.assertEqual(len(r.context['fields']), 2) # Check id field for sanity f1 = context_view_field(r.context, 0, 0) self.assertEqual(f1.field_id, "Entity_id") self.assertEqual(f1.description['field_property_uri'], ANNAL.CURIE.id) self.assertEqual(f1['field_value'], self.testentity_data[ANNAL.CURIE.id]) # Check superproperty field value f2 = context_view_field(r.context, 1, 0) self.assertEqual(f2.field_id, "Test_sup_field") self.assertEqual(f2.description['field_property_uri'], "test:superprop_uri") self.assertEqual(f2['field_value'], self.testentity_data["test:subprop_uri"]) return
def test_import_resource(self): f = entitydata_default_view_form_data( entity_id="test1", type_id="testimptype", action="edit", do_import="imp_field__import" ) f['imp_field'] = self.fileuri u = entitydata_edit_url( "edit", "testcoll", "testimptype", entity_id="test1", view_id="testimpview" ) r = self.client.post(u, f) self.assertEqual(r.status_code, 302) self.assertEqual(r.reason_phrase, "FOUND") self.assertMatch(r['location'], TestHostUri+u) # Read back form following redirect r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Test context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") f3 = context_view_field(r.context, 3, 0) self.assertEqual(f3.field_id, "Test_import") self.assertDictionaryMatch(f3.field_value, test_import_field_value()) # Read back and compare entity resource just created siteobj = open(TestBaseDir+"/README.md", "rb") testobj = self.test_imp_type_info.get_fileobj( "test1", "imp_field", "annal:Richtext", "text/markdown", "rb" ) self.assertEqual(siteobj.read(), testobj.read()) return
def test_get_default_all_scope_all_list(self): # List all entities in current collection and site-wiude # This repeats parts of the previous test but with scope='all' u = entitydata_list_all_url( "testcoll", list_id="Default_list_all", scope="all", continuation_url="/xyzzy/" ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") list_label = "List entities with type information" list_title = "List entities with type information - Collection testcoll" self.assertContains(r, "<title>%s</title>"%list_title, html=True) self.assertContains(r, '<h2 class="page-heading">%s</h2>'%list_label, html=True) # Test context self.assertEqual(r.context['title'], list_title) self.assertEqual(r.context['heading'], list_label) self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "Default_type") list_choices = r.context['list_choices'] self.assertEqual(set(list_choices.options), set(self.list_ids)) self.assertEqual(list_choices['field_value'], "Default_list_all") # Unbound field descriptions head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 3 cols.. self.assertEqual(len(head_fields[0]['row_field_descs']), 3) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) f2 = context_view_field(r.context, 0, 2) self.assertEqual(f0['field_id'], 'Entity_id') self.assertEqual(f1['field_id'], 'Entity_type') self.assertEqual(f2['field_id'], 'Entity_label') # Entities and bound fields entities = context_list_entities(r.context) self.assertEqual(len(entities), 164) # Will change with site data return
def test_image_edit(self): # This test that entity editing leaves attachment intact # Upload image self.test_image_edit_field() # Edit entity f = entitydata_default_view_form_data(type_id="testimgtype", entity_id="test1", action="edit", update="Updated") u = entitydata_edit_url("edit", "testcoll", "testimgtype", entity_id="test1", view_id="testimgview") r = self.client.post(u, f) self.assertEqual(r.status_code, 302) self.assertEqual(r.reason_phrase, "FOUND") # Retrieve updated form r = self.client.get(u) # Test context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") self.assertEqual(f1.field_value, "Updated testcoll/testimgtype/test1") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") f3 = context_view_field(r.context, 3, 0) self.assertEqual(f3.field_id, "Test_image") self.assertDictionaryMatch(f3.field_value, test_image_field_value()) # Read back and compare entity resource siteobj = open(self.imagepath, "rb") testobj = self.test_img_type_info.get_fileobj( "test1", "img_field", "annal:Image", "image/jpeg", "rb" ) self.assertTrue(siteobj.read() == testobj.read(), "Edited entity image != original") return
def test_bad_user_permissions_form_rendering(self): # Test handling of permissions not stored in entity as a list of values create_user_permissions(self.testcoll, "baduserperms", user_permissions="VIEW CREATE UPDATE DELETE") u = entitydata_edit_url("edit", "testcoll", layout.USER_TYPEID, "baduserperms", view_id="User_view") with SuppressLogging(logging.WARNING): r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") field_vals = default_fields(coll_id="testcoll", type_id=layout.USER_TYPEID, entity_id="baduserperms", tooltip=context_view_field( r.context, 4, 0)['field_help']) formrow5 = """ <div class="small-12 columns" title="%(tooltip)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Permissions</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="User_permissions" placeholder="(user permissions; e.g. 'VIEW CREATE UPDATE DELETE CONFIG')" value="VIEW CREATE UPDATE DELETE"/> </div> </div> </div> """ % field_vals(width=12) # log.info(r.content) self.assertContains(r, formrow5, html=True) return
def test_get_fields_list_search(self): u = entitydata_list_type_url( "testcoll", layout.FIELD_TYPEID, list_id="Field_list", scope="all", continuation_url="/xyzzy/", query_params={"search": "Bib_"} ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # self.assertContains(r, site_title("<title>%s</title>")) # self.assertContains(r, "<h3>List 'Field_list' of entities in collection 'testcoll'</h3>", html=True) # Test context self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], layout.FIELD_TYPEID) self.assertEqual(r.context['continuation_url'], "/xyzzy/") self.assertEqual(r.context['search_for'], "Bib_") list_choices = r.context['list_choices'] self.assertEqual(set(list_choices.options), set(self.list_ids)) self.assertEqual(list_choices['field_value'], "Field_list") # Fields head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 4 cols.. self.assertEqual(len(head_fields[0]['row_field_descs']), 4) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) f2 = context_view_field(r.context, 0, 2) f3 = context_view_field(r.context, 0, 3) self.assertEqual(f0['field_id'], 'Entity_id') self.assertEqual(f1['field_id'], 'Field_render_type') self.assertEqual(f2['field_id'], 'Field_value_type') self.assertEqual(f3['field_id'], 'Entity_label') # Entities entities = context_list_entities(r.context) self.assertEqual(len(entities), 36) field_entities = ( { ('Bib_address', "Text", "annal:Text", "Address") , ('Bib_authors', "Group_Seq", "bib:Authors", "Author(s)") , ('Bib_booktitle', "Text", "annal:Text", "Book title") , ('Bib_chapter', "Text", "annal:Text", "Chapter") , ('Bib_edition', "Text", "annal:Text", "Edition") , ('Bib_editors', "Group_Seq", "bib:Editors", "Editor(s)") , ('Bib_eprint', "Text", "annal:Text", "Bib_eprint") , ('Bib_howpublished', "Text", "annal:Text", "How published") , ('Bib_institution', "Text", "annal:Text", "Institution") , ('Bib_journal', "Group_Seq", "bib:Journal", "Journal") , ('Bib_month', "Text", "annal:Text", "Month") , ('Bib_number', "Text", "annal:Text", "Number") , ('Bib_organization', "Text", "annal:Text", "Organization") , ('Bib_pages', "Text", "annal:Text", "Pages") , ('Bib_publisher', "Text", "annal:Text", "Publisher") , ('Bib_school', "Text", "annal:Text", "School") , ('Bib_title', "Text", "annal:Text", "Title") , ('Bib_type', "Enum", "annal:Slug", "Type") , ('Bib_url', "Text", "annal:Text", "URL") , ('Bib_volume', "Text", "annal:Text", "Volume") , ('Bib_year', "Text", "annal:Text", "Year") }) for f in field_entities: for eid in range(len(entities)): item_fields = context_list_item_fields(r.context, entities[eid]) if item_fields[0]['field_value'] == f[0]: for fid in range(3): item_field = item_fields[fid] head_field = head_fields[0]['row_field_descs'][fid] for fkey in ( 'field_id', 'field_name', 'field_label', 'field_property_uri', 'field_render_type', 'field_placement', 'field_value_type'): self.assertEqual(item_field[fkey], head_field[fkey]) check_context_list_field_value(self, item_field, f[fid]) break else: self.fail("Field %s not found in context"%f[0]) return
def test_get_collection_data_form_rendering(self): u = entitydata_edit_url("new", "_annalist_site", "_coll", view_id="Collection_view") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") field_vals = default_fields( coll_id="_annalist_site", type_id="_coll", entity_id="00000001", sotware_ver=annalist.__version_data__, tooltip1a=context_view_field(r.context, 0, 0)['field_help'], tooltip1b=context_view_field(r.context, 0, 1)['field_help'], tooltip2 =context_view_field(r.context, 1, 0)['field_help'], tooltip3 =context_view_field(r.context, 2, 0)['field_help'], tooltip4 =context_view_field(r.context, 3, 0)['field_help'], tooltip5a=context_view_field(r.context, 4, 0)['field_help'], tooltip5b=context_view_field(r.context, 4, 1)['field_help'], tooltip6a=context_view_field(r.context, 5, 0)['field_help'], tooltip6b=context_view_field(r.context, 5, 1)['field_help'], tooltip7 =context_view_field(r.context, 6, 0)['field_help'], ) formrow1a = """ <div class="small-12 medium-6 columns" title="%(tooltip1a)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) formrow1b = """ <div class="small-12 medium-6 columns" title="%(tooltip1b)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>S/W version</span> </div> <div class="%(input_classes)s"> <span> </span> </div> </div> </div> """%field_vals(width=6) formrow2 = """ <div class="small-12 columns" title="%(tooltip2)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Label</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="Entity_label" placeholder="(label)" value="" /> </div> </div> </div> """%field_vals(width=12) formrow3 = """ <div class="small-12 columns" title="%(tooltip3)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Comment</span> </div> <div class="%(input_classes)s"> <textarea cols="64" rows="6" name="Entity_comment" class="small-rows-4 medium-rows-8" placeholder="(description)" > </textarea> </div> </div> </div> """%field_vals(width=12) formrow4 = """ <div class="small-12 columns" title="%(tooltip4)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Parent</span> </div> <div class="%(input_classes)s"> <select name="Coll_parent"> <option value="" selected="selected">(site)</option> <option value="_coll/_annalist_site">Annalist data notebook test site</option> <option value="_coll/coll1">Collection coll1</option> <option value="_coll/coll2">Collection coll2</option> <option value="_coll/coll3">Collection coll3</option> <option value="_coll/testcoll">Collection testcoll</option> </select> </div> </div> </div> """%field_vals(width=12) formrow5a = """ <div class="small-12 medium-6 columns" title="%(tooltip5a)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Default list</span> </div> <div class="%(input_classes)s"> <span> </span> </div> </div> </div> """%field_vals(width=6) formrow5b = """ <div class="small-12 medium-6 columns" title="%(tooltip5b)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Default view</span> </div> <div class="%(input_classes)s"> <span> </span> </div> </div> </div> """%field_vals(width=6) formrow6a = """ <div class="small-12 medium-6 columns" title="%(tooltip6a)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Default view type</span> </div> <div class="%(input_classes)s"> <span> </span> </div> </div> </div> """%field_vals(width=6) formrow6b = """ <div class="small-12 medium-6 columns" title="%(tooltip6b)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Default view entity</span> </div> <div class="%(input_classes)s"> <span> </span> </div> </div> </div> """%field_vals(width=6) formrow7 = """ <div class="small-12 columns" title="%(tooltip7)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Collection metadata</span> </div> <div class="%(input_classes)s"> <textarea cols="64" rows="6" name="Coll_comment" class="small-rows-4 medium-rows-8" placeholder="(annal:meta_comment)" > </textarea> </div> </div> </div> """%field_vals(width=12) # log.info(r.content) self.assertContains(r, formrow1a, html=True) self.assertContains(r, formrow1b, html=True) self.assertContains(r, formrow2, html=True) self.assertContains(r, formrow3, html=True) self.assertContains(r, formrow4, html=True) self.assertContains(r, formrow5a, html=True) self.assertContains(r, formrow5b, html=True) self.assertContains(r, formrow6a, html=True) self.assertContains(r, formrow6b, html=True) self.assertContains(r, formrow7, html=True) 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") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check render context self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "ref_type") self.assertEqual(r.context['entity_id'], "Test_rpt_entity") self.assertEqual(r.context['action'], "edit") # Fields self.assertEqual(len(r.context['fields']), 2) # 1st field - Id f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0['field_id'], "Entity_id") self.assertEqual(f0['field_name'], "entity_id") self.assertEqual(f0['field_label'], "Id") self.assertEqual(f0['field_value'], "Test_rpt_entity") # 2nd field - multifield group f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1['field_id'], "Test_rptref_field") self.assertEqual(f1['field_name'], "Test_rptref_field") self.assertEqual(f1['field_label'], "Repeat image reference") self.assertEqual(f1['field_render_type'], "Group_Seq_Row") self.assertEqual(f1['field_value_mode'], "Value_direct") self.assertEqual(f1['field_value_type'], "annal:Field_group") self.assertEqual(f1['field_group_ref'], "Test_rptref_group") self.assertEqual(f1['group_label'], "Repeat image reference") self.assertEqual(f1['field_property_uri'], "test:rpt_image") self.assertEqual(f1['field_value'][0], {'test:ref_image': 'Test_img_entity'}) # 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_help'], ) 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_help']) 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(r, formrow1, html=True) self.assertContains(r, formrow2a, html=True) self.assertContains(r, formrow2b, html=True) self.assertContains(r, formrow3a, html=True) self.assertContains(r, formrow3b, html=True) return
def test_reference_uploaded_image(self): self.test_upload_image_resource() # Display resource with image reference u = entitydata_edit_url("view", "testcoll", "testreftype", entity_id="test1", view_id="testimgrefview") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check display context self.assertEqual(len(r.context['fields']), 4) f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0.field_id, "Entity_id") self.assertEqual(f0.field_value, "test1") f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1.field_id, "Entity_label") self.assertEqual(f1.field_value, "test_ref_entity test1 label") f2 = context_view_field(r.context, 2, 0) self.assertEqual(f2.field_id, "Entity_comment") self.assertEqual(f2.field_value, "test_ref_entity test1 comment") f3 = context_view_field(r.context, 3, 0) basepath = TestBasePath + "/c/testcoll/d/testupltype/" # print "\n*****\n"+repr(context_view_field(r.context, i, 0).target_value)+"\n*****\n" self.assertEqual(f3.field_id, "Test_image_ref") self.assertEqual(f3.field_value, "testupltype/test1") self.assertEqual(f3.field_value_link, basepath + "test1/") self.assertEqual(f3.target_value['upload_name'], "upl_field") self.assertEqual(f3.target_value['resource_name'], "upl_field.jpg") self.assertEqual(f3.target_value['resource_type'], "image/jpeg") self.assertEqual(f3.target_value['uploaded_file'], "test-image.jpg") self.assertEqual(f3.target_value['uploaded_size'], 1547926) self.assertEqual(f3.target_value_link, basepath + "test1/upl_field.jpg") # Check for rendered image link # log.info(r.content) field_details = ({ "basepath": TestBasePath, "coll_id": "testcoll", "type_id": "testupltype", "entity_id": "test1", "field_id": "upl_field", "tooltip": "" }) img_element = """ <div class="small-12 columns" %(tooltip)s> <div class="row view-value-row"> <div class="view-label small-12 medium-2 columns"> <span>test_image_ref_field label</span> </div> <div class="view-value small-12 medium-10 columns"> <a href="%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(field_id)s.jpg" target="_blank"> <img src="%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(field_id)s.jpg" alt="Image at '%(basepath)s/c/%(coll_id)s/d/%(type_id)s/%(entity_id)s/%(field_id)s.jpg'" /> </a> </div> </div> </div> """ % field_details self.assertContains(r, img_element, html=True) return
def test_Ref_Multifield_edit(self): self._create_image_multifield_ref_and_view() # Render view of multifield reference u = entitydata_edit_url("edit", "testcoll", "ref_type", "Test_ref_entity", view_id="Test_refimg_view") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check render context self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "ref_type") self.assertEqual(r.context['entity_id'], "Test_ref_entity") self.assertEqual(r.context['action'], "edit") # Fields self.assertEqual(len(r.context['fields']), 1) # 1st field - Id f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0['field_id'], "Entity_id") self.assertEqual(f0['field_name'], "entity_id") self.assertEqual(f0['field_label'], "Id") self.assertEqual(f0['field_value'], "Test_ref_entity") # 2nd field - multifield group f1 = context_view_field(r.context, 0, 1) self.assertEqual(f1['field_id'], "Test_refimg_field") self.assertEqual(f1['field_name'], "Test_refimg_field") self.assertEqual(f1['field_label'], "Image reference") self.assertEqual(f1['field_render_type'], "RefMultifield") self.assertEqual(f1['field_value_mode'], "Value_entity") self.assertEqual(f1['field_value_type'], "annal:Field_group") self.assertEqual(f1['field_group_ref'], "Test_refimg_group") self.assertEqual(f1['group_label'], "Image reference") self.assertEqual(f1['field_property_uri'], "test:ref_image") self.assertEqual(f1['field_value'], "Test_img_entity") # 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, tooltip1=f0['field_help'], ) 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_help'], ) 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(r, formrow1, html=True) self.assertContains(r, formrow2, 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") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check render context self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "ref_type") self.assertEqual(r.context['entity_id'], "Test_rpt_entity") self.assertEqual(r.context['action'], "view") # Fields self.assertEqual(len(r.context['fields']), 2) # 1st field - Id f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0['field_id'], "Entity_id") self.assertEqual(f0['field_name'], "entity_id") self.assertEqual(f0['field_label'], "Id") self.assertEqual(f0['field_value'], "Test_rpt_entity") # 2nd field - multifield group f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1['field_id'], "Test_rptref_field") self.assertEqual(f1['field_name'], "Test_rptref_field") self.assertEqual(f1['field_label'], "Repeat image reference") self.assertEqual(f1['field_render_type'], "Group_Seq_Row") self.assertEqual(f1['field_value_mode'], "Value_direct") self.assertEqual(f1['field_value_type'], "annal:Field_group") self.assertEqual(f1['field_group_ref'], "Test_rptref_group") self.assertEqual(f1['group_label'], "Repeat image reference") self.assertEqual(f1['field_property_uri'], "test:rpt_image") self.assertEqual(f1['field_value'][0], {'test:ref_image': 'Test_img_entity'}) # 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 grou 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(r, formrow1, html=True) self.assertContains(r, formrow2a, html=True) self.assertContains(r, formrow2b, html=True) self.assertContains(r, formrow3a, html=True) self.assertContains(r, formrow3b, html=True) return
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 view_url = entity_url(coll_id="testcoll", type_id="testtype", entity_id="entity1") self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "testtype") self.assertEqual(r.context['entity_id'], "entity1") self.assertEqual(r.context['orig_id'], "entity1") self.assertEqual(r.context['action'], "edit") self.assertEqual(r.context['continuation_url'], "/xyzzy/") # Fields self.assertEqual(len(r.context['fields']), 3) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) f2 = context_view_field(r.context, 1, 0) f3 = context_view_field(r.context, 2, 0) # 1st field self.assertEqual(f0['field_id'], 'Entity_id') self.assertEqual(f0['field_name'], 'entity_id') self.assertEqual(f0['field_label'], 'Id') self.assertEqual(f0['field_placeholder'], "(entity id)") self.assertEqual(f0['field_property_uri'], "annal:id") self.assertEqual(f0['field_render_type'], "EntityId") self.assertEqual(f0['field_value_mode'], "Value_direct") self.assertEqual(f0['field_value_type'], "annal:Slug") self.assertEqual(f0['field_value'], "entity1") self.assertEqual(f0['options'], self.no_options) # 2nd field self.assertEqual(f1['field_id'], 'Entity_type') self.assertEqual(f1['field_name'], 'entity_type') self.assertEqual(f1['field_label'], 'Type') self.assertEqual(f1['field_placeholder'], "(type id)") self.assertEqual(f1['field_property_uri'], "annal:type_id") self.assertEqual(f1['field_render_type'], "EntityTypeId") self.assertEqual(f1['field_value_mode'], "Value_direct") self.assertEqual(f1['field_value_type'], "annal:Slug") self.assertEqual(f1['field_value'], "testtype") self.assertEqual(set(f1['options']), set(self.type_ids)) # 3rd field field_label_value = ("Entity testcoll/testtype/entity1") self.assertEqual(f2['field_id'], 'Entity_label') self.assertEqual(f2['field_name'], 'Entity_label') self.assertEqual(f2['field_label'], 'Label') self.assertEqual(f2['field_placeholder'], "(label)") self.assertEqual(f2['field_property_uri'], "rdfs:label") self.assertEqual(f2['field_render_type'], "Text") self.assertEqual(f2['field_value_mode'], "Value_direct") self.assertEqual(f2['field_value_type'], "annal:Text") self.assertEqual(f2['field_value'], field_label_value) self.assertEqual(f2['options'], self.no_options) # 4th field field_comment_value = ( "Entity coll testcoll, type testtype, entity entity1") self.assertEqual(f3['field_id'], 'Entity_comment') self.assertEqual(f3['field_name'], 'Entity_comment') self.assertEqual(f3['field_label'], 'Comment') self.assertEqual(f3['field_placeholder'], "(description)") self.assertEqual(f3['field_property_uri'], "rdfs:comment") self.assertEqual(f3['field_render_type'], "Markdown") self.assertEqual(f3['field_value_mode'], "Value_direct") self.assertEqual(f3['field_value_type'], "annal:Richtext") self.assertEqual(f3['field_value'], field_comment_value) self.assertEqual(f3['options'], self.no_options) return
def test_Ref_Multifield_view(self): self._create_image_multifield_ref_and_view() # Render view of multifield reference u = entitydata_edit_url("view", "testcoll", "ref_type", "Test_ref_entity", view_id="Test_refimg_view") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Check render context self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "ref_type") self.assertEqual(r.context['entity_id'], "Test_ref_entity") self.assertEqual(r.context['action'], "view") # Fields # print "@@ field map:\bn"+context_field_map(r.context) self.assertEqual(len(r.context['fields']), 1) # 1st field - Id f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0['field_id'], "Entity_id") self.assertEqual(f0['field_name'], "entity_id") self.assertEqual(f0['field_label'], "Id") self.assertEqual(f0['field_value'], "Test_ref_entity") # 2nd field - multifield group f1 = context_view_field(r.context, 0, 1) self.assertEqual(f1['field_id'], "Test_refimg_field") self.assertEqual(f1['field_name'], "Test_refimg_field") self.assertEqual(f1['field_label'], "Image reference") self.assertEqual(f1['field_render_type'], "RefMultifield") self.assertEqual(f1['field_value_mode'], "Value_entity") self.assertEqual(f1['field_value_type'], "annal:Field_group") self.assertEqual(f1['field_group_ref'], "Test_refimg_group") self.assertEqual(f1['group_label'], "Image reference") self.assertEqual(f1['field_property_uri'], "test:ref_image") self.assertEqual(f1['field_value'], "Test_img_entity") # 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, # tooltip1=r.context['fields'][0]['field_help'], ) 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(r, formrow1, html=True) self.assertContains(r, formrow2a, html=True) self.assertContains(r, formrow2b, html=True) return
def test_get_form_rendering(self): u = entitydata_edit_url("new", "testcoll", layout.TYPE_TYPEID, view_id="Type_view") r = self.client.get(u+"?continuation_url=/xyzzy/") self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # log.info(r.content) #@@ field_vals = default_fields( coll_id="testcoll", type_id=layout.TYPE_TYPEID, entity_id="00000001", default_label="(New type initial values - label)", default_comment=context_view_field(r.context, 2, 0)['field_value'], default_label_esc="(New type initial values - label)", default_comment_esc=context_view_field(r.context, 2, 0)['field_value'], tooltip1=context_view_field(r.context, 0, 0)['field_help'], tooltip2=context_view_field(r.context, 1, 0)['field_help'], tooltip3=context_view_field(r.context, 2, 0)['field_help'], tooltip4=context_view_field(r.context, 3, 0)['field_help'], button_save_tip="Save values and return to previous view.", button_view_tip="Save values and switch to entity view.", button_cancel_tip="Discard unsaved changes and return to previous view.", button_view_list_tip= "Define initial view and list definitions for the current type. "+ "(View and list type information and URI are taken from the current type; "+ "other fields are taken from the corresponding '_initial_values' record, "+ "and may be extended or modified later.)" ) formrow1 = """ <div class="small-12 medium-6 columns" title="%(tooltip1)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Type Id</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="entity_id" placeholder="(type id)" value="00000001"/> </div> </div> </div> """%field_vals(width=6) formrow2 = """ <div class="small-12 columns" title="%(tooltip2)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Label</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="Type_label" placeholder="(label)" value="%(default_label_esc)s" /> </div> </div> </div> """%field_vals(width=12) formrow3 = """ <div class="small-12 columns" title="%(tooltip3)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Comment</span> </div> <div class="%(input_classes)s"> <textarea cols="64" rows="6" name="Type_comment" class="small-rows-4 medium-rows-8" placeholder="(type description)" > %(default_comment_esc)s </textarea> </div> </div> </div> """%field_vals(width=12) formrow4 = """ <div class="small-12 columns" title="%(tooltip4)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Type URI</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="Type_uri" placeholder="(Type URI)" value=""/> </div> </div> </div> """%field_vals(width=12) formrow5a = """ <div class="%(space_classes)s"> <div class="row"> <div class="small-12 columns"> </div> </div> </div> """%field_vals(width=2) formrow5b = """ <div class="%(button_wide_classes)s"> <div class="row"> <div class="%(button_left_classes)s"> <input type="submit" name="save" value="Save" title="%(button_save_tip)s"/> <input type="submit" name="view" value="View" title="%(button_view_tip)s"/> <input type="submit" name="cancel" value="Cancel" title="%(button_cancel_tip)s"/> </div> </div> </div> """%field_vals(width=4) formrow5c = """ <div class="%(button_wide_classes)s"> <div class="row"> <div class="%(button_r_med_up_classes)s"> <input type="submit" name="Define_view_list" value="Define view+list" title="%(button_view_list_tip)s" /> <input type="submit" name="customize" value="Customize" title="Open 'Customize' view for collection 'testcoll'." /> </div> </div> </div> """%field_vals(width=6) # log.info(r.content) #@@ self.assertContains(r, formrow1, html=True) self.assertContains(r, formrow2, html=True) self.assertContains(r, formrow3, html=True) self.assertContains(r, formrow4, html=True) self.assertContains(r, formrow5a, html=True) self.assertContains(r, formrow5b, html=True) self.assertContains(r, formrow5c, html=True) return
def test_get_form_rendering(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") self.assertContains(r, "Collection testcoll") field_vals = default_fields( coll_id="testcoll", type_id="testtype", entity_id="00000001", tooltip1=context_view_field(r.context, 0, 0)['field_help'], tooltip2=context_view_field(r.context, 0, 1)['field_help'], tooltip3=context_view_field(r.context, 1, 0)['field_help'], tooltip4=context_view_field(r.context, 2, 0)['field_help'], ) 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"> <!-- cf http://stackoverflow.com/questions/1480588/input-size-vs-width --> <input type="text" size="64" name="entity_id" placeholder="(entity id)" value="00000001"> </div> </div> </div> """ % field_vals(width=6) formrow2 = (""" <div class="small-12 medium-6 columns" title="%(tooltip2)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Type</span> </div> <div class="%(input_classes)s"> """ + render_choice_options("entity_type", self.type_ids, "_type/testtype") + """ </div> </div> </div> """) % field_vals(width=6) formrow3 = """ <!-- editable text field --> <div class="small-12 columns" title="%(tooltip3)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Label</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="Entity_label" placeholder="(label)" value="%(default_label_esc)s"> </div> </div> </div> """ % field_vals(width=12) formrow4 = """ <div class="small-12 columns" title="%(tooltip4)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Comment</span> </div> <div class="%(input_classes)s"> <textarea cols="64" rows="6" name="Entity_comment" class="small-rows-4 medium-rows-8" placeholder="(description)"> %(default_comment_esc)s </textarea> </div> </div> </div> """ % field_vals(width=12) # log.info("******\n"+r.content) self.assertContains(r, formrow1, html=True) self.assertContains(r, formrow2, html=True) self.assertContains(r, formrow3, html=True) self.assertContains(r, formrow4, html=True) return
def test_RenderRepeatGroup_no_labels(self): # Create view with repeat-field and repeat-group testview = self._create_testview() testrepeatfield = self._create_testrepeatfield( label_add=None, label_delete="") testrepeatgroup = self._create_testrepeatgroup() # Render view u = entitydata_edit_url("new", "testcoll", "testtype", view_id="testview") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Test rendered values self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "testtype") self.assertEqual(r.context['entity_id'], "00000001") self.assertEqual(r.context['action'], "new") # Fields self.assertEqual(len(r.context['fields']), 2) # 1st field - Id i = 0 self.assertEqual(context_view_field(r.context, i, 0)['field_id'], 'Entity_id') self.assertEqual(context_view_field(r.context, i, 0)['field_name'], 'entity_id') self.assertEqual(context_view_field(r.context, i, 0)['field_label'], 'Id') self.assertEqual(context_view_field(r.context, i, 0)['field_value'], "00000001") # 2nd field - repeat group i = 1 self.assertEqual(context_view_field(r.context, i, 0)['field_id'], "testrepeatfield") self.assertEqual(context_view_field(r.context, i, 0)['field_name'], "testrepeatfield") self.assertEqual(context_view_field(r.context, i, 0)['field_label'], "Test repeat field label") self.assertEqual(context_view_field(r.context, i, 0)['field_render_type'], "Group_Seq_Row") self.assertEqual(context_view_field(r.context, i, 0)['field_value_mode'], "Value_direct") self.assertEqual(context_view_field(r.context, i, 0)['field_value_type'], "annal:Field_group") self.assertEqual(context_view_field(r.context, i, 0)['field_group_ref'], "testrepeatgroup") self.assertEqual(context_view_field(r.context, i, 0)['group_label'], "Test repeat field label") self.assertEqual(context_view_field(r.context, i, 0)['group_add_label'], "Add testrepeatfield") self.assertEqual(context_view_field(r.context, i, 0)['group_delete_label'], "Remove testrepeatfield") self.assertEqual(context_view_field(r.context, i, 0)['field_property_uri'], "test:repeat_fields") self.assertEqual(len(context_view_field(r.context, i, 0)['field_value']), 0) self.assertEqual(context_view_field(r.context, i, 0)['field_value'], "") #@@ Really? return
def test_get_fields_list_search(self): u = entitydata_list_type_url("testcoll", layout.FIELD_TYPEID, list_id="Field_list", scope="all", continuation_url="/xyzzy/", query_params={"search": "Bib_"}) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # self.assertContains(r, site_title("<title>%s</title>")) # self.assertContains(r, "<h3>List 'Field_list' of entities in collection 'testcoll'</h3>", html=True) # Test context self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], layout.FIELD_TYPEID) self.assertEqual(r.context['continuation_url'], "/xyzzy/") self.assertEqual(r.context['search_for'], "Bib_") list_choices = r.context['list_choices'] self.assertEqual(set(list_choices.options), set(self.list_ids)) self.assertEqual(list_choices['field_value'], "Field_list") # Fields head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 4 cols.. self.assertEqual(len(head_fields[0].description['row_field_descs']), 4) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) f2 = context_view_field(r.context, 0, 2) f3 = context_view_field(r.context, 0, 3) self.assertEqual(f0.field_id, 'Entity_id') self.assertEqual(f1.field_id, 'Field_render_type') self.assertEqual(f2.field_id, 'Field_value_type') self.assertEqual(f3.field_id, 'Entity_label') # Entities entities = context_list_entities(r.context) self.assertEqual(len(entities), 36) field_entities = ({ ('Bib_address', "Text", "annal:Text", "Address"), ('Bib_authors', "Group_Seq", "bib:Authors", "Author(s)"), ('Bib_booktitle', "Text", "annal:Text", "Book title"), ('Bib_chapter', "Text", "annal:Text", "Chapter"), ('Bib_edition', "Text", "annal:Text", "Edition"), ('Bib_editors', "Group_Seq", "bib:Editors", "Editor(s)"), ('Bib_eprint', "Text", "annal:Text", "Bib_eprint"), ('Bib_howpublished', "Text", "annal:Text", "How published"), ('Bib_institution', "Text", "annal:Text", "Institution"), ('Bib_journal', "Group_Seq", "bib:Journal", "Journal"), ('Bib_month', "Text", "annal:Text", "Month"), ('Bib_number', "Text", "annal:Text", "Number"), ('Bib_organization', "Text", "annal:Text", "Organization"), ('Bib_pages', "Text", "annal:Text", "Pages"), ('Bib_publisher', "Text", "annal:Text", "Publisher"), ('Bib_school', "Text", "annal:Text", "School"), ('Bib_title', "Text", "annal:Text", "Title"), ('Bib_type', "Enum", "annal:EntityRef", "Type"), ('Bib_url', "Text", "annal:Text", "URL"), ('Bib_volume', "Text", "annal:Text", "Volume"), ('Bib_year', "Text", "annal:Text", "Year") }) for f in field_entities: for eid in range(len(entities)): item_fields = context_list_item_fields(r.context, entities[eid]) if item_fields[0]['field_value'] == f[0]: for fid in range(3): item_field = item_fields[fid] head_field = head_fields[0].description[ 'row_field_descs'][fid] for fkey in ('field_id', 'field_name', 'field_label', 'field_property_uri', 'field_render_type', 'field_placement', 'field_value_type'): self.assertEqual(item_field.description[fkey], head_field[fkey]) check_context_list_field_value(self, item_field, f[fid]) break else: self.fail("Field %s not found in context" % f[0]) return
def test_get_default_all_list(self): # List all entities in current collection u = entitydata_list_all_url("testcoll", list_id="Default_list_all") + "?continuation_url=/xyzzy/" r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") list_label = "List entities with type information" list_title = "List entities with type information - Collection testcoll" self.assertContains(r, "<title>%s</title>"%list_title, html=True) self.assertContains(r, '<h2 class="page-heading">%s</h2>'%list_label, html=True) self.assertMatch(r.content, r'<input.type="hidden".name="continuation_url".+value="/xyzzy/"/>') # log.info(r.content) #@@ cont = uri_params({"continuation_url": u}) #@@ cont = "" tooltip1 = "" # 'title="%s"'%r.context['fields'][0]['field_help'] tooltip2 = "" # 'title="%s"'%r.context['fields'][1]['field_help'] tooltip3 = "" # 'title="%s"'%r.context['fields'][2]['field_help'] rowdata = """ <div class="tbody row select-row"> <div class="small-1 columns"> <input type="checkbox" class="select-box right" name="entity_select" value="testtype/entity1" /> </div> <div class="small-11 columns"> <div class="row view-listrow"> <div class="view-value small-3 columns" %(tooltip1)s> <a href="%(base)s/c/testcoll/d/testtype/entity1/%(cont)s">entity1</a> </div> <div class="view-value small-2 columns" %(tooltip2)s> <a href="/testsite/c/testcoll/d/_type/testtype/%(cont)s">RecordType testcoll/testtype</a> </div> <div class="view-value small-7 columns" %(tooltip3)s> <span>Entity testcoll/testtype/entity1</span> </div> </div> </div> </div> """%( { 'base': TestBasePath , 'cont': cont , 'tooltip1': tooltip1 , 'tooltip2': tooltip2 , 'tooltip3': tooltip3 } ) # log.info(r.content) # log.info(r.context["fields"]) # log.info(r.context["List_rows"]) self.assertContains(r, rowdata, html=True) # Test context self.assertEqual(r.context['title'], list_title) self.assertEqual(r.context['heading'], list_label) self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "Default_type") self.assertEqual(r.context['continuation_url'], "/xyzzy/") list_choices = r.context['list_choices'] self.assertEqual(set(list_choices.options), set(self.list_ids)) self.assertEqual(list_choices['field_value'], "Default_list_all") # Unbound field descriptions head_fields = context_list_head_fields(r.context) self.assertEqual(len(head_fields), 1) # One row of 3 cols.. self.assertEqual(len(head_fields[0]['row_field_descs']), 3) f0 = context_view_field(r.context, 0, 0) f1 = context_view_field(r.context, 0, 1) f2 = context_view_field(r.context, 0, 2) self.assertEqual(f0['field_id'], 'Entity_id') self.assertEqual(f1['field_id'], 'Entity_type') self.assertEqual(f2['field_id'], 'Entity_label') # Entities and bound fields # log.info(entities) #@@ entities = context_list_entities(r.context) self.assertEqual(len(entities), 6) entity_fields = ( [ {'entity_type_id': "_type", 'annal:id': "testtype", 'rdfs:label': "RecordType testcoll/testtype"} , {'entity_type_id': "_type", 'annal:id': "testtype2", 'rdfs:label': "RecordType testcoll/testtype2"} , {'entity_type_id': "testtype", 'annal:id': "entity1", 'rdfs:label': "Entity testcoll/testtype/entity1"} , {'entity_type_id': "testtype", 'annal:id': "entity2", 'rdfs:label': "Entity testcoll/testtype/entity2"} , {'entity_type_id': "testtype", 'annal:id': "entity3", 'rdfs:label': "Entity testcoll/testtype/entity3"} , {'entity_type_id': "testtype2", 'annal:id': "entity4", 'rdfs:label': "Entity testcoll/testtype2/entity4"} ]) field_keys = ('annal:id', 'entity_type_id', 'rdfs:label') for eid in range(6): item_fields = context_list_item_fields(r.context, entities[eid]) for fid in range(3): item_field = item_fields[fid] head_field = head_fields[0]['row_field_descs'][fid] # Check that row field descriptions match corresponding heading feld descriptions for fkey in ( 'field_id', 'field_name', 'field_label', 'field_property_uri', 'field_render_type', 'field_placement', 'field_value_type'): self.assertEqual(item_field[fkey], head_field[fkey]) # Check row field values fkey = field_keys[fid] self.assertEqual(item_field['field_value'], entity_fields[eid][fkey]) self.assertEqual(item_field['entity_type_id'], entity_fields[eid]['entity_type_id']) 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") testrepeatgroup = self._create_testrepeatgroup() # Render view u = entitydata_edit_url("new", "testcoll", "testtype", view_id="testview") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") # Test rendered values self.assertEqual(r.context['coll_id'], "testcoll") self.assertEqual(r.context['type_id'], "testtype") self.assertEqual(r.context['entity_id'], "00000001") self.assertEqual(r.context['action'], "new") # Fields self.assertEqual(len(r.context['fields']), 2) # 1st field - Id f0 = context_view_field(r.context, 0, 0) self.assertEqual(f0['field_id'], 'Entity_id') self.assertEqual(f0['field_name'], 'entity_id') self.assertEqual(f0['field_label'], 'Id') self.assertEqual(f0['field_value'], "00000001") # 2nd field - repeat group f1 = context_view_field(r.context, 1, 0) self.assertEqual(f1['field_id'], "testrepeatfield") self.assertEqual(f1['field_name'], "testrepeatfield") self.assertEqual(f1['field_label'], "Test repeat field label") self.assertEqual(f1['field_render_type'], "Group_Seq_Row") self.assertEqual(f1['field_value_mode'], "Value_direct") self.assertEqual(f1['field_value_type'], "annal:Field_group") self.assertEqual(f1['field_group_ref'], "testrepeatgroup") self.assertEqual(f1['group_label'], "Test repeat field label") self.assertEqual(f1['group_add_label'], "Add group") self.assertEqual(f1['group_delete_label'], "Remove group") self.assertEqual(f1['field_property_uri'], "test:repeat_fields") self.assertEqual(len(f1['field_value']), 0) self.assertEqual(f1['field_value'], "") #@@ Really? # Test rendered result field_vals = default_fields( coll_id="testcoll", type_id="testtype", entity_id="00000001", tooltip1=f0['field_help'], ) 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="testrepeatfield__remove" value="Remove group" /> <input type="submit" name="testrepeatfield__add" value="Add group" /> <input type="submit" name="testrepeatfield__up" value="Move ⬆" /> <input type="submit" name="testrepeatfield__down" value="Move ⬇" /> </div> </div> </div> """%field_vals(width=12) # log.info(r.content) self.assertContains(r, formrow1, html=True) self.assertContains(r, formrow2a, html=True) self.assertContains(r, formrow2b, html=True) self.assertContains(r, formrow2c, html=True) return
def test_get_form_rendering_view_bibentry(self): u = entitydata_edit_url( "edit", "testcoll", layout.VIEW_TYPEID, entity_id="BibEntry_view", view_id="View_view" ) r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") field_vals = default_fields( coll_id="testcoll", type_id=layout.VIEW_TYPEID, entity_id="BibEntry_view", tooltip1=context_view_field(r.context, 0, 0)['field_help'], tooltip2=context_view_field(r.context, 1, 0)['field_help'], tooltip3=context_view_field(r.context, 2, 0)['field_help'], tooltip4=context_view_field(r.context, 4, 0)['field_help'], tooltip5=context_view_field(r.context, 5, 0)._field_description['group_field_descs'][0]['field_help'] ) formrow1 = """ <div class="small-12 medium-6 columns" title="%(tooltip1)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>View Id</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="entity_id" placeholder="(view id)" value="%(entity_id)s"/> </div> </div> </div> """%field_vals(width=6) formrow2 = """ <div class="small-12 columns" title="%(tooltip2)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Label</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="View_label" placeholder="(view label)" value="Bibliographic metadata"/> </div> </div> </div> """%field_vals(width=12) formrow3 = """ <div class="small-12 columns" title="%(tooltip3)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Help</span> </div> <div class="%(input_classes)s"> <textarea cols="64" rows="6" name="View_comment" class="small-rows-4 medium-rows-8" placeholder="(description of record view)"> Bibliography entries each contain some subset of standard data entries. </textarea> </div> </div> </div> """%field_vals(width=12) formrow4 = """ <div class="small-12 medium-6 columns" title="%(tooltip4)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Editable view?</span> </div> <div class="%(input_classes)s"> <input type="checkbox" name="View_edit_view" value="Yes" checked="checked" /> <span class="value-placeholder">(edit view from edit entity form)</span> </div> </div> </div> """%field_vals(width=6) formrow5 = (""" <div class="small-12 medium-4 columns" title="%(tooltip5)s"> <div class="row show-for-small-only"> <div class="view-label small-12 columns"> <span>Field id</span> </div> </div> <div class="row view-value-col"> <div class="view-value small-12 columns"> """+ render_select_options( "View_fields__0__Field_id", "Field id", no_selection("(field sel)") + get_site_bibentry_fields_sorted(), layout.FIELD_TYPEID+"/Entity_id", placeholder="(field sel)" )+ """ </div> </div> </div> """)%field_vals(width=4) formrow6 = """ <div class="small-1 columns checkbox-in-edit-padding"> <input type="checkbox" class="select-box right" name="View_fields__select_fields" value="0" /> </div> """ # log.info("*** BibEntry_view content: "+r.content) # log.info("*** %r"%(r.context['fields'][5]._field_description['field_help'])) self.assertContains(r, formrow1, html=True) self.assertContains(r, formrow2, html=True) self.assertContains(r, formrow3, html=True) self.assertContains(r, formrow4, html=True) self.assertContains(r, formrow5, html=True) self.assertContains(r, formrow6, html=True) return
def test_get_new_user_form_rendering(self): u = entitydata_edit_url("new", "testcoll", layout.USER_TYPEID, view_id="User_view") r = self.client.get(u) self.assertEqual(r.status_code, 200) self.assertEqual(r.reason_phrase, "OK") field_vals = default_fields( coll_id="testcoll", type_id=layout.USER_TYPEID, entity_id="00000001", tooltip1=context_view_field(r.context, 0, 0)['field_help'], tooltip2=context_view_field(r.context, 1, 0)['field_help'], tooltip3=context_view_field(r.context, 2, 0)['field_help'], tooltip4=context_view_field(r.context, 3, 0)['field_help'], tooltip5=context_view_field(r.context, 4, 0)['field_help'] ) formrow1 = """ <div class="small-12 medium-6 columns" title="%(tooltip1)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>User Id</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="entity_id" placeholder="(user id)" value="00000001" /> </div> </div> </div> """%field_vals(width=6) formrow2 = """ <div class="small-12 columns" title="%(tooltip2)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>User name</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="User_name" placeholder="(user name)" value="" /> </div> </div> </div> """%field_vals(width=12) formrow3 = """ <div class="small-12 columns" title="%(tooltip3)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Description</span> </div> <div class="%(input_classes)s"> <textarea cols="64" rows="6" name="User_description" class="small-rows-4 medium-rows-8" placeholder="(user description)" > </textarea> </div> </div> </div> """%field_vals(width=12) formrow4 = """ <div class="small-12 columns" title="%(tooltip4)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>User URI</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="User_uri" placeholder="(User URI - e.g. mailto:[email protected])" value=""/> </div> </div> </div> """%field_vals(width=12) formrow5 = """ <div class="small-12 columns" title="%(tooltip5)s"> <div class="row view-value-row"> <div class="%(label_classes)s"> <span>Permissions</span> </div> <div class="%(input_classes)s"> <input type="text" size="64" name="User_permissions" placeholder="(user permissions; e.g. 'VIEW CREATE UPDATE DELETE CONFIG')" value=""/> </div> </div> </div> """%field_vals(width=12) # log.info(r.content) self.assertContains(r, formrow1, html=True) self.assertContains(r, formrow2, html=True) self.assertContains(r, formrow3, html=True) self.assertContains(r, formrow4, html=True) self.assertContains(r, formrow5, 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_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 _check_context_fields(self, response, action="", type_id="", orig_type_id=None, type_label="(?type_label)", type_uri="(?type_uri)", type_supertype_uris="", type_view="Default_view", type_list="Default_list" ): # Common entity attributes self.assertEqual(response.context['entity_id'], type_id) self.assertEqual(response.context['orig_id'], orig_type_id or type_id) self.assertEqual(response.context['type_id'], layout.TYPE_TYPEID) self.assertEqual(response.context['orig_type'], layout.TYPE_TYPEID) self.assertEqual(response.context['coll_id'], 'testcoll') self.assertEqual(response.context['action'], action) self.assertEqual(response.context['view_id'], 'Type_view') # View fields self.assertEqual(len(response.context['fields']), 7) f0 = context_view_field(response.context, 0, 0) f1 = context_view_field(response.context, 1, 0) f2 = context_view_field(response.context, 2, 0) f3 = context_view_field(response.context, 3, 0) f4 = context_view_field(response.context, 4, 0) f5 = context_view_field(response.context, 5, 0) f6 = context_view_field(response.context, 5, 1) # 1st field - Id check_context_field(self, f0, field_id= "Type_id", field_name= "entity_id", field_label= "Type Id", field_placeholder= "(type id)", field_property_uri= "annal:id", field_render_type= "EntityId", field_value_mode= "Value_direct", field_value_type= "annal:Slug", field_placement= "small-12 medium-6 columns", field_value= type_id, options= self.no_options ) # 2nd field - Label check_context_field(self, f1, field_id= "Type_label", field_name= "Type_label", field_label= "Label", field_placeholder= "(label)", field_property_uri= "rdfs:label", field_render_type= "Text", field_value_mode= "Value_direct", field_value_type= "annal:Text", field_placement= "small-12 columns", field_value= type_label, options= self.no_options ) # 3rd field - comment type_comment_placeholder = ( "(type description)" ) check_context_field(self, f2, field_id= "Type_comment", field_name= "Type_comment", field_label= "Comment", field_placeholder= type_comment_placeholder, field_property_uri= "rdfs:comment", field_render_type= "Markdown", field_value_mode= "Value_direct", field_value_type= "annal:Richtext", field_placement= "small-12 columns", options= self.no_options ) # 4th field - URI type_uri_placeholder = ( "(Type URI)" ) check_context_field(self, f3, field_id= "Type_uri", field_name= "Type_uri", field_label= "Type URI", field_placeholder= type_uri_placeholder, field_property_uri= "annal:uri", field_render_type= "Identifier", field_value_mode= "Value_direct", field_value_type= "annal:Identifier", field_value= type_uri, options= self.no_options ) # 5th field - Supertype URIs type_supertype_uris_placeholder = ( "(Supertype URIs or CURIEs)" ) check_context_field(self, f4, field_id= "Type_supertype_uris", field_name= "Type_supertype_uris", field_label= "Supertype URIs", field_placeholder= type_supertype_uris_placeholder, field_property_uri= "annal:supertype_uri", field_render_type= "Group_Seq_Row", field_value_mode= "Value_direct", field_value_type= "annal:Type_supertype_uri", field_value= type_supertype_uris, options= self.no_options ) # 6th field - view id type_view_id_placeholder = ( "(view id)" ) check_context_field(self, f5, field_id= "Type_view", field_name= "Type_view", field_label= "Default view", field_placeholder= type_view_id_placeholder, field_property_uri= "annal:type_view", field_render_type= "Enum_optional", field_value_mode= "Value_direct", field_value_type= "annal:View", field_placement= "small-12 medium-6 columns", field_value= type_view, options= self.view_options ) # 7th field - list id type_list_id_placeholder = ( "(list id)" ) check_context_field(self, f6, field_id= "Type_list", field_name= "Type_list", field_label= "Default list", field_placeholder= type_list_id_placeholder, field_property_uri= "annal:type_list", field_render_type= "Enum_optional", field_value_mode= "Value_direct", field_value_type= "annal:List", field_placement= "small-12 medium-6 columns", field_value= type_list, options= self.list_options ) return