messiah 0.1.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1 +1,4 @@
1
- *.log
1
+ *.log
2
+ webrat-*.html
3
+ pkg/*
4
+ *.gemspec
@@ -10,16 +10,47 @@ Messiah enables using Ruby testing tools for integration testing with platforms
10
10
 
11
11
  In the spec_helper.rb file, configure Messiah. Specifically, the app root and the command used to execute your app via CGI. Once the app is configured, include Messiah into RSpec.
12
12
 
13
- Messiah.configure do
14
- root File.join(File.dirname(__FILE__), 'fixtures', 'www')
15
- command 'php-cgi -d cgi.force_redirect=0'
16
- end
13
+ Messiah.configure do
14
+ root File.join(File.dirname(__FILE__), 'fixtures', 'www')
15
+ command 'php-cgi -d cgi.force_redirect=0'
16
+ end
17
17
 
18
- Spec::Runner.configure do |config|
19
- include Messiah::RSpec
20
- end
18
+ Spec::Runner.configure do |config|
19
+ Messiah.rspec(config)
20
+ end
21
+
22
+ == Configuration: Cucumber
23
+
24
+ You configure Messiah in the env.rb file.
25
+
26
+ Messiah.configure do
27
+ root File.join(File.dirname(__FILE__), '..', '..', 'spec', 'fixtures', 'www')
28
+ command 'php-cgi -d cgi.force_redirect=0'
29
+ end
30
+
31
+ Messiah.cucumber(self)
32
+
33
+ == Other Configuration Options
34
+
35
+ +test_root+ is the directory containing the test suite being run. This is passed to your application through an HTTP header. This can be used to source mocks from the fixtures directory.
36
+ +app_root+ is the directory that actually contains your application.
37
+ +host+ is the hostname that should be used in the requests.
38
+ +script+ is the name of the script all requests should be sent through. This is useful if your app uses PATH_INFO
39
+ +database+ is a hash containing the ActiveRecord connection parameters
40
+
41
+ Any of the options may be set simply:
42
+
43
+ Messiah.host = 'ahost.example.local'
44
+
45
+ The configuration values are automatically reset back to their original configured state prior to every test. This is useful if you need to test different hosts individually.
46
+
47
+ == Database Support and a Warning
48
+
49
+ Messiah will, by default, delete all data in the configured test database. Don't point it at your development database. This is to be sure the database is always starting with a known blank slate.
50
+
51
+ The database support is functional but still has rough edges. It uses Dr. Nic's Magic Models gem for generating ActiveRecord models from your schema at runtime. factory_girl is the factory library used. Additional documentation is coming on the database support.
21
52
 
22
53
  == Copyright
23
54
 
24
- Copyright (c) 2009 Rich Cavanaugh. See LICENSE for details.
55
+ Copyright (c) 2010 Rich Cavanaugh. See LICENSE for details.
25
56
 
data/Rakefile CHANGED
@@ -12,6 +12,10 @@ begin
12
12
  gemspec.add_dependency('webrat')
13
13
  gemspec.add_dependency('rack')
14
14
  gemspec.add_dependency('rack-test')
15
+ gemspec.add_dependency('activerecord')
16
+ gemspec.add_dependency('factory_girl')
17
+ gemspec.add_dependency('dr_nic_magic_models')
18
+ gemspec.add_dependency('database_cleaner')
15
19
  end
16
20
 
17
21
  Jeweler::GemcutterTasks.new
data/TODO CHANGED
@@ -3,3 +3,4 @@
3
3
  properly integrate magic_models so it doesn't always load with messiah itself
4
4
  integrate the database handling callbacks and factory_girl
5
5
  integrate rubigen for getting an app working with messiah
6
+ look at using the database_cleaner gem http://github.com/bmabey/database_cleaner/
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.9.0
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby -rubygems
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require 'messiah'
5
+ Messiah::Generator.run_cli Dir.pwd, $0, Messiah::VERSION, ARGV
@@ -4,27 +4,70 @@ require 'rack/response'
4
4
  require "rack/test"
5
5
  require 'open3'
6
6
 
7
+ unless defined?(RAILS_DEFAULT_LOGGER)
8
+ RAILS_DEFAULT_LOGGER = Logger.new(StringIO.new)
9
+ end
10
+
7
11
  module Messiah
8
- autoload :RSpec, 'messiah/rspec'
9
- autoload :TestUnit, 'messiah/test_unit'
10
- autoload :RackCGIApp, 'messiah/rack_cgi_app'
11
- autoload :Common, 'messiah/common'
12
- autoload :Config, 'messiah/config'
12
+ autoload :Rack, 'messiah/rack'
13
+ autoload :Common, 'messiah/common'
14
+ autoload :Config, 'messiah/config'
15
+ autoload :Configurator, 'messiah/configurator'
16
+ autoload :Generator, 'messiah/generator'
17
+
18
+ module Supports
19
+ autoload :Common, 'messiah/supports/common'
20
+ autoload :RSpec, 'messiah/supports/rspec'
21
+ autoload :Cucumber, 'messiah/supports/cucumber'
22
+ autoload :TestUnit, 'messiah/supports/test_unit'
23
+ autoload :CodeIgniter,'messiah/supports/code_igniter'
24
+ end
25
+
26
+ VERSION = File.read(File.join(File.dirname(__FILE__), '..', 'VERSION'))
13
27
 
14
28
  class << self
15
- attr_accessor :config
29
+ attr_accessor :config, :frozen_config
16
30
 
17
31
  def configure(&block)
18
32
  @config ||= Config.new
19
33
  @config.instance_eval(&block)
34
+
35
+ Configurator.configure!(@config)
20
36
  end
21
-
37
+
22
38
  def method_missing(key, *args, &block)
23
39
  @config.send(key, *args, &block)
24
40
  end
41
+
42
+ def freeze_config!
43
+ @frozen_config = @config.values.clone
44
+ end
45
+
46
+ def reset_config!
47
+ @config.values = @frozen_config.clone
48
+ end
49
+
50
+ def rspec(config)
51
+ config.before(:suite, &Messiah.method(:before_suite))
52
+ config.before(:each, &Messiah.method(:before_test))
53
+ config.after(:each, &Messiah.method(:after_test))
54
+ end
55
+
56
+ def cucumber(world)
57
+ world.AfterConfiguration(&Messiah.method(:before_suite))
58
+ world.Before(&Messiah.method(:before_test))
59
+ end
60
+
61
+ def before_suite(*args)
62
+ Messiah.freeze_config!
63
+ end
64
+
65
+ def before_test(*args)
66
+ Messiah.reset_config!
67
+ DatabaseCleaner.clean if Messiah.database
68
+ end
69
+
70
+ def after_test(*args)
71
+ end
25
72
  end
26
73
  end
27
-
28
- Webrat.configure do |config|
29
- config.mode = :rack
30
- end
@@ -1,6 +1,6 @@
1
1
  class Messiah::Config
2
2
  attr_accessor :values
3
-
3
+
4
4
  def respond_to?(key)
5
5
  true
6
6
  end
@@ -0,0 +1,57 @@
1
+ class Messiah::Configurator
2
+ def initialize(config)
3
+ @config = config
4
+ configure_framework
5
+ configure_world
6
+ configure_webrat
7
+ configure_database if @config.database
8
+ end
9
+
10
+ def self.configure!(config)
11
+ new(config)
12
+ end
13
+
14
+ def configure_framework
15
+ @framwork = case @config.framework
16
+ when :code_igniter
17
+ Messiah::Supports::CodeIgniter.new(@config)
18
+ end
19
+ end
20
+
21
+ def configure_webrat
22
+ Webrat.configure do |config|
23
+ config.mode = :rack
24
+ end
25
+ end
26
+
27
+ def configure_world
28
+ Spec::Example::ExampleGroup.send(:include, Messiah::Supports::RSpec) if rspec?
29
+ Object.send(:include, Messiah::Supports::Cucumber) if cucumber?
30
+ Object.send(:include, Messiah::Supports::TestUnit) if test_unit?
31
+ end
32
+
33
+ def configure_database
34
+ require 'active_record'
35
+ ActiveRecord::Base.establish_connection(@config.database)
36
+
37
+ require 'dr_nic_magic_models'
38
+ DrNicMagicModels.extend_module_class!
39
+ DrNicMagicModels::Schema.new(Object).load_schema
40
+
41
+ require 'factory_girl'
42
+ require 'database_cleaner'
43
+ DatabaseCleaner.strategy = :truncation
44
+ end
45
+
46
+ def rspec?
47
+ defined?(Spec::Example::ExampleGroup)
48
+ end
49
+
50
+ def cucumber?
51
+ defined?(Cucumber)
52
+ end
53
+
54
+ def test_unit?
55
+ defined?(Test::Unit)
56
+ end
57
+ end
@@ -0,0 +1,21 @@
1
+ require 'templater'
2
+
3
+ module Messiah::Generator
4
+ extend Templater::Manifold
5
+
6
+ class << self
7
+ def template_path
8
+ File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
9
+ end
10
+ end
11
+
12
+ autoload :Cucumber, 'messiah/generator/cucumber'
13
+ autoload :RSpec, 'messiah/generator/rspec'
14
+ autoload :TestUnit, 'messiah/generator/test_unit'
15
+
16
+ add :cucumber, Cucumber
17
+ add :rspec, RSpec
18
+ add :test_unit, TestUnit
19
+
20
+ desc "Setup a testing framework supported by Messiah in the current directory."
21
+ end
@@ -0,0 +1,19 @@
1
+ class Messiah::Generator::Application
2
+ def self.run!(*args)
3
+ options = Messiah::Generator::Options.new(args)
4
+
5
+ if options[:invalid_argument]
6
+ $stderr.puts options[:invalid_argument]
7
+ options[:show_help] = true
8
+ end
9
+
10
+ if options[:show_help]
11
+ $stderr.puts options.opts
12
+ return 1
13
+ end
14
+
15
+ generator = Messiah::Generator.new(options)
16
+ generator.run!
17
+ return 0
18
+ end
19
+ end
@@ -0,0 +1,2 @@
1
+ class Messiah::Generator::Cucumber < Templater::Generator
2
+ end
@@ -0,0 +1,38 @@
1
+ require 'optparse'
2
+
3
+ class Messiah::Generator::Options < Hash
4
+ attr_reader :opts
5
+
6
+ def initialize(args)
7
+ super()
8
+
9
+ @opts = OptionParser.new do |o|
10
+ o.banner = "Usage: #{File.basename($0)} options\ne.g. #{File.basename($0)} --rspec --cucumber"
11
+
12
+ o.on('--rspec', 'generate rspec support files') do
13
+ self[:rspec] = true
14
+ end
15
+
16
+ o.on('--cucumber', 'generate cucumber support files') do
17
+ self[:cucumber] = true
18
+ end
19
+
20
+ o.on('--testunit', 'generate testunit support files') do
21
+ self[:testunit] = true
22
+ end
23
+
24
+ o.separator ""
25
+
26
+ o.on_tail('-h', '--help', 'display this help and exit') do
27
+ self[:show_help] = true
28
+ end
29
+ end
30
+
31
+ begin
32
+ @opts.parse!(args)
33
+ self[:directory] = args.shift || Dir.pwd
34
+ rescue OptionParser::InvalidOption => e
35
+ self[:invalid_argument] = e.message
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,12 @@
1
+ class Messiah::Generator::RSpec < Templater::Generator
2
+ def self.source_root
3
+ File.join(Messiah::Generator.template_path, 'rspec')
4
+ end
5
+
6
+ first_argument :root, :default => '.'
7
+ second_argument :command, :default => 'php-cgi -d cgi.force_redirect=0'
8
+ third_argument :script
9
+
10
+ empty_directory :models, File.join('spec/fixtures/models')
11
+ template :spec_helper, 'spec/spec_helper.rb'
12
+ end
@@ -0,0 +1,2 @@
1
+ class Messiah::Generator::TestUnit < Templater::Generator
2
+ end
@@ -0,0 +1,3 @@
1
+ module Messiah::Rack
2
+ autoload :CGI, 'messiah/rack/cgi'
3
+ end
@@ -1,4 +1,4 @@
1
- class Messiah::RackCGIApp
1
+ class Messiah::Rack::CGI
2
2
  def call(env)
3
3
  add_to_environment!(env)
4
4
  header_string, body = call_cgi(env)
@@ -7,10 +7,12 @@ class Messiah::RackCGIApp
7
7
  end
8
8
 
9
9
  def add_to_environment!(env)
10
- env['HTTP_HOST'] = Messiah.host
10
+ env['SERVER_NAME'] = env['HTTP_HOST'] = Messiah.host
11
11
  env['DOCUMENT_ROOT'] = File.expand_path Messiah.root
12
12
  env['SCRIPT_NAME'] = (Messiah.script || env['PATH_INFO']).gsub(/^\//, '')
13
13
  env['SCRIPT_FILENAME'] = env['PATH_TRANSLATED'] = File.join(env['DOCUMENT_ROOT'], env['SCRIPT_NAME'])
14
+ env[Messiah.environment_key || 'APP_ENV'] = Messiah.environment_name || 'test'
15
+ env[Messiah.test_root_key || 'X-TEST-ROOT'] = Messiah.test_root
14
16
  end
15
17
 
16
18
  def build_environment_string(env)
@@ -22,7 +24,6 @@ class Messiah::RackCGIApp
22
24
 
23
25
  def call_cgi(env)
24
26
  env_string = build_environment_string(env)
25
-
26
27
  stdin, stdout, stderr = Open3.popen3("env #{env_string} #{Messiah.command}")
27
28
  stdin.write env['rack.input'].read if env['REQUEST_METHOD'] == 'POST'
28
29
  stdin.close
@@ -32,12 +33,12 @@ class Messiah::RackCGIApp
32
33
 
33
34
  def parse_headers(header)
34
35
  headers = header.split("\n").inject({}) do |h, line|
35
- key, val = line.split(':').map(&:strip)
36
+ key, val = line.split(':', 2).map(&:strip)
36
37
  h[key] = val
37
38
  h
38
39
  end
39
40
  status = headers.delete('Status') || 200
40
41
 
41
- [headers, status]
42
+ [headers, status.to_i]
42
43
  end
43
44
  end
@@ -0,0 +1,8 @@
1
+ <?php
2
+
3
+ $config_file = trim($argv[1]);
4
+ define('BASEPATH', 'dummyvalue');
5
+
6
+ require($config_file);
7
+
8
+ echo json_encode($db['test']);
@@ -0,0 +1,33 @@
1
+ require 'json'
2
+
3
+ class Messiah::Supports::CodeIgniter
4
+ attr_accessor :config
5
+
6
+ def initialize(config)
7
+ @config = config
8
+ configure!
9
+ configure_database!
10
+ end
11
+
12
+ def configure!
13
+ config.script 'index.php'
14
+ config.database_file File.join(config.app_root, 'config', 'database.php')
15
+ end
16
+
17
+ def configure_database!
18
+ reader = File.join(File.dirname(__FILE__), 'code_igniter.php')
19
+ json = %x|php #{reader} #{config.database_file}|
20
+ ci_hash = JSON.load(json)
21
+
22
+ config.database = {
23
+ :adapter => ci_hash['dbdriver'],
24
+ :host => ci_hash['hostname'],
25
+ :database => ci_hash['database'],
26
+ :port => ci_hash['port'] && ci_hash['port'].to_i,
27
+ :username => ci_hash['username'],
28
+ :password => ci_hash['password']
29
+ }
30
+ rescue
31
+ # swallow everything, leave the database unconfigured
32
+ end
33
+ end
@@ -1,4 +1,4 @@
1
- module Messiah::Common
1
+ module Messiah::Supports::Common
2
2
  def self.included(base)
3
3
  base.send(:include, Webrat::Methods)
4
4
  base.send(:include, Rack::Test::Methods)
@@ -7,7 +7,7 @@ module Messiah::Common
7
7
 
8
8
  def app
9
9
  Rack::Builder.new {
10
- run Messiah::RackCGIApp.new
10
+ run Messiah::Rack::CGI.new
11
11
  }
12
12
  end
13
- end
13
+ end
@@ -0,0 +1,5 @@
1
+ module Messiah::Supports::Cucumber
2
+ def self.included(base)
3
+ base.send(:include, Messiah::Supports::Common)
4
+ end
5
+ end
@@ -0,0 +1,17 @@
1
+ module Messiah::Supports::RSpec
2
+ def self.included(base)
3
+ base.send(:include, Messiah::Supports::Common)
4
+ base.send(:include, ExampleGroup)
5
+ end
6
+
7
+ module ExampleGroup
8
+ def visit(url)
9
+ u = url =~ /^\// ? url : "/#{url}"
10
+ super(u)
11
+ end
12
+
13
+ def host(val)
14
+ Messiah.config.host val
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ module Messiah::Supports::TestUnit
2
+ def self.included(base)
3
+ base.send(:include, Messiah::Supports::Common)
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ Feature: Messiah testing
2
+ In order to test some php code
3
+ As a sane person
4
+ I want to use Ruby for that
5
+
6
+ Scenario: visiting the index
7
+ Given I am on index.php
8
+ Then I should see "Hello"
9
+
@@ -0,0 +1,243 @@
1
+ # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
2
+ # It is recommended to regenerate this file in the future when you upgrade to a
3
+ # newer version of cucumber-rails. Consider adding your own code to a new file
4
+ # instead of editing this one. Cucumber will automatically load all features/**/*.rb
5
+ # files.
6
+
7
+
8
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
9
+
10
+ # Commonly used webrat steps
11
+ # http://github.com/brynary/webrat
12
+
13
+ Given /^(?:|I )am on (.+)$/ do |page_name|
14
+ visit path_to(page_name)
15
+ end
16
+
17
+ When /^(?:|I )go to (.+)$/ do |page_name|
18
+ visit path_to(page_name)
19
+ end
20
+
21
+ When /^(?:|I )press "([^\"]*)"$/ do |button|
22
+ click_button(button)
23
+ end
24
+
25
+ When /^(?:|I )follow "([^\"]*)"$/ do |link|
26
+ click_link(link)
27
+ end
28
+
29
+ When /^(?:|I )follow "([^\"]*)" within "([^\"]*)"$/ do |link, parent|
30
+ click_link_within(parent, link)
31
+ end
32
+
33
+ When /^(?:|I )fill in "([^\"]*)" with "([^\"]*)"$/ do |field, value|
34
+ fill_in(field, :with => value)
35
+ end
36
+
37
+ When /^(?:|I )fill in "([^\"]*)" for "([^\"]*)"$/ do |value, field|
38
+ fill_in(field, :with => value)
39
+ end
40
+
41
+ # Use this to fill in an entire form with data from a table. Example:
42
+ #
43
+ # When I fill in the following:
44
+ # | Account Number | 5002 |
45
+ # | Expiry date | 2009-11-01 |
46
+ # | Note | Nice guy |
47
+ # | Wants Email? | |
48
+ #
49
+ # TODO: Add support for checkbox, select og option
50
+ # based on naming conventions.
51
+ #
52
+ When /^(?:|I )fill in the following:$/ do |fields|
53
+ fields.rows_hash.each do |name, value|
54
+ When %{I fill in "#{name}" with "#{value}"}
55
+ end
56
+ end
57
+
58
+ When /^(?:|I )select "([^\"]*)" from "([^\"]*)"$/ do |value, field|
59
+ select(value, :from => field)
60
+ end
61
+
62
+ # Use this step in conjunction with Rail's datetime_select helper. For example:
63
+ # When I select "December 25, 2008 10:00" as the date and time
64
+ When /^(?:|I )select "([^\"]*)" as the date and time$/ do |time|
65
+ select_datetime(time)
66
+ end
67
+
68
+ # Use this step when using multiple datetime_select helpers on a page or
69
+ # you want to specify which datetime to select. Given the following view:
70
+ # <%= f.label :preferred %><br />
71
+ # <%= f.datetime_select :preferred %>
72
+ # <%= f.label :alternative %><br />
73
+ # <%= f.datetime_select :alternative %>
74
+ # The following steps would fill out the form:
75
+ # When I select "November 23, 2004 11:20" as the "Preferred" date and time
76
+ # And I select "November 25, 2004 10:30" as the "Alternative" date and time
77
+ When /^(?:|I )select "([^\"]*)" as the "([^\"]*)" date and time$/ do |datetime, datetime_label|
78
+ select_datetime(datetime, :from => datetime_label)
79
+ end
80
+
81
+ # Use this step in conjunction with Rail's time_select helper. For example:
82
+ # When I select "2:20PM" as the time
83
+ # Note: Rail's default time helper provides 24-hour time-- not 12 hour time. Webrat
84
+ # will convert the 2:20PM to 14:20 and then select it.
85
+ When /^(?:|I )select "([^\"]*)" as the time$/ do |time|
86
+ select_time(time)
87
+ end
88
+
89
+ # Use this step when using multiple time_select helpers on a page or you want to
90
+ # specify the name of the time on the form. For example:
91
+ # When I select "7:30AM" as the "Gym" time
92
+ When /^(?:|I )select "([^\"]*)" as the "([^\"]*)" time$/ do |time, time_label|
93
+ select_time(time, :from => time_label)
94
+ end
95
+
96
+ # Use this step in conjunction with Rail's date_select helper. For example:
97
+ # When I select "February 20, 1981" as the date
98
+ When /^(?:|I )select "([^\"]*)" as the date$/ do |date|
99
+ select_date(date)
100
+ end
101
+
102
+ # Use this step when using multiple date_select helpers on one page or
103
+ # you want to specify the name of the date on the form. For example:
104
+ # When I select "April 26, 1982" as the "Date of Birth" date
105
+ When /^(?:|I )select "([^\"]*)" as the "([^\"]*)" date$/ do |date, date_label|
106
+ select_date(date, :from => date_label)
107
+ end
108
+
109
+ When /^(?:|I )check "([^\"]*)"$/ do |field|
110
+ check(field)
111
+ end
112
+
113
+ When /^(?:|I )uncheck "([^\"]*)"$/ do |field|
114
+ uncheck(field)
115
+ end
116
+
117
+ When /^(?:|I )choose "([^\"]*)"$/ do |field|
118
+ choose(field)
119
+ end
120
+
121
+ # Adds support for validates_attachment_content_type. Without the mime-type getting
122
+ # passed to attach_file() you will get a "Photo file is not one of the allowed file types."
123
+ # error message
124
+ When /^(?:|I )attach the file "([^\"]*)" to "([^\"]*)"$/ do |path, field|
125
+ type = path.split(".")[1]
126
+
127
+ case type
128
+ when "jpg"
129
+ type = "image/jpg"
130
+ when "jpeg"
131
+ type = "image/jpeg"
132
+ when "png"
133
+ type = "image/png"
134
+ when "gif"
135
+ type = "image/gif"
136
+ end
137
+
138
+ attach_file(field, path, type)
139
+ end
140
+
141
+ Then /^(?:|I )should see "([^\"]*)"$/ do |text|
142
+ last_response.should contain(text)
143
+ end
144
+
145
+ Then /^(?:|I )should see "([^\"]*)" within "([^\"]*)"$/ do |text, selector|
146
+ within(selector) do |content|
147
+ if defined?(Spec::Rails::Matchers)
148
+ content.should contain(text)
149
+ else
150
+ assert content.include?(text)
151
+ end
152
+ end
153
+ end
154
+
155
+ Then /^(?:|I )should see \/([^\/]*)\/$/ do |regexp|
156
+ regexp = Regexp.new(regexp)
157
+ last_response.should contain(regexp)
158
+ end
159
+
160
+ Then /^(?:|I )should see \/([^\/]*)\/ within "([^\"]*)"$/ do |regexp, selector|
161
+ within(selector) do |content|
162
+ regexp = Regexp.new(regexp)
163
+ if defined?(Spec::Rails::Matchers)
164
+ content.should contain(regexp)
165
+ else
166
+ assert content =~ regexp
167
+ end
168
+ end
169
+ end
170
+
171
+ Then /^(?:|I )should not see "([^\"]*)"$/ do |text|
172
+ last_response.should_not contain(text)
173
+ end
174
+
175
+ Then /^(?:|I )should not see "([^\"]*)" within "([^\"]*)"$/ do |text, selector|
176
+ within(selector) do |content|
177
+ if defined?(Spec::Rails::Matchers)
178
+ content.should_not contain(text)
179
+ else
180
+ assert !content.include?(text)
181
+ end
182
+ end
183
+ end
184
+
185
+ Then /^(?:|I )should not see \/([^\/]*)\/$/ do |regexp|
186
+ regexp = Regexp.new(regexp)
187
+ last_response.should_not contain(regexp)
188
+ end
189
+
190
+ Then /^(?:|I )should not see \/([^\/]*)\/ within "([^\"]*)"$/ do |regexp, selector|
191
+ within(selector) do |content|
192
+ regexp = Regexp.new(regexp)
193
+ if defined?(Spec::Rails::Matchers)
194
+ content.should_not contain(regexp)
195
+ else
196
+ assert content !~ regexp
197
+ end
198
+ end
199
+ end
200
+
201
+ Then /^the "([^\"]*)" field should contain "([^\"]*)"$/ do |field, value|
202
+ if defined?(Spec::Rails::Matchers)
203
+ field_labeled(field).value.should =~ /#{value}/
204
+ else
205
+ assert_match(/#{value}/, field_labeled(field).value)
206
+ end
207
+ end
208
+
209
+ Then /^the "([^\"]*)" field should not contain "([^\"]*)"$/ do |field, value|
210
+ if defined?(Spec::Rails::Matchers)
211
+ field_labeled(field).value.should_not =~ /#{value}/
212
+ else
213
+ assert_no_match(/#{value}/, field_labeled(field).value)
214
+ end
215
+ end
216
+
217
+ Then /^the "([^\"]*)" checkbox should be checked$/ do |label|
218
+ if defined?(Spec::Rails::Matchers)
219
+ field_labeled(label).should be_checked
220
+ else
221
+ assert field_labeled(label).checked?
222
+ end
223
+ end
224
+
225
+ Then /^the "([^\"]*)" checkbox should not be checked$/ do |label|
226
+ if defined?(Spec::Rails::Matchers)
227
+ field_labeled(label).should_not be_checked
228
+ else
229
+ assert !field_labeled(label).checked?
230
+ end
231
+ end
232
+
233
+ Then /^(?:|I )should be on (.+)$/ do |page_name|
234
+ if defined?(Spec::Rails::Matchers)
235
+ URI.parse(current_url).path.should == path_to(page_name)
236
+ else
237
+ assert_equal path_to(page_name), URI.parse(current_url).path
238
+ end
239
+ end
240
+
241
+ Then /^show me the page$/ do
242
+ save_and_open_page
243
+ end
@@ -0,0 +1,19 @@
1
+ require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support
2
+ require 'active_record'
3
+ require 'cucumber/web/tableish'
4
+
5
+ require 'webrat'
6
+ require 'webrat/core/matchers'
7
+
8
+ require 'messiah'
9
+
10
+ Messiah.configure do
11
+ root File.join(File.dirname(__FILE__), '..', '..', 'spec', 'fixtures', 'www')
12
+ command 'php-cgi -d cgi.force_redirect=0'
13
+ end
14
+
15
+ # How to clean your database when transactions are turned off. See
16
+ # http://github.com/bmabey/database_cleaner for more info.
17
+ require 'database_cleaner'
18
+ DatabaseCleaner.strategy = :truncation
19
+
@@ -0,0 +1,13 @@
1
+ module NavigationHelpers
2
+ # Maps a name to a path. Used by the
3
+ #
4
+ # When /^I go to (.+)$/ do |page_name|
5
+ #
6
+ # step definition in web_steps.rb
7
+ #
8
+ def path_to(page_name)
9
+ "/#{page_name}"
10
+ end
11
+ end
12
+
13
+ World(NavigationHelpers)
@@ -0,0 +1,14 @@
1
+ require 'spec'
2
+ require 'spec/autorun'
3
+ require 'messiah'
4
+
5
+ Messiah.configure do
6
+ root File.join(File.dirname(__FILE__), '..', '<%= root %>')
7
+ command '<%= command %>'
8
+ <%- if script -%>
9
+ script '<%= script %>'
10
+ <%- end -%>
11
+ end
12
+
13
+ Spec::Runner.configure do |config|
14
+ end
@@ -0,0 +1,7 @@
1
+ <?php
2
+
3
+ if (isset($_SERVER[$_GET['key']])) {
4
+ echo "The key {$_GET['key']} exists and is {$_SERVER[$_GET['key']]}";
5
+ } else {
6
+ echo "The key {$_GET['key']} does not exist";
7
+ }
@@ -2,16 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "Messiah" do
4
4
  let(:body) {last_response.body}
5
-
6
- def visit(url)
7
- u = url =~ /^\// ? url : "/#{url}"
8
- super(u)
9
- end
10
-
11
- def host(val)
12
- Messiah.config.host val
13
- end
14
-
5
+
15
6
  before(:each) do
16
7
  host "example.dev"
17
8
  end
@@ -77,10 +68,46 @@ describe "Messiah" do
77
68
  body.should contain "[uploaded_file]"
78
69
  end
79
70
 
71
+ it "passes the application environment using the default key" do
72
+ visit 'env.php?key=APP_ENV'
73
+ body.should contain 'The key APP_ENV exists and is test'
74
+ end
75
+
76
+ it "passes the application environment using a custom key" do
77
+ Messiah.environment_key 'X-APP-ENV'
78
+ visit 'env.php?key=X-APP-ENV'
79
+ body.should contain 'The key X-APP-ENV exists and is test'
80
+ end
81
+
82
+ it "passes the test root using the default key" do
83
+ Messiah.test_root 'WOOHOO'
84
+ visit 'env.php?key=X-TEST-ROOT'
85
+ body.should contain 'The key X-TEST-ROOT exists and is WOOHOO'
86
+ end
87
+
80
88
  it "handles environments that drive every request through one script" do
81
89
  Messiah.script 'path_info.php'
82
90
  visit '/hello/there'
83
91
  body.should contain '/hello/there'
84
92
  end
93
+
94
+ it "passes the test root using a custom key" do
95
+ Messiah.test_root 'WOOHOOCUSTOM'
96
+ Messiah.test_root_key 'MYHAPPYTESTROOT'
97
+ visit 'env.php?key=MYHAPPYTESTROOT'
98
+ body.should contain 'The key MYHAPPYTESTROOT exists and is WOOHOOCUSTOM'
99
+ end
100
+
101
+ it "passes the application environment using a custom key" do
102
+ Messiah.environment_key 'X-APP-ENV'
103
+ visit 'env.php?key=X-APP-ENV'
104
+ body.should contain 'The key X-APP-ENV exists and is test'
105
+ end
106
+
107
+ it "resets the configuration to the frozen state" do
108
+ Messiah.script 'path_info.php'
109
+ Messiah.reset_config!
110
+ Messiah.script.should be_nil
111
+ end
85
112
  end
86
113
 
@@ -1 +1 @@
1
- --color
1
+ -fs -c
@@ -10,5 +10,5 @@ Messiah.configure do
10
10
  end
11
11
 
12
12
  Spec::Runner.configure do |config|
13
- include Messiah::RSpec
13
+ Messiah.rspec(config)
14
14
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: messiah
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 9
8
+ - 0
9
+ version: 0.9.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Rich Cavanaugh
@@ -9,43 +14,97 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-12-31 00:00:00 -05:00
13
- default_executable:
17
+ date: 2010-02-23 00:00:00 -05:00
18
+ default_executable: messiah-generator
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: webrat
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
23
29
  version: "0"
24
- version:
30
+ type: :runtime
31
+ version_requirements: *id001
25
32
  - !ruby/object:Gem::Dependency
26
33
  name: rack
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - ">="
32
38
  - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
33
41
  version: "0"
34
- version:
42
+ type: :runtime
43
+ version_requirements: *id002
35
44
  - !ruby/object:Gem::Dependency
36
45
  name: rack-test
46
+ prerelease: false
47
+ requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
37
54
  type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
55
+ version_requirements: *id003
56
+ - !ruby/object:Gem::Dependency
57
+ name: activerecord
58
+ prerelease: false
59
+ requirement: &id004 !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ type: :runtime
67
+ version_requirements: *id004
68
+ - !ruby/object:Gem::Dependency
69
+ name: factory_girl
70
+ prerelease: false
71
+ requirement: &id005 !ruby/object:Gem::Requirement
40
72
  requirements:
41
73
  - - ">="
42
74
  - !ruby/object:Gem::Version
75
+ segments:
76
+ - 0
43
77
  version: "0"
44
- version:
78
+ type: :runtime
79
+ version_requirements: *id005
80
+ - !ruby/object:Gem::Dependency
81
+ name: dr_nic_magic_models
82
+ prerelease: false
83
+ requirement: &id006 !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ type: :runtime
91
+ version_requirements: *id006
92
+ - !ruby/object:Gem::Dependency
93
+ name: database_cleaner
94
+ prerelease: false
95
+ requirement: &id007 !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ type: :runtime
103
+ version_requirements: *id007
45
104
  description: Messiah enables using Ruby testing tools for integration testing with platforms that support CGI. Notably, PHP.
46
105
  email: rich@withoutscope.com
47
- executables: []
48
-
106
+ executables:
107
+ - messiah-generator
49
108
  extensions: []
50
109
 
51
110
  extra_rdoc_files:
@@ -59,14 +118,32 @@ files:
59
118
  - Rakefile
60
119
  - TODO
61
120
  - VERSION
121
+ - bin/messiah-generator
62
122
  - lib/messiah.rb
63
- - lib/messiah/common.rb
64
123
  - lib/messiah/config.rb
65
- - lib/messiah/rack_cgi_app.rb
66
- - lib/messiah/rspec.rb
67
- - lib/messiah/test_unit.rb
124
+ - lib/messiah/configurator.rb
125
+ - lib/messiah/generator.rb
126
+ - lib/messiah/generator/application.rb
127
+ - lib/messiah/generator/cucumber.rb
128
+ - lib/messiah/generator/options.rb
129
+ - lib/messiah/generator/rspec.rb
130
+ - lib/messiah/generator/test_unit.rb
131
+ - lib/messiah/rack.rb
132
+ - lib/messiah/rack/cgi.rb
133
+ - lib/messiah/supports/code_igniter.php
134
+ - lib/messiah/supports/code_igniter.rb
135
+ - lib/messiah/supports/common.rb
136
+ - lib/messiah/supports/cucumber.rb
137
+ - lib/messiah/supports/rspec.rb
138
+ - lib/messiah/supports/test_unit.rb
139
+ - lib/messiah/templates/cucumber/features/messiah.feature
140
+ - lib/messiah/templates/cucumber/features/step_definitions/web_steps.rb
141
+ - lib/messiah/templates/cucumber/features/support/env.rb
142
+ - lib/messiah/templates/cucumber/features/support/paths.rb
143
+ - lib/messiah/templates/rspec/spec/spec_helper.rbt
68
144
  - spec/fixtures/www/another.php
69
145
  - spec/fixtures/www/destination.php
146
+ - spec/fixtures/www/env.php
70
147
  - spec/fixtures/www/form.php
71
148
  - spec/fixtures/www/get_vars.php
72
149
  - spec/fixtures/www/index.php
@@ -92,18 +169,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
169
  requirements:
93
170
  - - ">="
94
171
  - !ruby/object:Gem::Version
172
+ segments:
173
+ - 0
95
174
  version: "0"
96
- version:
97
175
  required_rubygems_version: !ruby/object:Gem::Requirement
98
176
  requirements:
99
177
  - - ">="
100
178
  - !ruby/object:Gem::Version
179
+ segments:
180
+ - 0
101
181
  version: "0"
102
- version:
103
182
  requirements: []
104
183
 
105
184
  rubyforge_project:
106
- rubygems_version: 1.3.5
185
+ rubygems_version: 1.3.6
107
186
  signing_key:
108
187
  specification_version: 3
109
188
  summary: The beauty of Ruby integration tests for PHP
@@ -1,7 +0,0 @@
1
- require "spec"
2
-
3
- module Messiah::RSpec
4
- def self.included(base)
5
- base.send(:include, Messiah::Common)
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- require "test/unit/assertions"
2
-
3
- module Messiah::TestUnit
4
- def self.included(base)
5
- base.send(:include, Messiah::Common)
6
- end
7
- end