migration_test_helper 1.2.1 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/tasks/migration_test_helper_tasks.rake +17 -4
- data/test/foundry_only_helper.rb +17 -0
- data/test/full_migration_test_generator_test.rb +52 -0
- data/test/helper.rb +46 -0
- data/test/migration_test_generator_test.rb +89 -0
- metadata +7 -3
data/Rakefile
CHANGED
@@ -1,4 +1,17 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
|
2
|
+
namespace :test do
|
3
|
+
|
4
|
+
Rake::TestTask.new(:migrations => "db:test:prepare") do |t|
|
5
|
+
t.libs << "test"
|
6
|
+
t.pattern = 'test/migration/**/*_test.rb'
|
7
|
+
t.verbose = true
|
8
|
+
end
|
9
|
+
Rake::Task['test:migrations'].comment = "Run the migration tests in test/migration"
|
10
|
+
|
11
|
+
task :migration => 'test:migration'
|
12
|
+
end
|
13
|
+
|
14
|
+
task :test do
|
15
|
+
Rake::Task['test:migration'].invoke rescue got_error = true
|
16
|
+
raise "Test failures" if got_error
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Test::Unit::TestCase
|
2
|
+
|
3
|
+
def self.running_in_foundry
|
4
|
+
File.expand_path(File.dirname(__FILE__)) =~ /\/rails_plugin_foundry\//
|
5
|
+
end
|
6
|
+
|
7
|
+
def running_in_foundry
|
8
|
+
self.class.running_in_foundry
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.in_foundry_should(behave,&block)
|
12
|
+
should(behave,&block) if running_in_foundry
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_PLACEHOLDER; end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/foundry_only_helper')
|
3
|
+
|
4
|
+
class FullMigrationTestGeneratorTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
return unless running_in_foundry
|
8
|
+
rm_migration_test_path
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
return unless running_in_foundry
|
13
|
+
rm_migration_test_path
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
#
|
18
|
+
# HELPERS
|
19
|
+
#
|
20
|
+
|
21
|
+
def migration_test_file
|
22
|
+
migration_test_path + "/full_migration_test.rb"
|
23
|
+
end
|
24
|
+
|
25
|
+
def run_generator
|
26
|
+
run_in_rails_root 'script/generate full_migration_test'
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# TESTS
|
31
|
+
#
|
32
|
+
|
33
|
+
in_foundry_should "generate full migration test" do
|
34
|
+
run_generator
|
35
|
+
assert File.exists?(migration_test_file), "No test file made: #{migration_test_file}"
|
36
|
+
generated_code = File.read(migration_test_file)
|
37
|
+
source_code = File.read(plugin_path('generators/full_migration_test/templates/full_migration_test.rb'))
|
38
|
+
assert_equal source_code, generated_code, "Wrong code generated in #{migration_test_file}"
|
39
|
+
end
|
40
|
+
|
41
|
+
in_foundry_should "create a test that fails in expected fashion" do
|
42
|
+
run_generator
|
43
|
+
cd RAILS_ROOT do
|
44
|
+
@output = `ruby test/migration/full_migration_test.rb`
|
45
|
+
end
|
46
|
+
|
47
|
+
check_output '1 tests, 1 assertions, 1 failures, 0 errors'
|
48
|
+
check_output 'implement me'
|
49
|
+
check_output 'test_full_migration(FullMigrationTest)'
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
data/test/helper.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
ENV["RAILS_ENV"] = "test"
|
2
2
|
require File.expand_path(File.dirname(__FILE__) + '/../../../../config/environment')
|
3
3
|
require 'logger'
|
4
|
+
require 'fileutils'
|
4
5
|
require 'test_help'
|
5
6
|
|
6
7
|
plugin_path = RAILS_ROOT + "/vendor/plugins/migration_test_helper"
|
@@ -16,6 +17,7 @@ Test::Unit::TestCase.fixture_path = plugin_path + "/test/fixtures/"
|
|
16
17
|
$LOAD_PATH.unshift(Test::Unit::TestCase.fixture_path)
|
17
18
|
|
18
19
|
class Test::Unit::TestCase
|
20
|
+
include FileUtils
|
19
21
|
def plugin_path(path)
|
20
22
|
File.expand_path(File.dirname(__FILE__) + '/../' + path)
|
21
23
|
end
|
@@ -26,4 +28,48 @@ class Test::Unit::TestCase
|
|
26
28
|
load(schema_file) if File.exist?(schema_file)
|
27
29
|
end
|
28
30
|
end
|
31
|
+
|
32
|
+
def migration_test_path
|
33
|
+
File.expand_path(RAILS_ROOT + "/test/migration")
|
34
|
+
end
|
35
|
+
|
36
|
+
def run_in_rails_root(command)
|
37
|
+
cd RAILS_ROOT do
|
38
|
+
@output = `#{command}`
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def check_output(string_or_regexp)
|
43
|
+
assert_not_nil @output, "No output collected"
|
44
|
+
case string_or_regexp
|
45
|
+
when String
|
46
|
+
assert_match(/#{Regexp.escape(string_or_regexp)}/, @output)
|
47
|
+
when Regexp
|
48
|
+
assert_match(string_or_regexp, @output)
|
49
|
+
else
|
50
|
+
raise "Can't check output using oddball object #{string_or_regexp.inspect}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def rm_migration_test_path
|
55
|
+
rm_rf migration_test_path
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.should(behave,&block)
|
59
|
+
return unless running_in_foundry
|
60
|
+
@context ||= nil
|
61
|
+
@context_setup ||= nil
|
62
|
+
context_string = @context.nil? ? '' : @context + ' '
|
63
|
+
mname = "test #{context_string}should #{behave}"
|
64
|
+
context_setup = @context_setup
|
65
|
+
if block_given?
|
66
|
+
define_method(mname) do
|
67
|
+
instance_eval(&context_setup) unless context_setup.nil?
|
68
|
+
instance_eval(&block)
|
69
|
+
end
|
70
|
+
else
|
71
|
+
puts ">>> UNIMPLEMENTED CASE: #{name.sub(/Test$/,'')} should #{behave}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
29
75
|
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/foundry_only_helper')
|
3
|
+
|
4
|
+
class MigrationTestGeneratorTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
return unless running_in_foundry
|
8
|
+
rm_migration_test_path
|
9
|
+
rm_migrations
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
return unless running_in_foundry
|
14
|
+
rm_migration_test_path
|
15
|
+
rm_migrations
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
#
|
20
|
+
# HELPERS
|
21
|
+
#
|
22
|
+
|
23
|
+
def generate_migration(expected_version, name)
|
24
|
+
run_in_rails_root "script/generate migration #{name}"
|
25
|
+
migration_file = "db/migrate/#{expected_version}_#{name}.rb"
|
26
|
+
assert File.exists?(migration_file), "Migration not there: #{migration_file}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def generate_migration_test(version)
|
30
|
+
run_in_rails_root "script/generate migration_test #{version}"
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def rm_migrations
|
35
|
+
rm Dir["db/migrate/*.rb"]
|
36
|
+
end
|
37
|
+
|
38
|
+
#
|
39
|
+
# TESTS
|
40
|
+
#
|
41
|
+
|
42
|
+
in_foundry_should "generate a migration test for schema 1" do
|
43
|
+
generate_migration '001', 'create_the_dogs_table'
|
44
|
+
|
45
|
+
generate_migration_test '1'
|
46
|
+
|
47
|
+
migration_test_file = "test/migration/001_create_the_dogs_table_test.rb"
|
48
|
+
assert File.exists?(migration_test_file), "Migration test not there: #{migration_test_file}"
|
49
|
+
|
50
|
+
run_in_rails_root "ruby #{migration_test_file}"
|
51
|
+
check_output 'test_migration_should_create_the_dogs_table(CreateTheDogsTableTest)'
|
52
|
+
check_output '1) Failure:'
|
53
|
+
check_output 'TODO: setup test data.'
|
54
|
+
check_output '1 tests, 1 assertions, 1 failures, 0 errors'
|
55
|
+
end
|
56
|
+
|
57
|
+
in_foundry_should "generate a migration test for schema 2" do
|
58
|
+
generate_migration '001', 'create_the_dogs_table'
|
59
|
+
generate_migration '002', 'transfer_cats_data'
|
60
|
+
generate_migration_test '002'
|
61
|
+
migration_test_file = "test/migration/002_transfer_cats_data_test.rb"
|
62
|
+
assert File.exists?(migration_test_file), "Migration test not there: #{migration_test_file}"
|
63
|
+
|
64
|
+
run_in_rails_root "ruby #{migration_test_file}"
|
65
|
+
check_output 'test_migration_should_transfer_cats_data(TransferCatsDataTest)'
|
66
|
+
check_output '1) Failure:'
|
67
|
+
check_output 'TODO: setup test data.'
|
68
|
+
check_output '1 tests, 1 assertions, 1 failures, 0 errors'
|
69
|
+
end
|
70
|
+
|
71
|
+
in_foundry_should "fail if no schema version is provided" do
|
72
|
+
generate_migration '001', 'create_the_dogs_table'
|
73
|
+
generate_migration_test ''
|
74
|
+
check_output 'Usage: script/generate migration_test MigrationTestName [options]'
|
75
|
+
end
|
76
|
+
|
77
|
+
in_foundry_should "fail if bad schema version is provided" do
|
78
|
+
generate_migration '001', 'create_the_dogs_table'
|
79
|
+
generate_migration_test 'oops'
|
80
|
+
check_output(/Invalid schema version 'oops'/i)
|
81
|
+
end
|
82
|
+
|
83
|
+
in_foundry_should "fail if schema version does not correspond to existing migration" do
|
84
|
+
generate_migration '001', 'create_the_dogs_table'
|
85
|
+
generate_migration_test '2'
|
86
|
+
check_output "No migration found for schema version 002"
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.0
|
3
3
|
specification_version: 1
|
4
4
|
name: migration_test_helper
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date: 2007-02-
|
6
|
+
version: 1.3.1
|
7
|
+
date: 2007-02-27 00:00:00 -05:00
|
8
8
|
summary: A Rails plugin for testing migrations
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -25,13 +25,17 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
25
25
|
platform: ruby
|
26
26
|
signing_key:
|
27
27
|
cert_chain:
|
28
|
+
post_install_message:
|
28
29
|
authors:
|
29
30
|
- Micah Alles
|
30
31
|
files:
|
31
32
|
- test/config
|
32
33
|
- test/db
|
34
|
+
- test/foundry_only_helper.rb
|
35
|
+
- test/full_migration_test_generator_test.rb
|
33
36
|
- test/helper.rb
|
34
37
|
- test/log
|
38
|
+
- test/migration_test_generator_test.rb
|
35
39
|
- test/migration_test_helper_test.rb
|
36
40
|
- test/config/database.yml
|
37
41
|
- test/db/migrate_bad
|