From 73996dc748241e4573867a3cec993a8bb4a561c1 Mon Sep 17 00:00:00 2001 From: Aaron Collier Date: Wed, 1 Nov 2023 12:21:45 -0700 Subject: [PATCH 1/2] Validate if values are whitespace only Debugging --- .../description_values_validator.rb | 24 ++++++++++++------- .../description_values_validator_spec.rb | 21 ++++++++++++++++ 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/lib/cocina/models/validators/description_values_validator.rb b/lib/cocina/models/validators/description_values_validator.rb index 95e2dff7..598cb8df 100644 --- a/lib/cocina/models/validators/description_values_validator.rb +++ b/lib/cocina/models/validators/description_values_validator.rb @@ -12,7 +12,8 @@ def self.validate(clazz, attributes) def initialize(clazz, attributes) @clazz = clazz @attributes = attributes - @error_paths = [] + @error_paths_multiple = [] + @error_paths_blank = [] end def validate @@ -20,21 +21,21 @@ def validate validate_obj(attributes, []) - return if error_paths.empty? - - raise ValidationError, "Multiple value, groupedValue, structuredValue, and parallelValue in description: #{error_paths.join(', ')}" + raise ValidationError, "Multiple value, groupedValue, structuredValue, and parallelValue in description: #{error_paths_multiple.join(', ')}" unless error_paths_multiple.empty? + raise ValidationError, "Blank value in description: #{error_paths_blank.join(', ')}" unless error_paths_blank.empty? end private - attr_reader :clazz, :attributes, :error_paths + attr_reader :clazz, :attributes, :error_paths_blank, :error_paths_multiple def meets_preconditions? [Cocina::Models::Description, Cocina::Models::RequestDescription].include?(clazz) end def validate_hash(hash, path) - validate_values(hash, path) + validate_values_for_blanks(hash, path) + validate_values_for_multiples(hash, path) hash.each do |key, obj| validate_obj(obj, path + [key]) end @@ -51,10 +52,17 @@ def validate_obj(obj, path) validate_array(obj, path) if obj.is_a?(Array) end - def validate_values(hash, path) + def validate_values_for_blanks(hash, path) + return unless hash[:value] && hash[:value].is_a?(String) && hash[:value].blank? # rubocop:disable Style/SafeNavigation + puts hash + puts "hash[:value] = #{hash[:value]}" + error_paths_blank << path_to_s(path) + end + + def validate_values_for_multiples(hash, path) return unless hash.count { |key, value| %i[value groupedValue structuredValue parallelValue].include?(key) && value.present? } > 1 - error_paths << path_to_s(path) + error_paths_multiple << path_to_s(path) end def path_to_s(path) diff --git a/spec/cocina/models/validators/description_values_validator_spec.rb b/spec/cocina/models/validators/description_values_validator_spec.rb index 24acb312..b3433ecf 100644 --- a/spec/cocina/models/validators/description_values_validator_spec.rb +++ b/spec/cocina/models/validators/description_values_validator_spec.rb @@ -54,6 +54,17 @@ } end + let(:blank_title_props) do + { + title: [ + { + value: ' ', + parallelValue: [{ value: 'A title' }, { value: 'Another title' }] + } + ] + } + end + let(:request_desc_props) do desc_props.dup.tap do |props| props.delete(:purl) @@ -84,6 +95,16 @@ end.to raise_error(Cocina::Models::ValidationError, 'Multiple value, groupedValue, structuredValue, and parallelValue in description: title1, relatedResource1.title1') end end + + describe 'when a blank value in description' do + let(:props) { blank_title_props } + + it 'is not valid' do + expect do + validate + end.to raise_error(Cocina::Models::ValidationError, 'Blank value in description: title1') + end + end end describe '#meets_preconditions?' do From e77533fd9bc50d2914e3faf7070036c85d0cbecf Mon Sep 17 00:00:00 2001 From: Aaron Collier Date: Fri, 3 Nov 2023 12:28:07 -0700 Subject: [PATCH 2/2] Validate empty but non-zero length string values --- lib/cocina/models/validators/description_values_validator.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/cocina/models/validators/description_values_validator.rb b/lib/cocina/models/validators/description_values_validator.rb index 598cb8df..fa9f6f80 100644 --- a/lib/cocina/models/validators/description_values_validator.rb +++ b/lib/cocina/models/validators/description_values_validator.rb @@ -53,9 +53,8 @@ def validate_obj(obj, path) end def validate_values_for_blanks(hash, path) - return unless hash[:value] && hash[:value].is_a?(String) && hash[:value].blank? # rubocop:disable Style/SafeNavigation - puts hash - puts "hash[:value] = #{hash[:value]}" + return unless hash[:value] && hash[:value].is_a?(String) && /\A\s+\z/.match?(hash[:value]) # rubocop:disable Style/SafeNavigation + error_paths_blank << path_to_s(path) end