plugin_test_helper 0.0.2 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/CHANGELOG +19 -0
  2. data/README +57 -49
  3. data/Rakefile +3 -3
  4. data/generators/plugin_test_console/plugin_test_console_generator.rb +14 -0
  5. data/generators/plugin_test_console/templates/console +7 -0
  6. data/generators/plugin_test_controller/plugin_test_controller_generator.rb +1 -1
  7. data/generators/plugin_test_helper/plugin_test_helper_generator.rb +1 -1
  8. data/generators/plugin_test_helper/templates/test_helper.rb +8 -8
  9. data/generators/plugin_test_migration/plugin_test_migration_generator.rb +1 -1
  10. data/generators/plugin_test_model/plugin_test_model_generator.rb +4 -4
  11. data/generators/plugin_test_structure/plugin_test_structure_generator.rb +28 -28
  12. data/generators/plugin_test_structure/templates/app_root/config/boot.rb +6 -2
  13. data/lib/plugin_test_helper.rb +9 -7
  14. data/lib/plugin_test_helper/console_with_fixtures.rb +3 -0
  15. data/lib/plugin_test_helper/extensions/initializer.rb +61 -61
  16. data/lib/plugin_test_helper/extensions/routing.rb +2 -2
  17. data/lib/plugin_test_helper/generator.rb +4 -3
  18. data/test/app_roots/empty/empty +0 -0
  19. data/test/app_roots/with_controller/app/controllers/people_controller.rb +2 -0
  20. data/test/app_roots/with_custom_application_controller/app/controllers/application.rb +5 -0
  21. data/test/app_roots/with_custom_config/config/environment.rb +16 -0
  22. data/test/app_roots/with_custom_config/vendor/plugins/acts_as_foo/init.rb +1 -0
  23. data/test/app_roots/with_custom_config/vendor/plugins/acts_as_foo/lib/acts_as_foo.rb +6 -0
  24. data/test/app_roots/with_fixtures/app/models/person.rb +2 -0
  25. data/test/app_roots/with_fixtures/db/migrate/001_create_people.rb +11 -0
  26. data/test/app_roots/with_helper/app/helpers/people_helper.rb +2 -0
  27. data/test/app_roots/with_migration/app/models/person.rb +2 -0
  28. data/test/app_roots/with_migration/db/migrate/001_create_people.rb +11 -0
  29. data/test/app_roots/with_model/app/models/person.rb +2 -0
  30. data/test/app_roots/with_routes/config/routes.rb +2 -0
  31. data/test/fixtures/people.yml +3 -0
  32. data/test/functional/plugin_test_helper_test.rb +95 -0
  33. data/test/test_helper.rb +3 -0
  34. metadata +59 -4
data/CHANGELOG CHANGED
@@ -1,5 +1,23 @@
1
1
  *SVN*
2
2
 
3
+ *0.1.1* (September 18th, 2007)
4
+
5
+ * Allow RAILS_FRAMEWORK_ROOT to be specified
6
+
7
+ * fixture_path should be a string, not an array
8
+
9
+ * Move test fixtures out of the test application root directory
10
+
11
+ *0.1.0* (September 5th, 2007)
12
+
13
+ * Fixtures are now expected to be in plugin_root/test/fixtures instead of plugin_root/test/app_root/test/fixtures
14
+
15
+ * Add support for running a console on the test application
16
+
17
+ * Add basic functional tests
18
+
19
+ * Convert dos newlines to unix newlines
20
+
3
21
  *0.0.2* (August 15th, 2007)
4
22
 
5
23
  * Autoload plugin even if the plugin doesn't define an app_root
@@ -15,3 +33,4 @@
15
33
  *0.0.1* (May 31st, 2007)
16
34
 
17
35
  * Initial release
36
+
data/README CHANGED
@@ -1,17 +1,21 @@
1
1
  = plugin_test_helper
2
2
 
3
- plugin_test_helper simplifies plugin testing by creating an isolated Rails
3
+ +plugin_test_helper+ simplifies plugin testing by creating an isolated Rails
4
4
  environment that simulates its usage in a real application.
5
5
 
6
6
  == Resources
7
7
 
8
+ API
9
+
10
+ * http://api.pluginaweek.org/plugin_test_helper
11
+
8
12
  Wiki
9
13
 
10
14
  * http://wiki.pluginaweek.org/Plugin_test_helper
11
15
 
12
16
  Announcement
13
17
 
14
- * http://www.pluginaweek.org/
18
+ * http://www.pluginaweek.org
15
19
 
16
20
  Source
17
21
 
@@ -21,60 +25,49 @@ Development
21
25
 
22
26
  * http://dev.pluginaweek.org/browser/trunk/plugins/test/plugin_test_helper
23
27
 
