diff --git a/spec/factories/milestones.rb b/spec/factories/milestones.rb index 9d2aebceb..8be395e4f 100644 --- a/spec/factories/milestones.rb +++ b/spec/factories/milestones.rb @@ -10,6 +10,10 @@ FactoryBot.define do sequence(:title) { |n| "Milestone #{n} title" } description { "Milestone description" } publication_date { Date.current } + + factory :milestone_with_description do + status { nil } + end end factory :progress_bar do @@ -21,5 +25,7 @@ FactoryBot.define do kind { :secondary } sequence(:title) { |n| "Progress bar #{n} title" } end + + factory :secondary_progress_bar, traits: [:secondary] end end diff --git a/spec/factories/proposals.rb b/spec/factories/proposals.rb index 93b1cd54a..b11f9eae7 100644 --- a/spec/factories/proposals.rb +++ b/spec/factories/proposals.rb @@ -73,6 +73,8 @@ FactoryBot.define do trait :with_milestone_tags do after(:create) { |proposal| proposal.milestone_tags << create(:tag, :milestone) } end + + factory :retired_proposal, traits: [:retired] end factory :proposal_notification do diff --git a/spec/models/banner_spec.rb b/spec/models/banner_spec.rb index fac153a25..d253efc27 100644 --- a/spec/models/banner_spec.rb +++ b/spec/models/banner_spec.rb @@ -6,6 +6,7 @@ describe Banner do describe "Concerns" do it_behaves_like "acts as paranoid", :banner + it_behaves_like "globalizable", :banner end it "is valid" do diff --git a/spec/models/budget/group_spec.rb b/spec/models/budget/group_spec.rb index 26f4d0ade..38290810a 100644 --- a/spec/models/budget/group_spec.rb +++ b/spec/models/budget/group_spec.rb @@ -2,6 +2,7 @@ require "rails_helper" describe Budget::Group do it_behaves_like "sluggable", updatable_slug_trait: :drafting_budget + it_behaves_like "globalizable", :budget_group describe "Validations" do diff --git a/spec/models/budget/heading_spec.rb b/spec/models/budget/heading_spec.rb index 966a52269..3e83ae7ea 100644 --- a/spec/models/budget/heading_spec.rb +++ b/spec/models/budget/heading_spec.rb @@ -6,6 +6,7 @@ describe Budget::Heading do let(:group) { create(:budget_group, budget: budget) } it_behaves_like "sluggable", updatable_slug_trait: :drafting_budget + it_behaves_like "globalizable", :budget_heading describe "OSM_DISTRICT_LEVEL_ZOOM constant" do it "is defined" do diff --git a/spec/models/budget/phase_spec.rb b/spec/models/budget/phase_spec.rb index e7ef5fa28..a191bc284 100644 --- a/spec/models/budget/phase_spec.rb +++ b/spec/models/budget/phase_spec.rb @@ -9,6 +9,8 @@ describe Budget::Phase do let(:fourth_phase) { budget.phases.reviewing } let(:final_phase) { budget.phases.finished } + it_behaves_like "globalizable", :budget_phase + describe "validates" do it "is not valid without a budget" do expect(build(:budget_phase, budget: nil)).not_to be_valid diff --git a/spec/models/budget_spec.rb b/spec/models/budget_spec.rb index 7899bfae6..e45061274 100644 --- a/spec/models/budget_spec.rb +++ b/spec/models/budget_spec.rb @@ -6,6 +6,7 @@ describe Budget do it_behaves_like "sluggable", updatable_slug_trait: :drafting it_behaves_like "reportable" + it_behaves_like "globalizable", :budget describe "name" do before do diff --git a/spec/models/concerns/globalizable.rb b/spec/models/concerns/globalizable.rb index 08d5f81cf..58900442b 100644 --- a/spec/models/concerns/globalizable.rb +++ b/spec/models/concerns/globalizable.rb @@ -1,13 +1,15 @@ require "spec_helper" shared_examples_for "globalizable" do |factory_name| - let(:record) { create(:factory_name) } - let(:fields) { record.translated_attribute_names } - let(:required_fields) do - fields.reject do |field| - record.translations.first.dup.tap { |duplicate| duplicate.send(:"#{field}=", "") }.valid? + let(:record) do + if factory_name == :budget_phase + create(:budget).phases.last + else + create(factory_name) end end + let(:fields) { record.translated_attribute_names } + let(:required_fields) { fields.select { |field| record.send(:required_attribute?, field) } } let(:attribute) { required_fields.sample || fields.sample } before do @@ -177,8 +179,6 @@ shared_examples_for "globalizable" do |factory_name| end it "Falls back to the first available locale after removing a locale" do - Globalize.set_fallbacks_to_all_available_locales - expect(record.send(attribute)).to eq "In English" record.update(translations_attributes: [ diff --git a/spec/models/legislation/draft_version_spec.rb b/spec/models/legislation/draft_version_spec.rb index 5beb04a1b..4052b40b3 100644 --- a/spec/models/legislation/draft_version_spec.rb +++ b/spec/models/legislation/draft_version_spec.rb @@ -4,6 +4,7 @@ describe Legislation::DraftVersion do let(:legislation_draft_version) { build(:legislation_draft_version) } it_behaves_like "acts as paranoid", :legislation_draft_version + it_behaves_like "globalizable", :legislation_draft_version it "is valid" do expect(legislation_draft_version).to be_valid diff --git a/spec/models/legislation/process_spec.rb b/spec/models/legislation/process_spec.rb index 787199fc3..d07dcb8ac 100644 --- a/spec/models/legislation/process_spec.rb +++ b/spec/models/legislation/process_spec.rb @@ -4,6 +4,7 @@ describe Legislation::Process do let(:process) { create(:legislation_process) } it_behaves_like "acts as paranoid", :legislation_process + it_behaves_like "globalizable", :legislation_process it "is valid" do expect(process).to be_valid diff --git a/spec/models/legislation/question_option_spec.rb b/spec/models/legislation/question_option_spec.rb index 20f288dbf..b8d8b681f 100644 --- a/spec/models/legislation/question_option_spec.rb +++ b/spec/models/legislation/question_option_spec.rb @@ -4,6 +4,7 @@ describe Legislation::QuestionOption do let(:legislation_question_option) { build(:legislation_question_option) } it_behaves_like "acts as paranoid", :legislation_question_option + it_behaves_like "globalizable", :legislation_question_option it "is valid" do expect(legislation_question_option).to be_valid diff --git a/spec/models/legislation/question_spec.rb b/spec/models/legislation/question_spec.rb index 0db4b957b..1b3b62355 100644 --- a/spec/models/legislation/question_spec.rb +++ b/spec/models/legislation/question_spec.rb @@ -7,6 +7,7 @@ describe Legislation::Question do describe "Concerns" do it_behaves_like "notifiable" + it_behaves_like "globalizable", :legislation_question end it "is valid" do diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb index 87ba6fb8b..2e796c46c 100644 --- a/spec/models/milestone_spec.rb +++ b/spec/models/milestone_spec.rb @@ -1,6 +1,7 @@ require "rails_helper" describe Milestone do + it_behaves_like "globalizable", :milestone_with_description describe "Validations" do let(:milestone) { build(:milestone) } diff --git a/spec/models/poll/active_poll_spec.rb b/spec/models/poll/active_poll_spec.rb new file mode 100644 index 000000000..1326c2a9c --- /dev/null +++ b/spec/models/poll/active_poll_spec.rb @@ -0,0 +1,5 @@ +require "rails_helper" + +describe ActivePoll do + it_behaves_like "globalizable", :active_poll +end diff --git a/spec/models/poll/poll_spec.rb b/spec/models/poll/poll_spec.rb index bf878d2c5..d0c3b63f1 100644 --- a/spec/models/poll/poll_spec.rb +++ b/spec/models/poll/poll_spec.rb @@ -8,6 +8,7 @@ describe Poll do it_behaves_like "notifiable" it_behaves_like "acts as paranoid", :poll it_behaves_like "reportable" + it_behaves_like "globalizable", :poll end describe "validations" do diff --git a/spec/models/poll/question/answer_spec.rb b/spec/models/poll/question/answer_spec.rb new file mode 100644 index 000000000..e1af0365c --- /dev/null +++ b/spec/models/poll/question/answer_spec.rb @@ -0,0 +1,5 @@ +require "rails_helper" + +describe Poll::Question::Answer do + it_behaves_like "globalizable", :poll_question_answer +end diff --git a/spec/models/poll/question_spec.rb b/spec/models/poll/question_spec.rb index 63b9cd63a..249742392 100644 --- a/spec/models/poll/question_spec.rb +++ b/spec/models/poll/question_spec.rb @@ -5,6 +5,7 @@ RSpec.describe Poll::Question, type: :model do describe "Concerns" do it_behaves_like "acts as paranoid", :poll_question + it_behaves_like "globalizable", :poll_question end describe "#poll_question_id" do diff --git a/spec/models/progress_bar_spec.rb b/spec/models/progress_bar_spec.rb index 46b0ce08b..e09663e0a 100644 --- a/spec/models/progress_bar_spec.rb +++ b/spec/models/progress_bar_spec.rb @@ -3,6 +3,8 @@ require "rails_helper" describe ProgressBar do let(:progress_bar) { build(:progress_bar) } + it_behaves_like "globalizable", :secondary_progress_bar + it "is valid" do expect(progress_bar).to be_valid end diff --git a/spec/models/proposal_spec.rb b/spec/models/proposal_spec.rb index 9d34a1b58..bbe74bde3 100644 --- a/spec/models/proposal_spec.rb +++ b/spec/models/proposal_spec.rb @@ -8,7 +8,7 @@ describe Proposal do it_behaves_like "has_public_author" it_behaves_like "notifiable" it_behaves_like "map validations" - it_behaves_like "globalizable", :proposal + it_behaves_like "globalizable", :retired_proposal it_behaves_like "sanitizable" it_behaves_like "acts as paranoid", :proposal end diff --git a/spec/models/site_customization/page_spec.rb b/spec/models/site_customization/page_spec.rb index ccbe8bfa8..e2c4f4250 100644 --- a/spec/models/site_customization/page_spec.rb +++ b/spec/models/site_customization/page_spec.rb @@ -3,6 +3,8 @@ require "rails_helper" RSpec.describe SiteCustomization::Page, type: :model do let(:custom_page) { build(:site_customization_page) } + it_behaves_like "globalizable", :site_customization_page + it "is valid" do expect(custom_page).to be_valid end diff --git a/spec/models/widget/card_spec.rb b/spec/models/widget/card_spec.rb index c0a393984..75c7dd3d4 100644 --- a/spec/models/widget/card_spec.rb +++ b/spec/models/widget/card_spec.rb @@ -1,9 +1,10 @@ require "rails_helper" describe Widget::Card do - let(:card) { build(:widget_card) } + it_behaves_like "globalizable", :widget_card + context "validations" do it "is valid" do