From dda0cdaa3f48d3a34564d1cf8657c1628f748133 Mon Sep 17 00:00:00 2001 From: Chris McCord Date: Tue, 14 Dec 2021 15:19:03 -0500 Subject: [PATCH] Test basic uploads --- .gitignore | 1 + config/test.exs | 4 ++ lib/live_beats/mp3_stat.ex | 2 +- lib/live_beats_web/live/live_helpers.ex | 6 +- lib/live_beats_web/live/profile_live.ex | 2 +- .../live_beats_web/live/profile_live_test.exs | 58 ++++++++++++++++++ test/support/fixtures/accounts_fixtures.ex | 2 +- test/support/fixtures/silence1s.mp3 | Bin 0 -> 37206 bytes 8 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 test/live_beats_web/live/profile_live_test.exs create mode 100644 test/support/fixtures/silence1s.mp3 diff --git a/.gitignore b/.gitignore index 996b81b..9320028 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ npm-debug.log /assets/node_modules/ /priv/uploads +/tmp \ No newline at end of file diff --git a/config/test.exs b/config/test.exs index be278a9..043e354 100644 --- a/config/test.exs +++ b/config/test.exs @@ -1,5 +1,9 @@ import Config +config :live_beats, :files, [ + uploads_dir: Path.expand("../tmp/test-uploads", __DIR__), + host: [scheme: "http", host: "localhost", port: 4000], +] # Configure your database # # The MIX_TEST_PARTITION environment variable can be used diff --git a/lib/live_beats/mp3_stat.ex b/lib/live_beats/mp3_stat.ex index e2260c2..2016fb4 100644 --- a/lib/live_beats/mp3_stat.ex +++ b/lib/live_beats/mp3_stat.ex @@ -65,7 +65,7 @@ defmodule LiveBeats.MP3Stat do parse_frames(major_version, rest, tag_size - ext_header_size, []) end - defp parse_tag(_), do: %{} + defp parse_tag(_), do: {%{}, ""} defp decode_synchsafe_integer(<>), do: bin diff --git a/lib/live_beats_web/live/live_helpers.ex b/lib/live_beats_web/live/live_helpers.ex index 4414f8f..00b497d 100644 --- a/lib/live_beats_web/live/live_helpers.ex +++ b/lib/live_beats_web/live/live_helpers.ex @@ -464,11 +464,13 @@ defmodule LiveBeatsWeb.LiveHelpers do ~H""" <%= if @primary do %> - <%= live_patch to: @patch, class: "order-0 inline-flex items-center px-4 py-2 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-purple-600 hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500 sm:order-1 sm:ml-3" do %> + <%= live_patch [to: @patch, class: "order-0 inline-flex items-center px-4 py-2 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-purple-600 hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500 sm:order-1 sm:ml-3"] ++ + assigns_to_attributes(assigns, [:primary, :patch]) do %> <%= render_slot(@inner_block) %> <% end %> <% else %> - <%= live_patch to: @patch, class: "order-1 inline-flex items-center px-4 py-2 border border-gray-300 shadow-sm text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500 sm:order-0 sm:ml-0 lg:ml-3" do %> + <%= live_patch [to: @patch, class: "order-1 inline-flex items-center px-4 py-2 border border-gray-300 shadow-sm text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500 sm:order-0 sm:ml-0 lg:ml-3"] ++ + assigns_to_attributes(assigns, [:primary, :patch]) do %> <%= render_slot(@inner_block) %> <% end %> <% end %> diff --git a/lib/live_beats_web/live/profile_live.ex b/lib/live_beats_web/live/profile_live.ex index 42f0950..1eec09d 100644 --- a/lib/live_beats_web/live/profile_live.ex +++ b/lib/live_beats_web/live/profile_live.ex @@ -32,7 +32,7 @@ defmodule LiveBeatsWeb.ProfileLive do <% end %> <%= if @owns_profile? do %> - <.button primary patch={profile_path(@current_user, :new)}> + <.button id="upload-btn" primary patch={profile_path(@current_user, :new)}> <.icon name={:upload}/>Upload Songs <% end %> diff --git a/test/live_beats_web/live/profile_live_test.exs b/test/live_beats_web/live/profile_live_test.exs new file mode 100644 index 0000000..98720bf --- /dev/null +++ b/test/live_beats_web/live/profile_live_test.exs @@ -0,0 +1,58 @@ +defmodule LiveBeatsWeb.ProfileLiveTest do + use LiveBeatsWeb.ConnCase + + import Phoenix.LiveViewTest + import LiveBeats.AccountsFixtures + + alias LiveBeatsWeb.LiveHelpers + + setup %{conn: conn} do + current_user = user_fixture(%{username: "chrismccord"}) + user2 = user_fixture(%{username: "mrkurt"}) + conn = log_in_user(conn, current_user) + {:ok, conn: conn, current_user: current_user, user2: user2} + end + + test "profile page", %{conn: conn, current_user: current_user} do + {:ok, lv, dead_html} = live(conn, LiveHelpers.profile_path(current_user)) + + assert dead_html =~ "chrismccord's beats" + + assert lv + |> element("#upload-btn") + |> render_click() + + assert render(lv) =~ "Add Songs" + + mp3 = + file_input(lv, "#song-form", :mp3, [ + %{ + last_modified: 1_594_171_879_000, + name: "my.mp3", + content: File.read!("test/support/fixtures/silence1s.mp3"), + type: "audio/mpeg" + } + ]) + + assert render_upload(mp3, "my.mp3") =~ "can't be blank" + + [%{"ref" => ref}] = mp3.entries + + refute lv + |> form("#song-form") + |> render_change(%{ + "_target" => ["songs", ref, "artist"], + "songs" => %{ + ref => %{"artist" => "Anon", "attribution" => "", "title" => "silence1s"} + } + }) =~ "can't be blank" + + assert {:ok, _new_lv, html} = + lv |> form("#song-form") |> render_submit() |> follow_redirect(conn) + + assert_redirected(lv, "/#{current_user.username}") + assert html =~ "1 song(s) uploaded" + + assert html =~ "silence1s" + end +end diff --git a/test/support/fixtures/accounts_fixtures.ex b/test/support/fixtures/accounts_fixtures.ex index 1866289..3bd6b5b 100644 --- a/test/support/fixtures/accounts_fixtures.ex +++ b/test/support/fixtures/accounts_fixtures.ex @@ -27,7 +27,7 @@ defmodule LiveBeats.AccountsFixtures do "html_url" => "https://github.com/chrismccord", "id" => 1234, "location" => "Charlotte, NC", - "login" => "chrismccord", + "login" => attrs[:username] || "chrismccord", "name" => "Chris McCord", "node_id" => "slkdfjsklfjsf", "organizations_url" => "https://api.github.com/users/chrismccord/orgs", diff --git a/test/support/fixtures/silence1s.mp3 b/test/support/fixtures/silence1s.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fed8dc6015f31a68e94a812141850e284803a300 GIT binary patch literal 37206 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 literal 0 HcmV?d00001