24
- == Background
25
-
26
- As described in http://www.pluginaweek.org/2006/11/24/plugin-tip-of-the-week-testing-your-plugins-the-right-way/,
27
- plugins often need access to a full Rails environment, whether it be accessing a
28
- database, simulating controller access, or something else. Whatever it may be,
29
- you still need to initialize a Rails environment in order to get your tests
30
- working.
31
-
32
- Traditionally, this has been done by just loading the application that the
33
- plugin was added to. This has many downfalls, the most important of which is
34
- that loading the application can cause all sorts of things to change, making it
35
- seem as though the plugin is having problems when it may be something else. The
36
- other downfall of this technique is that the plugin cannot be tested individually.
37
- Instead, it must be part of a Rails application.
38
-
39
- == Solution
40
-
41
- The solution to this problem is to have the plugin create its own basic Rails
42
- environment with the ability to override any part of it, be it the database
43
- configuration, environment configuration, or adding models, controllers, helpers,
44
- etc.
45
-
46
- plugin_test_helper assumes a testing structure like so:
47
-
48
- your_plugin/
49
- your_plugin/test
50
- your_plugin/test/app_root
51
- your_plugin/test/app_root/app
52
- your_plugin/test/app_root/config
53
- your_plugin/test/app_root/db
54
- etc.
55
-
56
- The app_root directory is just like your run-of-the-mill Rails application. It
28
+ == Descriptiona
29
+
30
+ Plugins often need to initialize a full Rails environment, whether it be for
31
+ accessing a database or simulating controller access. Traditionally, this has
32
+ been done by just loading the application that the plugin was added to.
33
+ However, this can cause all sorts of environment variables to change, making it
34
+ seem as though the plugin is having problems when it may be something else. It
35
+ also means that the plugin cannot be tested individually.
36
+
37
+ +plugin_test_helper+ helps solve this problem by allowing plugins to create their
38
+ own basic Rails environment with the ability to override any part of it, be it
39
+ the database configuration, environment configuration, or adding models,
40
+ controllers, helpers, etc. The following testing structure is assumed:
41
+
42
+ your_plugin/
43
+ your_plugin/test
44
+ your_plugin/test/app_root
45
+ your_plugin/test/app_root/app
46
+ your_plugin/test/app_root/config
47
+ your_plugin/test/app_root/db
48
+ etc.
49
+
50
+ The +app_root+ directory is just like your run-of-the-mill Rails application. It
57
51
  can contain the same directories as your full application.
58
52
 
59
- == How to use plugin_test_helper
60
-
61
- plugin_test_helper creates stubs for testing a plugin, as described in http://www.pluginaweek.org/2006/11/24
62
-
63
- The following generators are available:
53
+ To help generate the various parts of your test application, the following
54
+ generators are available:
64
55
  * plugin_test_helper
65
56
  * plugin_test_structure
66
57
  * plugin_test_model
67
58
  * plugin_test_controller
68
59
  * plugin_test_migration
69
60
 
70
- +NOTE+ that you +DO NOT+ need to generate the entire application structure. All
61
+ *NOTE* that you <b>DO NOT</b> need to generate the entire application structure. All
71
62
  that is required is that your test helper load plugin_test_helper. If you do
72
63
  not define a part of the test application (such as the environment
73
64
  configurations or the database configuration), then it will use the existing
74
- implementation in plugin_test_helper/generators/plugin_test_structure/templates.
75
- +However+, you can override any of these files by simply defining them in your
65
+ implementation in <tt>plugin_test_helper/generators/plugin_test_structure/templates</tt>.
66
+ *However*, you can override any of these files by simply defining them in your
76
67
  plugin, using the same directory structure.
77
68
 
69
+ == Usage
70
+
78
71
  === plugin_test_helper
79
72
 
80
73
  Generates a test helper file that should be required by all unit/functional/integration
@@ -94,7 +87,7 @@ Example:
94
87
  === plugin_test_structure
95
88
 
96
89
  Generates the entire test application structure. If you keep all files within
97
- your plugin, then you will not need to depend on the plugin_test_helper plugin
90
+ your plugin, then you will not need to depend on the +plugin_test_helper+ plugin
98
91
  when testing it.
99
92
 
100
93
  Example:
@@ -183,12 +176,27 @@ Example:
183
176
 
184
177
  0 tests, 0 assertions, 0 failures, 0 errors
185
178
 
179
+ === plugin_test_console
180
+
181
+ Generates a script for running an interactive console with your plugin's test
182
+ application.
183
+
184
+ Example:
185
+
186
+ $ ruby script/generate plugin_test_console acts_as_most_popular
187
+ create vendor/plugins/acts_as_most_popular/test/app_root/../../script
188
+ create vendor/plugins/acts_as_most_popular/test/app_root/../../script/console
189
+ Loaded suite script/generate
190
+ Started
191
+
192
+ Finished in 0.000267 seconds.
193
+
194
+ 0 tests, 0 assertions, 0 failures, 0 errors
195
+
186
196
  == Dependencies
