diff --git a/.formatter.exs b/.formatter.exs
index 50278eb..782d4d5 100644
--- a/.formatter.exs
+++ b/.formatter.exs
@@ -3,9 +3,9 @@
subdirectories: ["priv/*/migrations"],
plugins: [Phoenix.LiveView.HTMLFormatter, Surface.Formatter.Plugin],
inputs: [
- "*.{heex,ex,exs}",
- "{config,lib,test}/**/*.{heex,ex,exs}",
- "priv/*/seeds.exs",
- "{lib,test}/**/*.sface"
-]
+ "*.{heex,ex,exs}",
+ "{config,lib,test}/**/*.{heex,ex,exs}",
+ "priv/*/seeds.exs",
+ "{lib,test}/**/*.sface"
+ ]
]
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..f97036b
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,97 @@
+name: Continuous Integration
+
+on:
+ push:
+ branches: main
+ paths-ignore:
+ - "*.md"
+
+ pull_request:
+ branches: main
+ paths-ignore:
+ - "*.md"
+
+jobs:
+ test:
+ env:
+ MIX_ENV: test
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pull-requests: write
+ services:
+ db:
+ image: postgres:latest
+ ports: ["5432:5432"]
+ env:
+ POSTGRES_PASSWORD: postgres
+ options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
+ steps:
+ - uses: actions/checkout@v3
+ - uses: erlef/setup-beam@v1
+ with:
+ otp-version: "24.3.2"
+ elixir-version: "1.14.2"
+ - name: Cache deps Directory
+ id: cache-deps
+ uses: actions/cache@v3
+ env:
+ cache-name: cache-elixir-deps
+ with:
+ path: deps
+ key: ${{ runner.os }}-mix-${{ env.cache-name }}-${{ hashFiles('**/mix.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-mix-${{ env.cache-name }}-
+ - name: Cache Compiled build Directiory
+ id: cache-build
+ uses: actions/cache@v3
+ env:
+ cache-name: cache-compiled-build
+ with:
+ path: _build
+ key: ${{ runner.os }}-mix-${{ env.cache-name }}-${{ hashFiles('**/mix.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-mix-${{ env.cache-name }}-
+ ${{ runner.os }}-mix-
+ - name: Fetch Dependencies
+ run: mix deps.get
+ - name: Check Retired Dependencies
+ run: mix hex.audit
+ - name: Check Unused Dependencies
+ run: mix deps.unlock --check-unused
+ - name: Security Audit for Dependencies
+ run: mix deps.audit
+ - name: Code Formatting
+ run: mix format --check-formatted --dry-run
+ - name: Check Compilation
+ run: mix compile --all-warnings --warnings-as-errors
+ - name: Verify Migrations
+ run: mix ecto.create && mix ecto.migrate && mix ecto.rollback --all
+ - name: Static Code Analysis
+ run: mix credo --strict
+ - name: Security Analysis
+ run: mix sobelow -i Config.HTTPS
+ - name: Restore PLT Cache
+ uses: actions/cache@v3
+ id: plt_cache
+ with:
+ key: |
+ ${{ runner.os }}-${{ steps.beam.outputs.elixir-version }}-${{ steps.beam.outputs.otp-version }}-plt
+ restore-keys: |
+ ${{ runner.os }}-${{ steps.beam.outputs.elixir-version }}-${{ steps.beam.outputs.otp-version }}-plt
+ path: |
+ priv/pltsas
+ - name: Create PLTs
+ if: steps.plt_cache.outputs.cache-hit != 'true'
+ run: mix dialyzer --plt
+ - name: Static Analysis for Types
+ run: mix dialyzer
+ - name: Run Tests and Coverage Report
+ run: mix coveralls.lcov
+ - name: Tests & Coverage
+ uses: josecfreittas/elixir-coverage-feedback-action@v0.5
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ coverage_threshold: 0
+ coverage_tool: excoveralls
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ff088aa
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,10 @@
+console:
+ iex -S mix phx.server
+t:
+ MIX_ENV=test mix coveralls
+cover-html:
+ MIX_ENV=test mix coveralls.html
+cover-lcov:
+ MIX_ENV=test mix coveralls.lcov
+start:
+ mix phx.server
\ No newline at end of file
diff --git a/README.md b/README.md
index c1983ba..604084c 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,10 @@
# Basket
-To start your Phoenix server:
-
* Run `mix setup` to install and setup dependencies
- * Start Phoenix endpoint with `mix phx.server` or inside IEx with `iex -S mix phx.server`
+
+`make t` - run test suite
+`make console` - local dev server with IEX terminal
+`make dev` - local dev sercer with no terminal
Now you can visit [`localhost:4000`](http://localhost:4000) from your browser.
diff --git a/config/config.exs b/config/config.exs
index 3d3e75d..99cfae1 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -41,7 +41,8 @@ config :esbuild,
env: %{"NODE_PATH" => Path.expand("../deps", __DIR__)}
],
catalogue: [
- args: ~w(../deps/surface_catalogue/assets/js/app.js --bundle --target=es2016 --minify --outdir=../priv/static/assets/catalogue),
+ args:
+ ~w(../deps/surface_catalogue/assets/js/app.js --bundle --target=es2016 --minify --outdir=../priv/static/assets/catalogue),
cd: Path.expand("../assets", __DIR__),
env: %{"NODE_PATH" => Path.expand("../deps", __DIR__)}
]
diff --git a/lib/basket/mailer.ex b/lib/basket/mailer.ex
index bf32085..a055f91 100644
--- a/lib/basket/mailer.ex
+++ b/lib/basket/mailer.ex
@@ -1,3 +1,5 @@
defmodule Basket.Mailer do
+ @moduledoc false
+
use Swoosh.Mailer, otp_app: :basket
end
diff --git a/lib/basket_web/components/card.ex b/lib/basket_web/components/card.ex
index dbbdd10..17b226e 100644
--- a/lib/basket_web/components/card.ex
+++ b/lib/basket_web/components/card.ex
@@ -27,28 +27,28 @@ defmodule BasketWeb.Components.Card do
~F"""
"""
diff --git a/lib/basket_web/components/core_components.ex b/lib/basket_web/components/core_components.ex
index 3bc0bf9..47e5be3 100644
--- a/lib/basket_web/components/core_components.ex
+++ b/lib/basket_web/components/core_components.ex
@@ -16,7 +16,9 @@ defmodule BasketWeb.CoreComponents do
"""
use Phoenix.Component
+ alias Phoenix.HTML.Form
alias Phoenix.LiveView.JS
+
import BasketWeb.Gettext
@doc """
@@ -303,7 +305,7 @@ defmodule BasketWeb.CoreComponents do
def input(%{type: "checkbox"} = assigns) do
assigns =
assign_new(assigns, :checked, fn ->
- Phoenix.HTML.Form.normalize_value("checkbox", assigns[:value])
+ Form.normalize_value("checkbox", assigns[:value])
end)
~H"""
diff --git a/lib/basket_web/components/layouts.ex b/lib/basket_web/components/layouts.ex
index 1f3548b..75dc101 100644
--- a/lib/basket_web/components/layouts.ex
+++ b/lib/basket_web/components/layouts.ex
@@ -1,4 +1,6 @@
defmodule BasketWeb.Layouts do
+ @moduledoc false
+
use BasketWeb, :html
embed_templates "layouts/*"
diff --git a/lib/basket_web/live/demo.ex b/lib/basket_web/live/demo.ex
index 050d76c..9059d6f 100644
--- a/lib/basket_web/live/demo.ex
+++ b/lib/basket_web/live/demo.ex
@@ -1,4 +1,5 @@
defmodule BasketWeb.Demo do
+ @moduledoc false
use BasketWeb, :surface_live_view
alias BasketWeb.Components.Card
@@ -7,7 +8,7 @@ defmodule BasketWeb.Demo do
~F"""
diff --git a/lib/basket_web/router.ex b/lib/basket_web/router.ex
index f86987d..cd7190d 100644
--- a/lib/basket_web/router.ex
+++ b/lib/basket_web/router.ex
@@ -48,7 +48,7 @@ defmodule BasketWeb.Router do
if Mix.env() == :dev do
scope "/" do
pipe_through :browser
- surface_catalogue "/catalogue"
+ surface_catalogue("/catalogue")
end
end
end
diff --git a/lib/basket_web/telemetry.ex b/lib/basket_web/telemetry.ex
index 61b1845..27751d3 100644
--- a/lib/basket_web/telemetry.ex
+++ b/lib/basket_web/telemetry.ex
@@ -1,4 +1,8 @@
defmodule BasketWeb.Telemetry do
+ @moduledoc """
+ Telemetry configuration
+ """
+
use Supervisor
import Telemetry.Metrics
diff --git a/mix.exs b/mix.exs
index 1ee0b94..650cb20 100644
--- a/mix.exs
+++ b/mix.exs
@@ -10,7 +10,19 @@ defmodule Basket.MixProject do
start_permanent: Mix.env() == :prod,
aliases: aliases(),
deps: deps(),
- compilers: Mix.compilers() ++ [:surface]
+ compilers: Mix.compilers() ++ [:surface],
+ deps: deps(),
+ test_coverage: [tool: ExCoveralls],
+ preferred_cli_env: [
+ coveralls: :test,
+ "coveralls.detail": :test,
+ "coveralls.post": :test,
+ "coveralls.html": :test
+ ],
+ dialyzer: [
+ plt_add_apps: [:mix, :ex_unit],
+ check_plt: true
+ ]
]
end
@@ -56,7 +68,12 @@ defmodule Basket.MixProject do
{:surface, "~> 0.11.0"},
# for surface.init
{:sourceror, "~> 0.12.0"},
- {:surface_catalogue, "~> 0.6.0"}
+ {:surface_catalogue, "~> 0.6.0"},
+ {:excoveralls, "~> 0.18", only: :test},
+ {:sobelow, "~> 0.13.0", only: [:dev, :test], runtime: false},
+ {:credo, "~> 1.7.1", only: [:dev, :test], runtime: false},
+ {:dialyxir, "~> 1.4.2", runtime: false},
+ {:mix_audit, "~> 2.1.1", runtime: false}
]
end
diff --git a/mix.lock b/mix.lock
index 94f9a31..81e1928 100644
--- a/mix.lock
+++ b/mix.lock
@@ -1,15 +1,20 @@
%{
+ "bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"},
"castore": {:hex, :castore, "1.0.4", "ff4d0fb2e6411c0479b1d965a814ea6d00e51eb2f58697446e9c41a97d940b28", [:mix], [], "hexpm", "9418c1b8144e11656f0be99943db4caf04612e3eaecefb5dae9a2a87565584f8"},
"cowboy": {:hex, :cowboy, "2.10.0", "ff9ffeff91dae4ae270dd975642997afe2a1179d94b1887863e43f681a203e26", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "3afdccb7183cc6f143cb14d3cf51fa00e53db9ec80cdcd525482f5e99bc41d6b"},
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
"cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"},
+ "credo": {:hex, :credo, "1.7.1", "6e26bbcc9e22eefbff7e43188e69924e78818e2fe6282487d0703652bc20fd62", [:mix], [{:bunt, "~> 0.2.1", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "e9871c6095a4c0381c89b6aa98bc6260a8ba6addccf7f6a53da8849c748a58a2"},
"db_connection": {:hex, :db_connection, "2.6.0", "77d835c472b5b67fc4f29556dee74bf511bbafecdcaf98c27d27fa5918152086", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c2f992d15725e721ec7fbc1189d4ecdb8afef76648c746a8e1cad35e3b8a35f3"},
"decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
+ "dialyxir": {:hex, :dialyxir, "1.4.2", "764a6e8e7a354f0ba95d58418178d486065ead1f69ad89782817c296d0d746a5", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "516603d8067b2fd585319e4b13d3674ad4f314a5902ba8130cd97dc902ce6bbd"},
"dns_cluster": {:hex, :dns_cluster, "0.1.1", "73b4b2c3ec692f8a64276c43f8c929733a9ab9ac48c34e4c0b3d9d1b5cd69155", [:mix], [], "hexpm", "03a3f6ff16dcbb53e219b99c7af6aab29eb6b88acf80164b4bd76ac18dc890b3"},
"earmark": {:hex, :earmark, "1.4.46", "8c7287bd3137e99d26ae4643e5b7ef2129a260e3dcf41f251750cb4563c8fb81", [:mix], [], "hexpm", "798d86db3d79964e759ddc0c077d5eb254968ed426399fbf5a62de2b5ff8910a"},
"ecto": {:hex, :ecto, "3.10.3", "eb2ae2eecd210b4eb8bece1217b297ad4ff824b4384c0e3fdd28aaf96edd6135", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "44bec74e2364d491d70f7e42cd0d690922659d329f6465e89feb8a34e8cd3433"},
"ecto_sql": {:hex, :ecto_sql, "3.10.2", "6b98b46534b5c2f8b8b5f03f126e75e2a73c64f3c071149d32987a5378b0fdbd", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "68c018debca57cb9235e3889affdaec7a10616a4e3a80c99fa1d01fdafaa9007"},
+ "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
"esbuild": {:hex, :esbuild, "0.7.1", "fa0947e8c3c3c2f86c9bf7e791a0a385007ccd42b86885e8e893bdb6631f5169", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "66661cdf70b1378ee4dc16573fcee67750b59761b2605a0207c267ab9d19f13c"},
+ "excoveralls": {:hex, :excoveralls, "0.18.0", "b92497e69465dc51bc37a6422226ee690ab437e4c06877e836f1c18daeb35da9", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "1109bb911f3cb583401760be49c02cbbd16aed66ea9509fc5479335d284da60b"},
"expo": {:hex, :expo, "0.4.1", "1c61d18a5df197dfda38861673d392e642649a9cef7694d2f97a587b2cfb319b", [:mix], [], "hexpm", "2ff7ba7a798c8c543c12550fa0e2cbc81b95d4974c65855d8d15ba7b37a1ce47"},
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
"finch": {:hex, :finch, "0.16.0", "40733f02c89f94a112518071c0a91fe86069560f5dbdb39f9150042f44dcfb1a", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f660174c4d519e5fec629016054d60edd822cdfe2b7270836739ac2f97735ec5"},
@@ -22,6 +27,7 @@
"makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"},
"mime": {:hex, :mime, "2.0.5", "dc34c8efd439abe6ae0343edbb8556f4d63f178594894720607772a041b04b02", [:mix], [], "hexpm", "da0d64a365c45bc9935cc5c8a7fc5e49a0e0f9932a761c55d6c52b142780a05c"},
"mint": {:hex, :mint, "1.5.1", "8db5239e56738552d85af398798c80648db0e90f343c8469f6c6d8898944fb6f", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "4a63e1e76a7c3956abd2c72f370a0d0aecddc3976dea5c27eccbecfa5e7d5b1e"},
+ "mix_audit": {:hex, :mix_audit, "2.1.1", "653aa6d8f291fc4b017aa82bdb79a4017903902ebba57960ef199cbbc8c008a1", [:make, :mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:yaml_elixir, "~> 2.9", [hex: :yaml_elixir, repo: "hexpm", optional: false]}], "hexpm", "541990c3ab3a7bb8c4aaa2ce2732a4ae160ad6237e5dcd5ad1564f4f85354db1"},
"nimble_options": {:hex, :nimble_options, "1.0.2", "92098a74df0072ff37d0c12ace58574d26880e522c22801437151a159392270e", [:mix], [], "hexpm", "fd12a8db2021036ce12a309f26f564ec367373265b53e25403f0ee697380f1b8"},
"nimble_parsec": {:hex, :nimble_parsec, "1.3.1", "2c54013ecf170e249e9291ed0a62e5832f70a476c61da16f6aac6dca0189f2af", [:mix], [], "hexpm", "2682e3c0b2eb58d90c6375fc0cc30bc7be06f365bf72608804fb9cffa5e1b167"},
"nimble_pool": {:hex, :nimble_pool, "1.0.0", "5eb82705d138f4dd4423f69ceb19ac667b3b492ae570c9f5c900bb3d2f50a847", [:mix], [], "hexpm", "80be3b882d2d351882256087078e1b1952a28bf98d0a287be87e4a24a710b67a"},
@@ -38,6 +44,7 @@
"plug_crypto": {:hex, :plug_crypto, "2.0.0", "77515cc10af06645abbfb5e6ad7a3e9714f805ae118fa1a70205f80d2d70fe73", [:mix], [], "hexpm", "53695bae57cc4e54566d993eb01074e4d894b65a3766f1c43e2c61a1b0f45ea9"},
"postgrex": {:hex, :postgrex, "0.17.3", "c92cda8de2033a7585dae8c61b1d420a1a1322421df84da9a82a6764580c503d", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "946cf46935a4fdca7a81448be76ba3503cff082df42c6ec1ff16a4bdfbfb098d"},
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
+ "sobelow": {:hex, :sobelow, "0.13.0", "218afe9075904793f5c64b8837cc356e493d88fddde126a463839351870b8d1e", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "cd6e9026b85fc35d7529da14f95e85a078d9dd1907a9097b3ba6ac7ebbe34a0d"},
"sourceror": {:hex, :sourceror, "0.12.3", "a2ad3a1a4554b486d8a113ae7adad5646f938cad99bf8bfcef26dc0c88e8fade", [:mix], [], "hexpm", "4d4e78010ca046524e8194ffc4683422f34a96f6b82901abbb45acc79ace0316"},
"surface": {:hex, :surface, "0.11.0", "95fd9a61318cd19659d69f6a5be59ae149ebe2b22569783bc0b35e4c6da4e3bd", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:sourceror, "~> 0.11", [hex: :sourceror, repo: "hexpm", optional: false]}], "hexpm", "e7530cbfdbf48263e595224cad7ac62190d1086afbc2a0794c75bf659e36fa8d"},
"surface_catalogue": {:hex, :surface_catalogue, "0.6.1", "25f9232cd8d623b040a84620390a28433d34af23747d18525c820f2d0e52a25e", [:mix], [{:earmark, "~> 1.4.21", [hex: :earmark, repo: "hexpm", optional: false]}, {:esbuild, "~> 0.2", [hex: :esbuild, repo: "hexpm", optional: false]}, {:html_entities, "~> 0.4", [hex: :html_entities, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.16.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:surface, "~> 0.10", [hex: :surface, repo: "hexpm", optional: false]}], "hexpm", "79d25e094add1ce14a7c0480e77a8105da127a7f5f1b2f711233013497bab9bc"},
@@ -48,4 +55,6 @@
"telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"},
"websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"},
"websock_adapter": {:hex, :websock_adapter, "0.5.4", "7af8408e7ed9d56578539594d1ee7d8461e2dd5c3f57b0f2a5352d610ddde757", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "d2c238c79c52cbe223fcdae22ca0bb5007a735b9e933870e241fce66afb4f4ab"},
+ "yamerl": {:hex, :yamerl, "0.10.0", "4ff81fee2f1f6a46f1700c0d880b24d193ddb74bd14ef42cb0bcf46e81ef2f8e", [:rebar3], [], "hexpm", "346adb2963f1051dc837a2364e4acf6eb7d80097c0f53cbdc3046ec8ec4b4e6e"},
+ "yaml_elixir": {:hex, :yaml_elixir, "2.9.0", "9a256da867b37b8d2c1ffd5d9de373a4fda77a32a45b452f1708508ba7bbcb53", [:mix], [{:yamerl, "~> 0.10", [hex: :yamerl, repo: "hexpm", optional: false]}], "hexpm", "0cb0e7d4c56f5e99a6253ed1a670ed0e39c13fc45a6da054033928607ac08dfc"},
}
diff --git a/test/support/data_case.ex b/test/support/data_case.ex
index a2ba597..096952c 100644
--- a/test/support/data_case.ex
+++ b/test/support/data_case.ex
@@ -16,6 +16,8 @@ defmodule Basket.DataCase do
use ExUnit.CaseTemplate
+ alias Ecto.Adapters.SQL.Sandbox
+
using do
quote do
alias Basket.Repo
@@ -36,8 +38,8 @@ defmodule Basket.DataCase do
Sets up the sandbox based on the test tags.
"""
def setup_sandbox(tags) do
- pid = Ecto.Adapters.SQL.Sandbox.start_owner!(Basket.Repo, shared: not tags[:async])
- on_exit(fn -> Ecto.Adapters.SQL.Sandbox.stop_owner(pid) end)
+ pid = Sandbox.start_owner!(Basket.Repo, shared: not tags[:async])
+ on_exit(fn -> Sandbox.stop_owner(pid) end)
end
@doc """