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 scenario "Show validation errors with no description nor status" do visit path click_link "Create new milestone" fill_in "Date", with: Date.current click_button "Create milestone" within "#new_milestone" do expect(page).to have_content "can't be blank", count: 1 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