shared_examples "milestoneable" do |factory_name|
  it_behaves_like "progressable", factory_name

  let!(:milestoneable) { create(factory_name) }

  describe "Show milestones" do
    let(:path) { polymorphic_path(milestoneable) }

    scenario "Show milestones" do
      create(:milestone, milestoneable: milestoneable,
                         description_en: "Last milestone with a link to https://consul.dev",
                         description_es: "Último hito con el link https://consul.dev",
                         publication_date: Date.tomorrow)

      first_milestone = create(:milestone, milestoneable: milestoneable,
                                           description: "First milestone",
                                           publication_date: Date.yesterday)
      image = create(:image, imageable: first_milestone)
      document = create(:document, documentable: first_milestone)

      login_as(create(:user))
      visit path

      find("#tab-milestones-label").click

      within("#tab-milestones") do
        expect(first_milestone.description).to appear_before("Last milestone with a link to https://consul.dev")
        expect(page).to have_content(Date.tomorrow)
        expect(page).to have_content(Date.yesterday)
        expect(page).not_to have_content(Date.current)
        expect(page.find("#image_#{first_milestone.id}")["alt"]).to have_content(image.title)
        expect(page).to have_link text: document.title
        expect(page).to have_link("https://consul.dev")
        expect(page).to have_content(first_milestone.status.name)
      end

      select "Español", from: "Language:"

      find("#tab-milestones-label").click

      within("#tab-milestones") do
        expect(page).to have_content("Último hito con el link https://consul.dev")
        expect(page).to have_link("https://consul.dev")
      end
    end

    scenario "Show no_milestones text" do
      login_as(create(:user))

      visit path

      find("#tab-milestones-label").click

      within("#tab-milestones") do
        expect(page).to have_content("Don't have defined milestones")
      end
    end
  end
end