187
197
 
188
- This plugin does not depend on any other plugins.
198
+ This plugin does not depend on the presence of any other plugins.
189
199
 
190
- == Credits
200
+ == References
191
201
 
192
- Kudos to Mark Meves over at http://rationalexuberance.org/ for working on the
193
- initial implementation of this plugin. His work has made testing our plugins so
194
- much easier. Thanks Mark!
202
+ * {Mark Meves}[http://rationalexuberance.org] for the initial implementation
data/Rakefile CHANGED
@@ -4,7 +4,7 @@ require 'rake/gempackagetask'
4
4
  require 'rake/contrib/sshpublisher'
5
5
 
6
6
  PKG_NAME = 'plugin_test_helper'
7
- PKG_VERSION = '0.0.2'
7
+ PKG_VERSION = '0.1.1'
8
8
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
9
9
  RUBY_FORGE_PROJECT = 'pluginaweek'
10
10
 
@@ -33,7 +33,7 @@ spec = Gem::Specification.new do |s|
33
33
  s.platform = Gem::Platform::RUBY
34
34
  s.summary = 'Simplifies plugin testing by creating an isolated Rails environment that simulates its usage in a real application.'
35
35
 
36
- s.files = FileList['{generators,lib}/**/*'].to_a + %w(CHANGELOG init.rb MIT-LICENSE Rakefile README)
36
+ s.files = FileList['{generators,lib,test}/**/*'].to_a + %w(CHANGELOG init.rb MIT-LICENSE Rakefile README)
37
37
  s.require_path = 'lib'
38
38
  s.autorequire = 'plugin_test_helper'
39
39
  s.has_rdoc = true
@@ -76,4 +76,4 @@ task :release => [:gem, :package] do
76
76
 
77
77
  ruby_forge.add_release(RUBY_FORGE_PROJECT, PKG_NAME, PKG_VERSION, file)
78
78
  end
79
- end
79
+ end
@@ -0,0 +1,14 @@
1
+ # Generates a test console for the plugin's test application
2
+ class PluginTestConsoleGenerator < Rails::Generator::NamedBase
3
+ def manifest #:nodoc:
4
+ record do |m|
5
+ plugin_root = "vendor/plugins/#{name}"
6
+
7
+ # Script directory.
8
+ m.directory File.join(plugin_root, 'script')
9
+
10
+ # Console class.
11
+ m.file 'console', File.join(plugin_root, 'script/console')
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
2
+ libs = " -r irb/completion"
3
+ libs << " -r test/test_helper"
4
+ libs << " -r plugin_test_helper/console_with_fixtures"
5
+ libs << " -r console_app"
6
+ libs << " -r console_with_helpers"
7
+ exec "#{irb} #{libs} --simple-prompt"
@@ -1,6 +1,6 @@
1
1
  # Generates the class, helper, and view for a controller in a plugin's test application
2
2
  class PluginTestControllerGenerator < PluginAWeek::PluginTestHelper::Generator
3
- def manifest
3
+ def manifest #:nodoc:
4
4
  record do |m|
5
5
  # Check for class naming collisions.
6
6
  m.class_collisions class_path, "#{class_name}Controller", "#{class_name}Helper"
@@ -1,6 +1,6 @@
1
1
  # Generates the test helper for a plugin
2
2
  class PluginTestHelperGenerator < Rails::Generator::NamedBase
3
- def manifest
3
+ def manifest #:nodoc:
4
4
  record do |m|
5
5
  plugin_test_root = "vendor/plugins/#{name}/test"
6
6
  m.file 'test_helper.rb', "#{plugin_test_root}/test_helper.rb"
@@ -1,9 +1,9 @@
1
- # If you want to change the default rails environment
2
- # ENV['RAILS_ENV'] ||= 'your_env'
3
-
4
- # Load the plugin testing framework
5
- require 'rubygems'
6
- require 'plugin_test_helper'
7
-
8
- # Run the migrations (optional)
1
+ # If you want to change the default rails environment
2
+ # ENV['RAILS_ENV'] ||= 'your_env'
3
+
4
+ # Load the plugin testing framework
5
+ require 'rubygems'
6
+ require 'plugin_test_helper'
7
+
8
+ # Run the migrations (optional)
9
9
  ActiveRecord::Migrator.migrate("#{RAILS_ROOT}/db/migrate")
@@ -1,6 +1,6 @@
1
1
  # Generates migrations for a plugin's test application
2
2
  class PluginTestMigrationGenerator < PluginAWeek::PluginTestHelper::Generator
3
- def manifest
3
+ def manifest #:nodoc:
4
4
  record do |m|
5
5
  m.migration_template 'migration.rb', "#{plugin_app_root}/db/migrate"
6
6
  end
@@ -2,18 +2,18 @@
2
2
  class PluginTestModelGenerator < PluginAWeek::PluginTestHelper::Generator
3
3
  default_options :skip_migration => false
4
4
 
5
- def manifest
5
+ def manifest #:nodoc:
6
6
  record do |m|
7
7
  # Check for class naming collisions.
8
8
  m.class_collisions class_path, class_name
9
9
 
10
10
  # Model and fixture directories.
11
11
  m.directory File.join(plugin_app_root, 'app/models', class_path)
12
- m.directory File.join(plugin_app_root, 'test/fixtures', class_path)
12
+ m.directory File.join(plugin_test_root, 'fixtures', class_path)
13
13
 
14
14
  # Model class and fixtures.
15
15
  m.template 'model.rb', File.join(plugin_app_root, 'app/models', class_path, "#{file_name}.rb")
16
- m.template 'fixtures.yml', File.join(plugin_app_root, 'test/fixtures', class_path, "#{table_name}.yml")
16
+ m.template 'fixtures.yml', File.join(plugin_test_root, 'fixtures', class_path, "#{table_name}.yml")
17
17
 
18
18
  unless options[:skip_migration]
19
19
  m.migration_template 'migration.rb', "#{plugin_app_root}/db/migrate", :assigns => {
@@ -34,4 +34,4 @@ class PluginTestModelGenerator < PluginAWeek::PluginTestHelper::Generator
34
34
  opt.on("--skip-migration",
35
35
  "Don't generate a migration file for this model") { |v| options[:skip_migration] = v }
36
36
  end
37
- end
37
+ end
@@ -1,28 +1,28 @@
1
- # Generates the test structure for a plugin
2
- class PluginTestStructureGenerator < Rails::Generator::NamedBase
3
- def manifest
4
- record do |m|
5
- # Paths are relative to our template dir
6
- plugin_test_root = "vendor/plugins/#{name}/test"
7
- templates_root = "#{File.dirname(__FILE__)}/templates"
8
-
9
- # Copy all directories and files. None of them are templated so that they
10
- # can be reused during runtime
11
- Dir["#{templates_root}/**/*"].each do |source_file|
12
- relative_source_file = source_file.sub(templates_root, '')
13
- target_file = File.join(plugin_test_root, relative_source_file)
14
-
15
- if File.directory?(source_file)
16
- m.directory target_file
17
- else
18
- m.file relative_source_file, target_file
19
- end
20
- end
21
- end
22
- end
23
-
24
- protected
25
- def banner
26
- "Usage: #{$0} plugin_test_structure your_plugin"
27
- end
28
- end
1
+ # Generates the test structure for a plugin
2
+ class PluginTestStructureGenerator < Rails::Generator::NamedBase
3
+ def manifest #:nodoc:
4
+ record do |m|
5
+ # Paths are relative to our template dir
6
+ plugin_test_root = "vendor/plugins/#{name}/test"
7
+ templates_root = "#{File.dirname(__FILE__)}/templates"
8
+
9
+ # Copy all directories and files. None of them are templated so that they
10
+ # can be reused during runtime
11
+ Dir["#{templates_root}/**/*"].each do |source_file|
12
+ relative_source_file = source_file.sub(templates_root, '')
13
+ target_file = File.join(plugin_test_root, relative_source_file)
14
+
15
+ if File.directory?(source_file)
16
+ m.directory target_file
17
+ else
18
+ m.file relative_source_file, target_file
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ protected
25
+ def banner
26
+ "Usage: #{$0} plugin_test_structure your_plugin"
27
+ end
28
+ end
@@ -9,9 +9,13 @@ unless defined?(RAILS_ROOT)
9
9
  RAILS_ROOT = root_path
10
10
  end
11
11
 
12
+ unless defined?(RAILS_FRAMEWORK_ROOT)
13
+ RAILS_FRAMEWORK_ROOT = ENV['RAILS_FRAMEWORK_ROOT'] || "#{RAILS_ROOT}/vendor/rails"
14
+ end
15
+
12
16
  unless defined?(Rails::Initializer)
13
- if File.directory?("#{RAILS_ROOT}/vendor/rails")
14
- require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
17
+ if File.directory?(RAILS_FRAMEWORK_ROOT)
18
+ require "#{RAILS_FRAMEWORK_ROOT}/railties/lib/initializer"
15
19
  else
16
20
  require 'rubygems'
17
21
 
@@ -1,19 +1,20 @@
1
1
  # Make sure our default RAILS_ROOT from the helper plugin is in the load path
2
- HELPER_RAILS_ROOT = "#{File.dirname(__FILE__)}/../generators/plugin_test_structure/templates/app_root"
2
+ unless defined?(HELPER_RAILS_ROOT)
3
+ HELPER_RAILS_ROOT = "#{File.dirname(__FILE__)}/../generators/plugin_test_structure/templates/app_root"
4
+ end
3
5
  $:.unshift(HELPER_RAILS_ROOT)
4
6
 
5
7
  # Determine the plugin's root test directory and add it to the load path
6
8
  unless defined?(RAILS_ROOT)
7
9
  root_path = File.join(File.expand_path('.'), 'test/app_root')
8
-
10
+
9
11
  unless RUBY_PLATFORM =~ /(:?mswin|mingw)/
10
12
  require 'pathname'
11
13
  root_path = Pathname.new(root_path).cleanpath(true).to_s
12
14
  end
13
-
15
+
14
16
  RAILS_ROOT = root_path
15
17
  end
16
-
17
18
  $:.unshift(RAILS_ROOT)
18
19
 
19
20
  # Set the default environment to sqlite3's in_memory database
@@ -31,8 +32,8 @@ require 'plugin_test_helper/extensions/initializer'
31
32
  require 'plugin_test_helper/extensions/routing'
32
33
 
33
34
  # Load the Rails environment and testing framework
34
- require 'config/environment'
35
- require 'test_help'
35
+ require_or_load 'config/environment'
36
+ require_or_load 'test_help'
36
37
 
37
38
  # Undo changes to RAILS_ENV
38
39
  silence_warnings { RAILS_ENV = ENV['RAILS_ENV'] }
@@ -41,4 +42,5 @@ silence_warnings { RAILS_ENV = ENV['RAILS_ENV'] }
41
42
  class Test::Unit::TestCase #:nodoc:
42
43
  self.use_transactional_fixtures = true
43
44
  self.use_instantiated_fixtures = false
44
- end
45
+ self.fixture_path = "#{RAILS_ROOT}/../fixtures"
46
+ end
@@ -0,0 +1,3 @@
1
+ (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'test', 'fixtures', '*.{yml,csv}'))).each do |fixture_file|
2
+ Fixtures.create_fixtures(File.join(RAILS_ROOT, 'test/fixtures'), File.basename(fixture_file, '.*'))
3
+ end
@@ -1,61 +1,61 @@
1
- module PluginAWeek #:nodoc:
2
- module PluginTestHelper #:nodoc:
3
- module Extensions #:nodoc:
4
- # Overrides some of the default values in the Rails configuration so that
5
- # files can be reused from this test helper or overridden by the plugin
6
- # using the helper
7
- module Configuration
8
- def self.included(base) #:nodoc:
9
- base.class_eval do
10
- alias_method_chain :environment_path, :test_helper
11
- alias_method_chain :default_load_paths, :test_helper
12
- alias_method_chain :default_database_configuration_file, :test_helper
13
- alias_method_chain :default_controller_paths, :test_helper
14
- alias_method_chain :default_plugin_paths, :test_helper
15
- end
16
- end
17
-
18
- # Load the environment file from the plugin or the helper
19
- def environment_path_with_test_helper
20
- environment_path = environment_path_without_test_helper
21
- File.exists?(environment_path) ? environment_path : "#{HELPER_RAILS_ROOT}/config/environments/#{environment}.rb"
22
- end
23
-
24
- private
25
- # Add the helper's load paths
26
- def default_load_paths_with_test_helper
27
- paths = default_load_paths_without_test_helper
28
- paths.concat %w(
29
- app
30
- app/controllers
31
- config
32
- lib
33
- vendor
34
- ).map { |dir| "#{HELPER_RAILS_ROOT}/#{dir}" }
35
- end
36
-
37
- # Load the database configuration from the plugin or the helper
38
- def default_database_configuration_file_with_test_helper
39
- database_file = default_database_configuration_file_without_test_helper
40
- File.exists?(database_file) ? database_file : File.join(HELPER_RAILS_ROOT, 'config', 'database.yml')
41
- end
42
-
43
- # Add the helper's controllers path
44
- def default_controller_paths_with_test_helper
45
- paths = default_controller_paths_without_test_helper
46
- paths << File.join(HELPER_RAILS_ROOT, 'app', 'controllers')
47
- end
48
-
49
- # Add the helper's vendor/plugins path
50
- def default_plugin_paths_with_test_helper
51
- paths = default_plugin_paths_without_test_helper
52
- paths << "#{HELPER_RAILS_ROOT}/vendor/plugins"
53
- end
54
- end
55
- end
56
- end
57
- end
58
-
59
- Rails::Configuration.class_eval do
60
- include PluginAWeek::PluginTestHelper::Extensions::Configuration
61
- end
1
+ module PluginAWeek #:nodoc:
2
+ module PluginTestHelper
3
+ module Extensions #:nodoc:
4
+ # Overrides some of the default values in the Rails configuration so that
5
+ # files can be reused from this test helper or overridden by the plugin
6
+ # using the helper
7
+ module Configuration
8
+ def self.included(base) #:nodoc:
9
+ base.class_eval do
10
+ alias_method_chain :environment_path, :test_helper
11
+ alias_method_chain :default_load_paths, :test_helper
12
+ alias_method_chain :default_database_configuration_file, :test_helper
13
+ alias_method_chain :default_controller_paths, :test_helper
14
+ alias_method_chain :default_plugin_paths, :test_helper
15
+ end
16
+ end
17
+
18
+ # Load the environment file from the plugin or the helper
19
+ def environment_path_with_test_helper
20
+ environment_path = environment_path_without_test_helper
21
+ File.exists?(environment_path) ? environment_path : "#{HELPER_RAILS_ROOT}/config/environments/#{environment}.rb"
22
+ end
23
+
24
+ private
25
+ # Add the helper's load paths
26
+ def default_load_paths_with_test_helper
27
+ paths = default_load_paths_without_test_helper
28
+ paths.concat %w(
29
+ app
30
+ app/controllers
31
+ config
32
+ lib
33
+ vendor
34
+ ).map { |dir| "#{HELPER_RAILS_ROOT}/#{dir}" }
35
+ end
36
+
37
+ # Load the database configuration from the plugin or the helper
38
+ def default_database_configuration_file_with_test_helper
39
+ database_file = default_database_configuration_file_without_test_helper
40
+ File.exists?(database_file) ? database_file : File.join(HELPER_RAILS_ROOT, 'config', 'database.yml')
41
+ end
42
+
43
+ # Add the helper's controllers path
44
+ def default_controller_paths_with_test_helper
45
+ paths = default_controller_paths_without_test_helper
46
+ paths << File.join(HELPER_RAILS_ROOT, 'app', 'controllers')
47
+ end
48
+
49
+ # Add the helper's vendor/plugins path
50
+ def default_plugin_paths_with_test_helper
51
+ paths = default_plugin_paths_without_test_helper
52
+ paths << "#{HELPER_RAILS_ROOT}/vendor/plugins"
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ Rails::Configuration.class_eval do
60
+ include PluginAWeek::PluginTestHelper::Extensions::Configuration
61
+ end
@@ -1,5 +1,5 @@
1
1
  module PluginAWeek #:nodoc:
