From 3e83b5893cf69c50d0292db9f8cdbbd44a5b61d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Thu, 15 Nov 2018 15:26:06 +0100 Subject: [PATCH] Make milestone specs reusable --- .../budget_investment_milestones_spec.rb | 112 ------------------ .../features/admin/budget_investments_spec.rb | 4 + spec/shared/features/admin_milestoneable.rb | 111 +++++++++++++++++ 3 files changed, 115 insertions(+), 112 deletions(-) create mode 100644 spec/shared/features/admin_milestoneable.rb diff --git a/spec/features/admin/budget_investment_milestones_spec.rb b/spec/features/admin/budget_investment_milestones_spec.rb index 28b05ff03..eae9786ca 100644 --- a/spec/features/admin/budget_investment_milestones_spec.rb +++ b/spec/features/admin/budget_investment_milestones_spec.rb @@ -2,120 +2,8 @@ require 'rails_helper' feature 'Admin budget investment milestones' do - background do - admin = create(:administrator) - login_as(admin.user) - end - - let!(:investment) { create(:budget_investment) } - it_behaves_like "translatable", "milestone", "edit_admin_budget_budget_investment_milestone_path", %w[description] - - context "Index" do - scenario 'Displaying milestones' do - milestone = create(:milestone, milestoneable: investment) - create(:image, imageable: milestone) - document = create(:document, documentable: milestone) - - visit admin_budget_budget_investment_path(investment.budget, investment) - - expect(page).to have_content("Milestone") - expect(page).to have_content(milestone.title) - expect(page).to have_content(milestone.id) - expect(page).to have_content(milestone.publication_date.to_date) - expect(page).to have_content(milestone.status.name) - expect(page).to have_link 'Show image' - expect(page).to have_link document.title - end - - scenario 'Displaying no_milestones text' do - visit admin_budget_budget_investment_path(investment.budget, investment) - - expect(page).to have_content("Milestone") - expect(page).to have_content("Don't have defined milestones") - end - end - - context "New" do - scenario "Add milestone" do - status = create(:milestone_status) - visit admin_budget_budget_investment_path(investment.budget, investment) - - click_link 'Create new milestone' - - select status.name, from: 'milestone_status_id' - fill_in 'Description', with: 'New description milestone' - fill_in 'milestone_publication_date', with: Date.current - - click_button 'Create milestone' - - expect(page).to have_content 'New description milestone' - expect(page).to have_content Date.current - expect(page).to have_content status.name - end - - scenario "Status select is disabled if there are no statuses available" do - visit admin_budget_budget_investment_path(investment.budget, investment) - - click_link 'Create new milestone' - expect(find("#milestone_status_id").disabled?).to be true - end - - scenario "Show validation errors on milestone form" do - visit admin_budget_budget_investment_path(investment.budget, investment) - - click_link 'Create new milestone' - - fill_in 'Description', with: 'New description milestone' - - click_button 'Create milestone' - - within "#new_milestone" do - expect(page).to have_content "can't be blank", count: 1 - expect(page).to have_content 'New description milestone' - end - end - end - - context "Edit" do - scenario "Change title, description and document names" do - milestone = create(:milestone, milestoneable: investment) - create(:image, imageable: milestone) - document = create(:document, documentable: milestone) - - visit admin_budget_budget_investment_path(investment.budget, investment) - expect(page).to have_link document.title - - click_link milestone.title - - expect(page).to have_css("img[alt='#{milestone.image.title}']") - - fill_in 'Description', with: 'Changed description' - fill_in 'milestone_publication_date', with: Date.current - fill_in 'milestone_documents_attributes_0_title', with: 'New document title' - - click_button 'Update milestone' - - expect(page).to have_content 'Changed description' - expect(page).to have_content Date.current - expect(page).to have_link 'Show image' - expect(page).to have_link 'New document title' - end - end - - context "Delete" do - scenario "Remove milestone" do - milestone = create(:milestone, milestoneable: investment, title: "Title will it remove") - - visit admin_budget_budget_investment_path(investment.budget, investment) - - click_link "Delete milestone" - - expect(page).not_to have_content 'Title will it remove' - end - end - end diff --git a/spec/features/admin/budget_investments_spec.rb b/spec/features/admin/budget_investments_spec.rb index 19db58704..276e4bf2b 100644 --- a/spec/features/admin/budget_investments_spec.rb +++ b/spec/features/admin/budget_investments_spec.rb @@ -7,6 +7,10 @@ feature 'Admin budget investments' do create(:administrator, user: create(:user, username: 'Ana', email: 'ana@admins.org')) end + it_behaves_like "admin_milestoneable", + :budget_investment, + "admin_budget_budget_investment_path" + background do @admin = create(:administrator) login_as(@admin.user) diff --git a/spec/shared/features/admin_milestoneable.rb b/spec/shared/features/admin_milestoneable.rb new file mode 100644 index 000000000..66b4d1301 --- /dev/null +++ b/spec/shared/features/admin_milestoneable.rb @@ -0,0 +1,111 @@ +shared_examples "admin_milestoneable" do |factory_name, path_name| + + feature "Admin milestones" do + let!(:milestoneable) { create(factory_name) } + let(:path) { send(path_name, *resource_hierarchy_for(milestoneable)) } + + context "Index" do + scenario 'Displaying milestones' do + milestone = create(:milestone, milestoneable: milestoneable) + create(:image, imageable: milestone) + document = create(:document, documentable: milestone) + + visit path + + expect(page).to have_content("Milestone") + expect(page).to have_content(milestone.title) + expect(page).to have_content(milestone.id) + expect(page).to have_content(milestone.publication_date.to_date) + expect(page).to have_content(milestone.status.name) + expect(page).to have_link 'Show image' + expect(page).to have_link document.title + end + + scenario 'Displaying no_milestones text' do + visit path + + expect(page).to have_content("Milestone") + expect(page).to have_content("Don't have defined milestones") + end + end + + context "New" do + scenario "Add milestone" do + status = create(:milestone_status) + visit path + + click_link 'Create new milestone' + + select status.name, from: 'milestone_status_id' + fill_in 'Description', with: 'New description milestone' + fill_in 'milestone_publication_date', with: Date.current + + click_button 'Create milestone' + + expect(page).to have_content 'New description milestone' + expect(page).to have_content Date.current + expect(page).to have_content status.name + end + + scenario "Status select is disabled if there are no statuses available" do + visit path + + click_link 'Create new milestone' + expect(find("#milestone_status_id").disabled?).to be true + end + + scenario "Show validation errors on milestone form" do + visit path + + click_link 'Create new milestone' + + fill_in 'Description', with: 'New description milestone' + + click_button 'Create milestone' + + within "#new_milestone" do + expect(page).to have_content "can't be blank", count: 1 + expect(page).to have_content 'New description milestone' + end + end + end + + context "Edit" do + scenario "Change title, description and document names" do + milestone = create(:milestone, milestoneable: milestoneable) + create(:image, imageable: milestone) + document = create(:document, documentable: milestone) + + visit path + expect(page).to have_link document.title + + click_link milestone.title + + expect(page).to have_css("img[alt='#{milestone.image.title}']") + + fill_in 'Description', with: 'Changed description' + fill_in 'milestone_publication_date', with: Date.current + fill_in 'milestone_documents_attributes_0_title', with: 'New document title' + + click_button 'Update milestone' + + expect(page).to have_content 'Changed description' + expect(page).to have_content Date.current + expect(page).to have_link 'Show image' + expect(page).to have_link 'New document title' + end + end + + context "Delete" do + scenario "Remove milestone" do + create(:milestone, milestoneable: milestoneable, title: "Title will it remove") + + visit path + + click_link "Delete milestone" + + expect(page).not_to have_content 'Title will it remove' + end + end + end +end