riot_rails 0.0.8 → 0.0.9.pre
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.
- data/CHANGELOG +122 -0
- data/MIT-LICENSE +1 -1
- data/README.markdown +22 -7
- data/Rakefile +3 -2
- data/VERSION +1 -1
- data/lib/riot/action_controller/assertion_macros.rb +48 -34
- data/lib/riot/action_controller/context_helper.rb +12 -0
- data/lib/riot/action_controller/context_macros.rb +58 -12
- data/lib/riot/action_controller/situation_macros.rb +73 -6
- data/lib/riot/action_controller.rb +2 -0
- data/lib/riot/active_record/assertion_macros.rb +3 -158
- data/lib/riot/active_record/context_helper.rb +19 -0
- data/lib/riot/active_record/database_macros.rb +58 -0
- data/lib/riot/active_record/reflection_macros.rb +106 -0
- data/lib/riot/active_record/validation_macros.rb +187 -0
- data/lib/riot/active_record.rb +2 -0
- data/lib/riot/rails.rb +1 -2
- data/lib/riot/rails_context.rb +84 -0
- data/riot_rails.gemspec +35 -9
- data/test/action_controller/controller_context_test.rb +39 -9
- data/test/action_controller/redirected_to_test.rb +6 -11
- data/test/action_controller/renders_template_test.rb +7 -7
- data/test/action_controller/renders_test.rb +6 -6
- data/test/action_controller/response_status_test.rb +11 -11
- data/test/active_record/allowing_values_test.rb +9 -9
- data/test/active_record/attribute_is_invalid_test.rb +20 -0
- data/test/active_record/belongs_to_test.rb +22 -0
- data/test/active_record/has_and_belongs_to_many_test.rb +22 -0
- data/test/active_record/has_database_index_on_test.rb +73 -0
- data/test/active_record/has_many_test.rb +7 -3
- data/test/active_record/has_one_test.rb +22 -0
- data/test/active_record/validates_length_of_test.rb +31 -0
- data/test/active_record/validates_presence_of_test.rb +1 -1
- data/test/active_record/validates_uniqueness_of_test.rb +3 -3
- data/test/rails_context_test.rb +103 -0
- data/test/rails_root/config/environment.rb +46 -0
- data/test/rails_root/config/routes.rb +3 -4
- data/test/rails_root/db/schema.rb +1 -2
- data/test/teststrap.rb +44 -69
- metadata +39 -6
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'teststrap'
|
2
|
+
|
3
|
+
context "The basic RailsContext" do
|
4
|
+
setup do
|
5
|
+
RiotRails::RailsContext.new("Room") { }
|
6
|
+
end
|
7
|
+
|
8
|
+
asserts_topic.kind_of(Riot::Context)
|
9
|
+
asserts(:transactional?).not!
|
10
|
+
end # The basic RailsContext
|
11
|
+
|
12
|
+
context "The transactional RailsContext" do
|
13
|
+
setup { RiotRails::RailsContext.new("Room") { set :transactional, true } }
|
14
|
+
hookup { topic.transaction { |&block| raise Exception, "Hello" } }
|
15
|
+
|
16
|
+
asserts(:transactional?)
|
17
|
+
|
18
|
+
asserts("calling local run") do
|
19
|
+
topic.local_run(Riot::SilentReporter.new, Riot::Situation.new)
|
20
|
+
end.raises(Exception, "Hello")
|
21
|
+
|
22
|
+
context "with a child context" do
|
23
|
+
setup do
|
24
|
+
topic.context("call me a submarine") {}
|
25
|
+
end
|
26
|
+
asserts(:transactional?)
|
27
|
+
end
|
28
|
+
end # The transactional RailsContext
|
29
|
+
|
30
|
+
context "The rails_context macro" do
|
31
|
+
setup_test_context
|
32
|
+
|
33
|
+
asserts("Object") { Object }.respond_to(:rails_context)
|
34
|
+
|
35
|
+
asserts("a new Riot::Context") { Riot::Context.new("foo") {} }.respond_to(:rails_context)
|
36
|
+
|
37
|
+
asserts("its description") do
|
38
|
+
Riot::Context.new("foo") {}.rails_context(Room) {}.description
|
39
|
+
end.equals(Room)
|
40
|
+
|
41
|
+
asserts("its detailed description") do
|
42
|
+
Riot::Context.new("foo") {}.rails_context(Room) {}.detailed_description
|
43
|
+
end.equals("foo Room")
|
44
|
+
|
45
|
+
asserts("its type") do
|
46
|
+
Riot::Context.new("foo") {}.rails_context(Room) {}
|
47
|
+
end.kind_of(RiotRails::RailsContext)
|
48
|
+
|
49
|
+
context "with description as a string" do
|
50
|
+
setup do
|
51
|
+
situation = Riot::Situation.new
|
52
|
+
(topic.rails_context("Hi mom") {}).local_run(Riot::SilentReporter.new, situation)
|
53
|
+
situation
|
54
|
+
end
|
55
|
+
|
56
|
+
asserts("situation.topic") { topic.topic }.nil
|
57
|
+
end # with description as a string
|
58
|
+
|
59
|
+
context "for an ActiveRecord class" do
|
60
|
+
setup do
|
61
|
+
situation = Riot::Situation.new
|
62
|
+
topic.rails_context(Room) do
|
63
|
+
hookup { topic.email = "i.am@chee.se" }
|
64
|
+
end.local_run(Riot::SilentReporter.new, situation)
|
65
|
+
situation.topic
|
66
|
+
end
|
67
|
+
|
68
|
+
asserts_topic.kind_of(Room)
|
69
|
+
asserts(:new_record?)
|
70
|
+
asserts(:email).equals("i.am@chee.se")
|
71
|
+
end # for an ActiveRecord class
|
72
|
+
|
73
|
+
context "for an ActionController class" do
|
74
|
+
setup do
|
75
|
+
situation = Riot::Situation.new
|
76
|
+
topic.rails_context(RoomsController) {}.local_run(Riot::SilentReporter.new, situation)
|
77
|
+
situation
|
78
|
+
end
|
79
|
+
|
80
|
+
asserts(:topic).kind_of(RoomsController)
|
81
|
+
asserts_topic.assigns(:request)
|
82
|
+
asserts_topic.assigns(:response)
|
83
|
+
asserts_topic.assigns(:controller)
|
84
|
+
end # for an ActionController class
|
85
|
+
|
86
|
+
context "defined from the root" do
|
87
|
+
setup do
|
88
|
+
Class.new do
|
89
|
+
def self.defined_contexts; @contexts ||= []; end
|
90
|
+
def self.context(description, context_class, &definition)
|
91
|
+
(defined_contexts << context_class.new(description, &definition)).last
|
92
|
+
end
|
93
|
+
extend RiotRails::Root
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
hookup { topic.rails_context(Room) {} }
|
98
|
+
|
99
|
+
asserts(:defined_contexts).size(1)
|
100
|
+
asserts("context type") { topic.defined_contexts.first }.kind_of(RiotRails::RailsContext)
|
101
|
+
end # defined from the root
|
102
|
+
|
103
|
+
end # The rails_context macro
|
@@ -0,0 +1,46 @@
|
|
1
|
+
ENV['RAILS_ENV'] = 'test'
|
2
|
+
|
3
|
+
require "active_record/railtie"
|
4
|
+
require "action_controller/railtie"
|
5
|
+
# require "action_mailer/railtie"
|
6
|
+
# require "active_resource/railtie"
|
7
|
+
|
8
|
+
module Rails
|
9
|
+
def self.root; File.expand_path(File.join(File.dirname(__FILE__), "..")); end
|
10
|
+
end
|
11
|
+
|
12
|
+
module RiotRails
|
13
|
+
class Application < Rails::Application; end
|
14
|
+
end
|
15
|
+
|
16
|
+
require File.join(Rails.root, "config", "routes.rb")
|
17
|
+
|
18
|
+
# Logging stuff
|
19
|
+
|
20
|
+
class NilIO
|
21
|
+
def write(*args); end
|
22
|
+
def close(*args); end
|
23
|
+
def puts(*args); end
|
24
|
+
def path; nil; end
|
25
|
+
def fsync; 0; end
|
26
|
+
def to_s; "hello"; end
|
27
|
+
def sync; true; end
|
28
|
+
def sync=(arg); arg; end
|
29
|
+
end
|
30
|
+
|
31
|
+
def shhh(&block)
|
32
|
+
orig_out = $stdout
|
33
|
+
$stdout = NilIO.new
|
34
|
+
yield
|
35
|
+
$stdout = orig_out
|
36
|
+
end
|
37
|
+
|
38
|
+
shhh do
|
39
|
+
require 'sqlite3'
|
40
|
+
ActiveRecord::Base.configurations = {"test" => { "adapter" => "sqlite3", "database" => ":memory:"}}
|
41
|
+
ActiveRecord::Base.establish_connection("test")
|
42
|
+
load(File.join(Rails.root, "db", "schema.rb"))
|
43
|
+
end
|
44
|
+
|
45
|
+
ActiveRecord::Base.logger = Logger.new(NilIO.new)
|
46
|
+
ActionController::Base.view_paths = [File.join(Rails.root, 'app', 'views')]
|
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
map.connect ':controller/:action/:id.:format'
|
1
|
+
RiotRails::Application.routes.draw do |map|
|
2
|
+
resources :gremlins
|
3
|
+
match ':controller(/:action(/:id(.:format)))'
|
5
4
|
end
|
data/test/teststrap.rb
CHANGED
@@ -1,101 +1,76 @@
|
|
1
1
|
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
-
require 'active_record'
|
5
|
-
require 'action_controller'
|
6
|
-
|
7
|
-
class NilIO
|
8
|
-
def write(*args); end
|
9
|
-
def close(*args); end
|
10
|
-
def puts(*args); end
|
11
|
-
def path; nil; end
|
12
|
-
def fsync; 0; end
|
13
|
-
def to_s; "hello"; end
|
14
|
-
def sync; true; end
|
15
|
-
def sync=(arg); arg; end
|
16
|
-
end
|
17
|
-
|
18
|
-
def shhh(&block)
|
19
|
-
orig_out = $stdout
|
20
|
-
$stdout = NilIO.new
|
21
|
-
yield
|
22
|
-
$stdout = orig_out
|
23
|
-
end
|
24
4
|
|
25
5
|
#
|
26
6
|
# Setup faux Rails environment
|
27
7
|
|
28
|
-
|
29
|
-
|
30
|
-
require File.join(RAILS_ROOT, "config", "routes.rb")
|
31
|
-
|
32
|
-
shhh do
|
33
|
-
ActiveRecord::Base.configurations = {"test" => { "adapter" => "sqlite3", "database" => ":memory:"}}
|
34
|
-
ActiveRecord::Base.establish_connection("test")
|
35
|
-
load(File.join(RAILS_ROOT, "db", "schema.rb"))
|
36
|
-
end
|
37
|
-
|
38
|
-
ActiveRecord::Base.logger = Logger.new(NilIO.new)
|
39
|
-
ActionController::Base.view_paths = [File.join(RAILS_ROOT, 'app', 'views')]
|
8
|
+
require File.join(File.dirname(__FILE__), 'rails_root', "config", "environment")
|
40
9
|
|
41
10
|
#
|
42
11
|
# Model definition
|
43
12
|
|
44
13
|
class Room < ActiveRecord::Base
|
45
|
-
validates_presence_of :location
|
14
|
+
validates_presence_of :location
|
46
15
|
validates_format_of :email, :with => /^\w+@\w+\.\w+$/
|
47
16
|
validates_uniqueness_of :email
|
17
|
+
validates_length_of :name, :within => 5..20
|
18
|
+
validates_length_of :contents, :within => 0..100, :allow_blank => true
|
48
19
|
|
49
|
-
has_many :doors
|
50
|
-
has_one :floor
|
20
|
+
has_many :doors, :class_name => 'Porthole'
|
21
|
+
has_one :floor, :class_name => "Substrate"
|
22
|
+
has_and_belongs_to_many :walls, :join_table => "floorplans"
|
23
|
+
belongs_to :house
|
24
|
+
belongs_to :owner, :class_name => 'SomethingElse'
|
51
25
|
|
52
26
|
def self.create_with_good_data(attributes={})
|
53
|
-
create!({:location => "a", :
|
27
|
+
create!({:location => "a", :email => "a@b.c", :name => "Junior"}.merge(attributes))
|
54
28
|
end
|
55
29
|
end
|
56
30
|
|
57
31
|
#
|
58
|
-
#
|
32
|
+
# Controller definition
|
33
|
+
|
34
|
+
class RoomsController < ActionController::Base
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# Blah == anything, whatever. Always passes an equality test
|
39
|
+
|
40
|
+
class Blah
|
41
|
+
def ==(o) true; end
|
42
|
+
def inspect; "<blah>"; end
|
43
|
+
alias :to_s :inspect
|
44
|
+
end
|
45
|
+
|
46
|
+
class Object
|
47
|
+
def blah; Blah.new; end
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Riot setup
|
59
52
|
|
60
53
|
require 'riot/rails'
|
54
|
+
require 'riot/active_record'
|
55
|
+
require 'riot/action_controller'
|
56
|
+
|
57
|
+
Riot.dots if ENV["TM_MODE"]
|
61
58
|
|
62
59
|
module RiotRails
|
63
60
|
module Context
|
64
|
-
|
65
|
-
|
66
|
-
# should("fail #{failures} test(s)") { topic.failures }.equals(failures)
|
67
|
-
# should("error on #{errors} test(s)") { topic.errors }.equals(errors)
|
68
|
-
# end
|
69
|
-
#
|
70
|
-
# def setup_with_test_context(&block)
|
71
|
-
# setup do
|
72
|
-
# @test_report = Riot::SilentReporter.new
|
73
|
-
# @test_context = Riot::Context.new("test context", @test_report)
|
74
|
-
# yield(@test_context)
|
75
|
-
# @test_context.report
|
76
|
-
# @test_report
|
77
|
-
# end
|
78
|
-
# end
|
79
|
-
#
|
80
|
-
# def setup_and_run_context(name, *passes_failures_errors, &block)
|
81
|
-
# context name do
|
82
|
-
# setup_with_test_context(&block)
|
83
|
-
# asserts_passes_failures_errors(*passes_failures_errors)
|
84
|
-
# end
|
85
|
-
# end
|
86
|
-
|
87
|
-
def setup_test_context
|
88
|
-
setup { Riot::Context.new("test context") {} }
|
61
|
+
def setup_test_context(context_description="test context")
|
62
|
+
setup { Riot::Context.new(context_description) {} }
|
89
63
|
end
|
90
64
|
|
91
65
|
def setup_for_assertion_test(&block)
|
92
|
-
setup
|
93
|
-
topic.setup(&block).run(@situation)
|
94
|
-
topic
|
95
|
-
end
|
66
|
+
hookup { topic.setup(&block).run(@situation) }
|
96
67
|
end
|
97
|
-
|
98
|
-
def
|
68
|
+
|
69
|
+
def hookup_for_assertion_test(&block)
|
70
|
+
hookup { topic.hookup(&block).run(@situation) }
|
71
|
+
end
|
72
|
+
|
73
|
+
def assertion_test_passes(description, success_message="", &block)
|
99
74
|
should("pass #{description}") do
|
100
75
|
instance_eval(&block).run(@situation)
|
101
76
|
end.equals([:pass, success_message])
|
@@ -104,7 +79,7 @@ module RiotRails
|
|
104
79
|
def assertion_test_fails(description, failure_message, &block)
|
105
80
|
should("fail #{description}") do
|
106
81
|
instance_eval(&block).run(@situation)
|
107
|
-
end.equals([:fail, failure_message])
|
82
|
+
end.equals([:fail, failure_message, blah, blah])
|
108
83
|
end
|
109
84
|
|
110
85
|
end # Context
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riot_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin 'Gus' Knowlden
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-02-20 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.10.
|
23
|
+
version: 0.10.13.pre
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activerecord
|
@@ -30,7 +30,17 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 3.0.0.pre
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: actionpack
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 3.0.0.pre
|
34
44
|
version:
|
35
45
|
description: Riot specific test support for Rails apps. Protest the slow app.
|
36
46
|
email: gus@gusg.us
|
@@ -42,17 +52,24 @@ extra_rdoc_files:
|
|
42
52
|
- README.markdown
|
43
53
|
files:
|
44
54
|
- .gitignore
|
55
|
+
- CHANGELOG
|
45
56
|
- MIT-LICENSE
|
46
57
|
- README.markdown
|
47
58
|
- Rakefile
|
48
59
|
- VERSION
|
49
60
|
- lib/riot/action_controller.rb
|
50
61
|
- lib/riot/action_controller/assertion_macros.rb
|
62
|
+
- lib/riot/action_controller/context_helper.rb
|
51
63
|
- lib/riot/action_controller/context_macros.rb
|
52
64
|
- lib/riot/action_controller/situation_macros.rb
|
53
65
|
- lib/riot/active_record.rb
|
54
66
|
- lib/riot/active_record/assertion_macros.rb
|
67
|
+
- lib/riot/active_record/context_helper.rb
|
68
|
+
- lib/riot/active_record/database_macros.rb
|
69
|
+
- lib/riot/active_record/reflection_macros.rb
|
70
|
+
- lib/riot/active_record/validation_macros.rb
|
55
71
|
- lib/riot/rails.rb
|
72
|
+
- lib/riot/rails_context.rb
|
56
73
|
- rails/init.rb
|
57
74
|
- riot_rails.gemspec
|
58
75
|
- test/action_controller/controller_context_test.rb
|
@@ -61,10 +78,18 @@ files:
|
|
61
78
|
- test/action_controller/renders_test.rb
|
62
79
|
- test/action_controller/response_status_test.rb
|
63
80
|
- test/active_record/allowing_values_test.rb
|
81
|
+
- test/active_record/attribute_is_invalid_test.rb
|
82
|
+
- test/active_record/belongs_to_test.rb
|
83
|
+
- test/active_record/has_and_belongs_to_many_test.rb
|
84
|
+
- test/active_record/has_database_index_on_test.rb
|
64
85
|
- test/active_record/has_many_test.rb
|
86
|
+
- test/active_record/has_one_test.rb
|
87
|
+
- test/active_record/validates_length_of_test.rb
|
65
88
|
- test/active_record/validates_presence_of_test.rb
|
66
89
|
- test/active_record/validates_uniqueness_of_test.rb
|
90
|
+
- test/rails_context_test.rb
|
67
91
|
- test/rails_root/app/views/rendered_templates/foo_bar.html.erb
|
92
|
+
- test/rails_root/config/environment.rb
|
68
93
|
- test/rails_root/config/routes.rb
|
69
94
|
- test/rails_root/db/schema.rb
|
70
95
|
- test/teststrap.rb
|
@@ -85,9 +110,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
85
110
|
version:
|
86
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
112
|
requirements:
|
88
|
-
- - "
|
113
|
+
- - ">"
|
89
114
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
115
|
+
version: 1.3.1
|
91
116
|
version:
|
92
117
|
requirements: []
|
93
118
|
|
@@ -103,9 +128,17 @@ test_files:
|
|
103
128
|
- test/action_controller/renders_test.rb
|
104
129
|
- test/action_controller/response_status_test.rb
|
105
130
|
- test/active_record/allowing_values_test.rb
|
131
|
+
- test/active_record/attribute_is_invalid_test.rb
|
132
|
+
- test/active_record/belongs_to_test.rb
|
133
|
+
- test/active_record/has_and_belongs_to_many_test.rb
|
134
|
+
- test/active_record/has_database_index_on_test.rb
|
106
135
|
- test/active_record/has_many_test.rb
|
136
|
+
- test/active_record/has_one_test.rb
|
137
|
+
- test/active_record/validates_length_of_test.rb
|
107
138
|
- test/active_record/validates_presence_of_test.rb
|
108
139
|
- test/active_record/validates_uniqueness_of_test.rb
|
140
|
+
- test/rails_context_test.rb
|
141
|
+
- test/rails_root/config/environment.rb
|
109
142
|
- test/rails_root/config/routes.rb
|
110
143
|
- test/rails_root/db/schema.rb
|
111
144
|
- test/teststrap.rb
|