2
- module PluginTestHelper #:nodoc:
2
+ module PluginTestHelper
3
3
  module Extensions #:nodoc:
4
4
  # Overrides where the path of the application routes is located so that
5
5
  # it defaults to this helper's implementation or can be overridden by the
@@ -29,4 +29,4 @@ end
29
29
 
30
30
  ActionController::Routing::RouteSet.class_eval do
31
31
  include PluginAWeek::PluginTestHelper::Extensions::Routing
32
- end
32
+ end
@@ -1,11 +1,12 @@
1
1
  require 'rails_generator'
2
2
 
3
3
  module PluginAWeek #:nodoc:
4
- module PluginTestHelper #:nodoc:
4
+ module PluginTestHelper
5
+ # The base generator for creating parts of the test application
5
6
  class Generator < Rails::Generator::NamedBase
6
7
  attr_accessor :plugin_name
7
8
 
8
- def initialize(*runtime_args)
9
+ def initialize(*runtime_args) #:nodoc:
9
10
  @plugin_name = runtime_args.first.shift if runtime_args.first.is_a?(Array)
10
11
  super(*runtime_args)
11
12
  end
@@ -21,4 +22,4 @@ module PluginAWeek #:nodoc:
21
22
  end
22
23
  end
23
24
  end
24
- end
25
+ end
File without changes
@@ -0,0 +1,2 @@
1
+ class PeopleController < ApplicationController
2
+ end
@@ -0,0 +1,5 @@
1
+ class ApplicationController < ActionController::Base
2
+ def self.custom?
3
+ true
4
+ end
5
+ end
@@ -0,0 +1,16 @@
1
+ require 'config/boot'
2
+
3
+ Rails::Initializer.run do |config|
4
+ config.log_level = :debug
5
+ config.cache_classes = false
6
+ config.whiny_nils = true
7
+ config.breakpoint_server = true
8
+ config.load_paths << "#{RAILS_ROOT}/../../lib"
9
+ config.plugin_paths << '..'
10
+ config.plugins = [
11
+ File.basename(File.expand_path('.')),
12
+ 'acts_as_foo'
13
+ ]
14
+ end
15
+
16
+ Dependencies.log_activity = true
@@ -0,0 +1 @@
1
+ require 'acts_as_foo'
@@ -0,0 +1,6 @@
1
+ module PluginAWeek
2
+ module Acts
3
+ module Foo
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,2 @@
1
+ class Person < ActiveRecord::Base
2
+ end
@@ -0,0 +1,11 @@
1
+ class CreatePeople < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :people do |t|
4
+ t.column :name, :string
5
+ end
6
+ end
7
+
8
+ def self.down
9
+ drop_table :people
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ module PeopleHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ class Person < ActiveRecord::Base
2
+ end
@@ -0,0 +1,11 @@
1
+ class CreatePeople < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :people do |t|
4
+ t.column :name, :string
5
+ end
6
+ end
7
+
8
+ def self.down
9
+ drop_table :people
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ class Person < ActiveRecord::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ end
@@ -0,0 +1,3 @@
1
+ bob:
2
+ id: 1
3
+ name: Bob
@@ -0,0 +1,95 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ require 'fileutils'
3
+
4
+ class PluginTestHelperTest < Test::Unit::TestCase
5
+ def setup
6
+ @original_load_path = $LOAD_PATH
7
+ end
8
+
9
+ def test_should_load_with_no_app_root
10
+ load 'plugin_test_helper.rb'
11
+ assert_valid_environment
12
+ end
13
+
14
+ def test_should_load_with_empty_app_root
15
+ initialize_app('empty')
16
+ end
17
+
18
+ def test_should_load_with_custom_application_controller
19
+ initialize_app('with_custom_application_controller')
20
+
21
+ assert ApplicationController.respond_to?(:custom?)
22
+ end
23
+
24
+ def test_should_load_with_custom_config
25
+ initialize_app('with_custom_config')
26
+
27
+ assert_not_nil PluginAWeek::Acts::Foo
28
+ end
29
+
30
+ def test_should_load_with_controller
31
+ initialize_app('with_controller')
32
+
33
+ assert_not_nil PeopleController
34
+ end
35
+
36
+ def test_should_load_with_model
37
+ initialize_app('with_model')
38
+
39
+ assert_not_nil Person
40
+ end
41
+
42
+ def test_should_load_with_helper
43
+ initialize_app('with_helper')
44
+
45
+ assert_not_nil PeopleHelper
46
+ end
47
+
48
+ def test_should_load_with_migration
49
+ initialize_app('with_migration')
50
+
51
+ ActiveRecord::Migrator.migrate("#{RAILS_ROOT}/db/migrate")
52
+ assert Person.table_exists?
53
+ end
54
+
55
+ def test_should_load_with_fixtures
56
+ initialize_app('with_fixtures')
57
+
58
+ ActiveRecord::Migrator.migrate("#{RAILS_ROOT}/db/migrate")
59
+ Dir.glob("#{RAILS_ROOT}/test/fixtures/*.yml").each do |fixture_file|
60
+ Fixtures.create_fixtures("#{RAILS_ROOT}/test/fixtures", File.basename(fixture_file, '.*'))
61
+ end
62
+
63
+ assert Person.count > 0
64
+ end
65
+
66
+ def test_should_load_with_routes
67
+ initialize_app('with_routes')
68
+
69
+ assert ActionController::Routing::Routes.routes.length == 0
70
+ end
71
+
72
+ def teardown
73
+ # Clear dependencies
74
+ ActiveRecord::Base.reset_subclasses
75
+ Dependencies.clear
76
+ ActiveRecord::Base.clear_reloadable_connections!
77
+
78
+ $LOAD_PATH.replace(@original_load_path)
79
+ FileUtils.rmtree('test/app_root')
80
+ end
81
+
82
+ private
83
+ def assert_valid_environment
84
+ assert_not_nil ApplicationController
85
+ assert ActiveRecord::Base.connection.active?
86
+ end
87
+
88
+ def initialize_app(name)
89
+ FileUtils.mkdir('test/app_root')
90
+ FileUtils.cp_r("test/app_roots/#{name}/.", 'test/app_root')
91
+
92
+ load 'plugin_test_helper.rb'
93
+ assert_valid_environment
94
+ end
95
+ end
@@ -0,0 +1,3 @@
1
+ require 'test/unit'
2
+
3
+ $:.unshift("#{File.dirname(__FILE__)}/../lib")
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: plugin_test_helper
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.2
7
- date: 2007-08-15 00:00:00 -04:00
6
+ version: 0.1.1
7
+ date: 2007-09-18 00:00:00 -04:00
8
8
  summary: Simplifies plugin testing by creating an isolated Rails environment that simulates its usage in a real application.
