imedo-dry_plugin_test_helper 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,72 @@
1
+ = dry_plugin_test
2
+
3
+ Author:: Hendrik Volkmer - hvolkmer (at) imedo.de
4
+ Copyright:: Copyright (c) 2008 imedo GmbH
5
+ Licence:: MIT
6
+ Git:: http://github.com/imedo/dry_plugin_test_helper
7
+ Bugs:: No dedicated bug tracker yet - Email us or just send pull requests
8
+
9
+ Makes your plugin tests dry and isolates plugin tests from you real app.
10
+
11
+ == Dependencies
12
+ * Rails 2.0.2 (should work also with 1.2)
13
+ * sqlite3 - http://www.sqlite.org/
14
+
15
+ == Installation
16
+
17
+ The easiest way to install this gem is directly via the github gem
18
+ repository:
19
+
20
+ $ sudo gem install imedo-dry_plugin_test_helper -s http://gems.github.com
21
+
22
+ Or
23
+
24
+ download the source code and build the gem yourself
25
+
26
+ $ git clone git://github.com/imedo/dry_plugin_test_helper.git
27
+ $ cd dry_plugin_test_helper
28
+ $ rake
29
+ $ sudo gem install pkg/dry_plugin_test_helper-0.0.3.gem
30
+
31
+ == Usage
32
+
33
+ In your plugin test helper use these lines:
34
+
35
+ require 'rubygems'
36
+ require 'dry_plugin_test_helper'
37
+
38
+ PluginTestEnvironment.init_env(File.dirname(__FILE__))
39
+
40
+
41
+ This sets up the test environment which means you have a stub rails app with
42
+ you plugin loaded and also the following models:
43
+
44
+ * Article: belongs_to :author, has_many :comments
45
+ * Author: has_many :articles
46
+ * Comment: belongs_to :articles, belongs_to :user
47
+ * User: has_many :comments
48
+
49
+ The models will be added to a sqlite in memory database for fast testing.
50
+
51
+ You can add your own models using a migration in your test directory like
52
+ this:
53
+
54
+ PluginTestEnvironment::Migration.setup do
55
+
56
+ create_table "animals", :force => true do |t|
57
+ t.column "name", :string
58
+ t.column "age", :integer
59
+ end
60
+
61
+ end
62
+
63
+ If you don't want the standard models you can initialize the test environment
64
+ like this:
65
+
66
+ PluginTestEnvironment.init_env(File.dirname(__FILE__), false)
67
+
68
+ == TODO
69
+ * Tests for the test gem itself
70
+ * support for RSpec and other testing frameworks (might already work - haven't tried it)
71
+ * Automatic Rails version discovery
72
+ * Clean up / strip down rails env to bare minimum
@@ -0,0 +1,10 @@
1
+ first:
2
+ id: 1
3
+ title: "What's in the package?"
4
+ body: "Rails is a full-stack framework for developing database-backed web applications according to the Model-View-Control pattern. From the Ajax in the view, to the request and response in the controller, to the domain model wrapping the database, Rails gives you a pure-Ruby development environment. To go live, all you need to add is a database and a web server."
5
+ author_id: 1
6
+ second:
7
+ id: 2
8
+ title: "Who is already on Rails?"
9
+ body: "Everyone from startups to non-profits to enterprise organizations are using Rails. Rails is all about infrastructure so it's a great fit for practically any type of web application. Be it software for collaboration, community, e-commerce, content management, statistics, management, you name it."
10
+ author_id: 2
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_record'
4
+
5
+ ENV['RAILS_ENV'] ||= 'sqlite3'
6
+
7
+ require File.dirname(__FILE__) + '/silent_logger'
8
+ require File.dirname(__FILE__) + '/plugin_test_environment'
9
+
10
+ require 'time'
11
+
12
+
13
+ # Code by Jay Fields
14
+ # http://blog.jayfields.com/2007/11/ruby-timeis.html
15
+ class Time
16
+ def self.metaclass
17
+ class << self; self; end
18
+ end
19
+
20
+ def self.is(point_in_time)
21
+ new_time = case point_in_time
22
+ when String then Time.parse(point_in_time)
23
+ when Time then point_in_time
24
+ else raise ArgumentError.new("argument should be a string or time instance")
25
+ end
26
+ class << self
27
+ alias old_now now
28
+ end
29
+ metaclass.class_eval do
30
+ define_method :now do
31
+ new_time
32
+ end
33
+ end
34
+ yield
35
+ class << self
36
+ alias now old_now
37
+ undef old_now
38
+ end
39
+ end
40
+ end
41
+
@@ -0,0 +1,38 @@
1
+ class PluginTestEnvironment
2
+
3
+ cattr_accessor :plugin_path
4
+
5
+ def self.init_env(dir, standard_migration = true)
6
+ self.plugin_path = "#{dir}/.."
7
+ require File.dirname(__FILE__) + '/../rails_root/config/environment.rb'
8
+ ActiveRecord::Migrator.migrate("#{RAILS_ROOT}/db/migrate") if standard_migration
9
+ plugin_migration
10
+ end
11
+
12
+ def self.fixture_path
13
+ if File.exists?(PluginTestEnvironment.plugin_path + '/test/fixtures')
14
+ PluginTestEnvironment.plugin_path + '/test/fixtures'
15
+ else
16
+ File.dirname(__FILE__) + "/../fixtures/"
17
+ end
18
+ end
19
+
20
+ def self.log_path
21
+ PluginTestEnvironment.plugin_path + '/test/log'
22
+ end
23
+
24
+ def self.plugin_migration
25
+ begin
26
+ require "#{PluginTestEnvironment.plugin_path}/test/migration"
27
+ Migration.up
28
+ rescue LoadError
29
+ end
30
+ end
31
+
32
+ class Migration < ActiveRecord::Migration
33
+ def self.setup(&block)
34
+ self.class.send(:define_method, :up, &block)
35
+ end
36
+ end
37
+
38
+ end
@@ -0,0 +1,11 @@
1
+ class SilentLogger < Logger
2
+
3
+ def initialize
4
+ super(STDOUT)
5
+ end
6
+
7
+ def add(severity, message = nil, progname = nil, &block)
8
+ # shhh
9
+ end
10
+
11
+ end
@@ -0,0 +1,2 @@
1
+ class ApplicationController < ActionController::Base
2
+ end
@@ -0,0 +1,6 @@
1
+ class Article < ActiveRecord::Base
2
+
3
+ belongs_to :author
4
+ has_many :comments
5
+
6
+ end
@@ -0,0 +1,5 @@
1
+ class Author < ActiveRecord::Base
2
+
3
+ has_many :articles
4
+
5
+ end
@@ -0,0 +1,6 @@
1
+ class Comment < ActiveRecord::Base
2
+
3
+ belongs_to :articles
4
+ belongs_to :user
5
+
6
+ end
@@ -0,0 +1,5 @@
1
+ class User < ActiveRecord::Base
2
+
3
+ has_many :comments
4
+
5
+ end
@@ -0,0 +1,45 @@
1
+ # Don't change this file. Configuration is done in config/environment.rb and config/environments/*.rb
2
+
3
+ unless defined?(RAILS_ROOT)
4
+ root_path = File.join(File.dirname(__FILE__), '..')
5
+
6
+ unless RUBY_PLATFORM =~ /(:?mswin|mingw)/
7
+ require 'pathname'
8
+ root_path = Pathname.new(root_path).cleanpath(true).to_s
9
+ end
10
+
11
+ RAILS_ROOT = root_path
12
+ end
13
+
14
+ unless defined?(Rails::Initializer)
15
+ if File.directory?("#{RAILS_ROOT}/vendor/rails")
16
+ require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
17
+ else
18
+ require 'rubygems'
19
+
20
+ environment_without_comments = IO.readlines(File.dirname(__FILE__) + '/environment.rb').reject { |l| l =~ /^#/ }.join
21
+ environment_without_comments =~ /[^#]RAILS_GEM_VERSION = '([\d.]+)'/
22
+ rails_gem_version = $1
23
+
24
+ if version = defined?(RAILS_GEM_VERSION) ? RAILS_GEM_VERSION : rails_gem_version
25
+ # Asking for 1.1.6 will give you 1.1.6.5206, if available -- makes it easier to use beta gems
26
+ rails_gem = Gem.cache.search('rails', "~>#{version}.0").sort_by { |g| g.version.version }.last
27
+
28
+ if rails_gem
29
+ gem "rails", "=#{rails_gem.version.version}"
30
+ require rails_gem.full_gem_path + '/lib/initializer'
31
+ else
32
+ STDERR.puts %(Cannot find gem for Rails ~>#{version}.0:
33
+ Install the missing gem with 'gem install -v=#{version} rails', or
34
+ change environment.rb to define RAILS_GEM_VERSION with your desired version.
35
+ )
36
+ exit 1
37
+ end
38
+ else
39
+ gem "rails"
40
+ require 'initializer'
41
+ end
42
+ end
43
+
44
+ Rails::Initializer.run(:set_load_path)
45
+ end
@@ -0,0 +1,18 @@
1
+ sqlite:
2
+ :adapter: sqlite
3
+ :dbfile: ':memory:'
4
+ sqlite3:
5
+ :adapter: sqlite3
6
+ :dbfile: ':memory:'
7
+ postgresql:
8
+ :adapter: postgresql
9
+ :username: postgres
10
+ :password: postgres
11
+ :database: most_popular_test
12
+ :min_messages: ERROR
13
+ mysql:
14
+ :adapter: mysql
15
+ :host: localhost
16
+ :username: root
17
+ :password:
18
+ :database: most_popular_test
@@ -0,0 +1,41 @@
1
+ # Specifies gem version of Rails to use when vendor/rails is not present
2
+ #RAILS_GEM_VERSION = '1.1.6'
3
+ RAILS_GEM_VERSION = '2.0.2' unless defined? RAILS_GEM_VERSION
4
+
5
+ require File.join(File.dirname(__FILE__), 'boot')
6
+ #require 'plugin_dependencies'
7
+
8
+ Rails::Initializer.run do |config|
9
+ config.logger = SilentLogger.new
10
+ config.log_level = :debug
11
+
12
+ config.cache_classes = false
13
+ config.whiny_nils = true
14
+ #config.breakpoint_server = true
15
+ config.load_paths << "#{File.dirname(__FILE__)}/../../../lib/"
16
+ end
17
+
18
+ Dependencies.log_activity = false
19
+
20
+ require 'test_help'
21
+
22
+
23
+ Test::Unit::TestCase.fixture_path = PluginTestEnvironment.fixture_path
24
+ $LOAD_PATH.unshift(Test::Unit::TestCase.fixture_path)
25
+
26
+ class Test::Unit::TestCase #:nodoc:
27
+ def create_fixtures(*table_names)
28
+ if block_given?
29
+ Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names) { yield }
30
+ else
31
+ Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names)
32
+ end
33
+ end
34
+
35
+ self.use_transactional_fixtures = false
36
+ self.use_instantiated_fixtures = false
37
+ end
38
+
39
+ # Load the testing framework
40
+ silence_warnings { RAILS_ENV = ENV['RAILS_ENV'] }
41
+
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,9 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ # Allow downloading Web Service WSDL as a file with an extension
3
+ # instead of a file named 'wsdl'
4
+ map.connect ':controller/service.wsdl', :action => 'wsdl'
5
+
6
+ # Default route
7
+ map.connect ':controller/:action/:id.:format'
8
+ map.connect ':controller/:action/:id'
9
+ end
@@ -0,0 +1,33 @@
1
+ class CreateEnvironment < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :articles do |t|
4
+ t.column :title, :string
5
+ t.column :body, :text
6
+ t.column :author_id, :integer
7
+ t.column :active, :integer, :default => 1
8
+ t.column :hidden, :integer, :default => 0
9
+ t.column :deactivated_at, :datetime
10
+ end
11
+
12
+ create_table :authors do |t|
13
+ t.column :name, :string
14
+ end
15
+
16
+ create_table :comments do |t|
17
+ t.column :body, :text
18
+ t.column :article_id, :integer
19
+ t.column :user_id, :integer
20
+ end
21
+
22
+ create_table :users do |t|
23
+ t.column :name, :string
24
+ end
25
+ end
26
+
27
+ def self.down
28
+ drop_table :articles
29
+ drop_table :authors
30
+ drop_table :comments
31
+ drop_table :users
32
+ end
33
+ end
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/console'
@@ -0,0 +1,3 @@
1
+ init_path = PluginTestEnvironment.plugin_path + "/init.rb" #
2
+
3
+ silence_warnings { eval(IO.read(init_path), binding, init_path) }
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: imedo-dry_plugin_test_helper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Hendrik Volkmer
8
+ autorequire: active_record
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-06-18 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activerecord
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.15.3
23
+ version:
24
+ description:
25
+ email: hvolkmer@imedo.de
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - README.rdoc
32
+ files:
33
+ - lib/silent_logger.rb
34
+ - lib/dry_plugin_test_helper.rb
35
+ - lib/plugin_test_environment.rb
36
+ - rails_root/db
37
+ - rails_root/db/migrate
38
+ - rails_root/db/migrate/001_create_environment.rb
39
+ - rails_root/app
40
+ - rails_root/app/controllers
41
+ - rails_root/app/controllers/application.rb
42
+ - rails_root/app/models
43
+ - rails_root/app/models/author.rb
44
+ - rails_root/app/models/user.rb
45
+ - rails_root/app/models/article.rb
46
+ - rails_root/app/models/comment.rb
47
+ - rails_root/config
48
+ - rails_root/config/routes.rb
49
+ - rails_root/config/environments
50
+ - rails_root/config/environments/sqlite3.rb
51
+ - rails_root/config/environments/sqlite.rb
52
+ - rails_root/config/environments/postgresql.rb
53
+ - rails_root/config/environments/mysql.rb
54
+ - rails_root/config/database.yml
55
+ - rails_root/config/environment.rb
56
+ - rails_root/config/boot.rb
57
+ - rails_root/script
58
+ - rails_root/script/console
59
+ - rails_root/vendor
60
+ - rails_root/vendor/plugins
61
+ - rails_root/vendor/plugins/plugin_to_test
62
+ - rails_root/vendor/plugins/plugin_to_test/init.rb
63
+ - fixtures/articles.yml
64
+ - README.rdoc
65
+ has_rdoc: true
66
+ homepage: http://opensource.imedo.de/
67
+ post_install_message:
68
+ rdoc_options: []
69
+
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: "0"
77
+ version:
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
83
+ version:
84
+ requirements: []
85
+
86
+ rubyforge_project:
87
+ rubygems_version: 1.0.1
88
+ signing_key:
89
+ specification_version: 2
90
+ summary: Providing dry standard test environment for Ruby on Rails plugins
91
+ test_files: []
92
+