Now we get rid of the "hierarchy" methods and use standard Rails methods except in the routes definitions themselves.
123 lines
3.6 KiB
Ruby
123 lines
3.6 KiB
Ruby
shared_examples "admin_progressable" do |factory_name, path_name|
|
|
let!(:progressable) { create(factory_name) }
|
|
|
|
describe "Manage progress bars" do
|
|
let(:progressable_path) { send(path_name, progressable) }
|
|
|
|
let(:path) do
|
|
admin_polymorphic_path(progressable.progress_bars.new)
|
|
end
|
|
|
|
context "Index" do
|
|
scenario "Link to index path" do
|
|
create(:progress_bar, :secondary, progressable: progressable,
|
|
title: "Reading documents",
|
|
percentage: 20)
|
|
|
|
visit progressable_path
|
|
click_link "Manage progress bars"
|
|
|
|
expect(page).to have_content "Reading documents"
|
|
end
|
|
|
|
scenario "No progress bars" do
|
|
visit path
|
|
|
|
expect(page).to have_content("There are no progress bars")
|
|
end
|
|
end
|
|
|
|
context "New" do
|
|
scenario "Primary progress bar", :js do
|
|
visit path
|
|
click_link "Create new progress bar"
|
|
|
|
select "Primary", from: "Type"
|
|
|
|
expect(page).not_to have_field "Title"
|
|
expect(page).not_to have_content "Add language"
|
|
|
|
fill_in "Current progress", with: 43
|
|
click_button "Create Progress bar"
|
|
|
|
expect(page).to have_content "Progress bar created successfully"
|
|
expect(page).to have_content "43%"
|
|
expect(page).to have_content "Primary"
|
|
expect(page).to have_content "Primary progress bar"
|
|
end
|
|
|
|
scenario "Secondary progress bar", :js do
|
|
visit path
|
|
click_link "Create new progress bar"
|
|
|
|
select "Secondary", from: "Type"
|
|
|
|
expect(page).to have_content "Add language"
|
|
|
|
fill_in "Current progress", with: 36
|
|
fill_in "Title", with: "Plant trees"
|
|
click_button "Create Progress bar"
|
|
|
|
expect(page).to have_content "Progress bar created successfully"
|
|
expect(page).to have_content "36%"
|
|
expect(page).to have_content "Secondary"
|
|
expect(page).to have_content "Plant trees"
|
|
end
|
|
end
|
|
|
|
context "Edit" do
|
|
scenario "Primary progress bar", :js do
|
|
bar = create(:progress_bar, progressable: progressable)
|
|
|
|
visit path
|
|
within("#progress_bar_#{bar.id}") { click_link "Edit" }
|
|
|
|
expect(page).to have_field "Current progress"
|
|
expect(page).not_to have_field "Title"
|
|
expect(page).not_to have_content "Add language"
|
|
|
|
fill_in "Current progress", with: 44
|
|
click_button "Update Progress bar"
|
|
|
|
expect(page).to have_content "Progress bar updated successfully"
|
|
|
|
within("#progress_bar_#{bar.id}") do
|
|
expect(page).to have_content "44%"
|
|
end
|
|
end
|
|
|
|
scenario "Secondary progress bar", :js do
|
|
bar = create(:progress_bar, :secondary, progressable: progressable)
|
|
|
|
visit path
|
|
within("#progress_bar_#{bar.id}") { click_link "Edit" }
|
|
|
|
expect(page).to have_content "Add language"
|
|
|
|
fill_in "Current progress", with: 76
|
|
fill_in "Title", with: "Updated title"
|
|
click_button "Update Progress bar"
|
|
|
|
expect(page).to have_content "Progress bar updated successfully"
|
|
|
|
within("#progress_bar_#{bar.id}") do
|
|
expect(page).to have_content "76%"
|
|
expect(page).to have_content "Updated title"
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Delete" do
|
|
scenario "Remove progress bar" do
|
|
bar = create(:progress_bar, progressable: progressable, percentage: 34)
|
|
|
|
visit path
|
|
within("#progress_bar_#{bar.id}") { click_link "Delete" }
|
|
|
|
expect(page).to have_content "Progress bar deleted successfully"
|
|
expect(page).not_to have_content "34%"
|
|
end
|
|
end
|
|
end
|
|
end
|