9
9
  require_paths:
10
10
  - lib
@@ -30,6 +30,7 @@ authors:
30
30
  - Aaron Pfeifer, Neil Abraham
31
31
  files:
32
32
  - generators/plugin_test_migration
33
+ - generators/plugin_test_console
33
34
  - generators/plugin_test_helper
34
35
  - generators/plugin_test_model
35
36
  - generators/plugin_test_controller
@@ -37,6 +38,9 @@ files:
37
38
  - generators/plugin_test_migration/templates
38
39
  - generators/plugin_test_migration/plugin_test_migration_generator.rb
39
40
  - generators/plugin_test_migration/templates/migration.rb
41
+ - generators/plugin_test_console/plugin_test_console_generator.rb
42
+ - generators/plugin_test_console/templates
43
+ - generators/plugin_test_console/templates/console
40
44
  - generators/plugin_test_helper/plugin_test_helper_generator.rb
41
45
  - generators/plugin_test_helper/templates
42
46
  - generators/plugin_test_helper/templates/test_helper.rb
@@ -71,17 +75,68 @@ files:
71
75
  - generators/plugin_test_structure/templates/app_root/app/controllers/application.rb
72
76
  - lib/plugin_test_helper
73
77
  - lib/plugin_test_helper.rb
78
+ - lib/plugin_test_helper/console_with_fixtures.rb
74
79
  - lib/plugin_test_helper/extensions
