Packages
ecto
0.11.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/migration.exs
Code.require_file "../../test/support/file_helpers.exs", __DIR__
defmodule Ecto.Integration.MigrationTest do
use Ecto.Integration.Case
import Support.FileHelpers
import Ecto.Migrator, only: [migrated_versions: 1]
require Ecto.Integration.TestRepo, as: TestRepo
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
[migration] = TestRepo.all(Ecto.Migration.SchemaMigration)
assert migration.version == 0
assert migration.inserted_at
end
test "migrations up and down" do
assert migrated_versions(TestRepo) == [0]
assert up(TestRepo, 20080906120000, GoodMigration, log: false) == :ok
assert migrated_versions(TestRepo) == [0, 20080906120000]
assert up(TestRepo, 20080906120000, GoodMigration, log: false) == :already_up
assert migrated_versions(TestRepo) == [0, 20080906120000]
assert down(TestRepo, 20080906120001, GoodMigration, log: false) == :already_down
assert migrated_versions(TestRepo) == [0, 20080906120000]
assert down(TestRepo, 20080906120000, GoodMigration, log: false) == :ok
assert migrated_versions(TestRepo) == [0]
end
test "bad migration" do
assert catch_error(up(TestRepo, 20080906120000, 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
import Ecto.Query, only: [from: 2]
TestRepo.one! from p in "barebones", select: count(1)
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
execute "INSERT INTO barebones (num) VALUES (#{num})"
end
def down do
execute "DELETE FROM barebones WHERE num = #{num}"
end
end
"""
module
end
defp purge(modules) do
Enum.each(List.wrap(modules), fn m ->
:code.delete m
:code.purge m
end)
end
end