require "rails_helper"

describe "Documents", :admin do
  scenario "Navigation" do
    visit admin_root_path

    within("#side_menu") do
      click_button "Site content"
      click_link "Custom documents"
    end

    expect(page).to have_link "Add new document",
                              href: new_admin_site_customization_document_path
  end

  scenario "Index" do
    3.times { create(:document, :admin) }
    1.times { create(:document) }

    document = Document.first
    url = polymorphic_path(document.attachment)

    visit admin_site_customization_documents_path

    expect(page).to have_content "There are 3 documents"
    expect(page).to have_link "Download file", href: url
  end

  scenario "Index (empty)" do
    visit admin_site_customization_documents_path

    expect(page).to have_content "There are no documents."
  end

  scenario "Index (pagination)" do
    per_page = 3
    allow(Document).to receive(:default_per_page).and_return(per_page)
    (per_page + 2).times { create(:document, :admin) }

    visit admin_site_customization_documents_path

    expect(page).to have_css "#documents .document-row", count: per_page

    within("ul.pagination") do
      expect(page).to have_content("1")
      expect(page).to have_link("2", href: admin_site_customization_documents_path(page: 2))
      expect(page).not_to have_content("3")
      click_link "Next", exact: false
    end

    expect(page).to have_css "#documents .document-row", count: 2
  end

  scenario "Create" do
    visit new_admin_site_customization_document_path

    attach_file("document_attachment", file_fixture("logo.pdf"))
    click_button "Upload"

    expect(page).to have_content "Document uploaded successfully"

    within("tr", text: "logo.pdf") { expect(page).to have_link "Download file" }
  end

  scenario "Errors on create" do
    visit new_admin_site_customization_document_path

    click_button "Upload"

    expect(page).to have_content "Invalid document"
  end

  scenario "Destroy" do
    document = create(:document, :admin)

    visit admin_site_customization_documents_path

    within("#document_#{document.id}") do
      accept_confirm("Are you sure? This action will delete \"#{document.title}\" and can't be undone.") do
        click_button "Delete"
      end
    end

    expect(page).to have_content "Document deleted successfully"
    expect(page).not_to have_content document.title
  end
end
