Now we get rid of the "hierarchy" methods and use standard Rails methods except in the routes definitions themselves.
123 lines
3.8 KiB
Ruby
123 lines
3.8 KiB
Ruby
shared_examples "admin_milestoneable" do |factory_name, path_name|
|
|
it_behaves_like "admin_progressable", factory_name, path_name
|
|
|
|
describe "Admin milestones" do
|
|
let!(:milestoneable) { create(factory_name) }
|
|
let(:path) { send(path_name, milestoneable) }
|
|
|
|
context "Index" do
|
|
scenario "Displaying milestones" do
|
|
milestone = create(:milestone, :with_image, milestoneable: milestoneable)
|
|
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, :with_image, milestoneable: milestoneable)
|
|
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
|