require "rails_helper"

describe "Budgets creation wizard", :admin do
  scenario "Creation of a single-heading budget by steps" do
    visit admin_budgets_path
    click_button "Create new budget"
    click_link "Create single heading budget"

    fill_in "Name", with: "Single heading budget"
    click_button "Continue to groups"

    expect(page).to have_content "New participatory budget created successfully!"
    expect(page).to have_field "Group name", with: "Single heading budget"

    click_button "Continue to headings"

    expect(page).to have_content "Group created successfully"

    fill_in "Heading name", with: "One and only heading"
    fill_in "Money amount", with: "1000000"
    click_button "Continue to phases"

    expect(page).to have_css ".budget-phases-table"

    click_link "Finish"

    within "section", text: "Heading groups" do
      expect(page).to have_content "Single heading budget"

      within "tbody" do
        expect(page).to have_content "One and only heading"
      end
    end
  end

  scenario "Creation of a multiple-headings budget by steps" do
    visit admin_budgets_path
    click_button "Create new budget"
    click_link "Create multiple headings budget"

    fill_in "Name", with: "Multiple headings budget"
    click_button "Continue to groups"

    expect(page).to have_content "New participatory budget created successfully!"
    expect(page).to have_content "There are no groups."

    click_button "Add new group"
    fill_in "Group name", with: "All city"
    click_button "Create new group"

    expect(page).to have_content "Group created successfully!"
    within("table") { expect(page).to have_content "All city" }
    expect(page).not_to have_content "There are no groups."

    click_button "Add new group"
    fill_in "Group name", with: "Districts"
    click_button "Create new group"

    expect(page).to have_content "Group created successfully!"
    within("table") { expect(page).to have_content "Districts" }

    click_link "Continue to headings"

    expect(page).to have_content "Showing headings from the All city group"
    expect(page).to have_content "There are no headings in the All city group."

    click_button "Add new heading"
    fill_in "Heading name", with: "All city"
    fill_in "Money amount", with: "1000000"
    click_button "Create new heading"

    expect(page).to have_content "Heading created successfully!"
    within_table("Headings in All city") { expect(page).to have_content "All city" }
    expect(page).not_to have_content "There are no headings"

    click_link "Manage headings from the Districts group."
    expect(page).to have_content "There are no headings in the Districts group."

    click_button "Add new heading"
    fill_in "Heading name", with: "North"
    fill_in "Money amount", with: "500000"
    click_button "Create new heading"

    expect(page).to have_content "Heading created successfully!"
    within_table("Headings in Districts") { expect(page).to have_content "North" }
    expect(page).not_to have_content "There are no headings"

    click_button "Add new heading"
    fill_in "Heading name", with: "South"
    fill_in "Money amount", with: "500000"
    click_button "Create new heading"

    expect(page).to have_content "Heading created successfully!"
    within_table("Headings in Districts") { expect(page).to have_content "South" }

    click_link "Continue to phases"

    expect(page).to have_css ".budget-phases-table"

    within("tr", text: "Voting projects") { click_link "Edit" }
    fill_in "Name", with: "Custom phase name"
    uncheck "Phase enabled"
    click_button "Save changes"

    expect(page).to have_content "Changes saved"

    within "table" do
      expect(page).to have_content "Custom phase name"
      expect(page).not_to have_content "Voting projects"
    end

    click_link "Finish"

    within "section", text: "Heading groups" do
      within_table "Headings in All city" do
        expect(page).to have_css "tbody tr", count: 1
        expect(page).to have_content "All city"
      end

      within_table "Headings in Districts" do
        expect(page).to have_css "tbody tr", count: 2
        expect(page).to have_content "North"
        expect(page).to have_content "South"
      end
    end
  end
end
