@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,291 @@
|
|
|
1
|
+
from unittest.mock import patch
|
|
2
|
+
import json
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
from tests.utils import fixtures_path
|
|
6
|
+
from hestia_earth.validation.validators.product import (
|
|
7
|
+
validate_economicValueShare,
|
|
8
|
+
validate_value_empty,
|
|
9
|
+
validate_value_0,
|
|
10
|
+
validate_primary,
|
|
11
|
+
validate_product_ha_functional_unit_ha,
|
|
12
|
+
validate_product_yield,
|
|
13
|
+
validate_excreta_product,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class_path = "hestia_earth.validation.validators.product"
|
|
18
|
+
distribution_class_path = "hestia_earth.validation.validators.distribution"
|
|
19
|
+
fixtures_folder = os.path.join(fixtures_path, "product")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def test_validate_economicValueShare_valid():
|
|
23
|
+
# no products should be valid
|
|
24
|
+
assert validate_economicValueShare([]) is True
|
|
25
|
+
|
|
26
|
+
with open(f"{fixtures_folder}/economicValueShare/valid.json") as f:
|
|
27
|
+
data = json.load(f)
|
|
28
|
+
assert validate_economicValueShare(data.get("nodes")) is True
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_validate_economicValueShare_invalid():
|
|
32
|
+
with open(f"{fixtures_folder}/economicValueShare/invalid.json") as f:
|
|
33
|
+
data = json.load(f)
|
|
34
|
+
assert validate_economicValueShare(data.get("nodes")) == {
|
|
35
|
+
"level": "error",
|
|
36
|
+
"dataPath": ".products",
|
|
37
|
+
"message": "economicValueShare should sum to 100 or less across all products",
|
|
38
|
+
"params": {"sum": 110},
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_validate_value_empty_valid():
|
|
43
|
+
# no products should be valid
|
|
44
|
+
assert validate_value_empty([]) is True
|
|
45
|
+
|
|
46
|
+
with open(f"{fixtures_folder}/value/valid.json") as f:
|
|
47
|
+
data = json.load(f)
|
|
48
|
+
assert validate_value_empty(data.get("nodes")) is True
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def test_validate_value_empty_warning():
|
|
52
|
+
with open(f"{fixtures_folder}/value/value-empty/warning.json") as f:
|
|
53
|
+
data = json.load(f)
|
|
54
|
+
assert validate_value_empty(data.get("nodes")) == {
|
|
55
|
+
"level": "warning",
|
|
56
|
+
"dataPath": ".products[1]",
|
|
57
|
+
"message": "may not be 0",
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_validate_value_0_valid():
|
|
62
|
+
# no products should be valid
|
|
63
|
+
assert validate_value_0([]) is True
|
|
64
|
+
|
|
65
|
+
with open(f"{fixtures_folder}/value/valid.json") as f:
|
|
66
|
+
data = json.load(f)
|
|
67
|
+
assert validate_value_0(data.get("nodes")) is True
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_validate_value_0_error():
|
|
71
|
+
with open(f"{fixtures_folder}/value/value-0/error.json") as f:
|
|
72
|
+
data = json.load(f)
|
|
73
|
+
assert validate_value_0(data.get("nodes")) == [
|
|
74
|
+
{
|
|
75
|
+
"level": "error",
|
|
76
|
+
"dataPath": ".products[1].value",
|
|
77
|
+
"message": "economicValueShare must be 0 for product value 0",
|
|
78
|
+
"params": {
|
|
79
|
+
"value": 100,
|
|
80
|
+
"term": {
|
|
81
|
+
"@type": "Term",
|
|
82
|
+
"name": "Generic Crop, seed",
|
|
83
|
+
"@id": "genericCropSeed",
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"level": "error",
|
|
89
|
+
"dataPath": ".products[1].value",
|
|
90
|
+
"message": "revenue must be 0 for product value 0",
|
|
91
|
+
"params": {
|
|
92
|
+
"value": 100,
|
|
93
|
+
"term": {
|
|
94
|
+
"@type": "Term",
|
|
95
|
+
"name": "Generic Crop, seed",
|
|
96
|
+
"@id": "genericCropSeed",
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
]
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def test_validate_primary_valid():
|
|
104
|
+
# no products should be valid
|
|
105
|
+
assert validate_primary([]) is True
|
|
106
|
+
|
|
107
|
+
with open(f"{fixtures_folder}/primary/valid.json") as f:
|
|
108
|
+
data = json.load(f)
|
|
109
|
+
assert validate_primary(data.get("nodes")) is True
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def test_validate_primary_error():
|
|
113
|
+
with open(f"{fixtures_folder}/primary/invalid.json") as f:
|
|
114
|
+
data = json.load(f)
|
|
115
|
+
assert validate_primary(data.get("nodes")) == {
|
|
116
|
+
"level": "error",
|
|
117
|
+
"dataPath": ".products",
|
|
118
|
+
"message": "only 1 primary product allowed",
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def test_validate_product_ha_functional_unit_ha_valid():
|
|
123
|
+
# no products should be valid
|
|
124
|
+
assert validate_product_ha_functional_unit_ha({"products": []}, "products") is True
|
|
125
|
+
|
|
126
|
+
with open(f"{fixtures_folder}/fu_ha/valid.json") as f:
|
|
127
|
+
cycle = json.load(f)
|
|
128
|
+
assert validate_product_ha_functional_unit_ha(cycle, "products") is True
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def test_validate_product_ha_functional_unit_ha_error():
|
|
132
|
+
with open(f"{fixtures_folder}/fu_ha/invalid.json") as f:
|
|
133
|
+
cycle = json.load(f)
|
|
134
|
+
assert validate_product_ha_functional_unit_ha(cycle, "products") == {
|
|
135
|
+
"level": "error",
|
|
136
|
+
"dataPath": ".products[0].value",
|
|
137
|
+
"message": "must be below or equal to 1 for unit in ha",
|
|
138
|
+
"params": {"term": {"@type": "Term", "@id": "adzukiBeanVines", "units": "ha"}},
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
MU = 8000
|
|
143
|
+
SD = 1000
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
@patch(f"{distribution_class_path}.get_post_yield", return_value=(MU, SD))
|
|
147
|
+
def test_validate_product_yield_valid(*args):
|
|
148
|
+
# no products should be valid
|
|
149
|
+
assert validate_product_yield({"products": []}, {}, "products") is True
|
|
150
|
+
|
|
151
|
+
# no value on products should be valid
|
|
152
|
+
with open(f"{fixtures_folder}/yield/no-value.json") as f:
|
|
153
|
+
cycle = json.load(f)
|
|
154
|
+
assert validate_product_yield(cycle, cycle.get("site")) is True
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
@patch(f"{distribution_class_path}.get_post_yield", return_value=(MU, SD))
|
|
158
|
+
def test_validate_product_yield_valid_with_posterior(*args):
|
|
159
|
+
with open(f"{fixtures_folder}/yield/valid.json") as f:
|
|
160
|
+
cycle = json.load(f)
|
|
161
|
+
assert validate_product_yield(cycle, cycle.get("site")) is True
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
@patch(f"{distribution_class_path}.get_post_yield", return_value=(MU, SD))
|
|
165
|
+
def test_validate_product_yield_invalid_with_posterior(*args):
|
|
166
|
+
with open(f"{fixtures_folder}/yield/invalid.json") as f:
|
|
167
|
+
cycle = json.load(f)
|
|
168
|
+
assert validate_product_yield(cycle, cycle.get("site")) == {
|
|
169
|
+
"level": "warning",
|
|
170
|
+
"dataPath": ".products[0].value",
|
|
171
|
+
"message": "is outside confidence interval",
|
|
172
|
+
"params": {
|
|
173
|
+
"term": {"@type": "Term", "termType": "crop", "@id": "wheatGrain"},
|
|
174
|
+
"country": {"@type": "Term", "@id": "GADM-GBR"},
|
|
175
|
+
"outliers": [1000],
|
|
176
|
+
"threshold": 0.95,
|
|
177
|
+
"min": 6040,
|
|
178
|
+
"max": 9960,
|
|
179
|
+
},
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
@patch(f"{distribution_class_path}.get_prior_yield", return_value=(MU, SD))
|
|
184
|
+
@patch(f"{distribution_class_path}.get_post_yield", return_value=(None, None))
|
|
185
|
+
def test_validate_product_yield_valid_with_prior_no_posterior(*args):
|
|
186
|
+
with open(f"{fixtures_folder}/yield/valid.json") as f:
|
|
187
|
+
cycle = json.load(f)
|
|
188
|
+
assert validate_product_yield(cycle, cycle.get("site")) is True
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
@patch(f"{distribution_class_path}.get_prior_yield", return_value=(MU, SD))
|
|
192
|
+
@patch(f"{distribution_class_path}.get_post_yield", return_value=(None, None))
|
|
193
|
+
def test_validate_product_yield_invalid_with_prior_no_posterior(*args):
|
|
194
|
+
with open(f"{fixtures_folder}/yield/invalid.json") as f:
|
|
195
|
+
cycle = json.load(f)
|
|
196
|
+
assert validate_product_yield(cycle, cycle.get("site")) == {
|
|
197
|
+
"level": "warning",
|
|
198
|
+
"dataPath": ".products[0].value",
|
|
199
|
+
"message": "is outside confidence interval",
|
|
200
|
+
"params": {
|
|
201
|
+
"term": {"@type": "Term", "termType": "crop", "@id": "wheatGrain"},
|
|
202
|
+
"country": {"@type": "Term", "@id": "GADM-GBR"},
|
|
203
|
+
"outliers": [1000],
|
|
204
|
+
"threshold": 0.95,
|
|
205
|
+
"min": 6040,
|
|
206
|
+
"max": 9960,
|
|
207
|
+
},
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
@patch(f"{distribution_class_path}.get_prior_yield", return_value=(None, None))
|
|
212
|
+
@patch(f"{distribution_class_path}.get_post_yield", return_value=(None, None))
|
|
213
|
+
def test_validate_product_yield_valid_no_prior_no_posterior(*args):
|
|
214
|
+
with open(f"{fixtures_folder}/yield/valid.json") as f:
|
|
215
|
+
cycle = json.load(f)
|
|
216
|
+
assert validate_product_yield(cycle, cycle.get("site")) is True
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
@patch(f"{distribution_class_path}.get_post_yield", return_value=Exception)
|
|
220
|
+
def test_validate_product_yield_handle_exception(*args):
|
|
221
|
+
with open(f"{fixtures_folder}/yield/invalid.json") as f:
|
|
222
|
+
cycle = json.load(f)
|
|
223
|
+
assert validate_product_yield(cycle, cycle.get("site")) is True
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def test_validate_excreta_product_valid():
|
|
227
|
+
# no products should be valid
|
|
228
|
+
assert validate_excreta_product({}, "products") is True
|
|
229
|
+
|
|
230
|
+
with open(f"{fixtures_folder}/excreta/valid.json") as f:
|
|
231
|
+
data = json.load(f)
|
|
232
|
+
assert validate_excreta_product(data) is True
|
|
233
|
+
|
|
234
|
+
with open(f"{fixtures_folder}/excreta/with-system/valid.json") as f:
|
|
235
|
+
data = json.load(f)
|
|
236
|
+
assert validate_excreta_product(data) is True
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
def test_validate_excreta_product_invalid():
|
|
240
|
+
with open(f"{fixtures_folder}/excreta/invalid.json") as f:
|
|
241
|
+
data = json.load(f)
|
|
242
|
+
assert validate_excreta_product(data) == {
|
|
243
|
+
"level": "error",
|
|
244
|
+
"dataPath": ".products[1].term.@id",
|
|
245
|
+
"message": "is not an allowed excreta product",
|
|
246
|
+
"params": {"current": "excretaCamelsKgN", "expected": ["excretaPoultryKgN"]},
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
with open(f"{fixtures_folder}/excreta/with-system/invalid.json") as f:
|
|
250
|
+
data = json.load(f)
|
|
251
|
+
assert validate_excreta_product(data) == {
|
|
252
|
+
"level": "error",
|
|
253
|
+
"dataPath": ".products[1].term.@id",
|
|
254
|
+
"message": "is not an allowed excreta product",
|
|
255
|
+
"params": {
|
|
256
|
+
"current": "excretaBeefCattleExceptFeedlotFedKgN",
|
|
257
|
+
"expected": ["excretaBeefCattleFeedlotFedKgN"],
|
|
258
|
+
},
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
def test_validate_excreta_product_warning():
|
|
263
|
+
with open(f"{fixtures_folder}/excreta/warning.json") as f:
|
|
264
|
+
data = json.load(f)
|
|
265
|
+
assert validate_excreta_product(data) == {
|
|
266
|
+
"level": "warning",
|
|
267
|
+
"dataPath": ".products[0]",
|
|
268
|
+
"message": "should add an excreta product",
|
|
269
|
+
"params": {
|
|
270
|
+
"expected": [
|
|
271
|
+
"excretaPoultryKgMass",
|
|
272
|
+
"excretaPoultryKgN",
|
|
273
|
+
"excretaPoultryKgVs",
|
|
274
|
+
]
|
|
275
|
+
},
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
with open(f"{fixtures_folder}/excreta/with-system/warning.json") as f:
|
|
279
|
+
data = json.load(f)
|
|
280
|
+
assert validate_excreta_product(data) == {
|
|
281
|
+
"level": "warning",
|
|
282
|
+
"dataPath": ".products[0]",
|
|
283
|
+
"message": "should add an excreta product",
|
|
284
|
+
"params": {
|
|
285
|
+
"expected": [
|
|
286
|
+
"excretaBeefCattleFeedlotFedKgMass",
|
|
287
|
+
"excretaBeefCattleFeedlotFedKgN",
|
|
288
|
+
"excretaBeefCattleFeedlotFedKgVs",
|
|
289
|
+
]
|
|
290
|
+
},
|
|
291
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import json
|
|
3
|
+
|
|
4
|
+
from tests.utils import fixtures_path
|
|
5
|
+
from hestia_earth.validation.validators.property import (
|
|
6
|
+
validate_property_valueType,
|
|
7
|
+
validate_term_type,
|
|
8
|
+
validate_default_value,
|
|
9
|
+
validate_volatileSolidsContent,
|
|
10
|
+
validate_value_min_max,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
fixtures_folder = os.path.join(fixtures_path, "property")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def test_validate_property_valueType_valid():
|
|
17
|
+
# no properties should be valid
|
|
18
|
+
assert validate_property_valueType({}, "products") is True
|
|
19
|
+
|
|
20
|
+
with open(f"{fixtures_folder}/valueType/valid.json") as f:
|
|
21
|
+
data = json.load(f)
|
|
22
|
+
assert validate_property_valueType(data, "products") is True
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_validate_property_valueType_invalid():
|
|
26
|
+
with open(f"{fixtures_folder}/valueType/invalid.json") as f:
|
|
27
|
+
data = json.load(f)
|
|
28
|
+
assert validate_property_valueType(data, "products") == [
|
|
29
|
+
{
|
|
30
|
+
"level": "error",
|
|
31
|
+
"dataPath": ".products[1].properties[0].value",
|
|
32
|
+
"message": "the property value type is incorrect",
|
|
33
|
+
"params": {"expected": "number"},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"level": "error",
|
|
37
|
+
"dataPath": ".products[1].properties[1].value",
|
|
38
|
+
"message": "the property value type is incorrect",
|
|
39
|
+
"params": {"expected": "boolean"},
|
|
40
|
+
},
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def test_validate_term_type_valid():
|
|
45
|
+
# no properties should be valid
|
|
46
|
+
assert validate_term_type({}, "products") is True
|
|
47
|
+
|
|
48
|
+
with open(f"{fixtures_folder}/termType/valid.json") as f:
|
|
49
|
+
data = json.load(f)
|
|
50
|
+
assert validate_term_type(data, "products") is True
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def test_validate_term_type_invalid():
|
|
54
|
+
with open(f"{fixtures_folder}/termType/invalid.json") as f:
|
|
55
|
+
data = json.load(f)
|
|
56
|
+
assert validate_term_type(data, "products") == {
|
|
57
|
+
"level": "error",
|
|
58
|
+
"dataPath": ".products[0].properties[0].term.termType",
|
|
59
|
+
"message": "can not be used on this termType",
|
|
60
|
+
"params": {"current": "crop", "expected": ["liveAnimal", "liveAquaticSpecies"]},
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def test_validate_default_value_valid():
|
|
65
|
+
with open(f"{fixtures_folder}/default-value/valid.json") as f:
|
|
66
|
+
node = json.load(f)
|
|
67
|
+
assert validate_default_value(node, "inputs") is True
|
|
68
|
+
|
|
69
|
+
with open(f"{fixtures_folder}/default-value/valid-allowed-exception.json") as f:
|
|
70
|
+
node = json.load(f)
|
|
71
|
+
assert validate_default_value(node, "inputs") is True
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def test_validate_default_value_warning():
|
|
75
|
+
with open(f"{fixtures_folder}/default-value/warning.json") as f:
|
|
76
|
+
node = json.load(f)
|
|
77
|
+
assert validate_default_value(node, "inputs") == {
|
|
78
|
+
"level": "warning",
|
|
79
|
+
"dataPath": ".inputs[0].properties[0].value",
|
|
80
|
+
"message": "should be within percentage of default value",
|
|
81
|
+
"params": {
|
|
82
|
+
"current": 67.0,
|
|
83
|
+
"default": 52.87673036,
|
|
84
|
+
"percentage": 26.71,
|
|
85
|
+
"threshold": 0.25,
|
|
86
|
+
},
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def test_validate_volatileSolidsContent_valid():
|
|
91
|
+
with open(f"{fixtures_folder}/volatileSolidsContent/valid.json") as f:
|
|
92
|
+
node = json.load(f)
|
|
93
|
+
assert validate_volatileSolidsContent(node, "inputs") is True
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def test_validate_volatileSolidsContent_error():
|
|
97
|
+
with open(f"{fixtures_folder}/volatileSolidsContent/invalid.json") as f:
|
|
98
|
+
node = json.load(f)
|
|
99
|
+
assert validate_volatileSolidsContent(node, "inputs") == [
|
|
100
|
+
{
|
|
101
|
+
"level": "error",
|
|
102
|
+
"dataPath": ".inputs[0].properties[0].value",
|
|
103
|
+
"message": "must be between 0 and 100",
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"level": "error",
|
|
107
|
+
"dataPath": ".inputs[1].properties[0].value",
|
|
108
|
+
"message": "must be above 0",
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"level": "error",
|
|
112
|
+
"dataPath": ".inputs[2].properties[0].value",
|
|
113
|
+
"message": "must be 100",
|
|
114
|
+
},
|
|
115
|
+
]
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def test_validate_value_min_max_valid():
|
|
119
|
+
with open(f"{fixtures_folder}/value-min-max/valid.json") as f:
|
|
120
|
+
node = json.load(f)
|
|
121
|
+
assert validate_value_min_max(node, "inputs") is True
|
|
122
|
+
|
|
123
|
+
with open(f"{fixtures_folder}/value-min-max/valid-skip-maximum.json") as f:
|
|
124
|
+
node = json.load(f)
|
|
125
|
+
assert validate_value_min_max(node, "inputs") is True
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def test_validate_value_min_max_invalid():
|
|
129
|
+
with open(f"{fixtures_folder}/value-min-max/invalid.json") as f:
|
|
130
|
+
node = json.load(f)
|
|
131
|
+
assert validate_value_min_max(node, "inputs") == [
|
|
132
|
+
{
|
|
133
|
+
"level": "error",
|
|
134
|
+
"dataPath": ".inputs[0].properties[0].value",
|
|
135
|
+
"message": "must be between min and max",
|
|
136
|
+
"params": {"min": 20, "max": 80},
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"level": "error",
|
|
140
|
+
"dataPath": ".inputs[1].properties[0].value",
|
|
141
|
+
"message": "should be below 100.0",
|
|
142
|
+
},
|
|
143
|
+
]
|