require "rails_helper"

describe "Homepage", :admin do
  before do
    Setting["homepage.widgets.feeds.proposals"] = false
    Setting["homepage.widgets.feeds.debates"] = false
    Setting["homepage.widgets.feeds.processes"] = false
    Setting["feature.user.recommendations"] = false
  end

  let!(:proposals_feed) { create(:widget_feed, kind: "proposals") }
  let!(:debates_feed)   { create(:widget_feed, kind: "debates") }
  let!(:processes_feed) { create(:widget_feed, kind: "processes") }

  let(:user) { create(:user) }

  context "Header" do
    scenario "Admin menu links to homepage path" do
      visit new_admin_widget_card_path(header_card: true)

      click_link "#{Setting["org_name"]} Administration"

      expect(page).to have_current_path(admin_root_path)
    end
  end

  context "Feeds" do
    scenario "Proposals" do
      5.times { create(:proposal) }

      visit admin_homepage_path

      within("#widget_feed_#{proposals_feed.id}") do
        select "1", from: "widget_feed_limit"
        click_button "No"

        expect(page).to have_button "Yes"
      end

      visit root_path

      within("#feed_proposals") do
        expect(page).to have_content "Most active proposals"
        expect(page).to have_css(".proposal", count: 1)
      end

      expect(page).not_to have_css("#feed_proposals.medium-8")
    end

    scenario "Debates" do
      5.times { create(:debate) }

      visit admin_homepage_path
      within("#widget_feed_#{debates_feed.id}") do
        select "2", from: "widget_feed_limit"
        click_button "No"

        expect(page).to have_button "Yes"
      end

      visit root_path

      within("#feed_debates") do
        expect(page).to have_content "Most active debates"
        expect(page).to have_css(".debate", count: 2)
      end

      expect(page).not_to have_css("#feed_debates.medium-4")
    end

    scenario "Proposals and debates" do
      3.times { create(:proposal) }
      3.times { create(:debate) }

      visit admin_homepage_path

      within("#widget_feed_#{proposals_feed.id}") do
        select "3", from: "widget_feed_limit"
        click_button "No"

        expect(page).to have_button "Yes"
      end

      within("#widget_feed_#{debates_feed.id}") do
        select "3", from: "widget_feed_limit"
        click_button "No"

        expect(page).to have_button "Yes"
      end

      visit root_path

      within("#feed_proposals") do
        expect(page).to have_content "Most active proposals"
        expect(page).to have_css(".proposal", count: 3)
      end

      within("#feed_debates") do
        expect(page).to have_content "Most active debates"
        expect(page).to have_css(".debate", count: 3)
      end
    end

    scenario "Processes" do
      5.times { create(:legislation_process) }

      visit admin_homepage_path
      within("#widget_feed_#{processes_feed.id}") do
        select "3", from: "widget_feed_limit"
        click_button "No"

        expect(page).to have_button "Yes"
      end

      visit root_path

      expect(page).to have_content "Open processes"
      expect(page).to have_css(".legislation-process", count: 3)
    end

    scenario "Deactivate proposals" do
      Setting["homepage.widgets.feeds.proposals"] = true
      create(:proposal)

      visit admin_homepage_path

      within("#widget_feed_#{proposals_feed.id}") do
        click_button "Yes"

        expect(page).to have_button "No"
      end

      visit root_path

      expect(page).not_to have_content "Most active proposals"
    end

    scenario "Deactivate debates" do
      Setting["homepage.widgets.feeds.debates"] = true
      create(:debate)

      visit admin_homepage_path

      within("#widget_feed_#{debates_feed.id}") do
        click_button "Yes"

        expect(page).to have_button "No"
      end

      visit root_path

      expect(page).not_to have_content "Most active debates"
    end

    scenario "Deactivate processes" do
      Setting["homepage.widgets.feeds.processes"] = true
      create(:legislation_process)

      visit admin_homepage_path

      within("#widget_feed_#{processes_feed.id}") do
        click_button "Yes"

        expect(page).to have_button "No"
      end

      visit root_path

      expect(page).not_to have_content "Open processes"
    end
  end

  scenario "Cards" do
    card1 = create(:widget_card, label: "Card1 label",
                                 title: "Card1 text",
                                 description: "Card1 description",
                                 link_text: "Link1 text",
                                 link_url: "consul1.dev")

    card2 = create(:widget_card, label: "Card2 label",
                                 title: "Card2 text",
                                 description: "Card2 description",
                                 link_text: "Link2 text",
                                 link_url: "consul2.dev")

    visit root_path

    expect(page).to have_css(".card", count: 2)

    within("#widget_card_#{card1.id}") do
      expect(page).to have_content("CARD1 LABEL")
      expect(page).to have_content("CARD1 TEXT")
      expect(page).to have_content("Card1 description")
      expect(page).to have_content("Link1 text")
      expect(page).to have_link(href: "consul1.dev")
      expect(page).to have_css("img[alt='#{card1.image.title}']")
    end

    within("#widget_card_#{card2.id}") do
      expect(page).to have_content("CARD2 LABEL")
      expect(page).to have_content("CARD2 TEXT")
      expect(page).to have_content("Card2 description")
      expect(page).to have_content("Link2 text")
      expect(page).to have_link(href: "consul2.dev")
      expect(page).to have_css("img[alt='#{card2.image.title}']")
    end
  end

  scenario "Recomendations" do
    create(:proposal, tag_list: "Sport", followers: [user])
    create(:proposal, tag_list: "Sport")
    user_recommendations = Setting.find_by(key: "feature.user.recommendations")

    visit admin_homepage_path

    within("#edit_setting_#{user_recommendations.id}") do
      click_button "No"

      expect(page).to have_button "Yes"
    end

    login_as(user)
    visit root_path

    expect(page).to have_content("Recommendations that may interest you")
  end
end