75
80
  - lib/plugin_test_helper/generator.rb
76
81
  - lib/plugin_test_helper/extensions/routing.rb
77
82
  - lib/plugin_test_helper/extensions/initializer.rb
83
+ - test/test_helper.rb
84
+ - test/app_roots
85
+ - test/fixtures
86
+ - test/functional
87
+ - test/app_roots/with_fixtures
88
+ - test/app_roots/with_helper
89
+ - test/app_roots/with_model
90
+ - test/app_roots/with_controller
91
+ - test/app_roots/with_custom_application_controller
92
+ - test/app_roots/empty
93
+ - test/app_roots/with_migration
94
+ - test/app_roots/with_routes
95
+ - test/app_roots/with_custom_config
96
+ - test/app_roots/with_fixtures/app
97
+ - test/app_roots/with_fixtures/db
98
+ - test/app_roots/with_fixtures/app/models
99
+ - test/app_roots/with_fixtures/app/models/person.rb
100
+ - test/app_roots/with_fixtures/db/migrate
101
+ - test/app_roots/with_fixtures/db/migrate/001_create_people.rb
102
+ - test/app_roots/with_helper/app
103
+ - test/app_roots/with_helper/app/helpers
104
+ - test/app_roots/with_helper/app/helpers/people_helper.rb
105
+ - test/app_roots/with_model/app
106
+ - test/app_roots/with_model/app/models
107
+ - test/app_roots/with_model/app/models/person.rb
108
+ - test/app_roots/with_controller/app
109
+ - test/app_roots/with_controller/app/controllers
110
+ - test/app_roots/with_controller/app/controllers/people_controller.rb
111
+ - test/app_roots/with_custom_application_controller/app
112
+ - test/app_roots/with_custom_application_controller/app/controllers
113
+ - test/app_roots/with_custom_application_controller/app/controllers/application.rb
114
+ - test/app_roots/empty/empty
115
+ - test/app_roots/with_migration/app
116
+ - test/app_roots/with_migration/db
117
+ - test/app_roots/with_migration/app/models
118
+ - test/app_roots/with_migration/app/models/person.rb
119
+ - test/app_roots/with_migration/db/migrate
120
+ - test/app_roots/with_migration/db/migrate/001_create_people.rb
121
+ - test/app_roots/with_routes/config
122
+ - test/app_roots/with_routes/config/routes.rb
123
+ - test/app_roots/with_custom_config/vendor
124
+ - test/app_roots/with_custom_config/config
125
+ - test/app_roots/with_custom_config/vendor/plugins
126
+ - test/app_roots/with_custom_config/vendor/plugins/acts_as_foo
127
+ - test/app_roots/with_custom_config/vendor/plugins/acts_as_foo/lib
128
+ - test/app_roots/with_custom_config/vendor/plugins/acts_as_foo/init.rb
129
+ - test/app_roots/with_custom_config/vendor/plugins/acts_as_foo/lib/acts_as_foo.rb
130
+ - test/app_roots/with_custom_config/config/environment.rb
131
+ - test/fixtures/people.yml
132
+ - test/functional/plugin_test_helper_test.rb
78
133
  - CHANGELOG
79
134
  - init.rb
80
135
  - MIT-LICENSE
81
136
  - Rakefile
82
137
  - README
83
- test_files: []
84
-
138
+ test_files:
139
+ - test/functional/plugin_test_helper_test.rb
85
140
  rdoc_options: []
86
141
 
87
142
  extra_rdoc_files: []