diff --git a/lib/zendesk_apps_support/validations/requirements.rb b/lib/zendesk_apps_support/validations/requirements.rb index d513945c..c89ef7f9 100644 --- a/lib/zendesk_apps_support/validations/requirements.rb +++ b/lib/zendesk_apps_support/validations/requirements.rb @@ -8,33 +8,21 @@ module Requirements class << self def call(package) - if package.manifest.requirements_only? && !package.has_requirements? - return [ValidationError.new(:missing_requirements)] - elsif !supports_requirements(package) && package.has_requirements? - return [ValidationError.new(:requirements_not_supported)] - elsif !package.has_requirements? + unless package.has_requirements? + return [ValidationError.new(:missing_requirements)] if package.manifest.requirements_only? + return [] end + return [ValidationError.new(:requirements_not_supported)] unless supports_requirements(package) + begin requirements = package.requirements_json rescue ZendeskAppsSupport::Manifest::OverrideError => e return [ValidationError.new(:duplicate_requirements, duplicate_keys: e.key, count: 1)] end - [].tap do |errors| - errors << invalid_requirements_types(requirements) - errors << excessive_requirements(requirements) - errors << excessive_custom_objects_requirements(requirements) - errors << invalid_channel_integrations(requirements) - errors << invalid_custom_fields(requirements) - errors << invalid_custom_objects(requirements) - errors << invalid_webhooks(requirements) - errors << invalid_target_types(requirements) - errors << missing_required_fields(requirements) - errors.flatten! - errors.compact! - end + build_errors(requirements) rescue JSON::ParserError => e return [ValidationError.new(:requirements_not_json, errors: e)] end @@ -184,6 +172,22 @@ def invalid_target_types(requirements) end end end + + def build_errors(requirements) + [].tap do |errors| + errors << invalid_requirements_types(requirements) + errors << excessive_requirements(requirements) + errors << excessive_custom_objects_requirements(requirements) + errors << invalid_channel_integrations(requirements) + errors << invalid_custom_fields(requirements) + errors << invalid_custom_objects(requirements) + errors << invalid_webhooks(requirements) + errors << invalid_target_types(requirements) + errors << missing_required_fields(requirements) + errors.flatten! + errors.compact! + end + end end end end