Ecto.ConstraintError при тестировании приложения Umbrella

У меня есть два приложения, Пользователь и Плейлист. Пока приложения работают нормально, у меня проблемы с настройкой среды тестирования

setup do
    :ok = Ecto.Adapters.SQL.Sandbox.checkout(Playlists.Repo)
    Ecto.Adapters.SQL.Sandbox.checkout(Accounts.Repo)
    Ecto.Adapters.SQL.Sandbox.mode(Playlists.Repo, {:shared, self()})
    Ecto.Adapters.SQL.Sandbox.mode(Accounts.Repo, {:shared, self()})         
    :ok
end

test "create a playlist" do
  { _, user1 } = Users.register("user1", "user1@email.com", "user1pw")
  { _, playlist1 } = Playlists.create_playlist("title", "user1")

  assert playlist1 == Playlists.get_playlist!(1)
end

Я сталкиваюсь с этой ошибкой

  1) test Playlist create a playlist (PlaylistsTest)
 test/playlists_test.exs:14
 ** (Ecto.ConstraintError) constraint error when attempting to insert struct:

     * playlists_user_id_fkey (foreign_key_constraint)

 If you would like to stop this constraint violation from raising an
 exception and instead add it as an error to your changeset, please
 call `foreign_key_constraint/3` on your changeset with the constraint
 `:name` as an option.

 The changeset has not defined any constraint.

 code: { _, playlist1 } = Playlists.api_create_playlist("title", "icon", false, "user1")
 stacktrace:
   (ecto) lib/ecto/repo/schema.ex:647: anonymous fn/4 in Ecto.Repo.Schema.constraints_to_errors/3
   (elixir) lib/enum.ex:1314: Enum."-map/2-lists^map/1-0-"/2
   (ecto) lib/ecto/repo/schema.ex:632: Ecto.Repo.Schema.constraints_to_errors/3
   (ecto) lib/ecto/repo/schema.ex:238: anonymous fn/15 in Ecto.Repo.Schema.do_insert/3
   (ecto) lib/ecto/repo/schema.ex:875: anonymous fn/3 in Ecto.Repo.Schema.wrap_in_transaction/6
   (ecto_sql) lib/ecto/adapters/sql.ex:782: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4
   (db_connection) lib/db_connection.ex:1341: DBConnection.run_transaction/4
   test/playlists_test.exs:16: (test)

Я проверил создаваемый user1, поэтому проблема должна заключаться в создании списка воспроизведения, а также в сообщении об ошибке, касающемся уникальных ограничений. В def change() моих репо. Миграции, у меня есть

create table(:playlists) do
  add :title, :string
  add :user_id, references(:users, null: false)

  timestamps()
end

create unique_index(:playlists, [:title, :user_id])
create unique_index(:playlists_users, [:playlist_id, :user_id])

Я возился с несколькими конфигурациями Ecto Sandbox, но, похоже, не работает. Что мне не хватает? Любая помощь приветствуется.

0 ответов

Другие вопросы по тегам