浏览代码

unit tests ok

omassot 6 年之前
父节点
当前提交
311b2345a0
共有 41 个文件被更改,包括 152 次插入32 次删除
  1. 22 17
      schemas/mn3_apd.py
  2. 二进制
      test/projects/mn3_apd/0_empty/0_empty.qgz
  3. 二进制
      test/projects/mn3_apd/1_valid/1_valid.qgz
  4. 1 0
      test/projects/mn3_apd/ADDUCTION.cpg
  5. 二进制
      test/projects/mn3_apd/ADDUCTION.dbf
  6. 1 0
      test/projects/mn3_apd/ADDUCTION.prj
  7. 1 0
      test/projects/mn3_apd/ADDUCTION.qpj
  8. 二进制
      test/projects/mn3_apd/ADDUCTION.shp
  9. 二进制
      test/projects/mn3_apd/ADDUCTION.shx
  10. 1 0
      test/projects/mn3_apd/CABLE.cpg
  11. 二进制
      test/projects/mn3_apd/CABLE.dbf
  12. 1 0
      test/projects/mn3_apd/CABLE.prj
  13. 1 0
      test/projects/mn3_apd/CABLE.qpj
  14. 二进制
      test/projects/mn3_apd/CABLE.shp
  15. 二进制
      test/projects/mn3_apd/CABLE.shx
  16. 1 0
      test/projects/mn3_apd/SITE_CLIENT.cpg
  17. 二进制
      test/projects/mn3_apd/SITE_CLIENT.dbf
  18. 1 0
      test/projects/mn3_apd/SITE_CLIENT.prj
  19. 1 0
      test/projects/mn3_apd/SITE_CLIENT.qpj
  20. 二进制
      test/projects/mn3_apd/SITE_CLIENT.shp
  21. 二进制
      test/projects/mn3_apd/SITE_CLIENT.shx
  22. 1 0
      test/projects/mn3_apd/SITE_TELECOM.cpg
  23. 二进制
      test/projects/mn3_apd/SITE_TELECOM.dbf
  24. 1 0
      test/projects/mn3_apd/SITE_TELECOM.prj
  25. 1 0
      test/projects/mn3_apd/SITE_TELECOM.qpj
  26. 二进制
      test/projects/mn3_apd/SITE_TELECOM.shp
  27. 二进制
      test/projects/mn3_apd/SITE_TELECOM.shx
  28. 1 0
      test/projects/mn3_apd/ZAPBO.cpg
  29. 二进制
      test/projects/mn3_apd/ZAPBO.dbf
  30. 1 0
      test/projects/mn3_apd/ZAPBO.prj
  31. 1 0
      test/projects/mn3_apd/ZAPBO.qpj
  32. 二进制
      test/projects/mn3_apd/ZAPBO.shp
  33. 二进制
      test/projects/mn3_apd/ZAPBO.shx
  34. 1 0
      test/projects/mn3_apd/ZASRO.cpg
  35. 二进制
      test/projects/mn3_apd/ZASRO.dbf
  36. 1 0
      test/projects/mn3_apd/ZASRO.prj
  37. 1 0
      test/projects/mn3_apd/ZASRO.qpj
  38. 二进制
      test/projects/mn3_apd/ZASRO.shp
  39. 二进制
      test/projects/mn3_apd/ZASRO.shx
  40. 二进制
      test/projects/mn3_apd/mn3_apd_valid.qgz
  41. 112 15
      test/test_mn3_apd.py

+ 22 - 17
schemas/mn3_apd.py

@@ -36,6 +36,7 @@ STATUTS = ['ETUDE PRELIMINAIRE', 'ETUDE DE DIAGNOSTIC', 'AVANT-PROJET PROJET', '
 class SiteTelecom(QgsModel):
     layername = "SITE_TELECOM"
     geom_type = QgsModel.GEOM_POINT
+    crs = CRS
     bounding_box = (XMIN,YMIN,XMAX,YMAX)
     pk = "ST_CODE"
     schema = {'ST_CODE': {'type': 'string', 'empty': False}, 
@@ -47,23 +48,24 @@ class SiteTelecom(QgsModel):
                                                                         'NOEUD RACCORDEMENT D ABONNES', 
                                                                         'NOEUD RACCORDEMENT D ABONNES - HAUT DEBIT', 
                                                                         'NOEUD RACCORDEMENT D ABONNES - MONTEE EN DEBIT']}, 
