include PageObject::PageFactory

describe "InjectPageURLs" do
  let(:infer_host) { false }
  let(:use_query_methods) { false }

  before(:each) do
    InjectPageURLs.with(infer_host?: infer_host, use_query_methods?: use_query_methods)
    stub_const("DOMAINS", oa: "http://test.domain.com")
  end

  context "settings set to false" do
    it "page_url_value is unchanged" do
      url = on(OA::HostPage).page_url_value
      expect(url).to eql "http://test.domain.com/test_path"
    end
  end

  context "infer_host set to true" do
    let(:infer_host) { true }

    it "page_url_value includes host" do
      url = on(OA::NoHostPage).page_url_value
      expect(url).to eql "http://test.domain.com/test_path"
    end
  end

  context "use_query_methods set to true" do
    let(:use_query_methods) { true }

    it "page_url_value includes default queries" do
      url = on(OA::HostPage).page_url_value
      expect(url).to eql "http://test.domain.com/test_path?query1=true"
    end

    it "page_url_value includes both default and unique passed queries" do
      url = on(OA::HostPage, using_params: { queries: { "query2" => "true" } }).page_url_value
      expect(url).to eql "http://test.domain.com/test_path?query1=true&query2=true"
    end

    it "page_url_value replaces default queries with passed queries" do
      url = on(OA::HostPage, using_params: { queries: { "query1" => "false" } }).page_url_value
      expect(url).to eql "http://test.domain.com/test_path?query1=false"
    end

    it "page_url_value can use ERB params" do
      url = on(OA::SemanticURLPage, using_params: { passed_id: "42" }).page_url_value
      expect(url).to eql "http://test.domain.com/test_path/42/edit"
    end

    it "page_url_value can use ERB params and passed queries" do
      url = on(
        OA::SemanticURLPage,
        using_params: { passed_id: "42", queries: { "query1" => "true" } }
      ).page_url_value
      expect(url).to eql "http://test.domain.com/test_path/42/edit?query1=true"
    end
  end
end
