From 676c2e4290d6a2b59ee801b89e8618f494ecbb4e Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Wed, 28 May 2025 19:41:57 +0100 Subject: [PATCH] Enable quokka with :module_directives rule --- .formatter.exs | 7 +++++-- .iex.exs | 4 ++-- lib/last_fm/api.ex | 6 +++--- lib/last_fm/refresh.ex | 4 ++-- lib/mix/tasks/esbuild/check_version.ex | 4 ++-- lib/mix/tasks/esbuild/update_version.ex | 4 ++-- lib/mix/tasks/music_brainz/refresh_fixtures.ex | 4 ++-- lib/mix/tasks/music_library/prod/db_migrate.ex | 3 ++- lib/mix/tasks/music_library/prod/db_pull.ex | 3 ++- lib/mix/tasks/music_library/prod/db_vacuum.ex | 3 ++- lib/mix/tasks/music_library/prod/ping.ex | 3 ++- lib/mix/tasks/obsidian/import.ex | 4 ++-- lib/mix/tasks/tailwind/check_version.ex | 4 ++-- lib/mix/tasks/tailwind/update_version.ex | 4 ++-- lib/music_brainz/api.ex | 4 ++-- lib/music_brainz/release_group_search_result.ex | 4 ++-- lib/music_brainz/release_search_result.ex | 4 ++-- lib/music_library/artists.ex | 2 +- lib/music_library/artists/artist_info.ex | 1 + lib/music_library/collection.ex | 3 +-- lib/music_library/records/batch.ex | 5 +++-- lib/music_library/records/record.ex | 1 + lib/music_library/secrets/secret.ex | 1 + lib/music_library_web.ex | 9 +++++---- lib/music_library_web/auth.ex | 3 ++- .../components/core_components.ex | 2 +- lib/music_library_web/live/artist_live/show.ex | 6 +++--- .../live/collection_live/index.ex | 3 ++- lib/music_library_web/live/stats_live/index.ex | 2 +- .../live/wishlist_live/index.ex | 1 + lib/music_library_web/router.ex | 1 + lib/music_library_web/telemetry.ex | 1 + mix.exs | 1 + mix.lock | 1 + test/music_brainz_test.exs | 3 ++- test/music_library/artists_test.exs | 3 ++- test/music_library/barcode_scan/result_test.exs | 2 +- test/music_library/collection_test.exs | 3 ++- test/music_library/records/cover_test.exs | 1 + test/music_library/records/record_test.exs | 1 + test/music_library/records_test.exs | 7 ++++--- test/music_library/wishlist_test.exs | 3 ++- .../controllers/cover_controller_test.exs | 1 + .../live/artist_live/show_test.exs | 1 + .../live/collection_live/index_test.exs | 5 +++-- .../live/collection_live/show_test.exs | 1 - .../live/stats_live/index_test.exs | 9 +++++---- .../live/wishlist_live/show_test.exs | 1 - test/music_library_web/plug/auth_test.exs | 1 + test/obsidian/parser_test.exs | 1 + test/support/conn_case.ex | 17 +++++++++-------- test/support/data_case.ex | 4 ++-- 52 files changed, 103 insertions(+), 73 deletions(-) diff --git a/.formatter.exs b/.formatter.exs index e584d27c..60ec4ffb 100644 --- a/.formatter.exs +++ b/.formatter.exs @@ -1,6 +1,9 @@ [ import_deps: [:ecto, :ecto_sql, :oban, :oban_web, :phoenix, :phoenix_live_view], subdirectories: ["priv/*/migrations"], - plugins: [Phoenix.LiveView.HTMLFormatter], - inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"] + plugins: [Phoenix.LiveView.HTMLFormatter, Quokka], + inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"], + quokka: [ + only: [:module_directives] + ] ] diff --git a/.iex.exs b/.iex.exs index 60c76686..a2e797cd 100644 --- a/.iex.exs +++ b/.iex.exs @@ -1,3 +1,5 @@ +import Helpers + defmodule Helpers do def debug! do Logger.configure(level: :debug) @@ -11,5 +13,3 @@ defmodule Helpers do Logger.configure(level: :warning) end end - -import Helpers diff --git a/lib/last_fm/api.ex b/lib/last_fm/api.ex index fd30fc50..5a013602 100644 --- a/lib/last_fm/api.ex +++ b/lib/last_fm/api.ex @@ -1,8 +1,8 @@ defmodule LastFm.API do - require Logger - - alias LastFm.{Artist, Session, Track} alias LastFm.API.{ErrorResponse, Signature} + alias LastFm.{Artist, Session, Track} + + require Logger def get_session(token, config) do params = diff --git a/lib/last_fm/refresh.ex b/lib/last_fm/refresh.ex index 40152818..0b43f464 100644 --- a/lib/last_fm/refresh.ex +++ b/lib/last_fm/refresh.ex @@ -35,10 +35,10 @@ defmodule LastFm.Refresh do use GenServer - require Logger - alias LastFm.{API, Config, Feed} + require Logger + @type config :: Config.t() @spec start_link(config) :: GenServer.on_start() diff --git a/lib/mix/tasks/esbuild/check_version.ex b/lib/mix/tasks/esbuild/check_version.ex index 452e7d6d..84601511 100644 --- a/lib/mix/tasks/esbuild/check_version.ex +++ b/lib/mix/tasks/esbuild/check_version.ex @@ -1,6 +1,4 @@ defmodule Mix.Tasks.Esbuild.CheckVersion do - use Mix.Task - @shortdoc "Checks the the current Esbuild version is the latest" @moduledoc """ Checks the the current esbuild version is the latest. @@ -8,6 +6,8 @@ defmodule Mix.Tasks.Esbuild.CheckVersion do Exits with 0 if versions match, 1 if the esbuild needs to be updated. """ + use Mix.Task + alias Mix.Tasks.Esbuild.Release @impl Mix.Task diff --git a/lib/mix/tasks/esbuild/update_version.ex b/lib/mix/tasks/esbuild/update_version.ex index dc4ab124..f99dd330 100644 --- a/lib/mix/tasks/esbuild/update_version.ex +++ b/lib/mix/tasks/esbuild/update_version.ex @@ -1,11 +1,11 @@ defmodule Mix.Tasks.Esbuild.UpdateVersion do - use Mix.Task - @shortdoc "Update the configured esbuild versino to latest." @moduledoc """ Update the configured esbuild versino to latest. """ + use Mix.Task + alias Mix.Tasks.Esbuild.Release @impl Mix.Task diff --git a/lib/mix/tasks/music_brainz/refresh_fixtures.ex b/lib/mix/tasks/music_brainz/refresh_fixtures.ex index cbcf0c85..0f766680 100644 --- a/lib/mix/tasks/music_brainz/refresh_fixtures.ex +++ b/lib/mix/tasks/music_brainz/refresh_fixtures.ex @@ -1,11 +1,11 @@ defmodule Mix.Tasks.MusicBrainz.RefreshFixtures do - use Mix.Task - @shortdoc "Fetch and recreate test fixtures that depend on network resources." @moduledoc """ Fetch and recreate test fixtures that depend on network resources. """ + use Mix.Task + require Logger @fixtures_folder Path.join([File.cwd!(), "test/support/fixtures/music_brainz"]) diff --git a/lib/mix/tasks/music_library/prod/db_migrate.ex b/lib/mix/tasks/music_library/prod/db_migrate.ex index fdaf3e8e..6ec8e2f6 100644 --- a/lib/mix/tasks/music_library/prod/db_migrate.ex +++ b/lib/mix/tasks/music_library/prod/db_migrate.ex @@ -1,5 +1,4 @@ defmodule Mix.Tasks.MusicLibrary.Prod.DbMigrate do - use Mix.Task @shortdoc "Run migrations on the production database" @moduledoc """ Run migrations on the production database. @@ -7,6 +6,8 @@ defmodule Mix.Tasks.MusicLibrary.Prod.DbMigrate do Requires the `flyctl` CLI to be installed and authenticated. """ + use Mix.Task + import Mix.Tasks.MusicLibrary.Prod.Helpers @impl Mix.Task diff --git a/lib/mix/tasks/music_library/prod/db_pull.ex b/lib/mix/tasks/music_library/prod/db_pull.ex index d20dd2f4..6cd692fa 100644 --- a/lib/mix/tasks/music_library/prod/db_pull.ex +++ b/lib/mix/tasks/music_library/prod/db_pull.ex @@ -1,11 +1,12 @@ defmodule Mix.Tasks.MusicLibrary.Prod.DbPull do - use Mix.Task @shortdoc "Pulls the latest database from the production server" @moduledoc """ Pulls the latest database from the production server. Requires the `flyctl` CLI to be installed and authenticated. """ + use Mix.Task + import Mix.Tasks.MusicLibrary.Prod.Helpers @impl Mix.Task diff --git a/lib/mix/tasks/music_library/prod/db_vacuum.ex b/lib/mix/tasks/music_library/prod/db_vacuum.ex index 7d039a86..167be801 100644 --- a/lib/mix/tasks/music_library/prod/db_vacuum.ex +++ b/lib/mix/tasks/music_library/prod/db_vacuum.ex @@ -1,5 +1,4 @@ defmodule Mix.Tasks.MusicLibrary.Prod.DbVacuum do - use Mix.Task @shortdoc "Force VACUUM the production database" @moduledoc """ Force VACUUM the production database. This is necessary to make sure that all @@ -8,6 +7,8 @@ defmodule Mix.Tasks.MusicLibrary.Prod.DbVacuum do Requires the `flyctl` CLI to be installed and authenticated. """ + use Mix.Task + import Mix.Tasks.MusicLibrary.Prod.Helpers @impl Mix.Task diff --git a/lib/mix/tasks/music_library/prod/ping.ex b/lib/mix/tasks/music_library/prod/ping.ex index 468987d1..b9773838 100644 --- a/lib/mix/tasks/music_library/prod/ping.ex +++ b/lib/mix/tasks/music_library/prod/ping.ex @@ -1,10 +1,11 @@ defmodule Mix.Tasks.MusicLibrary.Prod.Ping do - use Mix.Task @shortdoc "Ping the production instance" @moduledoc """ Ping the production instance - useful to wake it up if suspended. """ + use Mix.Task + @impl Mix.Task def run(_args) do Application.ensure_all_started(:req) diff --git a/lib/mix/tasks/obsidian/import.ex b/lib/mix/tasks/obsidian/import.ex index 403df123..17295e48 100644 --- a/lib/mix/tasks/obsidian/import.ex +++ b/lib/mix/tasks/obsidian/import.ex @@ -1,6 +1,4 @@ defmodule Mix.Tasks.Obsidian.Import do - use Mix.Task - @shortdoc "Import records from an Obsidian Vault containing Media entries " @moduledoc """ Import records from an Obsidian Vault containing Media entries. @@ -10,6 +8,8 @@ defmodule Mix.Tasks.Obsidian.Import do `mix obsidian.import path/to/vault` """ + use Mix.Task + @impl Mix.Task def run(args) do case args do diff --git a/lib/mix/tasks/tailwind/check_version.ex b/lib/mix/tasks/tailwind/check_version.ex index 854cce20..9dce5d86 100644 --- a/lib/mix/tasks/tailwind/check_version.ex +++ b/lib/mix/tasks/tailwind/check_version.ex @@ -1,6 +1,4 @@ defmodule Mix.Tasks.Tailwind.CheckVersion do - use Mix.Task - @shortdoc "Checks the the current Tailwind version is the latest" @moduledoc """ Checks the the current Tailwind version is the latest. @@ -8,6 +6,8 @@ defmodule Mix.Tasks.Tailwind.CheckVersion do Exits with 0 if versions match, 1 if the Tailwind needs to be updated. """ + use Mix.Task + alias Mix.Tasks.Tailwind.Release @impl Mix.Task diff --git a/lib/mix/tasks/tailwind/update_version.ex b/lib/mix/tasks/tailwind/update_version.ex index 7466d7f1..43551003 100644 --- a/lib/mix/tasks/tailwind/update_version.ex +++ b/lib/mix/tasks/tailwind/update_version.ex @@ -1,11 +1,11 @@ defmodule Mix.Tasks.Tailwind.UpdateVersion do - use Mix.Task - @shortdoc "Update the configured tailwind versino to latest." @moduledoc """ Update the configured tailwind versino to latest. """ + use Mix.Task + alias Mix.Tasks.Tailwind.Release @impl Mix.Task diff --git a/lib/music_brainz/api.ex b/lib/music_brainz/api.ex index 5a334e57..35ea328a 100644 --- a/lib/music_brainz/api.ex +++ b/lib/music_brainz/api.ex @@ -6,10 +6,10 @@ defmodule MusicBrainz.API do - Extend the metadata associated with existing records """ - require Logger - alias MusicBrainz.{Artist, ReleaseGroupSearchResult, ReleaseSearchResult} + require Logger + @doc """ Uses the [lookup](https://musicbrainz.org/doc/MusicBrainz_API#Lookups) endpoint with the release group id and include the associated artists, genres, releases and release group relations. Note that the API limits each included resource to 25 items. diff --git a/lib/music_brainz/release_group_search_result.ex b/lib/music_brainz/release_group_search_result.ex index 8ea61468..1092312d 100644 --- a/lib/music_brainz/release_group_search_result.ex +++ b/lib/music_brainz/release_group_search_result.ex @@ -1,9 +1,9 @@ defmodule MusicBrainz.ReleaseGroupSearchResult do + alias MusicBrainz.ReleaseGroup + @enforce_keys [:id, :type, :title, :artists, :release_date] defstruct [:id, :type, :title, :artists, :release_date] - alias MusicBrainz.ReleaseGroup - def from_api_response(rg) do %__MODULE__{ id: rg["id"], diff --git a/lib/music_brainz/release_search_result.ex b/lib/music_brainz/release_search_result.ex index 3f6ab680..325b91b3 100644 --- a/lib/music_brainz/release_search_result.ex +++ b/lib/music_brainz/release_search_result.ex @@ -1,9 +1,9 @@ defmodule MusicBrainz.ReleaseSearchResult do + alias MusicBrainz.ReleaseGroup + @enforce_keys [:id, :title, :release_group, :artists, :date, :barcode, :media] defstruct [:id, :title, :release_group, :artists, :date, :barcode, :media] - alias MusicBrainz.ReleaseGroup - def from_api_response(r) do %__MODULE__{ id: r["id"], diff --git a/lib/music_library/artists.ex b/lib/music_library/artists.ex index d78c23c9..4bdbd08c 100644 --- a/lib/music_library/artists.ex +++ b/lib/music_library/artists.ex @@ -1,9 +1,9 @@ defmodule MusicLibrary.Artists do import Ecto.Query, warn: false - alias MusicLibrary.Repo alias MusicLibrary.Artists.ArtistInfo alias MusicLibrary.Records.{ArtistRecord, Record} + alias MusicLibrary.Repo alias MusicLibrary.{BackgroundRepo, Worker} def get_artist!(musicbrainz_id) do diff --git a/lib/music_library/artists/artist_info.ex b/lib/music_library/artists/artist_info.ex index 33f71bee..ab9642f9 100644 --- a/lib/music_library/artists/artist_info.ex +++ b/lib/music_library/artists/artist_info.ex @@ -1,5 +1,6 @@ defmodule MusicLibrary.Artists.ArtistInfo do use Ecto.Schema + import Ecto.Changeset alias MusicLibrary.Records.Cover diff --git a/lib/music_library/collection.ex b/lib/music_library/collection.ex index f3bdfd4f..868dc27c 100644 --- a/lib/music_library/collection.ex +++ b/lib/music_library/collection.ex @@ -1,12 +1,11 @@ defmodule MusicLibrary.Collection do import Ecto.Query, warn: false + import MusicLibrary.Records, only: [order_alphabetically: 0] alias MusicLibrary.Records alias MusicLibrary.Records.{Record, SearchIndex} alias MusicLibrary.Repo - import MusicLibrary.Records, only: [order_alphabetically: 0] - def search_records(query, opts \\ []) do limit = Keyword.get(opts, :limit, 20) offset = Keyword.get(opts, :offset, 0) diff --git a/lib/music_library/records/batch.ex b/lib/music_library/records/batch.ex index 1c68a834..eafce384 100644 --- a/lib/music_library/records/batch.ex +++ b/lib/music_library/records/batch.ex @@ -1,10 +1,11 @@ defmodule MusicLibrary.Records.Batch do - require Logger + import Ecto.Query alias MusicLibrary.Records alias MusicLibrary.Records.{Cover, Record} alias MusicLibrary.Repo - import Ecto.Query + + require Logger def refresh_musicbrainz_data(opts \\ []) do run_on_all_records(fn record -> diff --git a/lib/music_library/records/record.ex b/lib/music_library/records/record.ex index 1e6b9696..00790bda 100644 --- a/lib/music_library/records/record.ex +++ b/lib/music_library/records/record.ex @@ -1,5 +1,6 @@ defmodule MusicLibrary.Records.Record do use Ecto.Schema + import Ecto.Changeset alias MusicBrainz.{Release, ReleaseGroup} diff --git a/lib/music_library/secrets/secret.ex b/lib/music_library/secrets/secret.ex index 2b48b343..f2778805 100644 --- a/lib/music_library/secrets/secret.ex +++ b/lib/music_library/secrets/secret.ex @@ -1,5 +1,6 @@ defmodule MusicLibrary.Secrets.Secret do use Ecto.Schema + import Ecto.Changeset @primary_key {:name, :string, autogenerate: false} diff --git a/lib/music_library_web.ex b/lib/music_library_web.ex index 2ad0cd8d..44c6cd81 100644 --- a/lib/music_library_web.ex +++ b/lib/music_library_web.ex @@ -23,10 +23,11 @@ defmodule MusicLibraryWeb do quote do use Phoenix.Router, helpers: false - # Import common connection and controller functions to use in pipelines - import Plug.Conn import Phoenix.Controller import Phoenix.LiveView.Router + + # Import common connection and controller functions to use in pipelines + import Plug.Conn end end @@ -76,7 +77,6 @@ defmodule MusicLibraryWeb do def html do quote do use Phoenix.Component - use Gettext, backend: MusicLibraryWeb.Gettext # Import convenience functions from controllers @@ -91,10 +91,11 @@ defmodule MusicLibraryWeb do defp html_helpers do quote do use Gettext, backend: MusicLibraryWeb.Gettext + + import MusicLibraryWeb.CoreComponents # HTML escaping functionality import Phoenix.HTML # Core UI components and translation - import MusicLibraryWeb.CoreComponents # Shortcut for generating JS commands alias Phoenix.LiveView.JS diff --git a/lib/music_library_web/auth.ex b/lib/music_library_web/auth.ex index 0779cb02..71ae0b27 100644 --- a/lib/music_library_web/auth.ex +++ b/lib/music_library_web/auth.ex @@ -1,7 +1,8 @@ defmodule MusicLibraryWeb.Auth do use Gettext, backend: MusicLibraryWeb.Gettext - import Plug.Conn + import Phoenix.Controller, only: [put_flash: 3, redirect: 2] + import Plug.Conn def correct_login_password?(password) do Plug.Crypto.secure_compare(login_password(), password) diff --git a/lib/music_library_web/components/core_components.ex b/lib/music_library_web/components/core_components.ex index 4990aff6..cf0c00a1 100644 --- a/lib/music_library_web/components/core_components.ex +++ b/lib/music_library_web/components/core_components.ex @@ -15,9 +15,9 @@ defmodule MusicLibraryWeb.CoreComponents do Icons are provided by [heroicons](https://heroicons.com). See `icon/1` for usage. """ use Phoenix.Component + use Gettext, backend: MusicLibraryWeb.Gettext alias Phoenix.LiveView.JS - use Gettext, backend: MusicLibraryWeb.Gettext defdelegate badge(assigns), to: Fluxon.Components.Badge defdelegate button(assigns), to: Fluxon.Components.Button diff --git a/lib/music_library_web/live/artist_live/show.ex b/lib/music_library_web/live/artist_live/show.ex index 29f50e3d..69c736c9 100644 --- a/lib/music_library_web/live/artist_live/show.ex +++ b/lib/music_library_web/live/artist_live/show.ex @@ -1,12 +1,12 @@ defmodule MusicLibraryWeb.ArtistLive.Show do use MusicLibraryWeb, :live_view - alias MusicLibrary.Artists.ArtistInfo - alias MusicLibrary.{Artists, Records} - import MusicLibraryWeb.RecordComponents, only: [record_grid: 1, toggle_actions_menu: 1, close_actions_menu: 1, country_label: 1] + alias MusicLibrary.Artists.ArtistInfo + alias MusicLibrary.{Artists, Records} + attr :country, :map, required: true defp country_flag(assigns) do diff --git a/lib/music_library_web/live/collection_live/index.ex b/lib/music_library_web/live/collection_live/index.ex index b3959abf..e0d781cd 100644 --- a/lib/music_library_web/live/collection_live/index.ex +++ b/lib/music_library_web/live/collection_live/index.ex @@ -1,8 +1,9 @@ defmodule MusicLibraryWeb.CollectionLive.Index do use MusicLibraryWeb, :live_view + + import MusicLibraryWeb.BarcodeScannerComponent, only: [barcode_icon: 1] import MusicLibraryWeb.PaginationComponent import MusicLibraryWeb.RecordComponents - import MusicLibraryWeb.BarcodeScannerComponent, only: [barcode_icon: 1] alias MusicLibrary.Collection alias MusicLibrary.Records diff --git a/lib/music_library_web/live/stats_live/index.ex b/lib/music_library_web/live/stats_live/index.ex index 370f1720..fd59a661 100644 --- a/lib/music_library_web/live/stats_live/index.ex +++ b/lib/music_library_web/live/stats_live/index.ex @@ -1,8 +1,8 @@ defmodule MusicLibraryWeb.StatsLive.Index do use MusicLibraryWeb, :live_view - import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] import MusicLibraryWeb.ChartComponents + import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] alias MusicLibrary.{Collection, Records, ScrobbleActivity, Wishlist} diff --git a/lib/music_library_web/live/wishlist_live/index.ex b/lib/music_library_web/live/wishlist_live/index.ex index 4272628d..feadabea 100644 --- a/lib/music_library_web/live/wishlist_live/index.ex +++ b/lib/music_library_web/live/wishlist_live/index.ex @@ -1,5 +1,6 @@ defmodule MusicLibraryWeb.WishlistLive.Index do use MusicLibraryWeb, :live_view + import MusicLibraryWeb.PaginationComponent import MusicLibraryWeb.RecordComponents diff --git a/lib/music_library_web/router.ex b/lib/music_library_web/router.ex index 41b71243..102ee93f 100644 --- a/lib/music_library_web/router.ex +++ b/lib/music_library_web/router.ex @@ -76,6 +76,7 @@ defmodule MusicLibraryWeb.Router do if Application.compile_env(:music_library, :monitoring_routes) do use ErrorTracker.Web, :router + import Phoenix.LiveDashboard.Router scope "/dev" do diff --git a/lib/music_library_web/telemetry.ex b/lib/music_library_web/telemetry.ex index 6337fe0d..480461cd 100644 --- a/lib/music_library_web/telemetry.ex +++ b/lib/music_library_web/telemetry.ex @@ -1,5 +1,6 @@ defmodule MusicLibraryWeb.Telemetry do use Supervisor + import Telemetry.Metrics def start_link(arg) do diff --git a/mix.exs b/mix.exs index 0662bd9d..5c8f7cdc 100644 --- a/mix.exs +++ b/mix.exs @@ -71,6 +71,7 @@ defmodule MusicLibrary.MixProject do {:esbuild, "~> 0.8", runtime: Mix.env() == :dev}, {:tailwind, "~> 0.3", runtime: Mix.env() == :dev}, {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, + {:quokka, "~> 2.6", only: [:dev, :test], runtime: false}, {:live_debugger, "~> 0.2.0", only: :dev}, {:tidewave, "~> 0.1", only: :dev}, diff --git a/mix.lock b/mix.lock index faf224dc..28510424 100644 --- a/mix.lock +++ b/mix.lock @@ -49,6 +49,7 @@ "phoenix_test": {:hex, :phoenix_test, "0.6.0", "4ad75354b16b1c6f1f4723a9efd39e755746450355b36e1d23e0778624fe9d7f", [:mix], [{:floki, ">= 0.30.0", [hex: :floki, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, ">= 1.0.0", [hex: :mime, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.7.10", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.20 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}], "hexpm", "31dc45d07ac2f86a029e71075e785343b0913bd96a91394c51798426372a6e80"}, "plug": {:hex, :plug, "1.18.0", "d78df36c41f7e798f2edf1f33e1727eae438e9dd5d809a9997c463a108244042", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "819f9e176d51e44dc38132e132fe0accaf6767eab7f0303431e404da8476cfa2"}, "plug_crypto": {:hex, :plug_crypto, "2.1.1", "19bda8184399cb24afa10be734f84a16ea0a2bc65054e23a62bb10f06bc89491", [:mix], [], "hexpm", "6470bce6ffe41c8bd497612ffde1a7e4af67f36a15eea5f921af71cf3e11247c"}, + "quokka": {:hex, :quokka, "2.6.0", "a34ff876968fcef20594e349bd7d9a940c0ba85830d0efd8416ee8c0de4c430d", [:mix], [{:credo, "~> 1.7", [hex: :credo, repo: "hexpm", optional: false]}], "hexpm", "52ea62131cef122e2daddbb3b9f61b14d04adcb39316fe0dae03ca65eeec270b"}, "recon": {:hex, :recon, "2.5.6", "9052588e83bfedfd9b72e1034532aee2a5369d9d9343b61aeb7fbce761010741", [:mix, :rebar3], [], "hexpm", "96c6799792d735cc0f0fd0f86267e9d351e63339cbe03df9d162010cefc26bb0"}, "req": {:hex, :req, "0.5.10", "a3a063eab8b7510785a467f03d30a8d95f66f5c3d9495be3474b61459c54376c", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 2.0.6 or ~> 2.1", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "8a604815743f8a2d3b5de0659fa3137fa4b1cffd636ecb69b30b2b9b2c2559be"}, "table_rex": {:hex, :table_rex, "4.1.0", "fbaa8b1ce154c9772012bf445bfb86b587430fb96f3b12022d3f35ee4a68c918", [:mix], [], "hexpm", "95932701df195d43bc2d1c6531178fc8338aa8f38c80f098504d529c43bc2601"}, diff --git a/test/music_brainz_test.exs b/test/music_brainz_test.exs index c182e072..ad9ac3e3 100644 --- a/test/music_brainz_test.exs +++ b/test/music_brainz_test.exs @@ -1,10 +1,11 @@ defmodule MusicBrainzTest do use ExUnit.Case, async: true - alias MusicBrainz.ReleaseGroupSearchResult import MusicBrainz.Fixtures.Release import MusicBrainz.Fixtures.ReleaseGroup + alias MusicBrainz.ReleaseGroupSearchResult + describe "search_release_group/2" do test "it returns results with correct limit and offset" do results = release_group_search_results() diff --git a/test/music_library/artists_test.exs b/test/music_library/artists_test.exs index d0c3688c..1cc034a3 100644 --- a/test/music_library/artists_test.exs +++ b/test/music_library/artists_test.exs @@ -1,9 +1,10 @@ defmodule MusicLibrary.ArtistsTest do use MusicLibrary.DataCase - alias MusicLibrary.Artists import MusicLibrary.Fixtures.Records + alias MusicLibrary.Artists + describe "get_artist/1" do test "it returns records with essential data" do record = record() diff --git a/test/music_library/barcode_scan/result_test.exs b/test/music_library/barcode_scan/result_test.exs index 47efdea3..eb3951b8 100644 --- a/test/music_library/barcode_scan/result_test.exs +++ b/test/music_library/barcode_scan/result_test.exs @@ -1,8 +1,8 @@ defmodule MusicLibrary.BarcodeScan.ResultTest do use ExUnit.Case, async: true - alias MusicLibrary.BarcodeScan.Result alias MusicBrainz.{ReleaseGroupSearchResult, ReleaseSearchResult} + alias MusicLibrary.BarcodeScan.Result @release_group %ReleaseGroupSearchResult{ id: "123", diff --git a/test/music_library/collection_test.exs b/test/music_library/collection_test.exs index bc9933f5..98f9ddd7 100644 --- a/test/music_library/collection_test.exs +++ b/test/music_library/collection_test.exs @@ -1,9 +1,10 @@ defmodule MusicLibrary.CollectionTest do use MusicLibrary.DataCase - alias MusicLibrary.Collection import MusicLibrary.Fixtures.Records + alias MusicLibrary.Collection + defp fill_collection(_) do # Purchased dates are in ascending order records = [ diff --git a/test/music_library/records/cover_test.exs b/test/music_library/records/cover_test.exs index 68bc4150..cd1e7fba 100644 --- a/test/music_library/records/cover_test.exs +++ b/test/music_library/records/cover_test.exs @@ -2,6 +2,7 @@ defmodule MusicLibrary.Records.CoverTest do use ExUnit.Case, async: true import MusicLibrary.Fixtures.Records + alias MusicLibrary.Records.Cover describe "resize/1" do diff --git a/test/music_library/records/record_test.exs b/test/music_library/records/record_test.exs index 4cc0ed99..ff8f1e3b 100644 --- a/test/music_library/records/record_test.exs +++ b/test/music_library/records/record_test.exs @@ -2,6 +2,7 @@ defmodule MusicLibrary.Records.RecordTest do use ExUnit.Case, async: true import MusicBrainz.Fixtures.ReleaseGroup + alias MusicLibrary.Records.Record doctest Record diff --git a/test/music_library/records_test.exs b/test/music_library/records_test.exs index 8b193278..a7481800 100644 --- a/test/music_library/records_test.exs +++ b/test/music_library/records_test.exs @@ -1,11 +1,12 @@ defmodule MusicLibrary.RecordsTest do use MusicLibrary.DataCase + import MusicBrainz.Fixtures.Release + import MusicBrainz.Fixtures.ReleaseGroup + import MusicLibrary.Fixtures.Records + alias MusicLibrary.Records alias MusicLibrary.Records.SearchIndex - import MusicLibrary.Fixtures.Records - import MusicBrainz.Fixtures.ReleaseGroup - import MusicBrainz.Fixtures.Release defp create_records(_) do records = [ diff --git a/test/music_library/wishlist_test.exs b/test/music_library/wishlist_test.exs index 2f0c6bb4..0250139a 100644 --- a/test/music_library/wishlist_test.exs +++ b/test/music_library/wishlist_test.exs @@ -1,9 +1,10 @@ defmodule MusicLibrary.WishlistTest do use MusicLibrary.DataCase - alias MusicLibrary.Wishlist import MusicLibrary.Fixtures.Records + alias MusicLibrary.Wishlist + defp fill_wishlist(_) do records = [ record(%{purchased_at: nil, title: "Brave"}), diff --git a/test/music_library_web/controllers/cover_controller_test.exs b/test/music_library_web/controllers/cover_controller_test.exs index c43e84a3..76127915 100644 --- a/test/music_library_web/controllers/cover_controller_test.exs +++ b/test/music_library_web/controllers/cover_controller_test.exs @@ -2,6 +2,7 @@ defmodule MusicLibraryWeb.CoverControllerTest do use MusicLibraryWeb.ConnCase import MusicLibrary.Fixtures.Records + alias MusicLibrary.Records.Cover defp create_record(_) do diff --git a/test/music_library_web/live/artist_live/show_test.exs b/test/music_library_web/live/artist_live/show_test.exs index ba42709d..c86a83e1 100644 --- a/test/music_library_web/live/artist_live/show_test.exs +++ b/test/music_library_web/live/artist_live/show_test.exs @@ -2,6 +2,7 @@ defmodule MusicLibraryWeb.ArtistLive.ShowTest do use MusicLibraryWeb.ConnCase import MusicLibrary.Fixtures.Records + alias LastFm.Fixtures defp fill_collection(_config) do diff --git a/test/music_library_web/live/collection_live/index_test.exs b/test/music_library_web/live/collection_live/index_test.exs index bd0d638a..2753953f 100644 --- a/test/music_library_web/live/collection_live/index_test.exs +++ b/test/music_library_web/live/collection_live/index_test.exs @@ -1,10 +1,11 @@ defmodule MusicLibraryWeb.CollectionLive.IndexTest do use MusicLibraryWeb.ConnCase - import MusicLibrary.Fixtures.Records - import MusicBrainz.Fixtures.ReleaseGroup import MusicBrainz.Fixtures.Release + import MusicBrainz.Fixtures.ReleaseGroup + import MusicLibrary.Fixtures.Records import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] + alias MusicBrainz.ReleaseGroupSearchResult alias MusicLibrary.Records.{Cover, Record} diff --git a/test/music_library_web/live/collection_live/show_test.exs b/test/music_library_web/live/collection_live/show_test.exs index df510306..68f34af7 100644 --- a/test/music_library_web/live/collection_live/show_test.exs +++ b/test/music_library_web/live/collection_live/show_test.exs @@ -2,7 +2,6 @@ defmodule MusicLibraryWeb.CollectionLive.ShowTest do use MusicLibraryWeb.ConnCase import MusicLibrary.Fixtures.Records - import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] alias MusicBrainz.Fixtures diff --git a/test/music_library_web/live/stats_live/index_test.exs b/test/music_library_web/live/stats_live/index_test.exs index 8fa17d5b..5d4bf03f 100644 --- a/test/music_library_web/live/stats_live/index_test.exs +++ b/test/music_library_web/live/stats_live/index_test.exs @@ -1,11 +1,12 @@ defmodule MusicLibraryWeb.StatsLive.IndexTest do use MusicLibraryWeb.ConnCase - alias MusicLibrary.{Records, Repo, Wishlist} - import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] - import MusicLibrary.Fixtures.Records - import MusicBrainz.Fixtures.ReleaseGroup import MusicBrainz.Fixtures.Release + import MusicBrainz.Fixtures.ReleaseGroup + import MusicLibrary.Fixtures.Records + import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] + + alias MusicLibrary.{Records, Repo, Wishlist} defp fill_collection(_) do current_time = DateTime.utc_now() diff --git a/test/music_library_web/live/wishlist_live/show_test.exs b/test/music_library_web/live/wishlist_live/show_test.exs index 7a385cbe..a17e707b 100644 --- a/test/music_library_web/live/wishlist_live/show_test.exs +++ b/test/music_library_web/live/wishlist_live/show_test.exs @@ -2,7 +2,6 @@ defmodule MusicLibraryWeb.WishlistLive.ShowTest do use MusicLibraryWeb.ConnCase import MusicLibrary.Fixtures.Records - import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] alias MusicLibrary.Records.Record diff --git a/test/music_library_web/plug/auth_test.exs b/test/music_library_web/plug/auth_test.exs index ee4e47ca..bd55f2da 100644 --- a/test/music_library_web/plug/auth_test.exs +++ b/test/music_library_web/plug/auth_test.exs @@ -1,5 +1,6 @@ defmodule MusicLibraryWeb.AuthTest do use ExUnit.Case, async: true + import Plug.Test alias MusicLibraryWeb.Auth diff --git a/test/obsidian/parser_test.exs b/test/obsidian/parser_test.exs index 3d6c1ff6..de2f1db0 100644 --- a/test/obsidian/parser_test.exs +++ b/test/obsidian/parser_test.exs @@ -1,5 +1,6 @@ defmodule Obsidian.ParserTest do use ExUnit.Case, async: true + alias Obsidian.{Entry, Parser} @marbles_entry_path Path.expand("../support/fixtures/obsidian/marillion-marbles.md", __DIR__) diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index 4981cbe5..3984759d 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -19,21 +19,22 @@ defmodule MusicLibraryWeb.ConnCase do using do quote do - # The default endpoint for testing - @endpoint MusicLibraryWeb.Endpoint - use MusicLibraryWeb, :verified_routes - # Import conveniences for testing with connections - import Plug.Conn - import Phoenix.ConnTest import MusicLibraryWeb.ConnCase - import PhoenixTest + import MusicLibraryWeb.LiveTestHelpers + import Phoenix.ConnTest import Phoenix.LiveViewTest, + # The default endpoint for testing only: [render: 1, render_async: 1, render_hook: 2, render_hook: 3, element: 2, element: 3] - import MusicLibraryWeb.LiveTestHelpers + import PhoenixTest + import Plug.Conn + + @endpoint MusicLibraryWeb.Endpoint + + # Import conveniences for testing with connections end end diff --git a/test/support/data_case.ex b/test/support/data_case.ex index dfe7e594..775a74a4 100644 --- a/test/support/data_case.ex +++ b/test/support/data_case.ex @@ -22,12 +22,12 @@ defmodule MusicLibrary.DataCase do quote do use Oban.Testing, repo: MusicLibrary.BackgroundRepo - alias MusicLibrary.Repo - import Ecto import Ecto.Changeset import Ecto.Query import MusicLibrary.DataCase + + alias MusicLibrary.Repo end end