Packages
ecto
1.0.2
3.14.1
3.14.0
3.13.6
3.13.5
3.13.4
3.13.3
3.13.2
3.13.1
3.13.0
3.12.6
3.12.5
3.12.4
3.12.3
3.12.2
3.12.1
3.12.0
3.11.2
3.11.1
3.11.0
3.10.3
3.10.2
3.10.1
3.10.0
3.9.6
3.9.5
3.9.4
3.9.3
3.9.2
3.9.1
3.9.0
3.8.4
3.8.3
3.8.2
3.8.1
3.8.0
3.7.2
3.7.1
3.7.0
3.6.2
3.6.1
3.6.0
3.5.8
3.5.7
3.5.6
3.5.5
3.5.4
3.5.3
3.5.2
3.5.1
3.5.0
3.5.0-rc.1
3.5.0-rc.0
3.4.6
3.4.5
3.4.4
3.4.3
3.4.2
3.4.1
3.4.0
3.3.4
3.3.3
3.3.2
3.3.1
3.3.0
3.2.5
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.9
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
3.0.0-rc.1
3.0.0-rc.0
2.2.12
2.2.11
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.2.0-rc.1
2.2.0-rc.0
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.1.0-rc.5
2.1.0-rc.4
2.1.0-rc.3
2.1.0-rc.2
2.1.0-rc.1
2.1.0-rc.0
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-rc.6
2.0.0-rc.5
2.0.0-rc.4
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
2.0.0-beta.2
2.0.0-beta.1
2.0.0-beta.0
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.16.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.1
0.12.0
0.12.0-rc
0.11.3
0.11.2
0.11.1
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
A toolkit for data mapping and language integrated query for Elixir
Current section
Files
Jump to
Current section
Files
integration_test/cases/migrator.exs
Code.require_file "../support/file_helpers.exs", __DIR__
defmodule Ecto.Integration.MigratorTest do
use ExUnit.Case
import Support.FileHelpers
import Ecto.Migrator, only: [migrated_versions: 1]
alias Ecto.Integration.TestRepo
alias Ecto.Migration.SchemaMigration
setup do
TestRepo.delete_all(SchemaMigration)
:ok
end
defmodule GoodMigration do
use Ecto.Migration
def up do
:ok
end
def down do
:ok
end
end
defmodule BadMigration do
use Ecto.Migration
def change do
execute "CREATE WHAT"
end
end
import Ecto.Migrator
test "schema migration" do
up(TestRepo, 20100906120000, GoodMigration, log: false)
[migration] = TestRepo.all(SchemaMigration)
assert migration.version == 20100906120000
assert migration.inserted_at
end
test "migrations up and down" do
assert migrated_versions(TestRepo) == []
assert up(TestRepo, 20100906120000, GoodMigration, log: false) == :ok
assert migrated_versions(TestRepo) == [20100906120000]
assert up(TestRepo, 20100906120000, GoodMigration, log: false) == :already_up
assert migrated_versions(TestRepo) == [20100906120000]
assert down(TestRepo, 21100906120000, GoodMigration, log: false) == :already_down
assert migrated_versions(TestRepo) == [20100906120000]
assert down(TestRepo, 20100906120000, GoodMigration, log: false) == :ok
assert migrated_versions(TestRepo) == []
end
test "bad migration" do
assert catch_error(up(TestRepo, 20100906120000, BadMigration, log: false))
end
test "run up to/step migration" do
in_tmp fn path ->
create_migration(47)
create_migration(48)
assert [47] = run(TestRepo, path, :up, step: 1, log: false)
assert count_entries() == 1
assert [48] = run(TestRepo, path, :up, to: 48, log: false)
end
end
test "run down to/step migration" do
in_tmp fn path ->
migrations = [
create_migration(49),
create_migration(50),
]
assert [49, 50] = run(TestRepo, path, :up, all: true, log: false)
purge migrations
assert [50] = run(TestRepo, path, :down, step: 1, log: false)
purge migrations
assert count_entries() == 1
assert [50] = run(TestRepo, path, :up, to: 50, log: false)
end
end
test "runs all migrations" do
in_tmp fn path ->
migrations = [
create_migration(53),
create_migration(54),
]
assert [53, 54] = run(TestRepo, path, :up, all: true, log: false)
assert [] = run(TestRepo, path, :up, all: true, log: false)
purge migrations
assert [54, 53] = run(TestRepo, path, :down, all: true, log: false)
purge migrations
assert count_entries() == 0
assert [53, 54] = run(TestRepo, path, :up, all: true, log: false)
end
end
defp count_entries() do
length Process.get(:migrations)
end
defp create_migration(num) do
module = Module.concat(__MODULE__, "Migration#{num}")
File.write! "#{num}_migration_#{num}.exs", """
defmodule #{module} do
use Ecto.Migration
def up do
update &[#{num}|&1]
end
def down do
update &List.delete(&1, #{num})
end
defp update(fun) do
Process.put(:migrations, fun.(Process.get(:migrations) || []))
end
end
"""
module
end
defp purge(modules) do
Enum.each(List.wrap(modules), fn m ->
:code.delete m
:code.purge m
end)
end
end