diff --git a/lib/asciinema/asciicasts.ex b/lib/asciinema/asciicasts.ex index 4014f89..8fdce4b 100644 --- a/lib/asciinema/asciicasts.ex +++ b/lib/asciinema/asciicasts.ex @@ -50,9 +50,10 @@ defmodule Asciinema.Asciicasts do def create_asciicast(user, %{"meta" => attrs, "stdout" => %Plug.Upload{filename: d_filename} = data, - "stdout_timing" => %Plug.Upload{filename: t_filename} = timing}, _user_agent) do + "stdout_timing" => %Plug.Upload{filename: t_filename} = timing}, user_agent) do attrs = Map.put(attrs, "version", 0) asciicast = %Asciicast{user_id: user.id, + user_agent: unless(attrs["uname"], do: user_agent), stdout_data: d_filename, stdout_timing: t_filename, private: user.asciicasts_private_by_default} diff --git a/test/asciinema/asciicasts_test.exs b/test/asciinema/asciicasts_test.exs index f964f56..f2fbca6 100644 --- a/test/asciinema/asciicasts_test.exs +++ b/test/asciinema/asciicasts_test.exs @@ -3,7 +3,7 @@ defmodule Asciinema.AsciicastsTest do alias Asciinema.Asciicasts describe "create_asciicast/2" do - test "json file, v0 format, <= v0.9.7 client" do + test "json file, v0 format with uname" do user = fixture(:user) params = %{"meta" => %{"command" => "/bin/bash", "duration" => 11.146430015564, @@ -35,6 +35,37 @@ defmodule Asciinema.AsciicastsTest do assert asciicast.user_agent == nil end + test "json file, v0 format without uname" do + user = fixture(:user) + params = %{"meta" => %{"command" => "/bin/bash", + "duration" => 11.146430015564, + "shell" => "/bin/zsh", + "terminal_columns" => 96, + "terminal_lines" => 26, + "terminal_type" => "screen-256color", + "title" => "bashing :)"}, + "stdout" => fixture(:upload, %{path: "0.9.8/stdout", + content_type: "application/octet-stream"}), + "stdout_timing" => fixture(:upload, %{path: "0.9.8/stdout.time", + content_type: "application/octet-stream"})} + + {:ok, asciicast} = Asciicasts.create_asciicast(user, params, "a/user/agent") + + assert asciicast.version == 0 + assert asciicast.file == nil + assert asciicast.stdout_data == "stdout" + assert asciicast.stdout_timing == "stdout.time" + assert asciicast.command == "/bin/bash" + assert asciicast.duration == 11.146430015564 + assert asciicast.shell == "/bin/zsh" + assert asciicast.terminal_type == "screen-256color" + assert asciicast.terminal_columns == 96 + assert asciicast.terminal_lines == 26 + assert asciicast.title == "bashing :)" + assert asciicast.uname == nil + assert asciicast.user_agent == "a/user/agent" + end + test "json file, v1 format" do user = fixture(:user) upload = fixture(:upload, %{path: "1/asciicast.json"}) diff --git a/test/controllers/api/asciicast_controller_test.exs b/test/controllers/api/asciicast_controller_test.exs index 742d1f3..a10f0ea 100644 --- a/test/controllers/api/asciicast_controller_test.exs +++ b/test/controllers/api/asciicast_controller_test.exs @@ -31,6 +31,20 @@ defmodule Asciinema.Api.AsciicastControllerTest do assert List.first(get_resp_header(conn, "location")) =~ @asciicast_url end + @tag token: nil + test "separate files (pre-v1 params), v0.9.8 client", %{conn: conn} do + asciicast = %{"meta" => fixture(:upload, %{path: "0.9.8/meta.json", + content_type: "application/json"}), + "stdout" => fixture(:upload, %{path: "0.9.8/stdout", + content_type: "application/octet-stream"}), + "stdout_timing" => fixture(:upload, %{path: "0.9.8/stdout.time", + content_type: "application/octet-stream"})} + + conn = post conn, api_asciicast_path(conn, :create), %{"asciicast" => asciicast} + assert text_response(conn, 201) =~ @asciicast_url + assert List.first(get_resp_header(conn, "location")) =~ @asciicast_url + end + test "json file, v1 format", %{conn: conn} do upload = fixture(:upload, %{path: "1/asciicast.json"}) conn = post conn, api_asciicast_path(conn, :create), %{"asciicast" => upload}