From 1cee7a19eef49bfba8f45fed82a2db22a2d760fa Mon Sep 17 00:00:00 2001 From: Kieran Date: Mon, 28 Apr 2025 11:43:51 -0700 Subject: [PATCH] Made source sorting case-insensitive (#708) --- .../sources/source_live/index_table_live.ex | 4 ++-- .../controllers/sources/index_table_live_test.exs | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/pinchflat_web/controllers/sources/source_live/index_table_live.ex b/lib/pinchflat_web/controllers/sources/source_live/index_table_live.ex index 5ada1b0..a9f63c8 100644 --- a/lib/pinchflat_web/controllers/sources/source_live/index_table_live.ex +++ b/lib/pinchflat_web/controllers/sources/source_live/index_table_live.ex @@ -54,8 +54,8 @@ defmodule PinchflatWeb.Sources.SourceLive.IndexTableLive do defp sort_attr(:pending_count), do: dynamic([s, mp, dl, pe], pe.pending_count) defp sort_attr(:downloaded_count), do: dynamic([s, mp, dl], dl.downloaded_count) defp sort_attr(:media_size_bytes), do: dynamic([s, mp, dl], dl.media_size_bytes) - defp sort_attr(:media_profile_name), do: dynamic([s, mp], mp.name) - defp sort_attr(:custom_name), do: dynamic([s], s.custom_name) + defp sort_attr(:media_profile_name), do: dynamic([s, mp], fragment("? COLLATE NOCASE", mp.name)) + defp sort_attr(:custom_name), do: dynamic([s], fragment("? COLLATE NOCASE", s.custom_name)) defp sort_attr(:enabled), do: dynamic([s], s.enabled) defp set_sources(%{assigns: assigns} = socket) do diff --git a/test/pinchflat_web/controllers/sources/index_table_live_test.exs b/test/pinchflat_web/controllers/sources/index_table_live_test.exs index 675e47d..c53380d 100644 --- a/test/pinchflat_web/controllers/sources/index_table_live_test.exs +++ b/test/pinchflat_web/controllers/sources/index_table_live_test.exs @@ -75,6 +75,16 @@ defmodule PinchflatWeb.Sources.SourceLive.IndexTableLiveTest do assert render_element(view, "tbody tr:first-child") =~ source1.custom_name assert render_element(view, "tbody tr:last-child") =~ source2.custom_name end + + test "name is sorted without case sensitivity", %{conn: conn} do + source1 = source_fixture(custom_name: "Source_B") + source2 = source_fixture(custom_name: "source_a") + + {:ok, view, _html} = live_isolated(conn, IndexTableLive, session: create_session()) + + assert render_element(view, "tbody tr:first-child") =~ source2.custom_name + assert render_element(view, "tbody tr:last-child") =~ source1.custom_name + end end describe "when testing pagination" do