sbom-cyclonedx 0.1.0 → 0.2.0
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.
- checksums.yaml +4 -4
- data/.gitignore +15 -0
- data/.gitlab-ci.yml +49 -0
- data/.rspec +3 -0
- data/.rubocop.yml +72 -0
- data/.vscode/settings.json +6 -0
- data/CHANGELOG.md +9 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/Gemfile +26 -0
- data/Gemfile.lock +179 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +36 -0
- data/Steepfile +14 -0
- data/bin/console +11 -0
- data/bin/rbs_spec +9 -0
- data/bin/setup +8 -0
- data/bom-1.6.schema.json +7334 -0
- data/lib/email_address_extension.rb +26 -0
- data/lib/sbom/cyclone_dx/enum.rb +2178 -0
- data/lib/sbom/cyclone_dx/field.rb +404 -0
- data/lib/sbom/cyclone_dx/pattern.rb +43 -0
- data/lib/sbom/cyclone_dx/record/advisory.rb +17 -0
- data/lib/sbom/cyclone_dx/record/annotation.rb +46 -0
- data/lib/sbom/cyclone_dx/record/attachment.rb +21 -0
- data/lib/sbom/cyclone_dx/record/base.rb +244 -0
- data/lib/sbom/cyclone_dx/record/cipher_suite.rb +23 -0
- data/lib/sbom/cyclone_dx/record/co2_measure.rb +18 -0
- data/lib/sbom/cyclone_dx/record/command.rb +18 -0
- data/lib/sbom/cyclone_dx/record/commit.rb +25 -0
- data/lib/sbom/cyclone_dx/record/component.rb +126 -0
- data/lib/sbom/cyclone_dx/record/component_data.rb +46 -0
- data/lib/sbom/cyclone_dx/record/component_evidence.rb +68 -0
- data/lib/sbom/cyclone_dx/record/component_identity_evidence.rb +36 -0
- data/lib/sbom/cyclone_dx/record/composition.rb +33 -0
- data/lib/sbom/cyclone_dx/record/condition.rb +20 -0
- data/lib/sbom/cyclone_dx/record/copyright.rb +16 -0
- data/lib/sbom/cyclone_dx/record/crypto_properties.rb +137 -0
- data/lib/sbom/cyclone_dx/record/data_governance.rb +21 -0
- data/lib/sbom/cyclone_dx/record/data_governance_responsible_party.rb +22 -0
- data/lib/sbom/cyclone_dx/record/declarations.rb +193 -0
- data/lib/sbom/cyclone_dx/record/definitions.rb +17 -0
- data/lib/sbom/cyclone_dx/record/dependency.rb +21 -0
- data/lib/sbom/cyclone_dx/record/diff.rb +18 -0
- data/lib/sbom/cyclone_dx/record/energy_consumption.rb +31 -0
- data/lib/sbom/cyclone_dx/record/energy_measure.rb +18 -0
- data/lib/sbom/cyclone_dx/record/energy_provider.rb +31 -0
- data/lib/sbom/cyclone_dx/record/environmental_consideration.rb +20 -0
- data/lib/sbom/cyclone_dx/record/event.rb +31 -0
- data/lib/sbom/cyclone_dx/record/external_reference.rb +25 -0
- data/lib/sbom/cyclone_dx/record/fairness_assessment.rb +22 -0
- data/lib/sbom/cyclone_dx/record/formula.rb +29 -0
- data/lib/sbom/cyclone_dx/record/graphic.rb +19 -0
- data/lib/sbom/cyclone_dx/record/graphics_collection.rb +19 -0
- data/lib/sbom/cyclone_dx/record/hash_data.rb +18 -0
- data/lib/sbom/cyclone_dx/record/identifiable_action.rb +21 -0
- data/lib/sbom/cyclone_dx/record/input.rb +34 -0
- data/lib/sbom/cyclone_dx/record/input_output_ml_parameter.rb +17 -0
- data/lib/sbom/cyclone_dx/record/issue.rb +36 -0
- data/lib/sbom/cyclone_dx/record/license.rb +90 -0
- data/lib/sbom/cyclone_dx/record/license_choice.rb +35 -0
- data/lib/sbom/cyclone_dx/record/metadata.rb +55 -0
- data/lib/sbom/cyclone_dx/record/model_card.rb +89 -0
- data/lib/sbom/cyclone_dx/record/note.rb +20 -0
- data/lib/sbom/cyclone_dx/record/organizational_contact.rb +26 -0
- data/lib/sbom/cyclone_dx/record/organizational_entity.rb +28 -0
- data/lib/sbom/cyclone_dx/record/output.rb +34 -0
- data/lib/sbom/cyclone_dx/record/parameter.rb +20 -0
- data/lib/sbom/cyclone_dx/record/patch.rb +23 -0
- data/lib/sbom/cyclone_dx/record/performance_metric.rb +30 -0
- data/lib/sbom/cyclone_dx/record/postal_address.rb +34 -0
- data/lib/sbom/cyclone_dx/record/property.rb +18 -0
- data/lib/sbom/cyclone_dx/record/rating.rb +27 -0
- data/lib/sbom/cyclone_dx/record/release_notes.rb +44 -0
- data/lib/sbom/cyclone_dx/record/resource_reference_choice.rb +22 -0
- data/lib/sbom/cyclone_dx/record/risk.rb +18 -0
- data/lib/sbom/cyclone_dx/record/root.rb +63 -0
- data/lib/sbom/cyclone_dx/record/secured_by.rb +20 -0
- data/lib/sbom/cyclone_dx/record/service.rb +54 -0
- data/lib/sbom/cyclone_dx/record/service_data.rb +32 -0
- data/lib/sbom/cyclone_dx/record/signature.rb +85 -0
- data/lib/sbom/cyclone_dx/record/standard.rb +72 -0
- data/lib/sbom/cyclone_dx/record/step.rb +24 -0
- data/lib/sbom/cyclone_dx/record/swid.rb +29 -0
- data/lib/sbom/cyclone_dx/record/task.rb +56 -0
- data/lib/sbom/cyclone_dx/record/tools.rb +20 -0
- data/lib/sbom/cyclone_dx/record/trigger.rb +48 -0
- data/lib/sbom/cyclone_dx/record/version.rb +24 -0
- data/lib/sbom/cyclone_dx/record/volume.rb +33 -0
- data/lib/sbom/cyclone_dx/record/vulnerability.rb +119 -0
- data/lib/sbom/cyclone_dx/record/vulnerability_source.rb +20 -0
- data/lib/sbom/cyclone_dx/record/workflow.rb +59 -0
- data/lib/sbom/cyclone_dx/record/workspace.rb +45 -0
- data/lib/sbom/cyclone_dx/record.rb +12 -0
- data/lib/sbom/cyclone_dx/validator/array_validator.rb +66 -0
- data/lib/sbom/cyclone_dx/validator/base_validator.rb +43 -0
- data/lib/sbom/cyclone_dx/validator/boolean_validator.rb +16 -0
- data/lib/sbom/cyclone_dx/validator/date_time_validator.rb +29 -0
- data/lib/sbom/cyclone_dx/validator/email_address_validator.rb +31 -0
- data/lib/sbom/cyclone_dx/validator/float_validator.rb +30 -0
- data/lib/sbom/cyclone_dx/validator/integer_validator.rb +30 -0
- data/lib/sbom/cyclone_dx/validator/record_validator.rb +26 -0
- data/lib/sbom/cyclone_dx/validator/string_validator.rb +33 -0
- data/lib/sbom/cyclone_dx/validator/union_validator.rb +39 -0
- data/lib/sbom/cyclone_dx/validator/uri_validator.rb +32 -0
- data/lib/sbom/cyclone_dx/validator.rb +32 -0
- data/lib/sbom/cyclone_dx/version.rb +7 -0
- data/lib/sbom/cyclone_dx.rb +39 -0
- data/rbs_collection.lock.yaml +288 -0
- data/rbs_collection.yaml +31 -0
- data/sbom-cyclone_dx.gemspec +32 -0
- data/sig/email_address_extension.rbs +14 -0
- data/sig/sbom/cyclone_dx/enum.rbs +93 -0
- data/sig/sbom/cyclone_dx/field.rbs +434 -0
- data/sig/sbom/cyclone_dx/pattern.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/advisory.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/annotation.rbs +63 -0
- data/sig/sbom/cyclone_dx/record/attachment.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/base.rbs +62 -0
- data/sig/sbom/cyclone_dx/record/cipher_suite.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/co2_measure.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/command.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/commit.rbs +34 -0
- data/sig/sbom/cyclone_dx/record/component.rbs +203 -0
- data/sig/sbom/cyclone_dx/record/component_data.rbs +73 -0
- data/sig/sbom/cyclone_dx/record/component_evidence.rbs +115 -0
- data/sig/sbom/cyclone_dx/record/component_identity_evidence.rbs +53 -0
- data/sig/sbom/cyclone_dx/record/composition.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/condition.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/copyright.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/crypto_properties.rbs +268 -0
- data/sig/sbom/cyclone_dx/record/data_governance.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/data_governance_responsible_party.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/declarations.rbs +352 -0
- data/sig/sbom/cyclone_dx/record/definitions.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/dependency.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/diff.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/energy_consumption.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/energy_measure.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/energy_provider.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/environmental_consideration.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/event.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/external_reference.rbs +29 -0
- data/sig/sbom/cyclone_dx/record/fairness_assessment.rbs +29 -0
- data/sig/sbom/cyclone_dx/record/formula.rbs +34 -0
- data/sig/sbom/cyclone_dx/record/graphic.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/graphics_collection.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/hash_data.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/identifiable_action.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/input.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/input_output_ml_parameter.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/issue.rbs +53 -0
- data/sig/sbom/cyclone_dx/record/license.rbs +134 -0
- data/sig/sbom/cyclone_dx/record/license_choice.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/metadata.rbs +82 -0
- data/sig/sbom/cyclone_dx/record/model_card.rbs +143 -0
- data/sig/sbom/cyclone_dx/record/note.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/organizational_contact.rbs +29 -0
- data/sig/sbom/cyclone_dx/record/organizational_entity.rbs +34 -0
- data/sig/sbom/cyclone_dx/record/output.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/parameter.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/patch.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/performance_metric.rbs +43 -0
- data/sig/sbom/cyclone_dx/record/postal_address.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/property.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/rating.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/release_notes.rbs +64 -0
- data/sig/sbom/cyclone_dx/record/resource_reference_choice.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/risk.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/root.rbs +84 -0
- data/sig/sbom/cyclone_dx/record/secured_by.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/service.rbs +99 -0
- data/sig/sbom/cyclone_dx/record/service_data.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/signature.rbs +130 -0
- data/sig/sbom/cyclone_dx/record/standard.rbs +132 -0
- data/sig/sbom/cyclone_dx/record/step.rbs +29 -0
- data/sig/sbom/cyclone_dx/record/swid.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/task.rbs +84 -0
- data/sig/sbom/cyclone_dx/record/tools.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/trigger.rbs +69 -0
- data/sig/sbom/cyclone_dx/record/version.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/volume.rbs +49 -0
- data/sig/sbom/cyclone_dx/record/vulnerability.rbs +209 -0
- data/sig/sbom/cyclone_dx/record/vulnerability_source.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/workflow.rbs +94 -0
- data/sig/sbom/cyclone_dx/record/workspace.rbs +69 -0
- data/sig/sbom/cyclone_dx/record.rbs +161 -0
- data/sig/sbom/cyclone_dx/type.rbs +16 -0
- data/sig/sbom/cyclone_dx/validator/array_validator.rbs +31 -0
- data/sig/sbom/cyclone_dx/validator/base_validator.rbs +21 -0
- data/sig/sbom/cyclone_dx/validator/boolean_validator.rbs +9 -0
- data/sig/sbom/cyclone_dx/validator/date_time_validator.rbs +10 -0
- data/sig/sbom/cyclone_dx/validator/email_address_validator.rbs +10 -0
- data/sig/sbom/cyclone_dx/validator/float_validator.rbs +12 -0
- data/sig/sbom/cyclone_dx/validator/integer_validator.rbs +12 -0
- data/sig/sbom/cyclone_dx/validator/record_validator.rbs +12 -0
- data/sig/sbom/cyclone_dx/validator/string_validator.rbs +14 -0
- data/sig/sbom/cyclone_dx/validator/union_validator.rbs +24 -0
- data/sig/sbom/cyclone_dx/validator/uri_validator.rbs +10 -0
- data/sig/sbom/cyclone_dx/validator.rbs +66 -0
- data/sig/sbom/cyclone_dx.rbs +13 -0
- data/sig/types.rbs +45 -0
- data/spec/email_address_extension_spec.rb +27 -0
- data/spec/factories/factory_helper.rb +78 -0
- data/spec/factories/record/advisory_factory.rb +11 -0
- data/spec/factories/record/annotation_factory.rb +63 -0
- data/spec/factories/record/attachment_factory.rb +9 -0
- data/spec/factories/record/cipher_suite_factory.rb +26 -0
- data/spec/factories/record/co2_measure_factory.rb +9 -0
- data/spec/factories/record/command_factory.rb +10 -0
- data/spec/factories/record/commit_factory.rb +13 -0
- data/spec/factories/record/component_data_factory.rb +28 -0
- data/spec/factories/record/component_evidence_factory.rb +44 -0
- data/spec/factories/record/component_factory.rb +102 -0
- data/spec/factories/record/component_identity_evidence_factory.rb +25 -0
- data/spec/factories/record/composition_factory.rb +20 -0
- data/spec/factories/record/condition_factory.rb +11 -0
- data/spec/factories/record/copyright_factory.rb +9 -0
- data/spec/factories/record/crypto_properties_factory.rb +191 -0
- data/spec/factories/record/data_governance_factory.rb +11 -0
- data/spec/factories/record/data_governance_responsible_party_factory.rb +31 -0
- data/spec/factories/record/declarations_factory.rb +145 -0
- data/spec/factories/record/definitions_factory.rb +9 -0
- data/spec/factories/record/dependency_factory.rb +12 -0
- data/spec/factories/record/diff_factory.rb +24 -0
- data/spec/factories/record/energy_consumption_factory.rb +15 -0
- data/spec/factories/record/energy_measure_factory.rb +9 -0
- data/spec/factories/record/energy_provider_factory.rb +15 -0
- data/spec/factories/record/environmental_consideration_factory.rb +10 -0
- data/spec/factories/record/event_factory.rb +15 -0
- data/spec/factories/record/external_reference_factory.rb +13 -0
- data/spec/factories/record/fairness_assessment_factory.rb +12 -0
- data/spec/factories/record/formula_factory.rb +13 -0
- data/spec/factories/record/graphic_factory.rb +10 -0
- data/spec/factories/record/graphics_collection_factory.rb +10 -0
- data/spec/factories/record/hash_data_factory.rb +10 -0
- data/spec/factories/record/identifiable_action_factory.rb +11 -0
- data/spec/factories/record/input_factory.rb +36 -0
- data/spec/factories/record/input_output_ml_parameter_factory.rb +9 -0
- data/spec/factories/record/issue_factory.rb +22 -0
- data/spec/factories/record/license_choice_factory.rb +23 -0
- data/spec/factories/record/license_factory.rb +99 -0
- data/spec/factories/record/metadata_factory.rb +38 -0
- data/spec/factories/record/model_card_factory.rb +59 -0
- data/spec/factories/record/note_factory.rb +11 -0
- data/spec/factories/record/organizational_contact_factory.rb +12 -0
- data/spec/factories/record/organizational_entity_factory.rb +13 -0
- data/spec/factories/record/output_factory.rb +32 -0
- data/spec/factories/record/parameter_factory.rb +11 -0
- data/spec/factories/record/patch_factory.rb +12 -0
- data/spec/factories/record/performance_metric_factory.rb +20 -0
- data/spec/factories/record/postal_address_factory.rb +14 -0
- data/spec/factories/record/property_factory.rb +11 -0
- data/spec/factories/record/rating_factory.rb +14 -0
- data/spec/factories/record/release_notes_factory.rb +20 -0
- data/spec/factories/record/resource_reference_choice_factory.rb +27 -0
- data/spec/factories/record/risk_factory.rb +10 -0
- data/spec/factories/record/root_factory.rb +23 -0
- data/spec/factories/record/secured_by_factory.rb +10 -0
- data/spec/factories/record/service_data_factory.rb +16 -0
- data/spec/factories/record/service_factory.rb +27 -0
- data/spec/factories/record/signature_factory.rb +50 -0
- data/spec/factories/record/standard_factory.rb +37 -0
- data/spec/factories/record/step_factory.rb +12 -0
- data/spec/factories/record/swid_factory.rb +16 -0
- data/spec/factories/record/task_factory.rb +24 -0
- data/spec/factories/record/tools_factory.rb +10 -0
- data/spec/factories/record/trigger_factory.rb +21 -0
- data/spec/factories/record/version_factory.rb +19 -0
- data/spec/factories/record/volume_factory.rb +16 -0
- data/spec/factories/record/vulnerability_factory.rb +70 -0
- data/spec/factories/record/vulnerability_source_factory.rb +10 -0
- data/spec/factories/record/workflow_factory.rb +26 -0
- data/spec/factories/record/workspace_factory.rb +21 -0
- data/spec/factories/record_factory.rb +159 -0
- data/spec/fixtures/cipher_info.yml +948 -0
- data/spec/fixtures/purl_data.yml +0 -0
- data/spec/sbom/cyclone_dx/enum_spec.rb +30 -0
- data/spec/sbom/cyclone_dx/field_spec.rb +104 -0
- data/spec/sbom/cyclone_dx/pattern_spec.rb +18 -0
- data/spec/sbom/cyclone_dx/record/advisory_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/annotation_spec.rb +31 -0
- data/spec/sbom/cyclone_dx/record/attachment_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/base_spec.rb +363 -0
- data/spec/sbom/cyclone_dx/record/cipher_suite_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/co2_measure_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/command_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/commit_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/component_data_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/component_evidence_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/component_identity_evidence_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/component_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/composition_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/condition_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/copyright_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/crypto_properties_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/data_governance_responsible_party_spec.rb +19 -0
- data/spec/sbom/cyclone_dx/record/data_governance_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/declarations_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/definitions_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/dependency_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/diff_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/energy_consumption_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/energy_measure_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/energy_provider_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/environmental_consideration_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/event_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/external_reference_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/fairness_assessment_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/formula_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/graphic_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/graphics_collection_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/hash_data_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/identifiable_action_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/input_output_ml_parameter_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/input_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/issue_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/license_choice_spec.rb +26 -0
- data/spec/sbom/cyclone_dx/record/license_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/metadata_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/model_card_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/note_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/organizational_contact_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/organizational_entity_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/output_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/parameter_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/patch_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/performance_metric_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/postal_address_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/property_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/rating_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/release_notes_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/resource_reference_choice_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/risk_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/root_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/secured_by_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/service_data_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/service_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/signature_spec.rb +26 -0
- data/spec/sbom/cyclone_dx/record/standard_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/step_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/swid_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/task_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/tools_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/trigger_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/version_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/volume_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/vulnerability_source_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/vulnerability_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/workflow_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/workspace_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record_spec.rb +7 -0
- data/spec/sbom/cyclone_dx/validator/array_validator_spec.rb +184 -0
- data/spec/sbom/cyclone_dx/validator/base_validator_spec.rb +71 -0
- data/spec/sbom/cyclone_dx/validator/boolean_validator_spec.rb +26 -0
- data/spec/sbom/cyclone_dx/validator/date_time_validator_spec.rb +28 -0
- data/spec/sbom/cyclone_dx/validator/email_address_validator_spec.rb +23 -0
- data/spec/sbom/cyclone_dx/validator/float_validator_spec.rb +71 -0
- data/spec/sbom/cyclone_dx/validator/integer_validator_spec.rb +71 -0
- data/spec/sbom/cyclone_dx/validator/record_validator_spec.rb +35 -0
- data/spec/sbom/cyclone_dx/validator/string_validator_spec.rb +94 -0
- data/spec/sbom/cyclone_dx/validator/union_validator_spec.rb +65 -0
- data/spec/sbom/cyclone_dx/validator/uri_validator_spec.rb +21 -0
- data/spec/sbom/cyclone_dx/validator_spec.rb +38 -0
- data/spec/sbom/cyclone_dx/version_spec.rb +9 -0
- data/spec/sbom/cyclone_dx_spec.rb +7 -0
- data/spec/spec_helper.rb +39 -0
- metadata +377 -6
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/release_notes"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::ReleaseNotes do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:release_notes) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:release_notes, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/resource_reference_choice"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::ResourceReferenceChoice do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:resource_reference_choice) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:resource_reference_choice, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/risk"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Risk do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:risk) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:risk, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/root"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Root do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:root) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:root, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/secured_by"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::SecuredBy do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:secured_by) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:secured_by, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/service_data"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::ServiceData do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:service_data) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:service_data, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/service"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Service do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:service) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:service, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/signature"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Signature do
|
7
|
+
describe SBOM::CycloneDX::Record::Signature::JSFSignature do
|
8
|
+
it "can be initialized with minimum required attributes" do
|
9
|
+
expect { build(:jsf_signature) }.not_to raise_error
|
10
|
+
end
|
11
|
+
|
12
|
+
it "can be initialized with all attributes" do
|
13
|
+
expect { build(:jsf_signature, :all_fields) }.not_to raise_error
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe SBOM::CycloneDX::Record::Signature::SignatureChain do
|
18
|
+
it "can be initialized with minimum required attributes" do
|
19
|
+
expect { build(:signature_chain) }.not_to raise_error
|
20
|
+
end
|
21
|
+
|
22
|
+
it "can be initialized with all attributes" do
|
23
|
+
expect { build(:signature_chain, :all_fields) }.not_to raise_error
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/standard"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Standard do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:standard) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:standard, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/step"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Step do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:step) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:step, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/swid"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::SWID do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:swid) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:swid, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/task"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Task do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:task) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:task, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/tools"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Tools do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:tools) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:tools, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/trigger"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Trigger do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:trigger) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:trigger, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/version"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Version do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:version) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:version, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/volume"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Volume do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:volume) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:volume, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/vulnerability_source"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::VulnerabilitySource do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:vulnerability_source) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:vulnerability_source, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/vulnerability"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Vulnerability do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:vulnerability) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:vulnerability, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/workflow"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Workflow do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:workflow) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:workflow, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sbom/cyclone_dx/record/workspace"
|
5
|
+
|
6
|
+
describe SBOM::CycloneDX::Record::Workspace do
|
7
|
+
it "can be initialized with minimum required attributes" do
|
8
|
+
expect { build(:workspace) }.not_to raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be initialized with all attributes" do
|
12
|
+
expect { build(:workspace, :all_fields) }.not_to raise_error
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,184 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe SBOM::CycloneDX::Validator::ArrayValidator do
|
6
|
+
describe "#initialize" do
|
7
|
+
it "requires :items" do
|
8
|
+
expect { described_class.new(items: :string) }.not_to raise_error
|
9
|
+
# This may raise RBS::Test::Tester::TypeError or ArgumentError, depending on test context
|
10
|
+
expect { described_class.new }.to raise_error(Exception)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "supports uniqueness checking" do
|
15
|
+
expect(described_class.new(items: :integer, unique: true).validate([1, 2, 3])).to be_empty
|
16
|
+
expect(described_class.new(items: :integer, unique: true).validate([1, 2, 2])).not_to be_empty
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when :items is a symbol" do
|
20
|
+
let(:items) { :string }
|
21
|
+
let(:value) { %w[a bb ccc] }
|
22
|
+
|
23
|
+
describe "#initialize" do
|
24
|
+
it "accepts all symbols representing simple types" do
|
25
|
+
SBOM::CycloneDX::Validator::SIMPLE_TYPES.each do |simple_type|
|
26
|
+
expect { described_class.new(items: simple_type) }.not_to raise_error
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it "rejects symbols that are not simple types" do
|
31
|
+
%i[array union record invalid].each do |invalid_type|
|
32
|
+
# This may raise RBS::Test::Tester::TypeError or ArgumentError, depending on test context
|
33
|
+
expect { described_class.new(items: invalid_type) }.to raise_error(Exception)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#validate" do
|
39
|
+
subject(:instance) { described_class.new(items: items) }
|
40
|
+
|
41
|
+
it "does not permit nil elements" do
|
42
|
+
expect(instance.validate(value.push(nil).shuffle)).not_to be_empty
|
43
|
+
end
|
44
|
+
|
45
|
+
it "returns an empty array when all elements are of the specified type" do
|
46
|
+
expect(instance.validate(value)).to be_empty
|
47
|
+
end
|
48
|
+
|
49
|
+
it "returns an array of error messages when any element is not of the specified type" do
|
50
|
+
expect(instance.validate(value.push(1).shuffle)).not_to be_empty
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when :items is a Class" do
|
56
|
+
let(:items) { SBOM::CycloneDX::Record::Property }
|
57
|
+
let(:value) { Array.new(rand(1..5)) { items.new(name: Faker::Lorem.word, value: Faker::Lorem.sentence) } }
|
58
|
+
|
59
|
+
describe "#initialize" do
|
60
|
+
it "accepts classes for Record types" do
|
61
|
+
expect { described_class.new(items: items) }.not_to raise_error
|
62
|
+
end
|
63
|
+
|
64
|
+
it "rejects classes that are not Record types" do
|
65
|
+
# This may raise RBS::Test::Tester::TypeError or ArgumentError, depending on test context
|
66
|
+
expect { described_class.new(items: String) }.to raise_error(Exception)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "#validate" do
|
71
|
+
subject(:instance) { described_class.new(items: items) }
|
72
|
+
|
73
|
+
it "does not permit nil elements" do
|
74
|
+
expect(instance.validate(value.push(nil).shuffle)).not_to be_empty
|
75
|
+
end
|
76
|
+
|
77
|
+
it "returns an empty array when all elements are of the specified type and valid" do
|
78
|
+
expect(instance.validate(value)).to be_empty
|
79
|
+
end
|
80
|
+
|
81
|
+
it "returns an array of error messages when any element is invalid" do
|
82
|
+
bad_items = [
|
83
|
+
SBOM::CycloneDX::Record::Declarations::Attestation::Map::Confidence.new(score: 0.1),
|
84
|
+
SBOM::CycloneDX::Record::Declarations::Attestation::Map::Confidence.new(score: 2.5),
|
85
|
+
SBOM::CycloneDX::Record::Declarations::Attestation::Map::Confidence.new(score: 0.9)
|
86
|
+
]
|
87
|
+
confidence_instance =
|
88
|
+
described_class.new(items: SBOM::CycloneDX::Record::Declarations::Attestation::Map::Confidence)
|
89
|
+
expect(confidence_instance.validate(bad_items)).not_to be_empty
|
90
|
+
end
|
91
|
+
|
92
|
+
it "returns an array of error messages when any element is not of the specified type" do
|
93
|
+
value.push(SBOM::CycloneDX::Record::Copyright.new(text: Faker::Lorem.sentence))
|
94
|
+
expect(instance.validate(value)).not_to be_empty
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context "when :items is an Array" do
|
100
|
+
let(:items) { [:string, min_length: 1, max_length: 2] }
|
101
|
+
let(:value) { %w[a bb cc] }
|
102
|
+
|
103
|
+
describe "#initialize" do
|
104
|
+
it "accepts an array representing validator creation arguments" do
|
105
|
+
expect { described_class.new(items: items) }.not_to raise_error
|
106
|
+
end
|
107
|
+
|
108
|
+
it "rejects an array that does not represent validator creation arguments" do
|
109
|
+
# This may raise RBS::Test::Tester::TypeError or ArgumentError, depending on test context
|
110
|
+
expect { described_class.new(items: %i[string integer]) }.to raise_error(Exception)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe "#validate" do
|
115
|
+
subject(:instance) { described_class.new(items: items) }
|
116
|
+
|
117
|
+
it "does not permit nil elements by default" do
|
118
|
+
expect(instance.validate(value.push(nil).shuffle)).not_to be_empty
|
119
|
+
end
|
120
|
+
|
121
|
+
it "allows permitting nil elements" do
|
122
|
+
items.last[:required] = false
|
123
|
+
nilable_instance = described_class.new(items: items)
|
124
|
+
expect(nilable_instance.validate(value.push(nil).shuffle)).to be_empty
|
125
|
+
end
|
126
|
+
|
127
|
+
it "returns an empty array when all elements are valid" do
|
128
|
+
expect(instance.validate(value)).to be_empty
|
129
|
+
end
|
130
|
+
|
131
|
+
it "returns an array of error messages when any element is invalid" do
|
132
|
+
expect(instance.validate(value.push("dddd").shuffle)).not_to be_empty
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
# context "when :items is a Proc" do
|
138
|
+
# pending "Re-implementation of procs in ArrayValidator"
|
139
|
+
# let(:items) { ->(item) { item.even? && item < 10 } }
|
140
|
+
# let(:value) { [2, 4, 6] }
|
141
|
+
|
142
|
+
# describe "#initialize" do
|
143
|
+
# it "accepts a Proc" do
|
144
|
+
# expect { described_class.new(items: items) }.not_to raise_error
|
145
|
+
# end
|
146
|
+
# end
|
147
|
+
|
148
|
+
# describe "#validate" do
|
149
|
+
# subject(:instance) { described_class.new(items: items) }
|
150
|
+
|
151
|
+
# it "returns proc return value when proc returns an array" do
|
152
|
+
# expected_return = value.map { Faker::Lorem.word }
|
153
|
+
# message_stack = expected_return.reverse
|
154
|
+
# array_proc_instance = described_class.new(items: ->(_item) { message_stack.pop })
|
155
|
+
# expect(array_proc_instance.validate(value)).to match_array(expected_return)
|
156
|
+
# end
|
157
|
+
|
158
|
+
# it "wraps proc value in array when proc returns a string" do
|
159
|
+
# static_message = "some error message"
|
160
|
+
# expected_return = value.map { static_message }
|
161
|
+
# string_proc_instance = described_class.new(items: ->(_item) { static_message })
|
162
|
+
# expect(string_proc_instance.validate(value)).to match_array(expected_return)
|
163
|
+
# end
|
164
|
+
|
165
|
+
# it "returns a basic error message when proc returns false" do
|
166
|
+
# false_proc_instance = described_class.new(items: lambda(&:even?))
|
167
|
+
# expect(false_proc_instance.validate([5])).to contain_exactly("5 is invalid")
|
168
|
+
# end
|
169
|
+
|
170
|
+
# it "returns an empty array when proc returns true" do
|
171
|
+
# true_proc_instance = described_class.new(items: lambda(&:even?))
|
172
|
+
# expect(true_proc_instance.validate([4])).to be_empty
|
173
|
+
# end
|
174
|
+
|
175
|
+
# it "returns an empty array when all elements are valid" do
|
176
|
+
# expect(instance.validate(value)).to be_empty
|
177
|
+
# end
|
178
|
+
|
179
|
+
# it "returns an array of error messages when any element is invalid" do
|
180
|
+
# expect(instance.validate(value.push(11).shuffle)).not_to be_empty
|
181
|
+
# end
|
182
|
+
# end
|
183
|
+
# end
|
184
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
# This is a simple type validator, with no options
|
6
|
+
describe SBOM::CycloneDX::Validator::BaseValidator do
|
7
|
+
subject(:validator_klass) { Class.new(described_class) }
|
8
|
+
|
9
|
+
describe "#initialize" do
|
10
|
+
it "returns an error if not subclassed" do
|
11
|
+
expect { described_class.new }.to raise_error(RuntimeError)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "accepts optional class types" do
|
15
|
+
expect { validator_klass.new }.not_to raise_error
|
16
|
+
expect { validator_klass.new(Integer) }.not_to raise_error
|
17
|
+
expect { validator_klass.new(String, Float) }.not_to raise_error
|
18
|
+
end
|
19
|
+
|
20
|
+
it "accepts optional :required" do
|
21
|
+
expect(validator_klass.new).not_to be_required
|
22
|
+
expect(validator_klass.new(required: true)).to be_required
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "#required?" do
|
27
|
+
it "returns true when initialized with required: true" do
|
28
|
+
expect(validator_klass.new(required: true).required?).to be true
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns false when intialized with required: false" do
|
32
|
+
expect(validator_klass.new(required: false).required?).to be false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#valid?" do
|
37
|
+
subject(:validator) { validator_klass.new }
|
38
|
+
|
39
|
+
it "returns true when #validate returns no errors" do
|
40
|
+
allow(validator).to receive(:validate).and_return([]) # rubocop:disable RSpec/SubjectStub
|
41
|
+
expect(validator.valid?(1)).to be true
|
42
|
+
end
|
43
|
+
|
44
|
+
it "returns false when #validate returns errors" do
|
45
|
+
allow(validator).to receive(:validate).and_return(["some error"]) # rubocop:disable RSpec/SubjectStub
|
46
|
+
expect(validator.valid?(1)).to be false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#validate" do
|
51
|
+
subject(:validator) { validator_klass.new(Integer, String) }
|
52
|
+
|
53
|
+
it "returns an empty array when the arg is one of the specified types" do
|
54
|
+
expect(validator.validate(1)).to eq []
|
55
|
+
expect(validator.validate("a")).to eq []
|
56
|
+
end
|
57
|
+
|
58
|
+
it "returns an error when the arg is not one of the specified types" do
|
59
|
+
expect(validator.validate(1.5)).to contain_exactly(an_instance_of(String))
|
60
|
+
expect(validator.validate(%w[a b c])).to contain_exactly(an_instance_of(String))
|
61
|
+
end
|
62
|
+
|
63
|
+
it "returns an empty array when the arg is nil and required is false" do
|
64
|
+
expect(validator_klass.new(Integer, required: false).validate(nil)).to eq []
|
65
|
+
end
|
66
|
+
|
67
|
+
it "returns an error when the arg is nil and required is true" do
|
68
|
+
expect(validator_klass.new(Integer, required: true).validate(nil)).to contain_exactly(an_instance_of(String))
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
# This is a simple type validator, with no options
|
6
|
+
describe SBOM::CycloneDX::Validator::BooleanValidator do
|
7
|
+
subject(:validator) { described_class.new(required: true) }
|
8
|
+
|
9
|
+
it "accepts true" do
|
10
|
+
expect(validator.validate(true)).to be_empty
|
11
|
+
end
|
12
|
+
|
13
|
+
it "accepts false" do
|
14
|
+
expect(validator.validate(false)).to be_empty
|
15
|
+
end
|
16
|
+
|
17
|
+
it "rejects truthy values" do
|
18
|
+
expect(validator.validate(1)).not_to be_empty
|
19
|
+
expect(validator.validate("true")).not_to be_empty
|
20
|
+
end
|
21
|
+
|
22
|
+
it "rejects falsey values" do
|
23
|
+
expect(validator.validate(0)).not_to be_empty
|
24
|
+
expect(validator.validate(nil)).not_to be_empty
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
# This is a simple type validator, with no options
|
6
|
+
describe SBOM::CycloneDX::Validator::DateTimeValidator do
|
7
|
+
subject(:validator) { described_class.new(required: true) }
|
8
|
+
|
9
|
+
it "accepts DateTime instances" do
|
10
|
+
expect(validator.validate(DateTime.current)).to be_empty
|
11
|
+
end
|
12
|
+
|
13
|
+
it "accepts Time instances" do
|
14
|
+
expect(validator.validate(Time.now)).to be_empty
|
15
|
+
end
|
16
|
+
|
17
|
+
it "accepts strings in ISO 8601 format" do
|
18
|
+
expect(validator.validate("2022-01-01T12:00:00Z")).to be_empty
|
19
|
+
end
|
20
|
+
|
21
|
+
it "rejects Date instances" do
|
22
|
+
expect(validator.validate(Date.today)).not_to be_empty
|
23
|
+
end
|
24
|
+
|
25
|
+
it "rejects strings in other formats" do
|
26
|
+
expect(validator.validate("6/15/2013, 5:32:17 PM")).not_to be_empty
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
# This is a simple type validator, with no options
|
6
|
+
describe SBOM::CycloneDX::Validator::EmailAddressValidator do
|
7
|
+
subject(:validator) { described_class.new(required: true) }
|
8
|
+
|
9
|
+
it "accepts EmailAddress instances" do
|
10
|
+
expect(validator.validate(EmailAddress::Address.new(Faker::Internet.email))).to be_empty
|
11
|
+
end
|
12
|
+
|
13
|
+
it "accepts strings representing valid email addresses" do
|
14
|
+
expect(validator.validate(Faker::Internet.email)).to be_empty
|
15
|
+
end
|
16
|
+
|
17
|
+
it "rejects strings representing invalid email addresses" do
|
18
|
+
expect(validator.validate("bad@email")).not_to be_empty
|
19
|
+
expect(validator.validate("bad.email")).not_to be_empty
|
20
|
+
expect(validator.validate("bad@.com")).not_to be_empty
|
21
|
+
expect(validator.validate("bad.com")).not_to be_empty
|
22
|
+
end
|
23
|
+
end
|