mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
[wip] Copy each calculator error
But we still have the duplicate problem. Wait a minute, it copies them in the same format that I am copying them. So.. I don't need to copy them at all! Now I see that we just needed the right format in the translation file.
This commit is contained in:
@@ -4,9 +4,18 @@ module NestedCalculatorValidation
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
validates_associated :calculator, message: ->(class_obj, obj) {
|
||||
# Include all error messages from object
|
||||
obj[:value].errors.full_messages.join("; ")
|
||||
}
|
||||
validate :associated_calculator
|
||||
end
|
||||
|
||||
def associated_calculator
|
||||
# Calculator errors have already been added, don't know why.
|
||||
errors.each do |error|
|
||||
errors.delete(error.attribute) if error.attribute.match? /^calculator./
|
||||
end
|
||||
# Copy errors from associated calculator to the base object, prepending "calculator." to the attribute name.
|
||||
# wait a minute, that's what the messages were before! we just needed to get the translate keys right!
|
||||
calculator.tap(&:valid?).errors.each do |error|
|
||||
errors.import error, attribute: [:calculator, error.attribute].join('.')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -79,17 +79,17 @@ en:
|
||||
orders_close_at: Close date
|
||||
variant_override:
|
||||
count_on_hand: "On Hand"
|
||||
spree/calculator:
|
||||
preferred_flat_percent: "Flat Percent"
|
||||
preferred_amount: "Amount"
|
||||
preferred_first_item: "First Item"
|
||||
preferred_additional_item: "Additional Item Cost"
|
||||
preferred_max_items: "Max Items"
|
||||
preferred_minimal_amount: "Minimal Amount"
|
||||
preferred_normal_amount: "Normal Amount"
|
||||
preferred_discount_amount: "Discount Amount"
|
||||
preferred_unit_from_list: "Unit From List"
|
||||
preferred_per_unit: "Per Unit"
|
||||
spree/payment_method/calculator:
|
||||
preferred_flat_percent: "Calculator Flat Percent"
|
||||
preferred_amount: "Calculator Amount"
|
||||
preferred_first_item: "Calculator First Item"
|
||||
preferred_additional_item: "Calculator Additional Item Cost"
|
||||
preferred_max_items: "Calculator Max Items"
|
||||
preferred_minimal_amount: "Calculator Minimal Amount"
|
||||
preferred_normal_amount: "Calculator Normal Amount"
|
||||
preferred_discount_amount: "Calculator Discount Amount"
|
||||
preferred_unit_from_list: "Calculator Unit From List"
|
||||
preferred_per_unit: "Calculator Per Unit"
|
||||
errors:
|
||||
messages:
|
||||
calculator_preferred_value_error: "has an invalid input. Please use only numbers. For example: 10, 5.5, -20"
|
||||
|
||||
@@ -15,7 +15,7 @@ shared_examples "a parent model that has a Calculator" do |parent_name|
|
||||
|
||||
context "when the associated Calculator is invalid" do
|
||||
let(:invalid_parent) do
|
||||
build(parent_name, calculator: Calculator::FlatRate.new(preferred_amount: "invalid"))
|
||||
build(parent_name, calculator: Calculator::FlexiRate.new(preferred_first_item: "invalid"))
|
||||
end
|
||||
|
||||
before do
|
||||
@@ -28,7 +28,7 @@ shared_examples "a parent model that has a Calculator" do |parent_name|
|
||||
|
||||
it "adds custom error messages to base" do
|
||||
error_messages = invalid_parent.errors.full_messages
|
||||
expect(error_messages).to include(/^Calculator Amount has an invalid input./)
|
||||
expect(error_messages).to include(/^Calculator First Item has an invalid input./)
|
||||
end
|
||||
|
||||
it "has the correct number of errors messages" do
|
||||
@@ -45,6 +45,27 @@ shared_examples "a parent model that has a Calculator" do |parent_name|
|
||||
error_messages = invalid_parent.errors.full_messages
|
||||
expect(error_messages).not_to include(/^Calculator preferred/)
|
||||
end
|
||||
|
||||
context "with multiple errors" do
|
||||
let(:invalid_parent) do
|
||||
build(parent_name,
|
||||
calculator: Calculator::FlexiRate.new(
|
||||
preferred_first_item: "invalid",
|
||||
preferred_additional_item: "invalid",
|
||||
))
|
||||
end
|
||||
|
||||
it "adds custom error messages to base" do
|
||||
error_messages = invalid_parent.errors.full_messages
|
||||
expect(error_messages[0]).to match(/^Calculator Additional Item Cost has an invalid input./)
|
||||
expect(error_messages[1]).to match(/^Calculator First Item has an invalid input./)
|
||||
end
|
||||
|
||||
it "has the correct number of errors messages" do
|
||||
error_messages = invalid_parent.errors.full_messages
|
||||
expect(error_messages.count).to eq 2
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when number localization is enabled and the associated Calculator is invalid" do
|
||||
|
||||
Reference in New Issue
Block a user