Enable quokka with :module_directives rule

This commit is contained in:
Claudio Ortolina
2025-05-28 19:41:57 +01:00
parent 5207aa2773
commit 676c2e4290
52 changed files with 103 additions and 73 deletions
+5 -2
View File
@@ -1,6 +1,9 @@
[ [
import_deps: [:ecto, :ecto_sql, :oban, :oban_web, :phoenix, :phoenix_live_view], import_deps: [:ecto, :ecto_sql, :oban, :oban_web, :phoenix, :phoenix_live_view],
subdirectories: ["priv/*/migrations"], subdirectories: ["priv/*/migrations"],
plugins: [Phoenix.LiveView.HTMLFormatter], plugins: [Phoenix.LiveView.HTMLFormatter, Quokka],
inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"] inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"],
quokka: [
only: [:module_directives]
]
] ]
+2 -2
View File
@@ -1,3 +1,5 @@
import Helpers
defmodule Helpers do defmodule Helpers do
def debug! do def debug! do
Logger.configure(level: :debug) Logger.configure(level: :debug)
@@ -11,5 +13,3 @@ defmodule Helpers do
Logger.configure(level: :warning) Logger.configure(level: :warning)
end end
end end
import Helpers
+3 -3
View File
@@ -1,8 +1,8 @@
defmodule LastFm.API do defmodule LastFm.API do
require Logger
alias LastFm.{Artist, Session, Track}
alias LastFm.API.{ErrorResponse, Signature} alias LastFm.API.{ErrorResponse, Signature}
alias LastFm.{Artist, Session, Track}
require Logger
def get_session(token, config) do def get_session(token, config) do
params = params =
+2 -2
View File
@@ -35,10 +35,10 @@ defmodule LastFm.Refresh do
use GenServer use GenServer
require Logger
alias LastFm.{API, Config, Feed} alias LastFm.{API, Config, Feed}
require Logger
@type config :: Config.t() @type config :: Config.t()
@spec start_link(config) :: GenServer.on_start() @spec start_link(config) :: GenServer.on_start()
+2 -2
View File
@@ -1,6 +1,4 @@
defmodule Mix.Tasks.Esbuild.CheckVersion do defmodule Mix.Tasks.Esbuild.CheckVersion do
use Mix.Task
@shortdoc "Checks the the current Esbuild version is the latest" @shortdoc "Checks the the current Esbuild version is the latest"
@moduledoc """ @moduledoc """
Checks the the current esbuild version is the latest. 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. Exits with 0 if versions match, 1 if the esbuild needs to be updated.
""" """
use Mix.Task
alias Mix.Tasks.Esbuild.Release alias Mix.Tasks.Esbuild.Release
@impl Mix.Task @impl Mix.Task
+2 -2
View File
@@ -1,11 +1,11 @@
defmodule Mix.Tasks.Esbuild.UpdateVersion do defmodule Mix.Tasks.Esbuild.UpdateVersion do
use Mix.Task
@shortdoc "Update the configured esbuild versino to latest." @shortdoc "Update the configured esbuild versino to latest."
@moduledoc """ @moduledoc """
Update the configured esbuild versino to latest. Update the configured esbuild versino to latest.
""" """
use Mix.Task
alias Mix.Tasks.Esbuild.Release alias Mix.Tasks.Esbuild.Release
@impl Mix.Task @impl Mix.Task
@@ -1,11 +1,11 @@
defmodule Mix.Tasks.MusicBrainz.RefreshFixtures do defmodule Mix.Tasks.MusicBrainz.RefreshFixtures do
use Mix.Task
@shortdoc "Fetch and recreate test fixtures that depend on network resources." @shortdoc "Fetch and recreate test fixtures that depend on network resources."
@moduledoc """ @moduledoc """
Fetch and recreate test fixtures that depend on network resources. Fetch and recreate test fixtures that depend on network resources.
""" """
use Mix.Task
require Logger require Logger
@fixtures_folder Path.join([File.cwd!(), "test/support/fixtures/music_brainz"]) @fixtures_folder Path.join([File.cwd!(), "test/support/fixtures/music_brainz"])
@@ -1,5 +1,4 @@
defmodule Mix.Tasks.MusicLibrary.Prod.DbMigrate do defmodule Mix.Tasks.MusicLibrary.Prod.DbMigrate do
use Mix.Task
@shortdoc "Run migrations on the production database" @shortdoc "Run migrations on the production database"
@moduledoc """ @moduledoc """
Run migrations on the production database. 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. Requires the `flyctl` CLI to be installed and authenticated.
""" """
use Mix.Task
import Mix.Tasks.MusicLibrary.Prod.Helpers import Mix.Tasks.MusicLibrary.Prod.Helpers
@impl Mix.Task @impl Mix.Task
+2 -1
View File
@@ -1,11 +1,12 @@
defmodule Mix.Tasks.MusicLibrary.Prod.DbPull do defmodule Mix.Tasks.MusicLibrary.Prod.DbPull do
use Mix.Task
@shortdoc "Pulls the latest database from the production server" @shortdoc "Pulls the latest database from the production server"
@moduledoc """ @moduledoc """
Pulls the latest database from the production server. Pulls the latest database from the production server.
Requires the `flyctl` CLI to be installed and authenticated. Requires the `flyctl` CLI to be installed and authenticated.
""" """
use Mix.Task
import Mix.Tasks.MusicLibrary.Prod.Helpers import Mix.Tasks.MusicLibrary.Prod.Helpers
@impl Mix.Task @impl Mix.Task
@@ -1,5 +1,4 @@
defmodule Mix.Tasks.MusicLibrary.Prod.DbVacuum do defmodule Mix.Tasks.MusicLibrary.Prod.DbVacuum do
use Mix.Task
@shortdoc "Force VACUUM the production database" @shortdoc "Force VACUUM the production database"
@moduledoc """ @moduledoc """
Force VACUUM the production database. This is necessary to make sure that all 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. Requires the `flyctl` CLI to be installed and authenticated.
""" """
use Mix.Task
import Mix.Tasks.MusicLibrary.Prod.Helpers import Mix.Tasks.MusicLibrary.Prod.Helpers
@impl Mix.Task @impl Mix.Task
+2 -1
View File
@@ -1,10 +1,11 @@
defmodule Mix.Tasks.MusicLibrary.Prod.Ping do defmodule Mix.Tasks.MusicLibrary.Prod.Ping do
use Mix.Task
@shortdoc "Ping the production instance" @shortdoc "Ping the production instance"
@moduledoc """ @moduledoc """
Ping the production instance - useful to wake it up if suspended. Ping the production instance - useful to wake it up if suspended.
""" """
use Mix.Task
@impl Mix.Task @impl Mix.Task
def run(_args) do def run(_args) do
Application.ensure_all_started(:req) Application.ensure_all_started(:req)
+2 -2
View File
@@ -1,6 +1,4 @@
defmodule Mix.Tasks.Obsidian.Import do defmodule Mix.Tasks.Obsidian.Import do
use Mix.Task
@shortdoc "Import records from an Obsidian Vault containing Media entries " @shortdoc "Import records from an Obsidian Vault containing Media entries "
@moduledoc """ @moduledoc """
Import records from an Obsidian Vault containing Media entries. 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` `mix obsidian.import path/to/vault`
""" """
use Mix.Task
@impl Mix.Task @impl Mix.Task
def run(args) do def run(args) do
case args do case args do
+2 -2
View File
@@ -1,6 +1,4 @@
defmodule Mix.Tasks.Tailwind.CheckVersion do defmodule Mix.Tasks.Tailwind.CheckVersion do
use Mix.Task
@shortdoc "Checks the the current Tailwind version is the latest" @shortdoc "Checks the the current Tailwind version is the latest"
@moduledoc """ @moduledoc """
Checks the the current Tailwind version is the latest. 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. Exits with 0 if versions match, 1 if the Tailwind needs to be updated.
""" """
use Mix.Task
alias Mix.Tasks.Tailwind.Release alias Mix.Tasks.Tailwind.Release
@impl Mix.Task @impl Mix.Task
+2 -2
View File
@@ -1,11 +1,11 @@
defmodule Mix.Tasks.Tailwind.UpdateVersion do defmodule Mix.Tasks.Tailwind.UpdateVersion do
use Mix.Task
@shortdoc "Update the configured tailwind versino to latest." @shortdoc "Update the configured tailwind versino to latest."
@moduledoc """ @moduledoc """
Update the configured tailwind versino to latest. Update the configured tailwind versino to latest.
""" """
use Mix.Task
alias Mix.Tasks.Tailwind.Release alias Mix.Tasks.Tailwind.Release
@impl Mix.Task @impl Mix.Task
+2 -2
View File
@@ -6,10 +6,10 @@ defmodule MusicBrainz.API do
- Extend the metadata associated with existing records - Extend the metadata associated with existing records
""" """
require Logger
alias MusicBrainz.{Artist, ReleaseGroupSearchResult, ReleaseSearchResult} alias MusicBrainz.{Artist, ReleaseGroupSearchResult, ReleaseSearchResult}
require Logger
@doc """ @doc """
Uses the [lookup](https://musicbrainz.org/doc/MusicBrainz_API#Lookups) endpoint with the release group id and include the 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. associated artists, genres, releases and release group relations. Note that the API limits each included resource to 25 items.
@@ -1,9 +1,9 @@
defmodule MusicBrainz.ReleaseGroupSearchResult do defmodule MusicBrainz.ReleaseGroupSearchResult do
alias MusicBrainz.ReleaseGroup
@enforce_keys [:id, :type, :title, :artists, :release_date] @enforce_keys [:id, :type, :title, :artists, :release_date]
defstruct [:id, :type, :title, :artists, :release_date] defstruct [:id, :type, :title, :artists, :release_date]
alias MusicBrainz.ReleaseGroup
def from_api_response(rg) do def from_api_response(rg) do
%__MODULE__{ %__MODULE__{
id: rg["id"], id: rg["id"],
+2 -2
View File
@@ -1,9 +1,9 @@
defmodule MusicBrainz.ReleaseSearchResult do defmodule MusicBrainz.ReleaseSearchResult do
alias MusicBrainz.ReleaseGroup
@enforce_keys [:id, :title, :release_group, :artists, :date, :barcode, :media] @enforce_keys [:id, :title, :release_group, :artists, :date, :barcode, :media]
defstruct [: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 def from_api_response(r) do
%__MODULE__{ %__MODULE__{
id: r["id"], id: r["id"],
+1 -1
View File
@@ -1,9 +1,9 @@
defmodule MusicLibrary.Artists do defmodule MusicLibrary.Artists do
import Ecto.Query, warn: false import Ecto.Query, warn: false
alias MusicLibrary.Repo
alias MusicLibrary.Artists.ArtistInfo alias MusicLibrary.Artists.ArtistInfo
alias MusicLibrary.Records.{ArtistRecord, Record} alias MusicLibrary.Records.{ArtistRecord, Record}
alias MusicLibrary.Repo
alias MusicLibrary.{BackgroundRepo, Worker} alias MusicLibrary.{BackgroundRepo, Worker}
def get_artist!(musicbrainz_id) do def get_artist!(musicbrainz_id) do
+1
View File
@@ -1,5 +1,6 @@
defmodule MusicLibrary.Artists.ArtistInfo do defmodule MusicLibrary.Artists.ArtistInfo do
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
alias MusicLibrary.Records.Cover alias MusicLibrary.Records.Cover
+1 -2
View File
@@ -1,12 +1,11 @@
defmodule MusicLibrary.Collection do defmodule MusicLibrary.Collection do
import Ecto.Query, warn: false import Ecto.Query, warn: false
import MusicLibrary.Records, only: [order_alphabetically: 0]
alias MusicLibrary.Records alias MusicLibrary.Records
alias MusicLibrary.Records.{Record, SearchIndex} alias MusicLibrary.Records.{Record, SearchIndex}
alias MusicLibrary.Repo alias MusicLibrary.Repo
import MusicLibrary.Records, only: [order_alphabetically: 0]
def search_records(query, opts \\ []) do def search_records(query, opts \\ []) do
limit = Keyword.get(opts, :limit, 20) limit = Keyword.get(opts, :limit, 20)
offset = Keyword.get(opts, :offset, 0) offset = Keyword.get(opts, :offset, 0)
+3 -2
View File
@@ -1,10 +1,11 @@
defmodule MusicLibrary.Records.Batch do defmodule MusicLibrary.Records.Batch do
require Logger import Ecto.Query
alias MusicLibrary.Records alias MusicLibrary.Records
alias MusicLibrary.Records.{Cover, Record} alias MusicLibrary.Records.{Cover, Record}
alias MusicLibrary.Repo alias MusicLibrary.Repo
import Ecto.Query
require Logger
def refresh_musicbrainz_data(opts \\ []) do def refresh_musicbrainz_data(opts \\ []) do
run_on_all_records(fn record -> run_on_all_records(fn record ->
+1
View File
@@ -1,5 +1,6 @@
defmodule MusicLibrary.Records.Record do defmodule MusicLibrary.Records.Record do
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
alias MusicBrainz.{Release, ReleaseGroup} alias MusicBrainz.{Release, ReleaseGroup}
+1
View File
@@ -1,5 +1,6 @@
defmodule MusicLibrary.Secrets.Secret do defmodule MusicLibrary.Secrets.Secret do
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
@primary_key {:name, :string, autogenerate: false} @primary_key {:name, :string, autogenerate: false}
+5 -4
View File
@@ -23,10 +23,11 @@ defmodule MusicLibraryWeb do
quote do quote do
use Phoenix.Router, helpers: false use Phoenix.Router, helpers: false
# Import common connection and controller functions to use in pipelines
import Plug.Conn
import Phoenix.Controller import Phoenix.Controller
import Phoenix.LiveView.Router import Phoenix.LiveView.Router
# Import common connection and controller functions to use in pipelines
import Plug.Conn
end end
end end
@@ -76,7 +77,6 @@ defmodule MusicLibraryWeb do
def html do def html do
quote do quote do
use Phoenix.Component use Phoenix.Component
use Gettext, backend: MusicLibraryWeb.Gettext use Gettext, backend: MusicLibraryWeb.Gettext
# Import convenience functions from controllers # Import convenience functions from controllers
@@ -91,10 +91,11 @@ defmodule MusicLibraryWeb do
defp html_helpers do defp html_helpers do
quote do quote do
use Gettext, backend: MusicLibraryWeb.Gettext use Gettext, backend: MusicLibraryWeb.Gettext
import MusicLibraryWeb.CoreComponents
# HTML escaping functionality # HTML escaping functionality
import Phoenix.HTML import Phoenix.HTML
# Core UI components and translation # Core UI components and translation
import MusicLibraryWeb.CoreComponents
# Shortcut for generating JS commands # Shortcut for generating JS commands
alias Phoenix.LiveView.JS alias Phoenix.LiveView.JS
+2 -1
View File
@@ -1,7 +1,8 @@
defmodule MusicLibraryWeb.Auth do defmodule MusicLibraryWeb.Auth do
use Gettext, backend: MusicLibraryWeb.Gettext use Gettext, backend: MusicLibraryWeb.Gettext
import Plug.Conn
import Phoenix.Controller, only: [put_flash: 3, redirect: 2] import Phoenix.Controller, only: [put_flash: 3, redirect: 2]
import Plug.Conn
def correct_login_password?(password) do def correct_login_password?(password) do
Plug.Crypto.secure_compare(login_password(), password) Plug.Crypto.secure_compare(login_password(), password)
@@ -15,9 +15,9 @@ defmodule MusicLibraryWeb.CoreComponents do
Icons are provided by [heroicons](https://heroicons.com). See `icon/1` for usage. Icons are provided by [heroicons](https://heroicons.com). See `icon/1` for usage.
""" """
use Phoenix.Component use Phoenix.Component
use Gettext, backend: MusicLibraryWeb.Gettext
alias Phoenix.LiveView.JS alias Phoenix.LiveView.JS
use Gettext, backend: MusicLibraryWeb.Gettext
defdelegate badge(assigns), to: Fluxon.Components.Badge defdelegate badge(assigns), to: Fluxon.Components.Badge
defdelegate button(assigns), to: Fluxon.Components.Button defdelegate button(assigns), to: Fluxon.Components.Button
@@ -1,12 +1,12 @@
defmodule MusicLibraryWeb.ArtistLive.Show do defmodule MusicLibraryWeb.ArtistLive.Show do
use MusicLibraryWeb, :live_view use MusicLibraryWeb, :live_view
alias MusicLibrary.Artists.ArtistInfo
alias MusicLibrary.{Artists, Records}
import MusicLibraryWeb.RecordComponents, import MusicLibraryWeb.RecordComponents,
only: [record_grid: 1, toggle_actions_menu: 1, close_actions_menu: 1, country_label: 1] 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 attr :country, :map, required: true
defp country_flag(assigns) do defp country_flag(assigns) do
@@ -1,8 +1,9 @@
defmodule MusicLibraryWeb.CollectionLive.Index do defmodule MusicLibraryWeb.CollectionLive.Index do
use MusicLibraryWeb, :live_view use MusicLibraryWeb, :live_view
import MusicLibraryWeb.BarcodeScannerComponent, only: [barcode_icon: 1]
import MusicLibraryWeb.PaginationComponent import MusicLibraryWeb.PaginationComponent
import MusicLibraryWeb.RecordComponents import MusicLibraryWeb.RecordComponents
import MusicLibraryWeb.BarcodeScannerComponent, only: [barcode_icon: 1]
alias MusicLibrary.Collection alias MusicLibrary.Collection
alias MusicLibrary.Records alias MusicLibrary.Records
@@ -1,8 +1,8 @@
defmodule MusicLibraryWeb.StatsLive.Index do defmodule MusicLibraryWeb.StatsLive.Index do
use MusicLibraryWeb, :live_view use MusicLibraryWeb, :live_view
import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1]
import MusicLibraryWeb.ChartComponents import MusicLibraryWeb.ChartComponents
import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1]
alias MusicLibrary.{Collection, Records, ScrobbleActivity, Wishlist} alias MusicLibrary.{Collection, Records, ScrobbleActivity, Wishlist}
@@ -1,5 +1,6 @@
defmodule MusicLibraryWeb.WishlistLive.Index do defmodule MusicLibraryWeb.WishlistLive.Index do
use MusicLibraryWeb, :live_view use MusicLibraryWeb, :live_view
import MusicLibraryWeb.PaginationComponent import MusicLibraryWeb.PaginationComponent
import MusicLibraryWeb.RecordComponents import MusicLibraryWeb.RecordComponents
+1
View File
@@ -76,6 +76,7 @@ defmodule MusicLibraryWeb.Router do
if Application.compile_env(:music_library, :monitoring_routes) do if Application.compile_env(:music_library, :monitoring_routes) do
use ErrorTracker.Web, :router use ErrorTracker.Web, :router
import Phoenix.LiveDashboard.Router import Phoenix.LiveDashboard.Router
scope "/dev" do scope "/dev" do
+1
View File
@@ -1,5 +1,6 @@
defmodule MusicLibraryWeb.Telemetry do defmodule MusicLibraryWeb.Telemetry do
use Supervisor use Supervisor
import Telemetry.Metrics import Telemetry.Metrics
def start_link(arg) do def start_link(arg) do
+1
View File
@@ -71,6 +71,7 @@ defmodule MusicLibrary.MixProject do
{:esbuild, "~> 0.8", runtime: Mix.env() == :dev}, {:esbuild, "~> 0.8", runtime: Mix.env() == :dev},
{:tailwind, "~> 0.3", runtime: Mix.env() == :dev}, {:tailwind, "~> 0.3", runtime: Mix.env() == :dev},
{:credo, "~> 1.7", only: [:dev, :test], runtime: false}, {:credo, "~> 1.7", only: [:dev, :test], runtime: false},
{:quokka, "~> 2.6", only: [:dev, :test], runtime: false},
{:live_debugger, "~> 0.2.0", only: :dev}, {:live_debugger, "~> 0.2.0", only: :dev},
{:tidewave, "~> 0.1", only: :dev}, {:tidewave, "~> 0.1", only: :dev},
+1
View File
@@ -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"}, "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": {: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"}, "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"}, "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"}, "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"}, "table_rex": {:hex, :table_rex, "4.1.0", "fbaa8b1ce154c9772012bf445bfb86b587430fb96f3b12022d3f35ee4a68c918", [:mix], [], "hexpm", "95932701df195d43bc2d1c6531178fc8338aa8f38c80f098504d529c43bc2601"},
+2 -1
View File
@@ -1,10 +1,11 @@
defmodule MusicBrainzTest do defmodule MusicBrainzTest do
use ExUnit.Case, async: true use ExUnit.Case, async: true
alias MusicBrainz.ReleaseGroupSearchResult
import MusicBrainz.Fixtures.Release import MusicBrainz.Fixtures.Release
import MusicBrainz.Fixtures.ReleaseGroup import MusicBrainz.Fixtures.ReleaseGroup
alias MusicBrainz.ReleaseGroupSearchResult
describe "search_release_group/2" do describe "search_release_group/2" do
test "it returns results with correct limit and offset" do test "it returns results with correct limit and offset" do
results = release_group_search_results() results = release_group_search_results()
+2 -1
View File
@@ -1,9 +1,10 @@
defmodule MusicLibrary.ArtistsTest do defmodule MusicLibrary.ArtistsTest do
use MusicLibrary.DataCase use MusicLibrary.DataCase
alias MusicLibrary.Artists
import MusicLibrary.Fixtures.Records import MusicLibrary.Fixtures.Records
alias MusicLibrary.Artists
describe "get_artist/1" do describe "get_artist/1" do
test "it returns records with essential data" do test "it returns records with essential data" do
record = record() record = record()
@@ -1,8 +1,8 @@
defmodule MusicLibrary.BarcodeScan.ResultTest do defmodule MusicLibrary.BarcodeScan.ResultTest do
use ExUnit.Case, async: true use ExUnit.Case, async: true
alias MusicLibrary.BarcodeScan.Result
alias MusicBrainz.{ReleaseGroupSearchResult, ReleaseSearchResult} alias MusicBrainz.{ReleaseGroupSearchResult, ReleaseSearchResult}
alias MusicLibrary.BarcodeScan.Result
@release_group %ReleaseGroupSearchResult{ @release_group %ReleaseGroupSearchResult{
id: "123", id: "123",
+2 -1
View File
@@ -1,9 +1,10 @@
defmodule MusicLibrary.CollectionTest do defmodule MusicLibrary.CollectionTest do
use MusicLibrary.DataCase use MusicLibrary.DataCase
alias MusicLibrary.Collection
import MusicLibrary.Fixtures.Records import MusicLibrary.Fixtures.Records
alias MusicLibrary.Collection
defp fill_collection(_) do defp fill_collection(_) do
# Purchased dates are in ascending order # Purchased dates are in ascending order
records = [ records = [
@@ -2,6 +2,7 @@ defmodule MusicLibrary.Records.CoverTest do
use ExUnit.Case, async: true use ExUnit.Case, async: true
import MusicLibrary.Fixtures.Records import MusicLibrary.Fixtures.Records
alias MusicLibrary.Records.Cover alias MusicLibrary.Records.Cover
describe "resize/1" do describe "resize/1" do
@@ -2,6 +2,7 @@ defmodule MusicLibrary.Records.RecordTest do
use ExUnit.Case, async: true use ExUnit.Case, async: true
import MusicBrainz.Fixtures.ReleaseGroup import MusicBrainz.Fixtures.ReleaseGroup
alias MusicLibrary.Records.Record alias MusicLibrary.Records.Record
doctest Record doctest Record
+4 -3
View File
@@ -1,11 +1,12 @@
defmodule MusicLibrary.RecordsTest do defmodule MusicLibrary.RecordsTest do
use MusicLibrary.DataCase use MusicLibrary.DataCase
import MusicBrainz.Fixtures.Release
import MusicBrainz.Fixtures.ReleaseGroup
import MusicLibrary.Fixtures.Records
alias MusicLibrary.Records alias MusicLibrary.Records
alias MusicLibrary.Records.SearchIndex alias MusicLibrary.Records.SearchIndex
import MusicLibrary.Fixtures.Records
import MusicBrainz.Fixtures.ReleaseGroup
import MusicBrainz.Fixtures.Release
defp create_records(_) do defp create_records(_) do
records = [ records = [
+2 -1
View File
@@ -1,9 +1,10 @@
defmodule MusicLibrary.WishlistTest do defmodule MusicLibrary.WishlistTest do
use MusicLibrary.DataCase use MusicLibrary.DataCase
alias MusicLibrary.Wishlist
import MusicLibrary.Fixtures.Records import MusicLibrary.Fixtures.Records
alias MusicLibrary.Wishlist
defp fill_wishlist(_) do defp fill_wishlist(_) do
records = [ records = [
record(%{purchased_at: nil, title: "Brave"}), record(%{purchased_at: nil, title: "Brave"}),
@@ -2,6 +2,7 @@ defmodule MusicLibraryWeb.CoverControllerTest do
use MusicLibraryWeb.ConnCase use MusicLibraryWeb.ConnCase
import MusicLibrary.Fixtures.Records import MusicLibrary.Fixtures.Records
alias MusicLibrary.Records.Cover alias MusicLibrary.Records.Cover
defp create_record(_) do defp create_record(_) do
@@ -2,6 +2,7 @@ defmodule MusicLibraryWeb.ArtistLive.ShowTest do
use MusicLibraryWeb.ConnCase use MusicLibraryWeb.ConnCase
import MusicLibrary.Fixtures.Records import MusicLibrary.Fixtures.Records
alias LastFm.Fixtures alias LastFm.Fixtures
defp fill_collection(_config) do defp fill_collection(_config) do
@@ -1,10 +1,11 @@
defmodule MusicLibraryWeb.CollectionLive.IndexTest do defmodule MusicLibraryWeb.CollectionLive.IndexTest do
use MusicLibraryWeb.ConnCase use MusicLibraryWeb.ConnCase
import MusicLibrary.Fixtures.Records
import MusicBrainz.Fixtures.ReleaseGroup
import MusicBrainz.Fixtures.Release import MusicBrainz.Fixtures.Release
import MusicBrainz.Fixtures.ReleaseGroup
import MusicLibrary.Fixtures.Records
import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1]
alias MusicBrainz.ReleaseGroupSearchResult alias MusicBrainz.ReleaseGroupSearchResult
alias MusicLibrary.Records.{Cover, Record} alias MusicLibrary.Records.{Cover, Record}
@@ -2,7 +2,6 @@ defmodule MusicLibraryWeb.CollectionLive.ShowTest do
use MusicLibraryWeb.ConnCase use MusicLibraryWeb.ConnCase
import MusicLibrary.Fixtures.Records import MusicLibrary.Fixtures.Records
import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1]
alias MusicBrainz.Fixtures alias MusicBrainz.Fixtures
@@ -1,11 +1,12 @@
defmodule MusicLibraryWeb.StatsLive.IndexTest do defmodule MusicLibraryWeb.StatsLive.IndexTest do
use MusicLibraryWeb.ConnCase 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.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 defp fill_collection(_) do
current_time = DateTime.utc_now() current_time = DateTime.utc_now()
@@ -2,7 +2,6 @@ defmodule MusicLibraryWeb.WishlistLive.ShowTest do
use MusicLibraryWeb.ConnCase use MusicLibraryWeb.ConnCase
import MusicLibrary.Fixtures.Records import MusicLibrary.Fixtures.Records
import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1]
alias MusicLibrary.Records.Record alias MusicLibrary.Records.Record
@@ -1,5 +1,6 @@
defmodule MusicLibraryWeb.AuthTest do defmodule MusicLibraryWeb.AuthTest do
use ExUnit.Case, async: true use ExUnit.Case, async: true
import Plug.Test import Plug.Test
alias MusicLibraryWeb.Auth alias MusicLibraryWeb.Auth
+1
View File
@@ -1,5 +1,6 @@
defmodule Obsidian.ParserTest do defmodule Obsidian.ParserTest do
use ExUnit.Case, async: true use ExUnit.Case, async: true
alias Obsidian.{Entry, Parser} alias Obsidian.{Entry, Parser}
@marbles_entry_path Path.expand("../support/fixtures/obsidian/marillion-marbles.md", __DIR__) @marbles_entry_path Path.expand("../support/fixtures/obsidian/marillion-marbles.md", __DIR__)
+9 -8
View File
@@ -19,21 +19,22 @@ defmodule MusicLibraryWeb.ConnCase do
using do using do
quote do quote do
# The default endpoint for testing
@endpoint MusicLibraryWeb.Endpoint
use MusicLibraryWeb, :verified_routes use MusicLibraryWeb, :verified_routes
# Import conveniences for testing with connections
import Plug.Conn
import Phoenix.ConnTest
import MusicLibraryWeb.ConnCase import MusicLibraryWeb.ConnCase
import PhoenixTest import MusicLibraryWeb.LiveTestHelpers
import Phoenix.ConnTest
import Phoenix.LiveViewTest, import Phoenix.LiveViewTest,
# The default endpoint for testing
only: [render: 1, render_async: 1, render_hook: 2, render_hook: 3, element: 2, element: 3] 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
end end
+2 -2
View File
@@ -22,12 +22,12 @@ defmodule MusicLibrary.DataCase do
quote do quote do
use Oban.Testing, repo: MusicLibrary.BackgroundRepo use Oban.Testing, repo: MusicLibrary.BackgroundRepo
alias MusicLibrary.Repo
import Ecto import Ecto
import Ecto.Changeset import Ecto.Changeset
import Ecto.Query import Ecto.Query
import MusicLibrary.DataCase import MusicLibrary.DataCase
alias MusicLibrary.Repo
end end
end end