diff --git a/spec/en.yml b/spec/en.yml index 458ebb0..a192e23 100644 --- a/spec/en.yml +++ b/spec/en.yml @@ -7,3 +7,6 @@ en: attributes: localizer_test_model: aasm_state/opened: "It's open now!" + errors: + messages: + record_invalid: "Invalid record" diff --git a/spec/models/validator.rb b/spec/models/validator.rb index 8023509..7583416 100644 --- a/spec/models/validator.rb +++ b/spec/models/validator.rb @@ -6,7 +6,12 @@ class Validator < ActiveRecord::Base :after_transaction_performed_on_run, :before_all_transactions_performed, :before_transaction_performed_on_fail, - :before_transaction_performed_on_run + :before_transaction_performed_on_run, + :invalid + + validate do |model| + errors.add(:validator, "invalid") if invalid + end include AASM diff --git a/spec/unit/persistence/active_record_persistence_spec.rb b/spec/unit/persistence/active_record_persistence_spec.rb index 2774698..0375141 100644 --- a/spec/unit/persistence/active_record_persistence_spec.rb +++ b/spec/unit/persistence/active_record_persistence_spec.rb @@ -547,6 +547,14 @@ describe 'transitions with persistence' do expect(validator.name).to eq("name") end + it "should not fire :after_commit if validation failed when saving object" do + validator = Validator.create(:name => 'name') + validator.invalid = true + expect { validator.run! }.to raise_error(ActiveRecord::RecordInvalid, 'Invalid record') + expect(validator).to be_sleeping + expect(validator.name).to eq("name") + end + it "should not fire if not saving" do validator = Validator.create(:name => 'name') expect(validator).to be_sleeping