# Pleroma: A lightweight social networking server # Copyright © 2017-2019 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.RequestBuilderTest do use ExUnit.Case alias Pleroma.HTTP.RequestBuilder describe "headers/2" do test "don't send pleroma user agent" do assert RequestBuilder.headers(%{}, []) == %{headers: []} end test "send pleroma user agent" do send = Pleroma.Config.get([:http, :send_user_agent]) Pleroma.Config.put([:http, :send_user_agent], true) on_exit(fn -> Pleroma.Config.put([:http, :send_user_agent], send) end) assert RequestBuilder.headers(%{}, []) == %{ headers: [{"user-agent", Pleroma.Application.user_agent()}] } end test "it adds host header for gun adapter" do adapter = Application.get_env(:tesla, :adapter) Application.put_env(:tesla, :adapter, Tesla.Adapter.Gun) on_exit(fn -> Application.put_env(:tesla, :adapter, adapter) end) assert RequestBuilder.headers(%{url: "https://example.com"}, []) == %{ headers: [{"host", "example.com"}], url: "https://example.com" } end end describe "add_optional_params/3" do test "don't add if keyword is empty" do assert RequestBuilder.add_optional_params(%{}, %{}, []) == %{} end test "add query parameter" do assert RequestBuilder.add_optional_params( %{}, %{query: :query, body: :body, another: :val}, [ {:query, "param1=val1¶m2=val2"}, {:body, "some body"} ] ) == %{query: "param1=val1¶m2=val2", body: "some body"} end end describe "add_param/4" do test "add file parameter" do %{ body: %Tesla.Multipart{ boundary: _, content_type_params: [], parts: [ %Tesla.Multipart.Part{ body: %File.Stream{ line_or_bytes: 2048, modes: [:raw, :read_ahead, :read, :binary], path: "some-path/filename.png", raw: true }, dispositions: [name: "filename.png", filename: "filename.png"], headers: [] } ] } } = RequestBuilder.add_param(%{}, :file, "filename.png", "some-path/filename.png") end test "add key to body" do %{ body: %Tesla.Multipart{ boundary: _, content_type_params: [], parts: [ %Tesla.Multipart.Part{ body: "\"someval\"", dispositions: [name: "somekey"], headers: ["Content-Type": "application/json"] } ] } } = RequestBuilder.add_param(%{}, :body, "somekey", "someval") end test "add form parameter" do assert RequestBuilder.add_param(%{}, :form, "somename", "someval") == %{ body: %{"somename" => "someval"} } end test "add for location" do assert RequestBuilder.add_param(%{}, :some_location, "somekey", "someval") == %{ some_location: [{"somekey", "someval"}] } end end end