plugin_test_helper 0.0.2 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []