riot_rails 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ test/rails_root/log/*.log
2
+ pkg/*
3
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -0,0 +1,94 @@
1
+ module Riot #:nodoc:
2
+ module ActionController #:nodoc:
3
+
4
+ module AssertionMacros
5
+ # Asserts that the body of the response equals or matches the expected expression. Expects actual to
6
+ # be the controller.
7
+ #
8
+ # controller.renders("a bunch of html")
9
+ # controller.renders(/bunch of/)
10
+ def renders(expected)
11
+ actual_body = actual.response.body
12
+ if expected.kind_of?(Regexp)
13
+ msg = "expected response body #{actual_body.inspect} to match #{expected.inspect}"
14
+ actual_body =~ expected || fail(msg)
15
+ else
16
+ msg = "expected response body #{actual_body.inspect} to equal #{expected.inspect}"
17
+ expected == actual_body || fail(msg)
18
+ end
19
+ end
20
+
21
+ # Asserts that the name you provide is the basename of the rendered template. For instance, if you
22
+ # expect the rendered template is named "foo_bar.html.haml" and you pass "foo_bar" into
23
+ # renders_template, the assertion would pass. If instead you pass "foo" into renders_template, the
24
+ # assertion will fail. Using Rails' assert_template both assertions would pass
25
+ #
26
+ # controlling :things
27
+ # controller.renders_template(:index)
28
+ # controller.renders_template("index")
29
+ # controller.renders_template("index.erb") # fails even if that's the name of the template
30
+ def renders_template(name)
31
+ name = name.to_s
32
+ actual_template_path = actual.response.rendered[:template].to_s
33
+ actual_template_name = File.basename(actual_template_path)
34
+ msg = "expected template #{name.inspect}, not #{actual_template_path.inspect}"
35
+ actual_template_name.to_s.match(/^#{name}(\.\w+)?$/) || fail(msg)
36
+ end
37
+
38
+ # Asserts that the HTTP response code equals your expectation. You can use the symbolized form of the
39
+ # status code or the integer code itself. Not currently supporting status ranges; such as: +:success+,
40
+ # +:redirect+, etc.
41
+ #
42
+ # controller.response_code(:ok)
43
+ # controller.response_code(200)
44
+ #
45
+ # controller.response_code(:not_found)
46
+ # controller.response_code(404)
47
+ #
48
+ # # A redirect
49
+ # controller.response_code(:found)
50
+ # controller.response_code(302)
51
+ #
52
+ # See +ActionController::StatusCodes+ for the list of available codes.
53
+ def response_code(expected_code)
54
+ if expected_code.kind_of?(Symbol)
55
+ expected_code = ::ActionController::StatusCodes::SYMBOL_TO_STATUS_CODE[expected_code]
56
+ end
57
+ actual_code = actual.response.response_code
58
+ expected_code == actual_code || fail("expected response code #{expected_code}, not #{actual_code}")
59
+ end
60
+
61
+ # Asserts that the response from an action is a redirect and that the path or URL matches your
62
+ # expectations. If the response code is not in the 300s, the assertion will fail. If the reponse code
63
+ # is fine, but the redirect-to path or URL do not exactly match your expectation, the assertion will
64
+ # fail.
65
+ #
66
+ # +redirected_to+ expects you to provide your expected path in a block. This is so you can use named
67
+ # routes, which is - as it turns out - handy. It's also what I would expect to be able to do.
68
+ #
69
+ # controlling :people
70
+ # setup do
71
+ # post :create, :person { ... }
72
+ # end
73
+ #
74
+ # controller.redirected_to { person_path(...) }
75
+ #
76
+ # PS: There is a difference between saying +named_route_path+ and +named_route_url+ and Riot Rails will
77
+ # be very strict (read: annoying) about it :)
78
+ def redirected_to(&expectation_block)
79
+ actual_response_code = actual.response.response_code
80
+ if (300...400).member?(actual_response_code)
81
+ expected_redirect = actual.url_for(situation.instance_eval(&expectation_block))
82
+ actual_redirect = actual.url_for(actual.response.redirected_to)
83
+ msg = "expected to redirect to <#{expected_redirect}>, not <#{actual_redirect}>"
84
+ expected_redirect == actual_redirect || fail(msg)
85
+ else
86
+ fail("expected response to be a redirect, but was #{actual_response_code}")
87
+ end
88
+ end
89
+ end # AssertionMacros
90
+
91
+ end # ActionController
92
+ end # Riot
93
+
94
+ Riot::Assertion.instance_eval { include Riot::ActionController::AssertionMacros }
@@ -0,0 +1,47 @@
1
+ module Riot #:nodoc:
2
+ module ActionController #:nodoc:
3
+
4
+ module ContextMacros
5
+ # Sets up a context (and possibly child contexts) for testing a controller. Right now, it just takes a
6
+ # symbol. Should change to allow you to pass in the class directly. You should put this at or near the
7
+ # top of your context definition.
8
+ #
9
+ # context "the FooBarsController" do
10
+ # controlling :foo_bars
11
+ # setup { get :index }
12
+ # end
13
+ def controlling(controller_name)
14
+ controller_class = "#{controller_name.to_s.camelize}Controller".constantize
15
+ setup do
16
+ controller_class.instance_eval { include ::ActionController::TestCase::RaiseActionExceptions }
17
+ @request = ::ActionController::TestRequest.new
18
+ @response = ::ActionController::TestResponse.new
19
+ @controller = controller_class.new
20
+ @controller.params = {}
21
+ @controller.request = @request
22
+ end
23
+ end
24
+
25
+ # Creates a shortcut assertion that is to be used with the assertion macros for ActionController.
26
+ #
27
+ # context "the FoosController" do
28
+ # controlling :foos
29
+ # setup { get :index }
30
+ #
31
+ # controller.response_status(:found)
32
+ # controller.redirected_to { new_foo_path }
33
+ # end
34
+ #
35
+ # Works the same as if you wrote the following assertions:
36
+ #
37
+ # asserts("controller") { @controller }.response_status(:found)
38
+ # asserts("controller") { @controller }.redirected_to { new_foo_path }
39
+ def controller
40
+ asserts("controller") { @controller }
41
+ end
42
+ end # ContextMacros
43
+
44
+ end # ActionController
45
+ end # Riot
46
+
47
+ Riot::Context.instance_eval { include Riot::ActionController::ContextMacros }
@@ -0,0 +1,14 @@
1
+ module Riot #:nodoc:
2
+ module ActionController #:nodoc:
3
+
4
+ module SituationMacros
5
+ attr_reader :controller, :request, :response
6
+ end # SituationMacros
7
+
8
+ end # ActionController
9
+ end # Riot
10
+
11
+ Riot::Situation.instance_eval do
12
+ include ActionController::TestProcess
13
+ include Riot::ActionController::SituationMacros
14
+ end
@@ -0,0 +1,6 @@
1
+ require 'action_controller/test_case'
2
+ require 'action_view/test_case'
3
+
4
+ require 'riot/action_controller/context_macros'
5
+ require 'riot/action_controller/assertion_macros'
6
+ require 'riot/action_controller/situation_macros'
@@ -1,6 +1,7 @@
1
1
  module Riot
2
2
  module ActiveRecord
3
- module Macros
3
+
4
+ module ContextMacros
4
5
  # An ActiveRecord assertion that expects to fail when a given attribute or attributes are validated
5
6
  # when a nil value is provided to them.
6
7
  #
@@ -60,20 +61,9 @@ module Riot
60
61
  get_error_from_writing_value(copied_model, attribute, copied_value)
61
62
  end.exists
62
63
  end
63
- end # Macros
64
- end # ActiveRecord
64
+ end # ContextMacros
65
65
 
66
- module Helpers
67
- module Situation
68
- private
69
- def get_error_from_writing_value(model, attribute, value)
70
- model.write_attribute(attribute, value)
71
- model.valid?
72
- model.errors.on(attribute)
73
- end
74
- end # Situation
75
- end # Helpers
66
+ end # ActiveRecord
76
67
  end # Riot
77
68
 
78
- Riot::Context.instance_eval { include Riot::ActiveRecord::Macros }
79
- Riot::Situation.instance_eval { include Riot::Helpers::Situation }
69
+ Riot::Context.instance_eval { include Riot::ActiveRecord::ContextMacros }
@@ -0,0 +1,16 @@
1
+ module Riot
2
+ module ActiveRecord
3
+
4
+ module SituationMacros
5
+ private
6
+ def get_error_from_writing_value(model, attribute, value)
7
+ model.write_attribute(attribute, value)
8
+ model.valid?
9
+ model.errors.on(attribute)
10
+ end
11
+ end # SituationMacros
12
+
13
+ end # ActiveRecord
14
+ end # Riot
15
+
16
+ Riot::Situation.instance_eval { include Riot::ActiveRecord::SituationMacros }
@@ -0,0 +1,2 @@
1
+ require 'riot/active_record/context_macros'
2
+ require 'riot/active_record/situation_macros'
data/lib/riot/rails.rb CHANGED
@@ -1,2 +1,3 @@
1
1
  require 'riot'
2
- require 'riot/active_record/macros'
2
+ require 'riot/active_record'
3
+ require 'riot/action_controller'
data/riot_rails.gemspec CHANGED
@@ -5,30 +5,45 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{riot_rails}
8
- s.version = "0.0.1"
8
+ s.version = "0.0.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Justin 'Gus' Knowlden"]
12
- s.date = %q{2009-10-11}
12
+ s.date = %q{2009-10-16}
13
13
  s.description = %q{Riot specific test support for Rails apps. Protest the slow app.}
14
14
  s.email = %q{gus@gusg.us}
15
15
  s.extra_rdoc_files = [
16
16
  "README.markdown"
17
17
  ]
18
18
  s.files = [
19
- "MIT-LICENSE",
19
+ ".gitignore",
20
+ "MIT-LICENSE",
20
21
  "README.markdown",
21
22
  "Rakefile",
22
23
  "VERSION",
23
- "lib/riot/active_record/macros.rb",
24
+ "lib/riot/action_controller.rb",
25
+ "lib/riot/action_controller/assertion_macros.rb",
26
+ "lib/riot/action_controller/context_macros.rb",
27
+ "lib/riot/action_controller/situation_macros.rb",
28
+ "lib/riot/active_record.rb",
29
+ "lib/riot/active_record/context_macros.rb",
30
+ "lib/riot/active_record/situation_macros.rb",
24
31
  "lib/riot/rails.rb",
25
32
  "rails/init.rb",
26
33
  "riot_rails.gemspec",
34
+ "test/action_controller/action_assigns_variable_test.rb",
35
+ "test/action_controller/controller_context_test.rb",
36
+ "test/action_controller/redirected_to_test.rb",
37
+ "test/action_controller/renders_template_test.rb",
38
+ "test/action_controller/renders_test.rb",
39
+ "test/action_controller/response_status_test.rb",
40
+ "test/active_record/should_allow_values_for_test.rb",
41
+ "test/active_record/should_validate_presence_of_test.rb",
42
+ "test/active_record/should_validate_uniqueness_of_test.rb",
43
+ "test/rails_root/app/views/rendered_templates/foo_bar.erb",
44
+ "test/rails_root/config/routes.rb",
27
45
  "test/rails_root/db/schema.rb",
28
- "test/should_allow_values_for_test.rb",
29
- "test/should_validate_presence_of_test.rb",
30
- "test/should_validate_uniqueness_of_test.rb",
31
- "test/test_helper.rb"
46
+ "test/teststrap.rb"
32
47
  ]
33
48
  s.homepage = %q{http://github.com/thumblemonks/riot_rails}
34
49
  s.rdoc_options = ["--charset=UTF-8"]
@@ -36,11 +51,18 @@ Gem::Specification.new do |s|
36
51
  s.rubygems_version = %q{1.3.5}
37
52
  s.summary = %q{Riot specific test support for Rails apps}
38
53
  s.test_files = [
39
- "test/rails_root/db/schema.rb",
40
- "test/should_allow_values_for_test.rb",
41
- "test/should_validate_presence_of_test.rb",
42
- "test/should_validate_uniqueness_of_test.rb",
43
- "test/test_helper.rb"
54
+ "test/action_controller/action_assigns_variable_test.rb",
55
+ "test/action_controller/controller_context_test.rb",
56
+ "test/action_controller/redirected_to_test.rb",
57
+ "test/action_controller/renders_template_test.rb",
58
+ "test/action_controller/renders_test.rb",
59
+ "test/action_controller/response_status_test.rb",
60
+ "test/active_record/should_allow_values_for_test.rb",
61
+ "test/active_record/should_validate_presence_of_test.rb",
62
+ "test/active_record/should_validate_uniqueness_of_test.rb",
63
+ "test/rails_root/config/routes.rb",
64
+ "test/rails_root/db/schema.rb",
65
+ "test/teststrap.rb"
44
66
  ]
45
67
 
46
68
  if s.respond_to? :specification_version then
@@ -0,0 +1,67 @@
1
+ require 'teststrap'
2
+
3
+ class FoosController < ActionController::Base
4
+ end
5
+
6
+ context "controlling in a context" do
7
+
8
+ setup do
9
+ @ctx = Riot::Context.new("foo", Riot::NilReport.new)
10
+ @ctx.controlling :foos
11
+ @ctx.situation
12
+ end
13
+
14
+ topic.assigns(:controller)
15
+ topic.assigns(:request)
16
+ topic.assigns(:response)
17
+
18
+ context "the assigned controller" do
19
+ setup { topic.controller }
20
+
21
+ topic.kind_of(FoosController)
22
+
23
+ should("have an empty params hash") do
24
+ topic.params
25
+ end.equals({})
26
+
27
+ should("return a test request when asking for request") do
28
+ topic.request
29
+ end.kind_of(::ActionController::TestRequest)
30
+ end # the assigned controller
31
+
32
+ context "the assigned request" do
33
+ setup { topic.request }
34
+ topic.kind_of(::ActionController::TestRequest)
35
+ end # the assigned request
36
+
37
+ context "the assigned response" do
38
+ setup { topic.response }
39
+ topic.kind_of(::ActionController::TestResponse)
40
+ end # the assigned response
41
+
42
+ context "calling controller" do
43
+ setup { @ctx.controller }
44
+
45
+ topic.kind_of(Riot::Assertion)
46
+
47
+ asserts("assertion name") { topic.description }.equals("foo asserts controller")
48
+
49
+ should("return the controller as the actual value") do
50
+ topic.actual
51
+ end.kind_of(FoosController)
52
+ end # calling controller
53
+
54
+ end # controlling in a context
55
+
56
+ context "a controller test" do
57
+ controlling :foos
58
+
59
+ asserts("situation") { self }.respond_to(:get)
60
+ asserts("situation") { self }.respond_to(:post)
61
+ asserts("situation") { self }.respond_to(:put)
62
+ asserts("situation") { self }.respond_to(:delete)
63
+
64
+ asserts "an unknown action" do
65
+ get :burberry
66
+ end.raises(ActionController::UnknownAction, "No action responded to burberry")
67
+ end # a controller
@@ -0,0 +1,60 @@
1
+ require 'teststrap'
2
+
3
+ class RedirectedToController < ActionController::Base
4
+ def index; redirect_to new_gremlin_path; end
5
+ def show; render :text => ""; end
6
+ end
7
+
8
+ context "asserting the redirect of an action" do
9
+
10
+ setup do
11
+ context = Riot::Context.new("redirected to", Riot::NilReport.new)
12
+ context.controlling :redirected_to
13
+ context
14
+ end
15
+
16
+ context "when doing an actual redirect" do
17
+
18
+ setup do
19
+ topic.setup { get :index }
20
+ topic
21
+ end
22
+
23
+ should "pass when expected url matches actual redirect url" do
24
+ assertion = topic.controller
25
+ assertion.redirected_to { new_gremlin_path }
26
+ assertion.passed?
27
+ end
28
+
29
+ context "and expected url does not match actual redirect url exactly" do
30
+ setup do
31
+ assertion = topic.controller
32
+ assertion.redirected_to { new_gremlin_url }
33
+ assertion
34
+ end
35
+
36
+ asserts("topic failed") { topic.failed? }
37
+
38
+ asserts("topic message") do
39
+ topic.result.message
40
+ end.matches(%r[expected to redirect to <http://test.host/gremlins/new>, not </gremlins/new>])
41
+ end # and expected url does not match actual redirect url exactly
42
+
43
+ end # when doing an actual redirect
44
+
45
+ context "when not actually doing a redirect" do
46
+ setup do
47
+ topic.setup { get :show }
48
+ assertion = topic.controller
49
+ assertion.redirected_to { new_gremlin_path }
50
+ assertion
51
+ end
52
+
53
+ asserts("topic failed") { topic.failed? }
54
+
55
+ asserts("topic message") do
56
+ topic.result.message
57
+ end.matches(%r[expected response to be a redirect, but was 200])
58
+ end # when not actually doing a redirect
59
+
60
+ end # asserting the redirect of an action
@@ -0,0 +1,93 @@
1
+ require 'teststrap'
2
+
3
+ class RenderedTemplatesController < ActionController::Base
4
+ def foo_bar; end
5
+ def text_me; render :text => "blah"; end
6
+ end
7
+
8
+ context "asserting the rendered template for an action" do
9
+
10
+ setup do
11
+ context = Riot::Context.new("rendered template", Riot::NilReport.new)
12
+ context.controlling :rendered_templates
13
+ context
14
+ end
15
+
16
+ context "that rendered a template" do
17
+ setup do
18
+ topic.setup { get :foo_bar }
19
+ topic
20
+ end
21
+
22
+ should "pass when rendered template name matches expectation" do
23
+ assertion = topic.controller
24
+ assertion.renders_template('foo_bar')
25
+ assertion.passed?
26
+ end
27
+
28
+ context "when rendered template does not match expectation" do
29
+ setup do
30
+ assertion = topic.controller
31
+ assertion.renders_template('bar_foo')
32
+ assertion
33
+ end
34
+
35
+ asserts("topic failed") { topic.failed? }
36
+
37
+ asserts("topic message") do
38
+ topic.result.message
39
+ end.matches(/expected template "bar_foo", not "rendered_templates\/foo_bar.erb"/)
40
+ end # when rendered template does not match expectation
41
+
42
+ end # that rendered a template
43
+
44
+ context "that did not render a template as expected" do
45
+ setup do
46
+ topic.setup { get :text_me }
47
+ topic
48
+ end
49
+
50
+ should "pass when providing nil as expectation" do
51
+ assertion = topic.controller
52
+ assertion.renders_template(nil)
53
+ assertion.passed?
54
+ end
55
+
56
+ should "pass when providing empty string as expectation" do
57
+ assertion = topic.controller
58
+ assertion.renders_template("")
59
+ assertion.passed?
60
+ end
61
+ end # that did not render a template as expected
62
+
63
+ context "that did not render a template but expected one" do
64
+ setup do
65
+ topic.setup { get :text_me }
66
+ assertion = topic.controller
67
+ assertion.renders_template('text_me')
68
+ assertion
69
+ end
70
+
71
+ asserts("topic failed") { topic.failed? }
72
+
73
+ asserts("topic message") do
74
+ topic.result.message
75
+ end.matches(/expected template "text_me", not ""/)
76
+ end # that did not render a template but expected one
77
+
78
+ context "that rendered a template with a partial match on template name" do
79
+ setup do
80
+ topic.setup { get :foo_bar }
81
+ assertion = topic.controller
82
+ assertion.renders_template('foo')
83
+ assertion
84
+ end
85
+
86
+ asserts("topic failed") { topic.failed? }
87
+
88
+ asserts("topic message") do
89
+ topic.result.message
90
+ end.matches(/expected template "foo", not "rendered_templates\/foo_bar.erb"/)
91
+ end # that rendered a template with a partial match on template name
92
+
93
+ end # asserting the rendered template for an action
@@ -0,0 +1,56 @@
1
+ require 'teststrap'
2
+
3
+ class RendersController < ActionController::Base
4
+ def index; render :text => "Yo mama"; end
5
+ end
6
+
7
+ context "asserting the body of a response" do
8
+
9
+ setup do
10
+ context = Riot::Context.new("renders", Riot::NilReport.new)
11
+ context.controlling :renders
12
+ context.setup { get :index }
13
+ context
14
+ end
15
+
16
+ should "assert rendered action body equals expected" do
17
+ assertion = topic.controller
18
+ assertion.renders("Yo mama")
19
+ assertion.passed?
20
+ end
21
+
22
+ context "when rendered action body does not equal expected" do
23
+ setup do
24
+ assertion = topic.controller
25
+ assertion.renders("Yo")
26
+ assertion
27
+ end
28
+
29
+ asserts("topic failed") { topic.failed? }
30
+
31
+ asserts("topic message") do
32
+ topic.result.message
33
+ end.matches(/expected response body "Yo mama" to equal "Yo"/)
34
+ end # when rendered action body does not equal expected
35
+
36
+ should "assert rendered action body matches expected" do
37
+ assertion = topic.controller
38
+ assertion.renders(/mama/)
39
+ assertion.passed?
40
+ end
41
+
42
+ context "when rendered action body does not match expected" do
43
+ setup do
44
+ assertion = topic.controller
45
+ assertion.renders(/obama/)
46
+ assertion
47
+ end
48
+
49
+ asserts("topic failed") { topic.failed? }
50
+
51
+ asserts("topic message") do
52
+ topic.result.message
53
+ end.matches(/expected response body "Yo mama" to match \/obama\//)
54
+ end # when rendered action body does not match expected
55
+
56
+ end # asserting the body of a response
@@ -0,0 +1,88 @@
1
+ require 'teststrap'
2
+
3
+ class ResponseCodesController < ActionController::Base
4
+ def ok_go; render :text => ""; end
5
+ def fffound; redirect_to "http://your.momshou.se"; end
6
+ def make_me; render :text => "", :status => 201; end
7
+ end
8
+
9
+ context "asserting the response status for an action" do
10
+
11
+ setup do
12
+ context = Riot::Context.new("response status", Riot::NilReport.new)
13
+ context.controlling :response_codes
14
+ context
15
+ end
16
+
17
+ context "returning OK" do
18
+ setup do
19
+ topic.setup { get :ok_go }
20
+ topic
21
+ end
22
+
23
+ should "pass when asked if :ok" do
24
+ assertion = topic.controller
25
+ assertion.response_code(:ok)
26
+ assertion.passed?
27
+ end
28
+
29
+ should "pass when asked if 200" do
30
+ assertion = topic.controller
31
+ assertion.response_code(200)
32
+ assertion.passed?
33
+ end
34
+
35
+ context "but expected to return CONTINUE" do
36
+ setup do
37
+ assertion = topic.controller
38
+ assertion.response_code(100)
39
+ assertion
40
+ end
41
+
42
+ asserts("topic failed") { topic.failed? }
43
+
44
+ asserts("topic message") do
45
+ topic.result.message
46
+ end.matches(/expected response code 100, not 200/)
47
+ end # but expected to return CONTINUE
48
+ end # returning OK
49
+
50
+ context "that is redirecting" do
51
+ setup do
52
+ topic.setup { get :fffound }
53
+ topic
54
+ end
55
+
56
+ should "pass when asked if :ok" do
57
+ assertion = topic.controller
58
+ assertion.response_code(:found)
59
+ assertion.passed?
60
+ end
61
+
62
+ should "pass when asked if 200" do
63
+ assertion = topic.controller
64
+ assertion.response_code(302)
65
+ assertion.passed?
66
+ end
67
+ end # that is redirecting
68
+
69
+ context "that has explicit status" do
70
+ setup do
71
+ topic.setup { get :make_me }
72
+ topic
73
+ end
74
+
75
+ should "pass when asked if :created" do
76
+ assertion = topic.controller
77
+ assertion.response_code(:created)
78
+ assertion.passed?
79
+ end
80
+
81
+ should "pass when asked if 202" do
82
+ assertion = topic.controller
83
+ assertion.response_code(201)
84
+ assertion.passed?
85
+ end
86
+ end # that has explicit status
87
+
88
+ end # asserting the status of a response
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require 'teststrap'
2
2
 
3
3
  context "should_allow_values_for" do
4
4
  setup_and_run_context("when attribute allows a value", 1, 0, 0) do |test_ctx|
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require 'teststrap'
2
2
 
3
3
  context "should_validate_presence_of" do
4
4
  setup_and_run_context("when attribute requires presence", 1, 0, 0) do |test_ctx|
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require 'teststrap'
2
2
 
3
3
  context "should_validate_uniqueness_of" do
4
4
 
@@ -0,0 +1,5 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ map.resources :gremlins
3
+ map.connect ':controller/:action/:id'
4
+ map.connect ':controller/:action/:id.:format'
5
+ end
@@ -1,8 +1,6 @@
1
1
  require 'rubygems'
2
- require 'riot/rails'
3
- require 'activerecord'
4
-
5
- RAILS_ROOT = File.dirname(__FILE__) + '/rails_root'
2
+ require 'active_record'
3
+ require 'action_controller'
6
4
 
7
5
  def shhh(&block)
8
6
  orig_out = $stdout
@@ -11,14 +9,24 @@ def shhh(&block)
11
9
  $stdout = orig_out
12
10
  end
13
11
 
14
- # Database setup
12
+ #
13
+ # Setup faux Rails environment
14
+
15
+ RAILS_ROOT = File.join(File.dirname(__FILE__), 'rails_root')
16
+
17
+ require File.join(RAILS_ROOT, "config", "routes.rb")
18
+
15
19
  shhh do
16
20
  ActiveRecord::Base.configurations = {"test" => { "adapter" => "sqlite3", "database" => ":memory:"}}
17
21
  ActiveRecord::Base.establish_connection("test")
18
22
  load(File.join(RAILS_ROOT, "db", "schema.rb"))
19
23
  end
20
24
 
25
+ ActionController::Base.view_paths = [File.join(RAILS_ROOT, 'app', 'views')]
26
+
27
+ #
21
28
  # Model definition
29
+
22
30
  class Room < ActiveRecord::Base
23
31
  validates_presence_of :location, :foo, :bar
24
32
  validates_format_of :email, :with => /^\w+@\w+\.\w+$/
@@ -29,7 +37,11 @@ class Room < ActiveRecord::Base
29
37
  end
30
38
  end
31
39
 
40
+ #
32
41
  # Test refactorings
42
+
43
+ require 'riot/rails'
44
+
33
45
  module RiotRails
34
46
  module Context
35
47
  def asserts_passes_failures_errors(passes=0, failures=0, errors=0)
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.1
4
+ version: 0.0.2
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: 2009-10-11 00:00:00 -05:00
12
+ date: 2009-10-16 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -41,19 +41,34 @@ extensions: []
41
41
  extra_rdoc_files:
42
42
  - README.markdown
43
43
  files:
44
+ - .gitignore
44
45
  - MIT-LICENSE
45
46
  - README.markdown
46
47
  - Rakefile
47
48
  - VERSION
48
- - lib/riot/active_record/macros.rb
49
+ - lib/riot/action_controller.rb
50
+ - lib/riot/action_controller/assertion_macros.rb
51
+ - lib/riot/action_controller/context_macros.rb
52
+ - lib/riot/action_controller/situation_macros.rb
53
+ - lib/riot/active_record.rb
54
+ - lib/riot/active_record/context_macros.rb
55
+ - lib/riot/active_record/situation_macros.rb
49
56
  - lib/riot/rails.rb
50
57
  - rails/init.rb
51
58
  - riot_rails.gemspec
59
+ - test/action_controller/action_assigns_variable_test.rb
60
+ - test/action_controller/controller_context_test.rb
61
+ - test/action_controller/redirected_to_test.rb
62
+ - test/action_controller/renders_template_test.rb
63
+ - test/action_controller/renders_test.rb
64
+ - test/action_controller/response_status_test.rb
65
+ - test/active_record/should_allow_values_for_test.rb
66
+ - test/active_record/should_validate_presence_of_test.rb
67
+ - test/active_record/should_validate_uniqueness_of_test.rb
68
+ - test/rails_root/app/views/rendered_templates/foo_bar.erb
69
+ - test/rails_root/config/routes.rb
52
70
  - test/rails_root/db/schema.rb
53
- - test/should_allow_values_for_test.rb
54
- - test/should_validate_presence_of_test.rb
55
- - test/should_validate_uniqueness_of_test.rb
56
- - test/test_helper.rb
71
+ - test/teststrap.rb
57
72
  has_rdoc: true
58
73
  homepage: http://github.com/thumblemonks/riot_rails
59
74
  licenses: []
@@ -83,8 +98,15 @@ signing_key:
83
98
  specification_version: 3
84
99
  summary: Riot specific test support for Rails apps
85
100
  test_files:
101
+ - test/action_controller/action_assigns_variable_test.rb
102
+ - test/action_controller/controller_context_test.rb
103
+ - test/action_controller/redirected_to_test.rb
104
+ - test/action_controller/renders_template_test.rb
105
+ - test/action_controller/renders_test.rb
106
+ - test/action_controller/response_status_test.rb
107
+ - test/active_record/should_allow_values_for_test.rb
108
+ - test/active_record/should_validate_presence_of_test.rb
109
+ - test/active_record/should_validate_uniqueness_of_test.rb
110
+ - test/rails_root/config/routes.rb
86
111
  - test/rails_root/db/schema.rb
87
- - test/should_allow_values_for_test.rb
88
- - test/should_validate_presence_of_test.rb
89
- - test/should_validate_uniqueness_of_test.rb
90
- - test/test_helper.rb
112
+ - test/teststrap.rb