# frozen_string_literal: true

describe "Composer Post Validations", type: :system do
  fab!(:tl0_user) { Fabricate(:user, trust_level: TrustLevel[0]) }
  fab!(:tl1_user) { Fabricate(:user, trust_level: TrustLevel[1]) }
  fab!(:tl2_user) { Fabricate(:user, trust_level: TrustLevel[2]) }
  fab!(:topic)
  fab!(:post) { Fabricate(:post, topic: topic) }

  let(:composer) { PageObjects::Components::Composer.new }
  let(:topic_page) { PageObjects::Pages::Topic.new }

  shared_examples "post length validation" do
    context "when creating a topic" do
      it "shows an error when post length is insufficient" do
        visit("/latest")
        page.find("#create-topic").click
        composer.fill_content("abc")
        composer.create
        composer.have_post_error(I18n.t("js.composer.error.post_length"))
      end
    end

    context "when replying to a topic" do
      it "shows an error to like instead when post length is insufficient" do
        topic_page.visit_topic_and_open_composer(topic)
        composer.fill_content("abc")
        composer.create
        composer.have_post_error(
          "#{I18n.t("js.composer.error.post_length")} #{I18n.t("js.composer.error.try_like")}",
        )
      end
    end
  end

  describe "trust level 0 user" do
    before { sign_in(tl0_user) }
    include_examples "post length validation"
  end

  describe "trust level 1 user" do
    before { sign_in(tl1_user) }
    include_examples "post length validation"
  end

  describe "trust level 2 user" do
    before { sign_in(tl2_user) }

    context "when creating a topic" do
      it "shows an error when post length is insufficient" do
        visit("/latest")
        page.find("#create-topic").click
        composer.fill_content("abc")
        composer.create
        composer.have_post_error(I18n.t("js.composer.error.post_length"))
      end
    end

    context "when replying to a topic" do
      it "does not show an error to like when post length is insufficient" do
        topic_page.visit_topic_and_open_composer(topic)
        composer.fill_content("abc")
        composer.create
        composer.have_post_error("#{I18n.t("js.composer.error.post_length")}")
        composer.have_no_post_error(
          "#{I18n.t("js.composer.error.post_length")} #{I18n.t("js.composer.error.try_like")}",
        )
      end
    end
  end
end