Now factories define default headings for investments, so there's no need to create a group and a heading to create an investment. Likewise, in order to create a heading it isn't necessary to specify a group anymore; specifying the budget is enough. It's possible that there are more similar cases we haven't simplified yet; I'm only addressing the obvious ones.
362 lines
11 KiB
Ruby
362 lines
11 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Valuation budget investments" do
|
|
|
|
let(:budget) { create(:budget) }
|
|
let(:tracker) do
|
|
create(:tracker, user: create(:user, username: "Rachel", email: "rachel@trackers.org"))
|
|
end
|
|
|
|
before do
|
|
login_as(tracker.user)
|
|
end
|
|
|
|
scenario "Disabled with a feature flag" do
|
|
Setting["process.budgets"] = nil
|
|
expect {
|
|
visit tracking_budget_budget_investments_path(create(:budget))
|
|
}.to raise_exception(FeatureFlags::FeatureDisabled)
|
|
end
|
|
|
|
scenario "Display link to tracking section" do
|
|
visit root_path
|
|
expect(page).to have_link "Tracking", href: tracking_root_path
|
|
end
|
|
|
|
describe "Index" do
|
|
scenario "Index shows budget investments assigned to current tracker" do
|
|
investment1 = create(:budget_investment, budget: budget)
|
|
investment2 = create(:budget_investment, budget: budget)
|
|
|
|
investment1.trackers << tracker
|
|
|
|
visit tracking_budget_budget_investments_path(budget)
|
|
|
|
expect(page).to have_content(investment1.title)
|
|
expect(page).not_to have_content(investment2.title)
|
|
end
|
|
|
|
scenario "Index shows no budget investment to admins no trackers" do
|
|
investment1 = create(:budget_investment, budget: budget)
|
|
investment2 = create(:budget_investment, budget: budget)
|
|
|
|
investment1.trackers << tracker
|
|
|
|
logout
|
|
login_as create(:administrator).user
|
|
visit tracking_budget_budget_investments_path(budget)
|
|
|
|
expect(page).not_to have_content(investment1.title)
|
|
expect(page).not_to have_content(investment2.title)
|
|
end
|
|
|
|
scenario "Index displays investments paginated" do
|
|
per_page = Kaminari.config.default_per_page
|
|
(per_page + 2).times do
|
|
investment = create(:budget_investment, budget: budget)
|
|
investment.trackers << tracker
|
|
end
|
|
|
|
visit tracking_budget_budget_investments_path(budget)
|
|
|
|
expect(page).to have_css(".budget_investment", count: per_page)
|
|
within("ul.pagination") do
|
|
expect(page).to have_content("1")
|
|
expect(page).to have_content("2")
|
|
expect(page).not_to have_content("3")
|
|
click_link "Next", exact: false
|
|
end
|
|
|
|
expect(page).to have_css(".budget_investment", count: 2)
|
|
end
|
|
|
|
scenario "headings" do
|
|
investment1 = create(:budget_investment,
|
|
budget: budget,
|
|
title: "investment 1",
|
|
heading: create(:budget_heading, name: "first_heading"))
|
|
investment2 = create(:budget_investment,
|
|
budget: budget, title: "investment 2",
|
|
heading: create(:budget_heading, name: "last_heading"))
|
|
create(:budget_investment,
|
|
budget: budget,
|
|
title: "investment 3",
|
|
heading: create(:budget_heading, name: "no_heading"))
|
|
|
|
investment1.trackers << tracker
|
|
investment2.trackers << tracker
|
|
|
|
visit tracking_budget_budget_investments_path(budget)
|
|
|
|
expect(page).to have_link("All headings (2)")
|
|
expect(page).to have_link("last_heading (1)")
|
|
expect(page).to have_link("first_heading (1)")
|
|
expect(page).not_to have_link("no_heading (1)")
|
|
|
|
expect(page).to have_content("investment 1")
|
|
expect(page).to have_content("investment 2")
|
|
expect(page).not_to have_content("investment 3")
|
|
|
|
expect(page.find(".select-heading .is-active")).to have_content("All headings")
|
|
|
|
click_on "last_heading (1)"
|
|
|
|
expect(page.find(".select-heading .is-active")).to have_content("last_heading (1)")
|
|
expect(page).not_to have_content("investment 1")
|
|
expect(page).to have_content("investment 2")
|
|
expect(page).not_to have_content("investment 3")
|
|
end
|
|
end
|
|
|
|
describe "Show" do
|
|
let(:administrator) do
|
|
create(:administrator, user: create(:user, username: "Ana", email: "ana@admins.org"))
|
|
end
|
|
let(:second_tracker) do
|
|
create(:tracker, user: create(:user, username: "Rick", email: "rick@trackers.org"))
|
|
end
|
|
let(:investment) do
|
|
create(:budget_investment, budget: budget, administrator: administrator)
|
|
end
|
|
|
|
before do
|
|
investment.trackers << [tracker, second_tracker]
|
|
end
|
|
|
|
scenario "visible for assigned trackers" do
|
|
visit tracking_budget_budget_investments_path(budget)
|
|
|
|
click_link investment.title
|
|
|
|
expect(page).to have_content(investment.title)
|
|
expect(page).to have_content(investment.description)
|
|
expect(page).to have_content(investment.author.name)
|
|
expect(page).to have_content(investment.heading.name)
|
|
|
|
within("#assigned_trackers") do
|
|
expect(page).to have_content("Rachel (rachel@trackers.org)")
|
|
expect(page).to have_content("Rick (rick@trackers.org)")
|
|
end
|
|
end
|
|
|
|
scenario "visible for admins" do
|
|
logout
|
|
login_as create(:administrator).user
|
|
|
|
visit tracking_budget_budget_investment_path(budget, investment)
|
|
|
|
expect(page).to have_content(investment.title)
|
|
expect(page).to have_content(investment.description)
|
|
expect(page).to have_content(investment.author.name)
|
|
expect(page).to have_content(investment.heading.name)
|
|
expect(page).to have_content("Ana (ana@admins.org)")
|
|
|
|
within("#assigned_trackers") do
|
|
expect(page).to have_content("Rachel (rachel@trackers.org)")
|
|
expect(page).to have_content("Rick (rick@trackers.org)")
|
|
end
|
|
end
|
|
|
|
scenario "not visible for not assigned trackers" do
|
|
logout
|
|
login_as create(:tracker).user
|
|
|
|
expect {
|
|
visit tracking_budget_budget_investment_path(budget, investment)
|
|
}.to raise_error "Not Found"
|
|
end
|
|
|
|
end
|
|
|
|
describe "Milestones" do
|
|
let(:admin) { create(:administrator) }
|
|
let(:investment) do
|
|
create(:budget_investment, budget: budget, administrator: admin)
|
|
end
|
|
|
|
before do
|
|
investment.trackers << tracker
|
|
end
|
|
|
|
scenario "visit investment manage milestones" do
|
|
|
|
visit tracking_budget_budget_investments_path(budget)
|
|
|
|
click_link "Edit milestones"
|
|
|
|
expect(page).to have_content("Milestone")
|
|
expect(page).to have_content(investment.title)
|
|
end
|
|
|
|
scenario "create investment milestones" do
|
|
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
|
|
expect(page).to have_content("Milestone")
|
|
expect(page).to have_content(investment.title)
|
|
|
|
click_link "Create new milestone"
|
|
|
|
expect(page).to have_content("Create milestone")
|
|
fill_in("Description", with: "Test Description")
|
|
page.find("#milestone_publication_date").set(Date.current)
|
|
|
|
click_button "Create milestone"
|
|
|
|
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
|
|
expect(page).to have_content("Test Description")
|
|
end
|
|
|
|
scenario "delete investment milestones" do
|
|
milestone = create(:milestone,
|
|
milestoneable: investment,
|
|
description: "Test delete milestone")
|
|
|
|
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
|
|
expect(page).to have_content("Test delete milestone")
|
|
|
|
page.find("#milestone_#{milestone.id}").click_link("Delete milestone")
|
|
|
|
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
|
|
expect(page).not_to have_content("Test delete milestone")
|
|
|
|
end
|
|
|
|
scenario "edit investment milestones" do
|
|
milestone = create(:milestone, milestoneable: investment, description: "Test edit milestone")
|
|
|
|
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
|
|
expect(page).to have_content("Test edit milestone")
|
|
|
|
page.find("#milestone_#{milestone.id}").first("a").click
|
|
|
|
expect(page).to have_content("Edit milestone")
|
|
expect(page).to have_content("Test edit milestone")
|
|
fill_in("Description", with: "Test edited milestone")
|
|
|
|
click_button "Update milestone"
|
|
|
|
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
|
|
expect(page).not_to have_content("Test edit milestone")
|
|
expect(page).to have_content("Test edited milestone")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
describe "Progress Bars" do
|
|
|
|
let(:admin) { create(:administrator) }
|
|
let(:investment) do
|
|
create(:budget_investment, budget: budget, administrator: admin)
|
|
end
|
|
|
|
before do
|
|
investment.trackers << tracker
|
|
end
|
|
|
|
scenario "view index" do
|
|
visit edit_tracking_budget_budget_investment_path(budget, investment)
|
|
|
|
click_link "Manage progress bars"
|
|
|
|
expect(page).to have_content("Progress bars")
|
|
|
|
logout
|
|
login_as create(:tracker, user: create(:user)).user
|
|
|
|
expect {
|
|
visit tracking_budget_budget_investment_progress_bars_path(budget, investment)
|
|
}.to raise_error "Not Found"
|
|
end
|
|
|
|
scenario "create primary progress bar" do
|
|
|
|
visit tracking_budget_budget_investment_progress_bars_path(budget, investment)
|
|
|
|
expect(page).to have_content("Progress bars")
|
|
|
|
click_link "Create new progress bar"
|
|
|
|
expect(page).to have_content("Create progress bar")
|
|
|
|
select("Primary", :from => "Type")
|
|
fill_in("Current progress", :with => 50)
|
|
|
|
click_button "Create Progress bar"
|
|
|
|
expect(page).to have_content("Progress bars")
|
|
|
|
expect(page).to have_content("Primary")
|
|
end
|
|
|
|
scenario "create secondary progress bar" do
|
|
|
|
visit tracking_budget_budget_investment_progress_bars_path(budget, investment)
|
|
|
|
expect(page).to have_content("Progress bars")
|
|
|
|
click_link "Create new progress bar"
|
|
|
|
expect(page).to have_content("Create progress bar")
|
|
|
|
select("Secondary", :from => "Type")
|
|
fill_in("Title", :with => "secondary_progress_bar")
|
|
fill_in("Current progress", :with => 50)
|
|
|
|
click_button "Create Progress bar"
|
|
|
|
expect(page).to have_content("Progress bars")
|
|
|
|
expect(page).to have_content("secondary_progress_bar")
|
|
end
|
|
|
|
scenario "delete" do
|
|
create(:progress_bar, progressable: investment)
|
|
secondary_progress_bar = create(:progress_bar,
|
|
:secondary,
|
|
title: "to delete",
|
|
progressable: investment)
|
|
|
|
visit tracking_budget_budget_investment_progress_bars_path(budget, investment)
|
|
|
|
expect(page).to have_content("Primary")
|
|
expect(page).to have_content(secondary_progress_bar.title)
|
|
|
|
page.find("#progress_bar_#{secondary_progress_bar.id}").click_link("Delete")
|
|
|
|
visit tracking_budget_budget_investment_progress_bars_path(budget, investment)
|
|
|
|
expect(page).to have_content("Primary")
|
|
expect(page).not_to have_content(secondary_progress_bar.title)
|
|
end
|
|
|
|
scenario "edit" do
|
|
create(:progress_bar, progressable: investment)
|
|
secondary_progress_bar = create(:progress_bar,
|
|
:secondary,
|
|
title: "to edit",
|
|
progressable: investment)
|
|
|
|
visit tracking_budget_budget_investment_progress_bars_path(budget, investment)
|
|
|
|
expect(page).to have_content("Primary")
|
|
expect(page).to have_content(secondary_progress_bar.title)
|
|
|
|
page.find("#progress_bar_#{secondary_progress_bar.id}").click_link("Edit")
|
|
|
|
fill_in("Title", :with => "edited")
|
|
click_button "Update Progress bar"
|
|
|
|
expect(page).to have_content("Progress bars")
|
|
|
|
expect(page).to have_content("edited")
|
|
end
|
|
|
|
end
|
|
end
|