require "helpers/test_helper"

class UnitTestJsonRequests < Minitest::Test
  def setup
    Fog.mock!
    @client = Fog::Storage.new(provider: "google",
                               google_project: "",
                               google_json_key_location: "")
  end

  def teardown
    Fog.unmock!
  end

  def test_get_url_path_has_query_params
    url = @client.get_object_url("bucket",
                                 "just some file.json",
                                 Time.now + 2 * 60,
                                 query: { "projection" => 'full, noAcl"' })

    assert_match(/projection=full%2C%20noAcl/, url,
                 "query string should be escaped")
  end

  def test_get_url_filter_nil_query_params
    url = @client.get_object_url("bucket",
                                 "just some file.json",
                                 Time.now + 2 * 60,
                                 query: { "projection" => nil })

    refute_match(/projection/, url,
                 "nil query params should be omitted")
  end

  def test_put_url_path_is_properly_escaped
    url = @client.put_object_url("bucket",
                                 "just some file.json",
                                 Time.now + 2 * 60,
                                 "Content-Type" => "application/json")

    assert_match(/just%20some%20file\.json/, url,
                 "space should be escaped with '%20'")
  end

  def test_unescaped_slashes_in_url
    url = @client.get_object_https_url("bucket",
                                      "a/b/c.ext",
                                      Time.now + 2 * 60)
    assert_match(/a\/b\/c/, url,
                 "slashes should not be escaped with '%2F'")
  end

  def test_unescaped_pluses_in_url
    url = @client.get_object_https_url("bucket",
                                      "a+c.ext",
                                      Time.now + 2 * 60)
    assert_match(/a\+c/, url,
                 "pluses should not be escaped with '%2B'")
  end
end