-            'ST_STATUT': {'type': 'string', 'empty': False, 'allowed': [STATUTS]}, 
+            'ST_STATUT': {'type': 'string', 'empty': False, 'allowed': STATUTS}, 
             'ST_NBPRISE': {'empty': False, 'validator': is_positive_int}
             }
 
 class SiteClient(QgsModel):
     layername = "SITE_CLIENT"
     geom_type = QgsModel.GEOM_POINT
+    crs = CRS
     bounding_box = (XMIN,YMIN,XMAX,YMAX)
     schema = {
               'SC_TYPFON': {'type': 'string', 'empty': False, 'allowed': ['RESIDENTIEL', 'PROFESSIONNEL', 'OPERATEUR', 'TECHNIQUE']},
-              'SC_STATUT': {'type': 'string', 'empty': False, 'allowed': [STATUTS]}, 
+              'SC_STATUT': {'type': 'string', 'empty': False, 'allowed': STATUTS}, 
               'SC_NBPRISE': {'empty': False, 'validator': is_positive_int}, 
               'SC_NBPRHAB': {'empty': False, 'validator': is_positive_int}, 
               'SC_NBPRPRO': {'empty': False, 'validator': is_positive_int}, 
               'SC_ID_SITE': {'type': 'string', 'empty': False}, 
               'SC_NUM_RUE': {'type': 'string', 'empty': False}, 
-              'SC_REPET': {'type': 'string', 'empty': False}, 
+              'SC_REPET': {'type': 'string', 'empty': True}, 
               'SC_DNUBAT': {'type': 'string', 'empty': False}, 
               'SC_DESC': {'type': 'string', 'empty': False}, 
               'SC_NOM_RUE': {'type': 'string', 'empty': False}, 
@@ -75,10 +77,11 @@ class SiteClient(QgsModel):
 class Cable(QgsModel):
     layername = "CABLE"
     geom_type = QgsModel.GEOM_LINE
+    crs = CRS
     bounding_box = (XMIN,YMIN,XMAX,YMAX)
     schema = {'CA_TYPFON': {'type': 'string', 'empty': False, 'allowed': ['COLLECTE TRANSPORT DISTRIBUTION', 'COLLECTE', 'COLLECTE TRANSPORT', 'COLLECTE DISTRIBUTION', 'TRANSPORT DISTRIBUTION', 'TRANSPORT', 'DISTRIBUTION', 'RACCORDEMENT FINAL', 'BOUCLE METROPOLITAINE', 'LONGUE DISTANCE (LONG HAUL)', 'NON COMMUNIQUE']},
               'CA_TYPSTR': {'type': 'string', 'empty': False, 'allowed': ['CONDUITE', 'AERIEN', 'COLONNE MONTANTE', 'IMMERGE', 'FACADE']},
-              'CA_STATUT': {'type': 'string', 'empty': False, 'allowed': [STATUTS]},
+              'CA_STATUT': {'type': 'string', 'empty': False, 'allowed': STATUTS},
               'CA_CAPFO': {'empty': False, 'allowed': [720,576,288,144,96,72,48,24,12]},
               'CA_MODULO': {'empty': False, 'allowed': [6, 12]},
               'CA_SUPPORT': {'type': 'string', 'empty': False, 'allowed': ['0', '1']}
@@ -87,15 +90,17 @@ class Cable(QgsModel):
 class Zapbo(QgsModel):
     layername = "ZAPBO"
     geom_type = QgsModel.GEOM_POLYGON
+    crs = CRS
     bounding_box = (XMIN,YMIN,XMAX,YMAX)
     schema = {'ZP_NBPRISE': {'empty': False, 'validator': is_positive_int},
               'ZP_ISOLE': {'type': 'string', 'empty': False, 'allowed': ['0', '1']},
-              'ZP_STATUT': {'type': 'string', 'empty': False, 'allowed': [STATUTS]}
+              'ZP_STATUT': {'type': 'string', 'empty': False, 'allowed': STATUTS}
               }
     
 class Zasro(QgsModel):
     layername = "ZASRO"
     geom_type = QgsModel.GEOM_POLYGON
+    crs = CRS
     bounding_box = (XMIN,YMIN,XMAX,YMAX)
     schema = {'ZS_CODE': {'type': 'string', 'empty': False},
               'ZS_NBPRISE': {'empty': False, 'validator': is_positive_int}
@@ -104,6 +109,7 @@ class Zasro(QgsModel):
 class Adduction(QgsModel):
     layername = "ADDUCTION"
     geom_type = QgsModel.GEOM_LINE
+    crs = CRS
     bounding_box = (XMIN,YMIN,XMAX,YMAX)
     schema = {'AD_ISOLE': {'type': 'string', 'empty': False, 'allowed': ['0', '1']},
               'AD_LONG': {'empty': False, 'validator': is_positive_float}
@@ -258,25 +264,25 @@ class Mn3ApdChecker(BaseChecker):
     def test_dimension_zasro(self):
         """ Contrôle le dimensionnement des ZASRO """
         for zasro in self.zasros:
-            if zasro.ZS.NBPRISES > 850:
+            if zasro.ZS_NBPRISE > 850:
                 self.log_error("Le nombre de prises est supérieur à 850", item=zasro)
         
     def test_affaiblissement(self):
         """ Contrôle l'affaiblissement """
-        for site_client in self.site_clients:
-            if site_client.ZS.NBPRISES > 28:
+        for site_client in self.sites_client:
+            if site_client.SC_ATT_PTO > 28:
                 self.log_error("L'affaiblissement est supérieur à 28", item=site_client)
 
     def test_capacite_modulo(self):
-        """ Contrôle l'affaiblissement """
+        """ Cohérence capacité du cable / modulo """
         for cable in self.cables:
-            if cable.CA_CAPFO in [720,576,288,144,96] and cable.MODULO != 12:
-                self.log_error(f"Modulo invalide (capacite: {cable.CA_CAPFO}, modulo: {cable.MODULO})", item=cable)
-            elif cable.CA_CAPFO in [48,24,12] and cable.MODULO != 6:
-                self.log_error(f"Modulo invalide (capacite: {cable.CA_CAPFO}, modulo: {cable.MODULO})", item=cable)
+            if cable.CA_CAPFO in [720,576,288,144,96] and cable.CA_MODULO != 12:
+                self.log_error(f"Modulo invalide (capacite: {cable.CA_CAPFO}, modulo: {cable.CA_MODULO})", item=cable)
+            elif cable.CA_CAPFO in [48,24,12] and cable.CA_MODULO != 6:
+                self.log_error(f"Modulo invalide (capacite: {cable.CA_CAPFO}, modulo: {cable.CA_MODULO})", item=cable)
         
     def test_longueur_racco(self):
-        """ Contrôle la longueur des raccos """
+        """ Contrôle la longueur des raccordements """
         for adduction in self.adductions:
             if adduction.AD_ISOLE == "1" and adduction.AD_LONG <= 100:
                 self.log_error("L'adduction ne devrait pas être consiudérée comme isolée (long.: {adduction.AD_LONG})", item=adduction)
@@ -289,16 +295,15 @@ class Mn3ApdChecker(BaseChecker):
         Toutes les zapbo contiennent au moins une prise"""
         
         for zapbo in self.zapbos:
-            nb_prises = sum([site_client.SC_NBPRISE for site_client in self.site_clients if zapbo.geom.contains(site_client.geom)])
+            nb_prises = sum([site_client.SC_NBPRISE for site_client in self.sites_client if zapbo.geom.contains(site_client.geom)])
             if not nb_prises:
                 self.log_error("La Zapbo ne contient aucune prise", item=zapbo)
         
-        for site_client in self.site_clients:
+        for site_client in self.sites_client:
             nb_zapbo = len([zapbo for zapbo in self.zapbos if zapbo.geom.contains(site_client.geom)])
             if nb_zapbo == 0:
                 self.log_error("La prise n'est contenue dans aucune ZAPBO", item=site_client)
             elif nb_zapbo > 1:
                 self.log_error("La prise est contenue dans plus d'une ZAPBO", item=site_client)
                 
-        
 checkers = [Mn3ApdChecker]

二进制
test/projects/mn3_apd/0_empty/0_empty.qgz


二进制
test/projects/mn3_apd/1_valid/1_valid.qgz


+ 1 - 0
test/projects/mn3_apd/ADDUCTION.cpg

@@ -0,0 +1 @@
+UTF-8

二进制
test/projects/mn3_apd/ADDUCTION.dbf


+ 1 - 0
test/projects/mn3_apd/ADDUCTION.prj

@@ -0,0 +1 @@
+PROJCS["RGF93_CC49",GEOGCS["GCS_RGF93",DATUM["D_RGF_1993",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],UNIT["Meter",1]]

+ 1 - 0
test/projects/mn3_apd/ADDUCTION.qpj

@@ -0,0 +1 @@
+PROJCS["RGF93 / CC49",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","3949"]]

二进制
test/projects/mn3_apd/ADDUCTION.shp


二进制
test/projects/mn3_apd/ADDUCTION.shx


+ 1 - 0
test/projects/mn3_apd/CABLE.cpg

@@ -0,0 +1 @@
+UTF-8

二进制
test/projects/mn3_apd/CABLE.dbf


+ 1 - 0
test/projects/mn3_apd/CABLE.prj

@@ -0,0 +1 @@
+PROJCS["RGF93_CC49",GEOGCS["GCS_RGF93",DATUM["D_RGF_1993",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],UNIT["Meter",1]]

+ 1 - 0
test/projects/mn3_apd/CABLE.qpj

@@ -0,0 +1 @@
+PROJCS["RGF93 / CC49",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","3949"]]

二进制
test/projects/mn3_apd/CABLE.shp


二进制
test/projects/mn3_apd/CABLE.shx


+ 1 - 0
test/projects/mn3_apd/SITE_CLIENT.cpg

@@ -0,0 +1 @@
+UTF-8

二进制
test/projects/mn3_apd/SITE_CLIENT.dbf


+ 1 - 0
test/projects/mn3_apd/SITE_CLIENT.prj

@@ -0,0 +1 @@
+PROJCS["RGF93_CC49",GEOGCS["GCS_RGF93",DATUM["D_RGF_1993",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],UNIT["Meter",1]]

+ 1 - 0
test/projects/mn3_apd/SITE_CLIENT.qpj

@@ -0,0 +1 @@
+PROJCS["RGF93 / CC49",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","3949"]]

二进制
test/projects/mn3_apd/SITE_CLIENT.shp


二进制
test/projects/mn3_apd/SITE_CLIENT.shx


+ 1 - 0
test/projects/mn3_apd/SITE_TELECOM.cpg

@@ -0,0 +1 @@
+UTF-8

二进制
test/projects/mn3_apd/SITE_TELECOM.dbf


+ 1 - 0
test/projects/mn3_apd/SITE_TELECOM.prj

@@ -0,0 +1 @@
+PROJCS["RGF93_CC49",GEOGCS["GCS_RGF93",DATUM["D_RGF_1993",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],UNIT["Meter",1]]

+ 1 - 0
test/projects/mn3_apd/SITE_TELECOM.qpj

@@ -0,0 +1 @@
+PROJCS["RGF93 / CC49",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","3949"]]

二进制
test/projects/mn3_apd/SITE_TELECOM.shp


二进制
test/projects/mn3_apd/SITE_TELECOM.shx


+ 1 - 0
test/projects/mn3_apd/ZAPBO.cpg

@@ -0,0 +1 @@
+UTF-8

二进制
test/projects/mn3_apd/ZAPBO.dbf


+ 1 - 0
test/projects/mn3_apd/ZAPBO.prj

@@ -0,0 +1 @@
+PROJCS["RGF93_CC49",GEOGCS["GCS_RGF93",DATUM["D_RGF_1993",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],UNIT["Meter",1]]

+ 1 - 0
test/projects/mn3_apd/ZAPBO.qpj

@@ -0,0 +1 @@
+PROJCS["RGF93 / CC49",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","3949"]]

二进制
test/projects/mn3_apd/ZAPBO.shp


二进制
test/projects/mn3_apd/ZAPBO.shx


+ 1 - 0
test/projects/mn3_apd/ZASRO.cpg

@@ -0,0 +1 @@
+UTF-8

二进制
test/projects/mn3_apd/ZASRO.dbf


+ 1 - 0
test/projects/mn3_apd/ZASRO.prj

@@ -0,0 +1 @@
+PROJCS["RGF93_CC49",GEOGCS["GCS_RGF93",DATUM["D_RGF_1993",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],UNIT["Meter",1]]

+ 1 - 0
test/projects/mn3_apd/ZASRO.qpj

@@ -0,0 +1 @@
+PROJCS["RGF93 / CC49",GEOGCS["RGF93",DATUM["Reseau_Geodesique_Francais_1993",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6171"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4171"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",48.25],PARAMETER["standard_parallel_2",49.75],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",3],PARAMETER["false_easting",1700000],PARAMETER["false_northing",8200000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","3949"]]

二进制
test/projects/mn3_apd/ZASRO.shp


二进制
test/projects/mn3_apd/ZASRO.shx


二进制
test/projects/mn3_apd/mn3_apd_valid.qgz


+ 112 - 15
test/test_mn3_apd.py

@@ -9,6 +9,7 @@ import re
 
 from core.checking import SUCCESS, FAILURE, ERROR
 from path import Path
+from schemas.mn3_apd import SiteTelecom, Zapbo
 from test._base import SchemaTest
 
 
@@ -16,7 +17,7 @@ logger = logging.getLogger("mncheck")
 
 class Test(SchemaTest):
     SCHEMA_NAME = "mn3_apd"
-    PROJECT_FILE = Path(__file__).parent / 'projects' / 'mn3_apd' / '1_valid' / '1_valid.qgz'
+    PROJECT_FILE = Path(__file__).parent / 'projects' / 'mn3_apd' / 'mn3_apd_valid.qgz'
 
     def setUp(self):
         SchemaTest.setUp(self)
@@ -97,7 +98,7 @@ class Test(SchemaTest):
         # cas initial: valide
         r = self.run_test("test_structure_sites_telecom")
 
-        self.assertEqual(r.title, 'Structure des données: Sites Telecom')
+        self.assertEqual(r.title, 'Structure des données: SiteTelecom')
         self.assertSuccess(r)
         self.assertEqual(len(r.errors), 0)
         
@@ -111,7 +112,7 @@ class Test(SchemaTest):
         # cas initial: valide
         r = self.run_test("test_structure_sites_client")
 
-        self.assertEqual(r.title, 'Structure des données: Sites Clients')
+        self.assertEqual(r.title, 'Structure des données: SiteClient')
         self.assertSuccess(r)
         self.assertEqual(len(r.errors), 0)
         
@@ -139,7 +140,7 @@ class Test(SchemaTest):
         # cas initial: valide
         r = self.run_test("test_structure_zapbos")
 
-        self.assertEqual(r.title, 'Structure des données: Zapbos')
+        self.assertEqual(r.title, 'Structure des données: Zapbo')
         self.assertSuccess(r)
         self.assertEqual(len(r.errors), 0)
         
@@ -153,7 +154,7 @@ class Test(SchemaTest):
         # cas initial: valide
         r = self.run_test("test_structure_zasros")
 
-        self.assertEqual(r.title, 'Structure des données: Zasros')
+        self.assertEqual(r.title, 'Structure des données: Zasro')
         self.assertSuccess(r)
         self.assertEqual(len(r.errors), 0)
         
@@ -186,7 +187,7 @@ class Test(SchemaTest):
         self.assertEqual(len(r.errors), 0)
         
         # géométrie invalide
-        self.checker.arteres[0]._feature.setGeometry(QgsGeometry())
+        self.checker.cables[0]._feature.setGeometry(QgsGeometry())
         r = self.run_test("test_geometry_validity", True)
         self.assertFailure(r)
         self.assertErrorLogged(r, "La géométrie de l'objet est invalide")
@@ -201,7 +202,7 @@ class Test(SchemaTest):
         self.assertEqual(len(r.errors), 0)
 
         # type de géométrie invalide
-        self.checker.arteres[0]._feature.setGeometry(QgsGeometry())
+        self.checker.cables[0]._feature.setGeometry(QgsGeometry())
         r = self.run_test("test_geometry_type", True)
         self.assertFailure(r)
         self.assertErrorLogged(r, "Type de géométrie invalide.*")
@@ -216,27 +217,123 @@ class Test(SchemaTest):
         self.assertEqual(len(r.errors), 0)
     
         # hors de l'emprise
-        self.checker.noeuds[0]._feature.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(0,0)))
+        self.checker.sites_client[0]._feature.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(0,0)))
         r = self.run_test("test_bounding_box", True)
         self.assertFailure(r)
         self.assertErrorLogged(r, "Hors de l'emprise autorisée")
             
     def test_duplicates(self):
-        pass
+        
+        # cas initial: valide
+        r = self.run_test("test_duplicates")
+
+        self.assertEqual(r.title, 'Recherche de doublons')
+        self.assertSuccess(r)
+        self.assertEqual(len(r.errors), 0)
+    
+        
+        new_ = SiteTelecom(self.checker.sites_telecom[0]._feature)
+        new_.__dict__.update(self.checker.sites_telecom[0].__dict__)
+        self.checker.sites_telecom.append(new_)
+        
+        r = self.run_test("test_duplicates", True)
+        self.assertFailure(r)
+        self.assertErrorLogged(r, "Doublons dans le champs ST_CODE")
             
     def test_dimension_zasro(self):
-        pass
+        
+        # cas initial: valide
+        r = self.run_test("test_dimension_zasro")
+
+        self.assertEqual(r.title, 'Contrôle le dimensionnement des ZASRO')
+        self.assertSuccess(r)
+        self.assertEqual(len(r.errors), 0)
+        
+        self.checker.zasros[0].ZS_NBPRISE = 1000
+        r = self.run_test("test_dimension_zasro", True)
+        self.assertFailure(r)
+        self.assertErrorLogged(r, "Le nombre de prises est supérieur à 850")
     
     def test_affaiblissement(self):
-        pass
-    
+        
+        # cas initial: valide
+        r = self.run_test("test_affaiblissement")
+
+        self.assertEqual(r.title, "Contrôle l'affaiblissement")
+        self.assertSuccess(r)
+        self.assertEqual(len(r.errors), 0)
+        
+        self.checker.sites_client[0].SC_ATT_PTO = 100
+        r = self.run_test("test_affaiblissement", True)
+        self.assertFailure(r)
+        self.assertErrorLogged(r, "L'affaiblissement est supérieur à 28")
+        
     def test_capacite_modulo(self):
-        pass
+        
+        # cas initial: valide
+        r = self.run_test("test_capacite_modulo")
+
+        self.assertEqual(r.title, 'Cohérence capacité du cable / modulo')
+        self.assertSuccess(r)
+        self.assertEqual(len(r.errors), 0)
+        
+        self.checker.cables[0].CA_CAPFO = 24
+        self.checker.cables[0].CA_MODULO = 12
+        r = self.run_test("test_capacite_modulo", True)
+        self.assertFailure(r)
+        self.assertErrorLogged(r, "Modulo invalide.+")
+        
+        self.checker.cables[0].CA_CAPFO = 144
+        self.checker.cables[0].CA_MODULO = 6
+        r = self.run_test("test_capacite_modulo", True)
+        self.assertFailure(r)
+        self.assertErrorLogged(r, "Modulo invalide.+")
         
     def test_longueur_racco(self):
-        pass
+        
+        # cas initial: valide
+        r = self.run_test("test_longueur_racco")
+
+        self.assertEqual(r.title, 'Contrôle la longueur des raccordements')
+        self.assertSuccess(r)
+        self.assertEqual(len(r.errors), 0)
+    
+        self.checker.adductions[0].AD_LONG = 10
+        self.checker.adductions[0].AD_ISOLE = "1"
+        r = self.run_test("test_longueur_racco", True)
+        self.assertFailure(r)
+        self.assertErrorLogged(r, "L'adduction ne devrait pas être consiudérée comme isolée.+")
+    
+        self.checker.adductions[0].AD_LONG = 1000
+        self.checker.adductions[0].AD_ISOLE = "0"
+        r = self.run_test("test_longueur_racco", True)
+        self.assertFailure(r)
+        self.assertErrorLogged(r, "L'adduction devrait être considérée comme isolée.+")
         
     def test_zapbos_prises(self):
-        pass
+        
+        # cas initial: valide
+        r = self.run_test("test_zapbos_prises")
+
+        self.assertEqual(r.title, 'Topologie: Zapbos / Prises')
+        self.assertSuccess(r)
+        self.assertEqual(len(r.errors), 0)
+    
+        new_ = Zapbo(self.checker.zapbos[0]._feature)
+        new_.__dict__.update(self.checker.zapbos[0].__dict__)
+        self.checker.zapbos.append(new_)
+    
+        r = self.run_test("test_zapbos_prises", True)
+        self.assertFailure(r)
+        self.assertErrorLogged(r, "La prise est contenue dans plus d'une ZAPBO")
+    
+        new_geom = self.checker.sites_client[0]._feature.geometry()
+        new_geom.translate(1000,1000)
+        self.checker.sites_client[0]._feature.setGeometry(new_geom)
+    
+        r = self.run_test("test_zapbos_prises", True)
+        self.assertFailure(r)
+        self.assertErrorLogged(r, "La prise n'est contenue dans aucune ZAPBO")
+