@hestia-earth/data-validation 0.37.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.coveragerc +14 -0
- package/.dockerignore +19 -0
- package/.eslintignore +17 -0
- package/.eslintrc.js +11 -0
- package/.flake8 +5 -0
- package/.gitlab/issue_templates/new validation.md +82 -0
- package/.gitlab-ci.yml +216 -0
- package/.readthedocs.yml +24 -0
- package/CODEOWNERS +11 -0
- package/Dockerfile +13 -0
- package/LICENSE +21 -0
- package/MANIFEST.in +2 -0
- package/bin/hestia-validate-data +80 -0
- package/build_mocking.py +14 -0
- package/commitlint.config.js +1 -0
- package/docs/Makefile +20 -0
- package/docs/_static/styles.css +4 -0
- package/docs/_templates/custom-class-template.rst +34 -0
- package/docs/_templates/custom-module-template.rst +66 -0
- package/docs/_templates/layout.html +4 -0
- package/docs/conf.py +74 -0
- package/docs/index.rst +42 -0
- package/docs/make.bat +35 -0
- package/docs/requirements.txt +13 -0
- package/envs/.develop.env +1 -0
- package/envs/.master.env +1 -0
- package/guide-assets/.gitkeep +0 -0
- package/hestia_earth/validation/README.md +5 -0
- package/hestia_earth/validation/__init__.py +32 -0
- package/hestia_earth/validation/distribution.py +22 -0
- package/hestia_earth/validation/gee.py +162 -0
- package/hestia_earth/validation/log.py +44 -0
- package/hestia_earth/validation/models.py +141 -0
- package/hestia_earth/validation/preload_requests.py +61 -0
- package/hestia_earth/validation/terms.py +88 -0
- package/hestia_earth/validation/utils.py +444 -0
- package/hestia_earth/validation/validators/__init__.py +141 -0
- package/hestia_earth/validation/validators/aggregated_cycle.py +32 -0
- package/hestia_earth/validation/validators/aggregated_shared.py +37 -0
- package/hestia_earth/validation/validators/animal.py +88 -0
- package/hestia_earth/validation/validators/completeness.py +252 -0
- package/hestia_earth/validation/validators/cycle.py +1123 -0
- package/hestia_earth/validation/validators/distribution.py +86 -0
- package/hestia_earth/validation/validators/emission.py +109 -0
- package/hestia_earth/validation/validators/impact_assessment.py +138 -0
- package/hestia_earth/validation/validators/indicator.py +154 -0
- package/hestia_earth/validation/validators/infrastructure.py +25 -0
- package/hestia_earth/validation/validators/input.py +268 -0
- package/hestia_earth/validation/validators/management.py +131 -0
- package/hestia_earth/validation/validators/measurement.py +368 -0
- package/hestia_earth/validation/validators/organisation.py +43 -0
- package/hestia_earth/validation/validators/practice.py +590 -0
- package/hestia_earth/validation/validators/product.py +263 -0
- package/hestia_earth/validation/validators/property.py +266 -0
- package/hestia_earth/validation/validators/shared.py +940 -0
- package/hestia_earth/validation/validators/site.py +312 -0
- package/hestia_earth/validation/validators/source.py +20 -0
- package/hestia_earth/validation/validators/transformation.py +250 -0
- package/hestia_earth/validation/version.py +1 -0
- package/layer/build.sh +34 -0
- package/layer/deploy.sh +18 -0
- package/package.json +59 -0
- package/release.sh +11 -0
- package/requirements-ci.txt +6 -0
- package/requirements-test.txt +4 -0
- package/requirements.txt +2 -0
- package/run-docker-test.sh +7 -0
- package/run-docker.sh +9 -0
- package/run.py +99 -0
- package/scripts/build_docs.py +283 -0
- package/scripts/build_validation_list.py +160 -0
- package/scripts/guide-create-branch.sh +15 -0
- package/scripts/update-package-version.js +28 -0
- package/search-results.json +384 -0
- package/setup.cfg +2 -0
- package/setup.py +35 -0
- package/src/index.ts +1 -0
- package/src/validations.ts +22 -0
- package/src/version.ts +1 -0
- package/tests/Dockerfile +13 -0
- package/tests/__init__.py +3 -0
- package/tests/fixtures/aggregated/cycle/inputs-impactAssessment/invalid-no-impactAssessment.json +64 -0
- package/tests/fixtures/aggregated/cycle/inputs-impactAssessment/invalid-world.json +69 -0
- package/tests/fixtures/aggregated/cycle/inputs-impactAssessment/valid.json +69 -0
- package/tests/fixtures/animal/duplicated-input-cycle/invalid.json +98 -0
- package/tests/fixtures/animal/duplicated-input-cycle/valid.json +91 -0
- package/tests/fixtures/animal/pregnancyRateTotal/invalid.json +49 -0
- package/tests/fixtures/animal/pregnancyRateTotal/valid.json +60 -0
- package/tests/fixtures/animal/required/invalid.json +59 -0
- package/tests/fixtures/animal/required/valid.json +72 -0
- package/tests/fixtures/completeness/all-values/warning.json +22 -0
- package/tests/fixtures/completeness/animalPopulation/invalid.json +58 -0
- package/tests/fixtures/completeness/animalPopulation/valid-animals.json +71 -0
- package/tests/fixtures/completeness/animalPopulation/valid-incomplete.json +58 -0
- package/tests/fixtures/completeness/animalPopulation/valid-no-liveAnimals.json +37 -0
- package/tests/fixtures/completeness/blank-nodes/agri-food processor-invalid.json +52 -0
- package/tests/fixtures/completeness/blank-nodes/invalid.json +124 -0
- package/tests/fixtures/completeness/blank-nodes/valid.json +128 -0
- package/tests/fixtures/completeness/cropland/site.json +16 -0
- package/tests/fixtures/completeness/cropland/valid.json +22 -0
- package/tests/fixtures/completeness/cropland/warning.json +22 -0
- package/tests/fixtures/completeness/freshForage/error-animals.json +63 -0
- package/tests/fixtures/completeness/freshForage/error-products.json +65 -0
- package/tests/fixtures/completeness/freshForage/valid-animal-inputs.json +63 -0
- package/tests/fixtures/completeness/freshForage/valid-animals.json +63 -0
- package/tests/fixtures/completeness/freshForage/valid-not-grazing-liveAnimal.json +55 -0
- package/tests/fixtures/completeness/freshForage/valid-not-liveAnimal.json +47 -0
- package/tests/fixtures/completeness/freshForage/valid-products.json +68 -0
- package/tests/fixtures/completeness/ingredient/invalid-agri-food-processor.json +37 -0
- package/tests/fixtures/completeness/ingredient/invalid.json +49 -0
- package/tests/fixtures/completeness/ingredient/valid-agri-food-processor-complete.json +49 -0
- package/tests/fixtures/completeness/ingredient/valid-agri-food-processor-incomplete.json +37 -0
- package/tests/fixtures/completeness/ingredient/valid.json +49 -0
- package/tests/fixtures/completeness/material/error.json +49 -0
- package/tests/fixtures/completeness/material/valid-fuel-material.json +60 -0
- package/tests/fixtures/completeness/material/valid-incomplete.json +36 -0
- package/tests/fixtures/completeness/material/valid-no-fuel.json +36 -0
- package/tests/fixtures/completeness/valid.json +22 -0
- package/tests/fixtures/cycle/aboveGroundCropResidue/invalid.json +76 -0
- package/tests/fixtures/cycle/aboveGroundCropResidue/valid.json +76 -0
- package/tests/fixtures/cycle/aggregated-valid.json +102 -0
- package/tests/fixtures/cycle/coverCrop/invalid.json +64 -0
- package/tests/fixtures/cycle/coverCrop/valid-not-coverCrop.json +54 -0
- package/tests/fixtures/cycle/coverCrop/valid.json +64 -0
- package/tests/fixtures/cycle/cropResidue/complete/invalid.json +56 -0
- package/tests/fixtures/cycle/cropResidue/complete/valid.json +82 -0
- package/tests/fixtures/cycle/cropResidue/incomplete/invalid.json +42 -0
- package/tests/fixtures/cycle/cropResidue/incomplete/valid.json +56 -0
- package/tests/fixtures/cycle/dates/invalid-emissions.json +70 -0
- package/tests/fixtures/cycle/liveAnimal-animalProduct-mapping/invalid.json +63 -0
- package/tests/fixtures/cycle/liveAnimal-animalProduct-mapping/valid.json +63 -0
- package/tests/fixtures/cycle/maximumCycleDuration/invalid-dates-year-only.json +48 -0
- package/tests/fixtures/cycle/maximumCycleDuration/invalid-dates.json +48 -0
- package/tests/fixtures/cycle/maximumCycleDuration/invalid.json +48 -0
- package/tests/fixtures/cycle/maximumCycleDuration/valid-dates-year-only.json +48 -0
- package/tests/fixtures/cycle/maximumCycleDuration/valid-dates.json +48 -0
- package/tests/fixtures/cycle/maximumCycleDuration/valid.json +48 -0
- package/tests/fixtures/cycle/otherSites/cycleDuration/invalid.json +52 -0
- package/tests/fixtures/cycle/otherSites/cycleDuration/valid-no-siteDuration.json +40 -0
- package/tests/fixtures/cycle/otherSites/cycleDuration/valid.json +52 -0
- package/tests/fixtures/cycle/practices/stockingDensityPermanentPastureAverage/invalid.json +56 -0
- package/tests/fixtures/cycle/practices/stockingDensityPermanentPastureAverage/valid.json +65 -0
- package/tests/fixtures/cycle/primary-product-as-input/invalid.json +59 -0
- package/tests/fixtures/cycle/primary-product-as-input/valid.json +48 -0
- package/tests/fixtures/cycle/product-linked-ia/cycle.json +66 -0
- package/tests/fixtures/cycle/product-linked-ia/invalid-multiple.json +58 -0
- package/tests/fixtures/cycle/product-linked-ia/valid.json +57 -0
- package/tests/fixtures/cycle/products/animals/invalid.json +69 -0
- package/tests/fixtures/cycle/products/animals/valid.json +58 -0
- package/tests/fixtures/cycle/riceGrainInHuskFlooded-minimumCycleDuration/invalid.json +53 -0
- package/tests/fixtures/cycle/riceGrainInHuskFlooded-minimumCycleDuration/valid.json +53 -0
- package/tests/fixtures/cycle/siteDuration/crop/invalid.json +53 -0
- package/tests/fixtures/cycle/siteDuration/crop/valid-different-duration.json +53 -0
- package/tests/fixtures/cycle/siteDuration/crop/valid-same-duration.json +53 -0
- package/tests/fixtures/cycle/siteDuration/invalid.json +41 -0
- package/tests/fixtures/cycle/siteDuration/valid-no-siteDuration.json +40 -0
- package/tests/fixtures/cycle/siteDuration/valid-otherSites.json +48 -0
- package/tests/fixtures/cycle/siteDuration/valid.json +45 -0
- package/tests/fixtures/cycle/substrate/required/invalid.json +50 -0
- package/tests/fixtures/cycle/substrate/required/valid.json +60 -0
- package/tests/fixtures/cycle/valid.json +343 -0
- package/tests/fixtures/emission/linked-terms/inputs/invalid.json +78 -0
- package/tests/fixtures/emission/linked-terms/inputs/valid.json +106 -0
- package/tests/fixtures/emission/linked-terms/transformation/error.json +104 -0
- package/tests/fixtures/emission/linked-terms/transformation/valid.json +107 -0
- package/tests/fixtures/emission/linked-terms/transformation/warning.json +76 -0
- package/tests/fixtures/emission/methodTier-background/invalid.json +60 -0
- package/tests/fixtures/emission/methodTier-background/valid.json +60 -0
- package/tests/fixtures/emission/not-relevant/invalid.json +71 -0
- package/tests/fixtures/emission/not-relevant/valid.json +95 -0
- package/tests/fixtures/emission/not-relevant-methodTier/invalid.json +70 -0
- package/tests/fixtures/emission/not-relevant-methodTier/valid.json +95 -0
- package/tests/fixtures/impactAssessment/aggregated-valid.json +43 -0
- package/tests/fixtures/impactAssessment/cycle-contains-product/invalid.json +34 -0
- package/tests/fixtures/impactAssessment/cycle-contains-product/valid.json +34 -0
- package/tests/fixtures/impactAssessment/cycle-endDate/invalid.json +26 -0
- package/tests/fixtures/impactAssessment/cycle-endDate/valid.json +26 -0
- package/tests/fixtures/impactAssessment/valid.json +93 -0
- package/tests/fixtures/indicator/characterisedIndicator-methodModel/invalid.json +52 -0
- package/tests/fixtures/indicator/characterisedIndicator-methodModel/valid.json +52 -0
- package/tests/fixtures/indicator/ionisingCompounds/invalid.json +23 -0
- package/tests/fixtures/indicator/ionisingCompounds/valid.json +23 -0
- package/tests/fixtures/indicator/landTransformation/invalid-grouped.json +257 -0
- package/tests/fixtures/indicator/landTransformation/invalid.json +100 -0
- package/tests/fixtures/indicator/landTransformation/valid-grouped-full.json +507 -0
- package/tests/fixtures/indicator/landTransformation/valid-grouped.json +507 -0
- package/tests/fixtures/indicator/landTransformation/valid.json +100 -0
- package/tests/fixtures/infrastructure/lifespan/invalid.json +26 -0
- package/tests/fixtures/infrastructure/lifespan/valid.json +45 -0
- package/tests/fixtures/input/animalFeed-fate/invalid.json +103 -0
- package/tests/fixtures/input/animalFeed-fate/valid.json +90 -0
- package/tests/fixtures/input/country/invalid.json +64 -0
- package/tests/fixtures/input/country/valid.json +64 -0
- package/tests/fixtures/input/distribution/animalHousing.json +103 -0
- package/tests/fixtures/input/distribution/complete/invalid.json +177 -0
- package/tests/fixtures/input/distribution/complete/valid.json +163 -0
- package/tests/fixtures/input/distribution/incomplete/valid.json +139 -0
- package/tests/fixtures/input/impactAssessment/invalid.json +99 -0
- package/tests/fixtures/input/impactAssessment/valid.json +89 -0
- package/tests/fixtures/input/input-as-product/invalid.json +57 -0
- package/tests/fixtures/input/input-as-product/valid.json +59 -0
- package/tests/fixtures/input/mustIncludeId/invalid.json +13 -0
- package/tests/fixtures/input/mustIncludeId/valid-multiple-ids.json +31 -0
- package/tests/fixtures/input/mustIncludeId/valid.json +22 -0
- package/tests/fixtures/input/saplings/invalid.json +58 -0
- package/tests/fixtures/input/saplings/valid-no-saplings.json +58 -0
- package/tests/fixtures/input/saplings/valid-not-plantation.json +58 -0
- package/tests/fixtures/input/saplings/valid.json +58 -0
- package/tests/fixtures/integration/distribution/product-yield-invalid.json +54 -0
- package/tests/fixtures/management/cycle-overlap/cycles.json +39 -0
- package/tests/fixtures/management/cycle-overlap/invalid.json +26 -0
- package/tests/fixtures/management/cycle-overlap/valid.json +26 -0
- package/tests/fixtures/management/exists/invalid.json +13 -0
- package/tests/fixtures/management/exists/valid.json +25 -0
- package/tests/fixtures/management/fallow-dates/invalid.json +24 -0
- package/tests/fixtures/management/fallow-dates/valid.json +24 -0
- package/tests/fixtures/management/termType/invalid-cropland.json +35 -0
- package/tests/fixtures/management/termType/invalid-permanent-pasture.json +25 -0
- package/tests/fixtures/management/termType/valid-cropland.json +55 -0
- package/tests/fixtures/management/termType/valid-no-management.json +13 -0
- package/tests/fixtures/management/termType/valid-permanent-pasture.json +35 -0
- package/tests/fixtures/measurement/depths/invalid.json +44 -0
- package/tests/fixtures/measurement/depths/valid.json +50 -0
- package/tests/fixtures/measurement/models/valid.json +33 -0
- package/tests/fixtures/measurement/models/warning-no-value.json +30 -0
- package/tests/fixtures/measurement/models/warning.json +33 -0
- package/tests/fixtures/measurement/pond-measurements/invalid.json +11 -0
- package/tests/fixtures/measurement/pond-measurements/valid.json +23 -0
- package/tests/fixtures/measurement/required-depths/error.json +71 -0
- package/tests/fixtures/measurement/required-depths/valid.json +126 -0
- package/tests/fixtures/measurement/required-depths/warning.json +29 -0
- package/tests/fixtures/measurement/soilTexture/missing-texture-value.json +227 -0
- package/tests/fixtures/measurement/soilTexture/percent-invalid.json +110 -0
- package/tests/fixtures/measurement/soilTexture/percent-missing-value.json +43 -0
- package/tests/fixtures/measurement/soilTexture/percent-valid.json +110 -0
- package/tests/fixtures/measurement/startDate-endDate-required/invalid.json +32 -0
- package/tests/fixtures/measurement/startDate-endDate-required/valid.json +46 -0
- package/tests/fixtures/measurement/unique/invalid.json +28 -0
- package/tests/fixtures/measurement/unique/valid.json +16 -0
- package/tests/fixtures/measurement/value-length/invalid.json +46 -0
- package/tests/fixtures/measurement/value-length/valid.json +44 -0
- package/tests/fixtures/measurement/water-salinity/invalid.json +33 -0
- package/tests/fixtures/measurement/water-salinity/valid-brakish.json +40 -0
- package/tests/fixtures/measurement/water-salinity/valid.json +33 -0
- package/tests/fixtures/organisation/valid.json +26 -0
- package/tests/fixtures/practice/croppingDuration/riceGrainInHuskFlooded/invalid.json +63 -0
- package/tests/fixtures/practice/croppingDuration/riceGrainInHuskFlooded/valid.json +63 -0
- package/tests/fixtures/practice/defaultValue/invalid.json +12 -0
- package/tests/fixtures/practice/defaultValue/valid.json +15 -0
- package/tests/fixtures/practice/excretaManagement/invalid.json +50 -0
- package/tests/fixtures/practice/excretaManagement/valid.json +60 -0
- package/tests/fixtures/practice/irrigated-complete/invalid.json +47 -0
- package/tests/fixtures/practice/irrigated-complete/valid-incomplete.json +47 -0
- package/tests/fixtures/practice/irrigated-complete/valid.json +60 -0
- package/tests/fixtures/practice/landCover-products/invalid.json +58 -0
- package/tests/fixtures/practice/landCover-products/valid-coverCrop.json +69 -0
- package/tests/fixtures/practice/landCover-products/valid.json +58 -0
- package/tests/fixtures/practice/liveAnimal-system/invalid.json +58 -0
- package/tests/fixtures/practice/liveAnimal-system/valid.json +69 -0
- package/tests/fixtures/practice/longFallowDuration/invalid.json +20 -0
- package/tests/fixtures/practice/longFallowDuration/valid.json +20 -0
- package/tests/fixtures/practice/noTillage/invalid.json +23 -0
- package/tests/fixtures/practice/noTillage/valid-value-not-100.json +23 -0
- package/tests/fixtures/practice/noTillage/valid.json +21 -0
- package/tests/fixtures/practice/pastureGrass/key-termType/invalid.json +16 -0
- package/tests/fixtures/practice/pastureGrass/key-termType/valid.json +16 -0
- package/tests/fixtures/practice/pastureGrass/key-value/invalid-numbers.json +67 -0
- package/tests/fixtures/practice/pastureGrass/key-value/invalid.json +67 -0
- package/tests/fixtures/practice/pastureGrass/key-value/valid.json +67 -0
- package/tests/fixtures/practice/pastureGrass/permanent-pasture/invalid.json +37 -0
- package/tests/fixtures/practice/pastureGrass/permanent-pasture/valid.json +47 -0
- package/tests/fixtures/practice/primaryPercent/invalid.json +49 -0
- package/tests/fixtures/practice/primaryPercent/valid.json +49 -0
- package/tests/fixtures/practice/processingOperation/invalid-no-primary.json +48 -0
- package/tests/fixtures/practice/processingOperation/invalid.json +49 -0
- package/tests/fixtures/practice/processingOperation/valid-cropland.json +37 -0
- package/tests/fixtures/practice/processingOperation/valid.json +49 -0
- package/tests/fixtures/practice/productivePhasePermanentCrops/invalid.json +48 -0
- package/tests/fixtures/practice/productivePhasePermanentCrops/valid-0-value.json +58 -0
- package/tests/fixtures/practice/productivePhasePermanentCrops/valid-no-value.json +47 -0
- package/tests/fixtures/practice/productivePhasePermanentCrops/valid.json +48 -0
- package/tests/fixtures/practice/site-management/invalid.json +75 -0
- package/tests/fixtures/practice/site-management/valid.json +75 -0
- package/tests/fixtures/practice/tillage-siteType/valid.json +51 -0
- package/tests/fixtures/practice/tillage-siteType/warning.json +42 -0
- package/tests/fixtures/practice/tillage-values/invalid-fullTillage.json +61 -0
- package/tests/fixtures/practice/tillage-values/invalid-noTillage.json +61 -0
- package/tests/fixtures/practice/tillage-values/valid.json +61 -0
- package/tests/fixtures/practice/waterRegime/rice/invalid.json +59 -0
- package/tests/fixtures/practice/waterRegime/rice/valid-0-value.json +59 -0
- package/tests/fixtures/practice/waterRegime/rice/valid.json +58 -0
- package/tests/fixtures/product/economicValueShare/invalid.json +31 -0
- package/tests/fixtures/product/economicValueShare/valid.json +22 -0
- package/tests/fixtures/product/excreta/invalid.json +62 -0
- package/tests/fixtures/product/excreta/valid.json +62 -0
- package/tests/fixtures/product/excreta/warning.json +53 -0
- package/tests/fixtures/product/excreta/with-system/invalid.json +79 -0
- package/tests/fixtures/product/excreta/with-system/valid.json +88 -0
- package/tests/fixtures/product/excreta/with-system/warning.json +70 -0
- package/tests/fixtures/product/fu_ha/invalid.json +49 -0
- package/tests/fixtures/product/fu_ha/valid.json +49 -0
- package/tests/fixtures/product/primary/invalid.json +22 -0
- package/tests/fixtures/product/primary/valid.json +22 -0
- package/tests/fixtures/product/value/valid.json +26 -0
- package/tests/fixtures/product/value/value-0/error.json +40 -0
- package/tests/fixtures/product/value/value-empty/warning.json +23 -0
- package/tests/fixtures/product/yield/invalid.json +54 -0
- package/tests/fixtures/product/yield/no-value.json +75 -0
- package/tests/fixtures/product/yield/valid.json +54 -0
- package/tests/fixtures/property/default-value/valid-allowed-exception.json +61 -0
- package/tests/fixtures/property/default-value/valid.json +61 -0
- package/tests/fixtures/property/default-value/warning.json +61 -0
- package/tests/fixtures/property/termType/invalid.json +60 -0
- package/tests/fixtures/property/termType/valid.json +60 -0
- package/tests/fixtures/property/value-min-max/invalid.json +77 -0
- package/tests/fixtures/property/value-min-max/valid-skip-maximum.json +57 -0
- package/tests/fixtures/property/value-min-max/valid.json +78 -0
- package/tests/fixtures/property/valueType/invalid.json +79 -0
- package/tests/fixtures/property/valueType/valid.json +79 -0
- package/tests/fixtures/property/volatileSolidsContent/invalid.json +99 -0
- package/tests/fixtures/property/volatileSolidsContent/valid.json +99 -0
- package/tests/fixtures/shared/coordinates/invalid.json +18 -0
- package/tests/fixtures/shared/coordinates/valid.json +18 -0
- package/tests/fixtures/shared/data-duplicates/valid.json +113 -0
- package/tests/fixtures/shared/data-duplicates/warning.json +172 -0
- package/tests/fixtures/shared/duplicated-term-units/invalid-animalProduct.json +61 -0
- package/tests/fixtures/shared/duplicated-term-units/invalid-organicFertiliser.json +61 -0
- package/tests/fixtures/shared/duplicated-term-units/valid.json +49 -0
- package/tests/fixtures/shared/list-country-region/invalid.json +54 -0
- package/tests/fixtures/shared/list-country-region/valid.json +54 -0
- package/tests/fixtures/shared/list-percent-value/invalid.json +49 -0
- package/tests/fixtures/shared/list-percent-value/valid.json +52 -0
- package/tests/fixtures/shared/list-valueType/invalid.json +49 -0
- package/tests/fixtures/shared/list-valueType/valid.json +49 -0
- package/tests/fixtures/shared/list-values-sum-100/management/with-properties/valid.json +91 -0
- package/tests/fixtures/shared/list-values-sum-100/measurements/missing-soil.json +46 -0
- package/tests/fixtures/shared/list-values-sum-100/measurements/no-depth-high-value.json +63 -0
- package/tests/fixtures/shared/list-values-sum-100/measurements/no-depth-valid.json +40 -0
- package/tests/fixtures/shared/list-values-sum-100/measurements/with-depth-high-value.json +71 -0
- package/tests/fixtures/shared/list-values-sum-100/practices/total-100.json +61 -0
- package/tests/fixtures/shared/list-values-sum-100/practices/total-110.json +61 -0
- package/tests/fixtures/shared/list-values-sum-100/practices/total-90.json +61 -0
- package/tests/fixtures/shared/min-max/value-above.json +31 -0
- package/tests/fixtures/shared/min-max/value-below.json +31 -0
- package/tests/fixtures/shared/min-max/value-valid.json +45 -0
- package/tests/fixtures/shared/model/emissions/invalid.json +102 -0
- package/tests/fixtures/shared/model/emissions/valid-variable-tolerance.json +180 -0
- package/tests/fixtures/shared/model/emissions/valid.json +102 -0
- package/tests/fixtures/shared/model/impacts/invalid.json +75 -0
- package/tests/fixtures/shared/model/impacts/valid.json +75 -0
- package/tests/fixtures/shared/model/inputs/valid-no-value.json +84 -0
- package/tests/fixtures/shared/model/inputs/valid.json +87 -0
- package/tests/fixtures/shared/model/inputs/warning.json +87 -0
- package/tests/fixtures/shared/model/products/valid-no-value.json +88 -0
- package/tests/fixtures/shared/model/products/valid.json +91 -0
- package/tests/fixtures/shared/model/products/warning.json +91 -0
- package/tests/fixtures/shared/otherModel/invalid.json +69 -0
- package/tests/fixtures/shared/otherModel/valid.json +70 -0
- package/tests/fixtures/shared/properties-duplicate-values/invalid.json +61 -0
- package/tests/fixtures/shared/properties-duplicate-values/valid.json +57 -0
- package/tests/fixtures/shared/properties-same-length/invalid.json +62 -0
- package/tests/fixtures/shared/properties-same-length/valid.json +52 -0
- package/tests/fixtures/shared/unit-percent/invalid.json +34 -0
- package/tests/fixtures/shared/unit-percent/valid.json +60 -0
- package/tests/fixtures/shared/unit-percent/warning.json +52 -0
- package/tests/fixtures/site/cycles-linked-ia/invalid.json +129 -0
- package/tests/fixtures/site/cycles-linked-ia/valid.json +129 -0
- package/tests/fixtures/site/valid.json +138 -0
- package/tests/fixtures/source/valid.json +19 -0
- package/tests/fixtures/transformation/excretaManagement/invalid.json +47 -0
- package/tests/fixtures/transformation/excretaManagement/valid.json +59 -0
- package/tests/fixtures/transformation/inputs-products/invalid.json +43 -0
- package/tests/fixtures/transformation/inputs-products/valid.json +43 -0
- package/tests/fixtures/transformation/linked-emission/invalid.json +101 -0
- package/tests/fixtures/transformation/linked-emission/valid.json +107 -0
- package/tests/fixtures/transformation/previousTransformationId/invalid-no-previous.json +127 -0
- package/tests/fixtures/transformation/previousTransformationId/invalid-previous-input.json +100 -0
- package/tests/fixtures/transformation/previousTransformationId/invalid-product-input.json +106 -0
- package/tests/fixtures/transformation/previousTransformationId/invalid-wrong-order.json +136 -0
- package/tests/fixtures/transformation/previousTransformationId/valid.json +171 -0
- package/tests/integration/__init__.py +0 -0
- package/tests/integration/test_product.py +17 -0
- package/tests/test_gee.py +10 -0
- package/tests/test_utils.py +36 -0
- package/tests/test_validation.py +11 -0
- package/tests/utils.py +28 -0
- package/tests/validators/__init__.py +0 -0
- package/tests/validators/test_aggregated_cycle.py +44 -0
- package/tests/validators/test_aggregated_shared.py +63 -0
- package/tests/validators/test_animal.py +72 -0
- package/tests/validators/test_completeness.py +337 -0
- package/tests/validators/test_cycle.py +600 -0
- package/tests/validators/test_emission.py +170 -0
- package/tests/validators/test_impact_assessment.py +80 -0
- package/tests/validators/test_indicator.py +120 -0
- package/tests/validators/test_infrastructure.py +26 -0
- package/tests/validators/test_input.py +434 -0
- package/tests/validators/test_management.py +177 -0
- package/tests/validators/test_measurement.py +317 -0
- package/tests/validators/test_organisation.py +32 -0
- package/tests/validators/test_practice.py +490 -0
- package/tests/validators/test_product.py +291 -0
- package/tests/validators/test_property.py +143 -0
- package/tests/validators/test_shared.py +1139 -0
- package/tests/validators/test_site.py +151 -0
- package/tests/validators/test_source.py +15 -0
- package/tests/validators/test_transformation.py +151 -0
- package/tests/validators/test_validators.py +74 -0
- package/tsconfig.dist.json +9 -0
- package/tsconfig.json +25 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
from unittest.mock import patch
|
|
2
|
+
import os
|
|
3
|
+
import json
|
|
4
|
+
from hestia_earth.schema import SiteSiteType
|
|
5
|
+
|
|
6
|
+
from tests.utils import fixtures_path
|
|
7
|
+
from hestia_earth.validation.utils import _group_nodes
|
|
8
|
+
from hestia_earth.validation.validators.site import (
|
|
9
|
+
validate_site,
|
|
10
|
+
validate_site_dates,
|
|
11
|
+
validate_site_coordinates,
|
|
12
|
+
validate_siteType,
|
|
13
|
+
validate_cycle_dates,
|
|
14
|
+
validate_cycles_linked_ia,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
fixtures_folder = os.path.join(fixtures_path, "site")
|
|
18
|
+
class_path = "hestia_earth.validation.validators.site"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@patch(f"{class_path}.validate_boundary_area", return_value=True)
|
|
22
|
+
@patch(f"{class_path}.validate_region_size", return_value=True)
|
|
23
|
+
@patch(f"{class_path}.validate_coordinates", return_value=True)
|
|
24
|
+
def test_validate_site_valid(*args):
|
|
25
|
+
with open(f"{fixtures_folder}/valid.json") as f:
|
|
26
|
+
node = json.load(f)
|
|
27
|
+
results = validate_site(node)
|
|
28
|
+
assert all([r is True for r in results])
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_validate_site_dates_valid():
|
|
32
|
+
site = {"startDate": "2020-01-01", "endDate": "2020-01-02"}
|
|
33
|
+
assert validate_site_dates(site) is True
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_validate_site_dates_invalid():
|
|
37
|
+
site = {"startDate": "2020-01-02", "endDate": "2020-01-01"}
|
|
38
|
+
assert validate_site_dates(site) == {
|
|
39
|
+
"level": "error",
|
|
40
|
+
"dataPath": ".endDate",
|
|
41
|
+
"message": "must be greater than startDate",
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@patch(f"{class_path}.need_validate_coordinates", return_value=True)
|
|
46
|
+
def test_validate_site_coordinates(*args):
|
|
47
|
+
site = {"siteType": SiteSiteType.CROPLAND.value}
|
|
48
|
+
assert validate_site_coordinates(site)
|
|
49
|
+
|
|
50
|
+
site["siteType"] = SiteSiteType.SEA_OR_OCEAN.value
|
|
51
|
+
assert not validate_site_coordinates(site)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@patch(f"{class_path}.get_cached_data", return_value=25)
|
|
55
|
+
def test_validate_siteType_valid(*args):
|
|
56
|
+
site = {
|
|
57
|
+
"siteType": SiteSiteType.FOREST.value,
|
|
58
|
+
"latitude": 44.18753,
|
|
59
|
+
"longitude": -0.62521,
|
|
60
|
+
}
|
|
61
|
+
assert validate_siteType(site) is True
|
|
62
|
+
|
|
63
|
+
site = {
|
|
64
|
+
"siteType": SiteSiteType.CROPLAND.value,
|
|
65
|
+
"latitude": 44.5096,
|
|
66
|
+
"longitude": 0.40749,
|
|
67
|
+
}
|
|
68
|
+
assert validate_siteType(site) is True
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
@patch(f"{class_path}.get_cached_data", return_value=30)
|
|
72
|
+
def test_validate_siteType_invalid(*args):
|
|
73
|
+
site = {
|
|
74
|
+
"siteType": SiteSiteType.CROPLAND.value,
|
|
75
|
+
"latitude": 44.18753,
|
|
76
|
+
"longitude": -0.62521,
|
|
77
|
+
}
|
|
78
|
+
assert validate_siteType(site) == {
|
|
79
|
+
"level": "warning",
|
|
80
|
+
"dataPath": ".siteType",
|
|
81
|
+
"message": "The coordinates you have provided are not in a known cropland "
|
|
82
|
+
"area according to the MODIS Land Cover classification (MCD12Q1.006, LCCS2, bands 25, 35, 36).",
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
site = {
|
|
86
|
+
"siteType": SiteSiteType.FOREST.value,
|
|
87
|
+
"latitude": 44.5096,
|
|
88
|
+
"longitude": 0.40749,
|
|
89
|
+
}
|
|
90
|
+
assert validate_siteType(site) == {
|
|
91
|
+
"level": "warning",
|
|
92
|
+
"dataPath": ".siteType",
|
|
93
|
+
"message": "The coordinates you have provided are not in a known forest "
|
|
94
|
+
"area according to the MODIS Land Cover classification (MCD12Q1.006, LCCS2, bands 10, 20, 25).",
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def test_validate_cycle_dates_valid():
|
|
99
|
+
cycles = [{"endDate": "2020"}, {"endDate": "2021"}]
|
|
100
|
+
assert validate_cycle_dates(cycles) is True
|
|
101
|
+
|
|
102
|
+
cycles = [
|
|
103
|
+
{"startDate": "2020-01-01", "endDate": "2020-06-30"},
|
|
104
|
+
{"startDate": "2020-07-01", "endDate": "2020-12-31"},
|
|
105
|
+
]
|
|
106
|
+
assert validate_cycle_dates(cycles) is True
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def test_validate_cycle_dates_invalid():
|
|
110
|
+
cycles = [
|
|
111
|
+
{"id": "cycle1", "endDate": "2020"},
|
|
112
|
+
{"id": "cycle2", "endDate": "2020"},
|
|
113
|
+
{"id": "cycle3", "endDate": "2021"},
|
|
114
|
+
]
|
|
115
|
+
assert validate_cycle_dates(cycles) == {
|
|
116
|
+
"level": "error",
|
|
117
|
+
"dataPath": "",
|
|
118
|
+
"message": "multiple cycles on the same site cannot overlap",
|
|
119
|
+
"params": {"ids": ["cycle1", "cycle2"]},
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
cycles = [
|
|
123
|
+
{"id": "cycle1", "startDate": "2020-01-01", "endDate": "2020-07-02"},
|
|
124
|
+
{"id": "cycle2", "startDate": "2020-07-01", "endDate": "2020-12-31"},
|
|
125
|
+
{"id": "cycle3", "startDate": "2021-01-01", "endDate": "2021-12-31"},
|
|
126
|
+
]
|
|
127
|
+
assert validate_cycle_dates(cycles) == {
|
|
128
|
+
"level": "error",
|
|
129
|
+
"dataPath": "",
|
|
130
|
+
"message": "multiple cycles on the same site cannot overlap",
|
|
131
|
+
"params": {"ids": ["cycle1", "cycle2"]},
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def test_validate_cycles_linked_ia_valid():
|
|
136
|
+
with open(f"{fixtures_folder}/cycles-linked-ia/valid.json") as f:
|
|
137
|
+
nodes = json.load(f).get("nodes")
|
|
138
|
+
cycles = [c for c in nodes if c.get("type") == "Cycle"]
|
|
139
|
+
assert validate_cycles_linked_ia(cycles, _group_nodes(nodes)) is True
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def test_validate_cycles_linked_ia_invalid():
|
|
143
|
+
with open(f"{fixtures_folder}/cycles-linked-ia/invalid.json") as f:
|
|
144
|
+
nodes = json.load(f).get("nodes")
|
|
145
|
+
cycles = [c for c in nodes if c.get("type") == "Cycle"]
|
|
146
|
+
assert validate_cycles_linked_ia(cycles, _group_nodes(nodes)) == {
|
|
147
|
+
"level": "error",
|
|
148
|
+
"dataPath": "",
|
|
149
|
+
"message": "cycles linked together cannot be added to the same site",
|
|
150
|
+
"params": {"ids": ["2"]},
|
|
151
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import json
|
|
3
|
+
|
|
4
|
+
from tests.utils import fixtures_path
|
|
5
|
+
from hestia_earth.validation.validators.source import validate_source
|
|
6
|
+
|
|
7
|
+
fixtures_folder = os.path.join(fixtures_path, "source")
|
|
8
|
+
class_path = "hestia_earth.validation.validators.source"
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def test_validate_valid():
|
|
12
|
+
with open(f"{fixtures_path}/source/valid.json") as f:
|
|
13
|
+
node = json.load(f)
|
|
14
|
+
results = validate_source(node)
|
|
15
|
+
assert all([r is True for r in results])
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from unittest.mock import patch
|
|
3
|
+
|
|
4
|
+
from tests.utils import fixtures_path
|
|
5
|
+
from hestia_earth.validation.validators.transformation import (
|
|
6
|
+
validate_previous_transformation,
|
|
7
|
+
validate_transformation_excretaManagement,
|
|
8
|
+
validate_linked_emission,
|
|
9
|
+
validate_excreta_inputs_products,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
class_path = "hestia_earth.validation.validators.transformation"
|
|
13
|
+
fixtures_folder = f"{fixtures_path}/transformation"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def test_validate_previous_transformation_valid():
|
|
17
|
+
# no transformations should be valid
|
|
18
|
+
assert validate_previous_transformation({}, "transformations") is True
|
|
19
|
+
|
|
20
|
+
with open(f"{fixtures_folder}/previousTransformationId/valid.json") as f:
|
|
21
|
+
cycle = json.load(f)
|
|
22
|
+
assert validate_previous_transformation(cycle) is True
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_validate_previous_transformation_invalid():
|
|
26
|
+
with open(
|
|
27
|
+
f"{fixtures_folder}/previousTransformationId/invalid-wrong-order.json"
|
|
28
|
+
) as f:
|
|
29
|
+
cycle = json.load(f)
|
|
30
|
+
assert validate_previous_transformation(cycle) == {
|
|
31
|
+
"level": "error",
|
|
32
|
+
"dataPath": ".transformations[1].previousTransformationId",
|
|
33
|
+
"message": "must point to a previous transformation in the list",
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
with open(
|
|
37
|
+
f"{fixtures_folder}/previousTransformationId/invalid-no-previous.json"
|
|
38
|
+
) as f:
|
|
39
|
+
cycle = json.load(f)
|
|
40
|
+
assert validate_previous_transformation(cycle) == {
|
|
41
|
+
"level": "error",
|
|
42
|
+
"dataPath": ".transformations[1].previousTransformationId",
|
|
43
|
+
"message": "must point to a previous transformation in the list",
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
with open(
|
|
47
|
+
f"{fixtures_folder}/previousTransformationId/invalid-product-input.json"
|
|
48
|
+
) as f:
|
|
49
|
+
cycle = json.load(f)
|
|
50
|
+
assert validate_previous_transformation(cycle) == {
|
|
51
|
+
"level": "error",
|
|
52
|
+
"dataPath": ".transformations[1].inputs[0].value",
|
|
53
|
+
"message": "must be equal to previous product multiplied by the share",
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
with open(
|
|
57
|
+
f"{fixtures_folder}/previousTransformationId/invalid-previous-input.json"
|
|
58
|
+
) as f:
|
|
59
|
+
cycle = json.load(f)
|
|
60
|
+
assert validate_previous_transformation(cycle) == [
|
|
61
|
+
{
|
|
62
|
+
"level": "error",
|
|
63
|
+
"dataPath": ".transformations[0]",
|
|
64
|
+
"message": "at least one Input must be a Product of the Cycle",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"level": "error",
|
|
68
|
+
"dataPath": ".transformations[1]",
|
|
69
|
+
"message": "at least one Input must be a Product of the previous Transformation",
|
|
70
|
+
},
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def test_validate_transformation_excretaManagement_valid():
|
|
75
|
+
# no transformations should be valid
|
|
76
|
+
assert validate_transformation_excretaManagement({}, "transformations")
|
|
77
|
+
|
|
78
|
+
with open(f"{fixtures_folder}/excretaManagement/valid.json") as f:
|
|
79
|
+
cycle = json.load(f)
|
|
80
|
+
assert validate_transformation_excretaManagement(cycle) is True
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def test_validate_transformation_excretaManagement_invalid():
|
|
84
|
+
with open(f"{fixtures_folder}/excretaManagement/invalid.json") as f:
|
|
85
|
+
cycle = json.load(f)
|
|
86
|
+
assert validate_transformation_excretaManagement(cycle) == {
|
|
87
|
+
"level": "error",
|
|
88
|
+
"dataPath": ".transformations[0].practices",
|
|
89
|
+
"message": "an excreta input is required when using an excretaManagement practice",
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def test_validate_linked_emission_valid():
|
|
94
|
+
# no emissions should be valid
|
|
95
|
+
assert validate_linked_emission({}, "transformations") is True
|
|
96
|
+
|
|
97
|
+
with open(f"{fixtures_folder}/linked-emission/valid.json") as f:
|
|
98
|
+
data = json.load(f)
|
|
99
|
+
assert validate_linked_emission(data, "transformations") is True
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def test_validate_linked_emission_invalid():
|
|
103
|
+
with open(f"{fixtures_folder}/linked-emission/invalid.json") as f:
|
|
104
|
+
data = json.load(f)
|
|
105
|
+
assert validate_linked_emission(data, "transformations") == {
|
|
106
|
+
"level": "warning",
|
|
107
|
+
"dataPath": ".transformations[0].emissions[0]",
|
|
108
|
+
"message": "should be linked to an emission in the Cycle",
|
|
109
|
+
"params": {
|
|
110
|
+
"term": {
|
|
111
|
+
"@type": "Term",
|
|
112
|
+
"@id": "ch4ToAirEntericFermentation",
|
|
113
|
+
"termType": "emission",
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def test_validate_excreta_inputs_products_valid():
|
|
120
|
+
# no transformations should be valid
|
|
121
|
+
assert validate_excreta_inputs_products([]) is True
|
|
122
|
+
|
|
123
|
+
with open(f"{fixtures_folder}/inputs-products/valid.json") as f:
|
|
124
|
+
data = json.load(f)
|
|
125
|
+
assert validate_excreta_inputs_products(data) is True
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def fake_download_excreta(term_id: str, *args):
|
|
129
|
+
return {
|
|
130
|
+
"processedExcretaKgVs": {},
|
|
131
|
+
"excretaBeefCattleExceptFeedlotFedKgMass": {"subClassOf": [{}]},
|
|
132
|
+
}[term_id]
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
@patch(f"{class_path}.download_hestia", side_effect=fake_download_excreta)
|
|
136
|
+
def test_validate_excreta_inputs_products_invalid(*args):
|
|
137
|
+
with open(f"{fixtures_folder}/inputs-products/invalid.json") as f:
|
|
138
|
+
data = json.load(f)
|
|
139
|
+
assert validate_excreta_inputs_products(data) == {
|
|
140
|
+
"level": "error",
|
|
141
|
+
"dataPath": ".transformations[0].products[1]",
|
|
142
|
+
"message": "must be included as an Input",
|
|
143
|
+
"params": {
|
|
144
|
+
"term": {
|
|
145
|
+
"@type": "Term",
|
|
146
|
+
"@id": "excretaBeefCattleExceptFeedlotFedKgMass",
|
|
147
|
+
"termType": "excreta",
|
|
148
|
+
},
|
|
149
|
+
"expected": ["excretaDairyCattle"],
|
|
150
|
+
},
|
|
151
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
from unittest.mock import patch
|
|
2
|
+
import json
|
|
3
|
+
from hestia_earth.schema import NodeType
|
|
4
|
+
|
|
5
|
+
from tests.utils import fixtures_path
|
|
6
|
+
from hestia_earth.validation.validators import validate_node, _should_run
|
|
7
|
+
|
|
8
|
+
class_path = "hestia_earth.validation.validators"
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def test_should_run():
|
|
12
|
+
ntype = NodeType.CYCLE.value
|
|
13
|
+
node = {"@type": ntype, "@id": "cycle"}
|
|
14
|
+
assert not _should_run(ntype, node)
|
|
15
|
+
|
|
16
|
+
node = {"@type": ntype, "@id": "cycle", "name": "Cycle 1"}
|
|
17
|
+
assert not _should_run(ntype, node)
|
|
18
|
+
|
|
19
|
+
node = {"@type": ntype, "@id": "cycle", "name": "Cycle 1", "endDate": "2020-01-01"}
|
|
20
|
+
assert _should_run(ntype, node) is True
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@patch(f"{class_path}.validate_site")
|
|
24
|
+
def test_validate_node_type_validation(mock_validate_site):
|
|
25
|
+
node = {
|
|
26
|
+
"type": NodeType.SITE.value,
|
|
27
|
+
"id": "id",
|
|
28
|
+
"siteType": "cropland",
|
|
29
|
+
"country": {"@id": "GADM-GBR"},
|
|
30
|
+
}
|
|
31
|
+
validate_node()(node)
|
|
32
|
+
mock_validate_site.assert_called_once()
|
|
33
|
+
|
|
34
|
+
# no validation on existing nodes
|
|
35
|
+
mock_validate_site.reset_mock()
|
|
36
|
+
node = {"@type": NodeType.SITE.value}
|
|
37
|
+
validate_node()(node)
|
|
38
|
+
mock_validate_site.assert_not_called()
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def test_validate_node_no_validation():
|
|
42
|
+
# no validation on uploaded Actor
|
|
43
|
+
node = {"type": NodeType.ACTOR.value}
|
|
44
|
+
assert validate_node([])(node) == []
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@patch(f"{class_path}.validate_cycle")
|
|
48
|
+
@patch(f"{class_path}.validate_impact_assessment")
|
|
49
|
+
@patch(f"{class_path}.validate_site")
|
|
50
|
+
def test_validate_nested(
|
|
51
|
+
mock_validate_site, mock_validate_impact_assessment, mock_validate_cycle
|
|
52
|
+
):
|
|
53
|
+
with open(f"{fixtures_path}/impactAssessment/valid.json") as f:
|
|
54
|
+
node = json.load(f)
|
|
55
|
+
assert validate_node()(node) == []
|
|
56
|
+
assert mock_validate_cycle.call_count == 1
|
|
57
|
+
assert mock_validate_impact_assessment.call_count == 1
|
|
58
|
+
assert mock_validate_site.call_count == 2
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@patch(f"{class_path}.validate_cycle")
|
|
62
|
+
@patch(f"{class_path}.validate_impact_assessment")
|
|
63
|
+
@patch(f"{class_path}.validate_site")
|
|
64
|
+
def test_validate_nested_aggregated(
|
|
65
|
+
mock_validate_site, mock_validate_impact_assessment, mock_validate_cycle
|
|
66
|
+
):
|
|
67
|
+
with open(f"{fixtures_path}/impactAssessment/valid.json") as f:
|
|
68
|
+
node = json.load(f)
|
|
69
|
+
|
|
70
|
+
node["aggregated"] = True
|
|
71
|
+
assert validate_node()(node) == []
|
|
72
|
+
assert mock_validate_cycle.call_count == 0
|
|
73
|
+
assert mock_validate_impact_assessment.call_count == 1
|
|
74
|
+
assert mock_validate_site.call_count == 0
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "es5",
|
|
4
|
+
"module": "commonjs",
|
|
5
|
+
"stripInternal": true,
|
|
6
|
+
"emitDecoratorMetadata": true,
|
|
7
|
+
"experimentalDecorators": true,
|
|
8
|
+
"removeComments": false,
|
|
9
|
+
"noImplicitAny": false,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"lib": ["es2019"],
|
|
12
|
+
"baseUrl": ".",
|
|
13
|
+
"rootDir": "./src",
|
|
14
|
+
"outDir": "./dist",
|
|
15
|
+
"sourceMap": true,
|
|
16
|
+
"declaration": true,
|
|
17
|
+
"downlevelIteration": true,
|
|
18
|
+
"resolveJsonModule": true
|
|
19
|
+
},
|
|
20
|
+
"include": ["src/**/*.ts"],
|
|
21
|
+
"exclude": ["node_modules"],
|
|
22
|
+
"atom": {
|
|
23
|
+
"rewriteTsconfig": false
|
|
24
|
+
}
|
|
25
|
+
}
|