2021-03-17 08:53:44 +08:00
|
|
|
defmodule LivebookWeb.StaticPlugTest do
|
|
|
|
use ExUnit.Case, async: true
|
|
|
|
use Plug.Test
|
|
|
|
|
|
|
|
defmodule MyProvider do
|
|
|
|
@behaviour LivebookWeb.StaticPlug.Provider
|
|
|
|
|
|
|
|
@impl true
|
|
|
|
def get_file(["app.js"], :gzip) do
|
|
|
|
%LivebookWeb.StaticPlug.File{content: "content", digest: "digest"}
|
|
|
|
end
|
|
|
|
|
|
|
|
def get_file(["icon.ico"], nil) do
|
|
|
|
%LivebookWeb.StaticPlug.File{content: "content", digest: "digest"}
|
|
|
|
end
|
|
|
|
|
|
|
|
def get_file(_path, _compression), do: nil
|
|
|
|
end
|
|
|
|
|
|
|
|
defmodule MyPlug do
|
|
|
|
use Plug.Builder
|
|
|
|
|
|
|
|
plug LivebookWeb.StaticPlug,
|
|
|
|
at: "/",
|
|
|
|
file_provider: MyProvider,
|
|
|
|
gzip: true
|
|
|
|
|
|
|
|
plug :passthrough
|
|
|
|
|
|
|
|
defp passthrough(conn, _), do: Plug.Conn.send_resp(conn, 404, "Passthrough")
|
|
|
|
end
|
|
|
|
|
|
|
|
defp call(conn), do: MyPlug.call(conn, [])
|
|
|
|
|
|
|
|
test "serves uncompressed file if there is no compressed version" do
|
|
|
|
conn =
|
|
|
|
conn(:get, "/icon.ico")
|
|
|
|
|> put_req_header("accept-encoding", "gzip")
|
|
|
|
|> call()
|
|
|
|
|
|
|
|
assert conn.status == 200
|
|
|
|
assert conn.resp_body == "content"
|
|
|
|
assert get_resp_header(conn, "content-type") == ["image/vnd.microsoft.icon"]
|
|
|
|
assert get_resp_header(conn, "etag") == [~s{"digest"}]
|
|
|
|
end
|
|
|
|
|
|
|
|
test "serves the compressed file if available" do
|
|
|
|
conn =
|
|
|
|
conn(:get, "/app.js")
|
|
|
|
|> put_req_header("accept-encoding", "gzip")
|
|
|
|
|> call()
|
|
|
|
|
|
|
|
assert conn.status == 200
|
|
|
|
assert get_resp_header(conn, "content-encoding") == ["gzip"]
|
2022-10-04 14:46:55 +08:00
|
|
|
assert get_resp_header(conn, "content-type") == ["text/javascript"]
|
2021-03-17 08:53:44 +08:00
|
|
|
assert get_resp_header(conn, "etag") == [~s{"digest"}]
|
|
|
|
end
|
|
|
|
|
|
|
|
test "ignores unavailable paths" do
|
|
|
|
conn =
|
|
|
|
conn(:get, "/invalid.js")
|
|
|
|
|> call()
|
|
|
|
|
|
|
|
assert conn.status == 404
|
|
|
|
end
|
|
|
|
end
|