From 23bd29dbc59cba55221020c9956ba575ba5b1057 Mon Sep 17 00:00:00 2001 From: KacperMekarski Date: Mon, 29 Nov 2021 18:34:22 +0100 Subject: [PATCH 1/3] does not allow to update mailchimp list id --- app/models/mailchimp_setting.rb | 7 ++++++ config/locales/en.yml | 3 +++ .../spree/mailchimp_setting_factory.rb | 12 +++++++++ spec/models/mailchimp_setting_spec.rb | 25 +++++++++++++++++++ spec/support/factory_bot.rb | 4 --- 5 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 config/locales/en.yml create mode 100644 spec/factories/spree/mailchimp_setting_factory.rb create mode 100644 spec/models/mailchimp_setting_spec.rb diff --git a/app/models/mailchimp_setting.rb b/app/models/mailchimp_setting.rb index 4e8b46c..bffb2f4 100644 --- a/app/models/mailchimp_setting.rb +++ b/app/models/mailchimp_setting.rb @@ -1,6 +1,7 @@ class MailchimpSetting < ActiveRecord::Base validates :mailchimp_api_key, :mailchimp_store_id, :mailchimp_list_id, :mailchimp_store_name, :cart_url, presence: true validate :validate_only_one_store, on: :create + validate :mailchimp_list_id_cannot_be_updated, on: :update def validate_only_one_store errors.add(:base, "only one store allowed") unless MailchimpSetting.count.zero? @@ -13,4 +14,10 @@ def create_store_id def accout_name ::SpreeMailchimpEcommerce::GetAccountNameJob.perform_now(self) end + + private + + def mailchimp_list_id_cannot_be_updated + errors.add(:mailchimp_list_id, Spree.t(:can_not_be_updated)) if mailchimp_list_id_changed? + end end diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000..a9694c7 --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,3 @@ +en: + spree: + can_not_be_updated: can't be updated \ No newline at end of file diff --git a/spec/factories/spree/mailchimp_setting_factory.rb b/spec/factories/spree/mailchimp_setting_factory.rb new file mode 100644 index 0000000..aaf2310 --- /dev/null +++ b/spec/factories/spree/mailchimp_setting_factory.rb @@ -0,0 +1,12 @@ +FactoryBot.define do + factory :mailchimp_setting, class: MailchimpSetting do + sequence(:mailchimp_api_key) { |i| "#{FFaker::Internet.password}" + i.to_s } + sequence(:mailchimp_store_id) { |i| "#{FFaker::Internet.password}" + i.to_s } + sequence(:mailchimp_list_id) { |i| "#{FFaker::Internet.password}" + i.to_s } + sequence(:mailchimp_store_name) { |i| "store_no_#{i}" } + cart_url { FFaker::Internet.http_url } + mailchimp_account_name { FFaker::Internet.user_name } + state { 'inactive' } + mailchimp_store_email { FFaker::Internet.email } + end +end diff --git a/spec/models/mailchimp_setting_spec.rb b/spec/models/mailchimp_setting_spec.rb new file mode 100644 index 0000000..caa8364 --- /dev/null +++ b/spec/models/mailchimp_setting_spec.rb @@ -0,0 +1,25 @@ +require "spec_helper" + +describe MailchimpSetting, type: :model do + subject { create(:mailchimp_setting) } + + describe "validations" do + it 'allows to save mailchimp setting' do + expect(subject.persisted?).to be true + end + + it 'allows to destroy mailchimp setting' do + subject.destroy + + expect(subject.destroyed?).to be true + end + + it 'does not allow to update mailchimp_list_id' do + subject.update(mailchimp_list_id: FFaker::Internet.password) + + expect(subject.valid?).to be false + expect(subject.errors.to_h[:mailchimp_list_id]).to eq Spree.t(:can_not_be_updated) + end + end +end + diff --git a/spec/support/factory_bot.rb b/spec/support/factory_bot.rb index 2ffe375..c7890e4 100644 --- a/spec/support/factory_bot.rb +++ b/spec/support/factory_bot.rb @@ -1,7 +1,3 @@ -require "factory_bot" - -FactoryBot.find_definitions - RSpec.configure do |config| config.include FactoryBot::Syntax::Methods end From 5779315e0d80f4f593604d322785a0c979fea17f Mon Sep 17 00:00:00 2001 From: KacperMekarski Date: Mon, 29 Nov 2021 18:35:33 +0100 Subject: [PATCH 2/3] add newline --- config/locales/en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index a9694c7..b630295 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1,3 +1,3 @@ en: spree: - can_not_be_updated: can't be updated \ No newline at end of file + can_not_be_updated: can't be updated From 0796ab70c71f268c661aade3dd10f2e5057f19fa Mon Sep 17 00:00:00 2001 From: KacperMekarski Date: Mon, 29 Nov 2021 18:56:42 +0100 Subject: [PATCH 3/3] small adjustments --- app/models/mailchimp_setting.rb | 2 +- spec/models/mailchimp_setting_spec.rb | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/app/models/mailchimp_setting.rb b/app/models/mailchimp_setting.rb index bffb2f4..704d5fe 100644 --- a/app/models/mailchimp_setting.rb +++ b/app/models/mailchimp_setting.rb @@ -18,6 +18,6 @@ def accout_name private def mailchimp_list_id_cannot_be_updated - errors.add(:mailchimp_list_id, Spree.t(:can_not_be_updated)) if mailchimp_list_id_changed? + errors.add(:mailchimp_list_id, Spree.t(:can_not_be_updated)) if mailchimp_list_id_changed? && state == 'ready' end end diff --git a/spec/models/mailchimp_setting_spec.rb b/spec/models/mailchimp_setting_spec.rb index caa8364..0f39741 100644 --- a/spec/models/mailchimp_setting_spec.rb +++ b/spec/models/mailchimp_setting_spec.rb @@ -14,11 +14,25 @@ expect(subject.destroyed?).to be true end - it 'does not allow to update mailchimp_list_id' do - subject.update(mailchimp_list_id: FFaker::Internet.password) + context 'when mailchimp is synchronised' do + before { subject.update(state: 'ready') } - expect(subject.valid?).to be false - expect(subject.errors.to_h[:mailchimp_list_id]).to eq Spree.t(:can_not_be_updated) + it 'does not allow to update mailchimp_list_id' do + subject.update(mailchimp_list_id: FFaker::Internet.password) + + expect(subject.valid?).to be false + expect(subject.errors.to_h[:mailchimp_list_id]).to eq Spree.t(:can_not_be_updated) + end + end + + context 'when mailchimp is not synchronised' do + let(:new_list_id) { FFaker::Internet.password } + + it 'allows to update mailchimp_list_id' do + subject.update(mailchimp_list_id: new_list_id) + + expect(subject.reload.mailchimp_list_id).to eq new_list_id + end end end end