1 defmodule Pleroma.DataCase do
3 This module defines the setup for tests requiring
4 access to the application's data layer.
6 You may define functions here to be used as helpers in
9 Finally, if the test case interacts with the database,
10 it cannot be async. For this reason, every test runs
11 inside a transaction which is reset at the beginning
12 of the test unless the test case is marked as async.
15 use ExUnit.CaseTemplate
24 import Pleroma.DataCase
29 :ok = Ecto.Adapters.SQL.Sandbox.checkout(Pleroma.Repo)
31 unless tags[:async] do
32 Ecto.Adapters.SQL.Sandbox.mode(Pleroma.Repo, {:shared, self()})
39 A helper that transform changeset errors to a map of messages.
41 changeset = Accounts.create_user(%{password: "short"})
42 assert "password is too short" in errors_on(changeset).password
43 assert %{password: ["password is too short"]} = errors_on(changeset)
46 def errors_on(changeset) do
47 Ecto.Changeset.traverse_errors(changeset, fn {message, opts} ->
48 Enum.reduce(opts, message, fn {key, value}, acc ->
49 String.replace(acc, "%{#{key}}", to_string(value))