From 3411f82f63aed68ca5037e5088608b25573eab3e Mon Sep 17 00:00:00 2001 From: Quentin André Date: Wed, 25 Aug 2021 15:32:23 +0200 Subject: clean version of get_geo_items with ui integration and tests --- archaeological_context_records/tests.py | 220 +++++++++++++++++++------------- 1 file changed, 132 insertions(+), 88 deletions(-) (limited to 'archaeological_context_records/tests.py') diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py index c1117a68d..a089c1dc5 100644 --- a/archaeological_context_records/tests.py +++ b/archaeological_context_records/tests.py @@ -60,7 +60,8 @@ from ishtar_common.tests import ( GenericSerializationTest, COMMON_FIXTURES, WAREHOUSE_FIXTURES, - SearchText, SeleniumTests, + SearchText, + SeleniumTests, ) from archaeological_operations.models import Operation @@ -952,8 +953,7 @@ class RecordRelationsTest(ContextRecordInit, TestCase): crs = self.context_records rel_type_1 = models.RelationType.objects.create( - symmetrical=False, txt_idx="rel_1", - logical_relation='included' + symmetrical=False, txt_idx="rel_1", logical_relation="included" ) """ 6 7 8 9 10 = 11 = 12 @@ -971,31 +971,36 @@ class RecordRelationsTest(ContextRecordInit, TestCase): 1 2 """ relations = ( - (1, 3), (2, 3), (3, 4), (3, 5), (4, 6), (4, 7), (4, 8), - (5, 9), (5, 10) + (1, 3), + (2, 3), + (3, 4), + (3, 5), + (4, 6), + (4, 7), + (4, 8), + (5, 9), + (5, 10), ) models.RecordRelations._no_post_treatments = True for child_idx, parent_idx in relations: models.RecordRelations.objects.create( left_record=crs[child_idx - 1], right_record=crs[parent_idx - 1], - relation_type=rel_type_1 + relation_type=rel_type_1, ) rel_type_2 = models.RelationType.objects.create( - symmetrical=True, txt_idx="rel_2", - logical_relation='equal' - ) - equal_relations = ( - (10, 11), (11, 12), (5, 13), (3, 14) + symmetrical=True, txt_idx="rel_2", logical_relation="equal" ) + equal_relations = ((10, 11), (11, 12), (5, 13), (3, 14)) for child_idx, parent_idx in equal_relations: models.RecordRelations.objects.create( left_record=crs[child_idx - 1], right_record=crs[parent_idx - 1], - relation_type=rel_type_2 + relation_type=rel_type_2, ) q = models.ContextRecordTree.objects.filter( - cr_parent_id=crs[2].pk, cr_id=crs[0].pk) + cr_parent_id=crs[2].pk, cr_id=crs[0].pk + ) self.assertGreaterEqual(q.count(), 1) ## use tables @@ -1052,58 +1057,60 @@ class RecordRelationsTest(ContextRecordInit, TestCase): # test remove a node nb = models.ContextRecordTree.objects.filter( - cr_parent=crs[6 - 1], cr=crs[3 - 1]).count() + cr_parent=crs[6 - 1], cr=crs[3 - 1] + ).count() self.assertEqual(nb, 1) models.RecordRelations.objects.filter( - left_record=crs[3 - 1], - right_record=crs[4 - 1] + left_record=crs[3 - 1], right_record=crs[4 - 1] ).delete() models.ContextRecordTree.update(crs[3 - 1].pk) models.ContextRecordTree.update(crs[4 - 1].pk) nb = models.ContextRecordTree.objects.filter( - cr_parent=crs[6 - 1], cr=crs[3 - 1]).count() + cr_parent=crs[6 - 1], cr=crs[3 - 1] + ).count() self.assertEqual(nb, 0) # test remove a node (update equal links) nb = models.ContextRecordTree.objects.filter( - cr_parent=crs[10 - 1], cr=crs[14 - 1]).count() + cr_parent=crs[10 - 1], cr=crs[14 - 1] + ).count() self.assertEqual(nb, 1) models.RecordRelations.objects.filter( - left_record=crs[3 - 1], - right_record=crs[5 - 1] + left_record=crs[3 - 1], right_record=crs[5 - 1] ).delete() models.ContextRecordTree.update(crs[3 - 1].pk) models.ContextRecordTree.update(crs[5 - 1].pk) nb = models.ContextRecordTree.objects.filter( - cr_parent=crs[10 - 1], cr=crs[14 - 1]).count() + cr_parent=crs[10 - 1], cr=crs[14 - 1] + ).count() self.assertEqual(nb, 0) # auto update models.RecordRelations._no_post_treatments = False models.RecordRelations.objects.create( - left_record=crs[3 - 1], - right_record=crs[4 - 1], - relation_type=rel_type_1 + left_record=crs[3 - 1], right_record=crs[4 - 1], relation_type=rel_type_1 ) nb = models.ContextRecordTree.objects.filter( - cr_parent=crs[6 - 1], cr=crs[3 - 1]).count() + cr_parent=crs[6 - 1], cr=crs[3 - 1] + ).count() self.assertEqual(nb, 1) models.RecordRelations.objects.create( - left_record=crs[3 - 1], - right_record=crs[5 - 1], - relation_type=rel_type_1 + left_record=crs[3 - 1], right_record=crs[5 - 1], relation_type=rel_type_1 ) nb = models.ContextRecordTree.objects.filter( - cr_parent=crs[10 - 1], cr=crs[14 - 1]).count() + cr_parent=crs[10 - 1], cr=crs[14 - 1] + ).count() self.assertEqual(nb, 1) # delete nb = models.ContextRecordTree.objects.filter( - cr_parent=crs[13 - 1], cr=crs[1 - 1]).count() + cr_parent=crs[13 - 1], cr=crs[1 - 1] + ).count() self.assertEqual(nb, 1) crs[3 - 1].delete() nb = models.ContextRecordTree.objects.filter( - cr_parent=crs[13 - 1], cr=crs[1 - 1]).count() + cr_parent=crs[13 - 1], cr=crs[1 - 1] + ).count() self.assertEqual(nb, 0) # delete on views @@ -1114,7 +1121,8 @@ class RecordRelationsTest(ContextRecordInit, TestCase): models.ContextRecordTree.objects.filter(pk__isnull=False).delete() crs[4 - 1].delete() q = models.ContextRecordTree.objects.filter( - cr_parent_id=crs[1 - 1].pk, cr_id=crs[6 - 1].pk) + cr_parent_id=crs[1 - 1].pk, cr_id=crs[6 - 1].pk + ) self.assertGreaterEqual(q.count(), 0) def _test_tree_(self, test_trees, context_record): @@ -1122,12 +1130,15 @@ class RecordRelationsTest(ContextRecordInit, TestCase): for tree in test_trees: for tree_idx in range(len(tree) - 1): q = models.ContextRecordTree.objects.filter( - cr_parent=crs[tree[tree_idx] - 1], cr=crs[tree[tree_idx + 1] - 1]) + cr_parent=crs[tree[tree_idx] - 1], cr=crs[tree[tree_idx + 1] - 1] + ) self.assertEqual( - q.count(), 1, + q.count(), + 1, msg="Tree relation ({}, {}) is missing for context " - "record {}".format(tree[tree_idx + 1], tree[tree_idx], - context_record) + "record {}".format( + tree[tree_idx + 1], tree[tree_idx], context_record + ), ) def _test_tree_generation(self, cr_idx, test_trees): @@ -1365,61 +1376,79 @@ class GraphGenerationTest(ContextRecordInit, TestCase): self.assertNotIn('"CR 2D"', content) -@tag('ui') +@tag("ui") class SeleniumTestsContextRecords(SeleniumTests): fixtures = CONTEXT_RECORD_FIXTURES def _test_cr(self, i, pks, geojsons, method=None): - if method == 'from operation': - tbody = '.' + '/div' * 6 + '/table/tbody' + if method == "from operation": + tbody = "." + "/div" * 6 + "/table/tbody" title = self.selenium.find_element_by_xpath( - '//h3[contains(text(), "Unité d\'Enregistrement") or contains(text(), "Context record")]') - panel = title.find_element_by_xpath('./..') - details = panel.find_element_by_xpath(tbody + '/tr[' + str(i) + ']/td/a[@class="display_details"]') + '//h3[contains(text(), "Unité d\'Enregistrement") or contains(text(), "Context record")]' + ) + panel = title.find_element_by_xpath("./..") + details = panel.find_element_by_xpath( + tbody + "/tr[" + str(i) + ']/td/a[@class="display_details"]' + ) self.scroll(details) - label = panel.find_element_by_xpath(tbody + '/tr[' + str(i) + ']/td[2]').text + label = panel.find_element_by_xpath( + tbody + "/tr[" + str(i) + "]/td[2]" + ).text details.click() else: - tbody = './form' + '/div' * 7 + '/table/tbody' + tbody = "./form" + "/div" * 7 + "/table/tbody" title = '//h3[text()="Rechercher une unité d\'enregistrement" or text()="Context record search"]' - self.WebDriverWait(self.selenium, 2).until(lambda driver: driver.find_element_by_xpath(title)) + self.WebDriverWait(self.selenium, self.waiting_time).until( + lambda driver: driver.find_element_by_xpath(title) + ) title = self.selenium.find_element_by_xpath(title) - panel = title.find_element_by_xpath('./..') - details = panel.find_element_by_xpath(tbody + '/tr[' + str(i) + ']/td/a[@class="display_details"]') + panel = title.find_element_by_xpath("./..") + details = panel.find_element_by_xpath( + tbody + "/tr[" + str(i) + ']/td/a[@class="display_details"]' + ) self.scroll(details) details.click() - label = self.selenium.find_element_by_xpath('//small[@title="ID interne" or @title="Internal ID"]').text + label = self.selenium.find_element_by_xpath( + '//small[@title="ID interne" or @title="Internal ID"]' + ).text label = label[1:] cr = models.ContextRecord.objects.get(pk=pks[label]) slug_pk = str(cr.SLUG) + "-" + str(cr.pk) - if False: # geojsons[label]['precise'] - base = copy.deepcopy(geojsons[label]['get_pts']) - else: - base = copy.deepcopy(geojsons[label]['get_polys']) + base = copy.deepcopy(geojsons[label]["get_polys"]) get_poly_id = "get-poly-for-" + slug_pk get_poly_label_id = "get-poly-label-for-" + slug_pk disp_bf_id = "disp-bf-for-" + slug_pk - cr_polys = geojsons[label]['get_polys'] - bf_labels_polys = cr_polys['properties'].pop('base-finds') - bf_polys = {'type': 'FeatureCollection', - 'features': [geojsons[bf_label]['get_polys'] for bf_label in bf_labels_polys] - } + cr_polys = geojsons[label]["get_polys"] + bf_labels_polys = cr_polys["properties"].pop("base-finds") + bf_polys = { + "type": "FeatureCollection", + "features": [ + geojsons[bf_label]["get_polys"] for bf_label in bf_labels_polys + ], + } - cr_pts = geojsons[label]['get_pts'] - bf_labels_pts = cr_pts['properties'].pop('base-finds') - bf_pts = {'type': 'FeatureCollection', - 'features': [geojsons[bf_label]['get_pts'] for bf_label in bf_labels_pts] - } + cr_pts = geojsons[label]["get_pts"] + bf_labels_pts = cr_pts["properties"].pop("base-finds") + bf_pts = { + "type": "FeatureCollection", + "features": [geojsons[bf_label]["get_pts"] for bf_label in bf_labels_pts], + } - self.WebDriverWait(self.selenium, 2).until( + self.WebDriverWait(self.selenium, self.waiting_time).until( lambda driver: driver.find_element_by_xpath( - '//dl[@class="col-12"]/dt[text()="Display geo items" or text()="Afficher les éléments"]')) + '//dl[@class="col-12"]/dt[text()="Display geo items" or text()="Afficher les éléments"]' + ) + ) dd = '//dl[@class="col-12"]/dd' - self.selenium.find_element_by_xpath(dd + '/fieldset/label[@for="' + disp_bf_id + '"]') - disp_bf = self.selenium.find_element_by_xpath(dd + '/fieldset/input[@id="' + disp_bf_id + '"]') + self.selenium.find_element_by_xpath( + dd + '/fieldset/label[@for="' + disp_bf_id + '"]' + ) + disp_bf = self.selenium.find_element_by_xpath( + dd + '/fieldset/input[@id="' + disp_bf_id + '"]' + ) self.assertFalse(disp_bf.is_selected()) select_get_poly = dd + '/select[@id="' + get_poly_id + '"]' get_poly_label = dd + '/label[@id="' + get_poly_label_id + '"]' @@ -1430,35 +1459,37 @@ class SeleniumTestsContextRecords(SeleniumTests): # context record specific # click on "Base finds" - self.selenium.execute_script('return initialize_test_map(arguments[0])', slug_pk) + self.selenium.execute_script( + "return initialize_test_map(arguments[0])", slug_pk + ) self.scroll(disp_bf) disp_bf.click() select_get_poly = dd + '/select[@id="' + get_poly_id + '"]' get_poly = self.selenium.find_element_by_xpath(select_get_poly) get_poly.click() - self.selenium.find_element_by_xpath(select_get_poly + '/option[@value="polygons"]').click() + self.selenium.find_element_by_xpath( + select_get_poly + '/option[@value="polygons"]' + ).click() - bf_geoms = [ - bf_polys, - {'type': 'FeatureCollection', 'features': []} - ] + bf_geoms = [bf_polys, {"type": "FeatureCollection", "features": []}] self.assertTrue(disp_bf.is_selected()) self.selenium.find_element_by_xpath(get_poly_label) self.assertMap(base, slug_pk, bf_geoms) get_poly = self.selenium.find_element_by_xpath(select_get_poly) get_poly.click() - self.selenium.find_element_by_xpath(select_get_poly + '/option[@value="points"]').click() - bf_geoms = [ - bf_pts, - {'type': 'FeatureCollection', 'features': []} - ] + self.selenium.find_element_by_xpath( + select_get_poly + '/option[@value="points"]' + ).click() + bf_geoms = [bf_pts, {"type": "FeatureCollection", "features": []}] self.assertTrue(disp_bf.is_selected()) self.selenium.find_element_by_xpath(get_poly_label) self.assertMap(base, slug_pk, bf_geoms) # Click on "None" - self.selenium.execute_script('return initialize_test_map(arguments[0])', slug_pk) + self.selenium.execute_script( + "return initialize_test_map(arguments[0])", slug_pk + ) disp_bf.click() self.assertFalse(disp_bf.is_selected()) self.assertNotInDOM(select_get_poly) @@ -1469,31 +1500,44 @@ class SeleniumTestsContextRecords(SeleniumTests): pks, geojsons = self.pks_and_geojson() # from operation for i in range(1, 3): - self.WebDriverWait(self.selenium, 2).until( + self.WebDriverWait(self.selenium, self.waiting_time).until( lambda driver: driver.find_element_by_xpath( - '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]')) + '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]' + ) + ) dropdown = self.selenium.find_element_by_xpath( - '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]') + '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]' + ) self.scroll(dropdown) dropdown.click() - self.selenium.find_element_by_xpath('//div[@class="dropdown-menu show"]/a[@href="/operation_search/"]').click() - details = self.selenium.find_element_by_xpath('//tbody/tr[' + str(i) + ']/td/a[@class="display_details"]') + self.selenium.find_element_by_xpath( + '//div[@class="dropdown-menu show"]/a[@href="/operation_search/"]' + ).click() + details = self.selenium.find_element_by_xpath( + "//tbody/tr[" + str(i) + ']/td/a[@class="display_details"]' + ) self.scroll(details) details.click() self.selenium.find_element_by_xpath( - '//ul[@role="tablist"]/li/a[contains(text(), "Unités d\'Enregistrement") or contains(text(), "Context records")]').click() + '//ul[@role="tablist"]/li/a[contains(text(), "Unités d\'Enregistrement") or contains(text(), "Context records")]' + ).click() for j in range(1, 3): self._test_cr(j, pks, copy.deepcopy(geojsons), method="from operation") # from search bar for i in range(1, 5): - self.WebDriverWait(self.selenium, 2).until( + self.WebDriverWait(self.selenium, self.waiting_time).until( lambda driver: driver.find_element_by_xpath( - '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]')) + '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]' + ) + ) dropdown = self.selenium.find_element_by_xpath( - '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]') + '//a[@class="nav-link dropdown-toggle"][@id="dropdown-menu-main"]' + ) self.scroll(dropdown) dropdown.click() - self.selenium.find_element_by_xpath('//div[@class="dropdown-menu show"]/a[@href="/record_search/"]').click() + self.selenium.find_element_by_xpath( + '//div[@class="dropdown-menu show"]/a[@href="/record_search/"]' + ).click() self._test_cr(i, pks, copy.deepcopy(geojsons)) # from bottom table, multiple displays for i in range(1, 4): -- cgit v1.2.3