cavalle-rspec-rails 1.2.2.0.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.
- data/.document +7 -0
- data/History.rdoc +207 -0
- data/License.txt +33 -0
- data/Manifest.txt +167 -0
- data/README.rdoc +45 -0
- data/Rakefile +79 -0
- data/TODO.txt +1 -0
- data/Upgrade.rdoc +103 -0
- data/features/step_definitions/people.rb +6 -0
- data/features/support/env.rb +13 -0
- data/features/transactions/transactions_should_rollback.feature +16 -0
- data/generators/rspec/CHANGES +1 -0
- data/generators/rspec/rspec_generator.rb +54 -0
- data/generators/rspec/templates/previous_failures.txt +0 -0
- data/generators/rspec/templates/rcov.opts +2 -0
- data/generators/rspec/templates/rspec.rake +165 -0
- data/generators/rspec/templates/script/autospec +6 -0
- data/generators/rspec/templates/script/spec +10 -0
- data/generators/rspec/templates/script/spec_server +9 -0
- data/generators/rspec/templates/spec.opts +4 -0
- data/generators/rspec/templates/spec_helper.rb +47 -0
- data/generators/rspec_controller/USAGE +33 -0
- data/generators/rspec_controller/rspec_controller_generator.rb +45 -0
- data/generators/rspec_controller/templates/controller_spec.rb +25 -0
- data/generators/rspec_controller/templates/helper_spec.rb +11 -0
- data/generators/rspec_controller/templates/view_spec.rb +12 -0
- data/generators/rspec_default_values.rb +19 -0
- data/generators/rspec_model/USAGE +18 -0
- data/generators/rspec_model/rspec_model_generator.rb +35 -0
- data/generators/rspec_model/templates/model_spec.rb +15 -0
- data/generators/rspec_scaffold/rspec_scaffold_generator.rb +150 -0
- data/generators/rspec_scaffold/templates/controller_spec.rb +171 -0
- data/generators/rspec_scaffold/templates/edit_erb_spec.rb +27 -0
- data/generators/rspec_scaffold/templates/helper_spec.rb +11 -0
- data/generators/rspec_scaffold/templates/index_erb_spec.rb +28 -0
- data/generators/rspec_scaffold/templates/new_erb_spec.rb +27 -0
- data/generators/rspec_scaffold/templates/routing_spec.rb +63 -0
- data/generators/rspec_scaffold/templates/show_erb_spec.rb +23 -0
- data/init.rb +9 -0
- data/lib/autotest/discover.rb +1 -0
- data/lib/autotest/rails_rspec.rb +76 -0
- data/lib/spec/rails/example/assigns_hash_proxy.rb +39 -0
- data/lib/spec/rails/example/controller_example_group.rb +247 -0
- data/lib/spec/rails/example/cookies_proxy.rb +29 -0
- data/lib/spec/rails/example/functional_example_group.rb +84 -0
- data/lib/spec/rails/example/helper_example_group.rb +153 -0
- data/lib/spec/rails/example/model_example_group.rb +14 -0
- data/lib/spec/rails/example/render_observer.rb +67 -0
- data/lib/spec/rails/example/routing_example_group.rb +13 -0
- data/lib/spec/rails/example/routing_helpers.rb +70 -0
- data/lib/spec/rails/example/view_example_group.rb +186 -0
- data/lib/spec/rails/example.rb +47 -0
- data/lib/spec/rails/extensions/action_controller/rescue.rb +42 -0
- data/lib/spec/rails/extensions/action_controller/test_case.rb +16 -0
- data/lib/spec/rails/extensions/action_controller/test_response.rb +21 -0
- data/lib/spec/rails/extensions/action_view/base.rb +33 -0
- data/lib/spec/rails/extensions/active_record/base.rb +45 -0
- data/lib/spec/rails/extensions/active_support/test_case.rb +7 -0
- data/lib/spec/rails/extensions/spec/matchers/have.rb +23 -0
- data/lib/spec/rails/extensions/spec/runner/configuration.rb +44 -0
- data/lib/spec/rails/extensions.rb +11 -0
- data/lib/spec/rails/interop/testcase.rb +14 -0
- data/lib/spec/rails/matchers/ar_be_valid.rb +44 -0
- data/lib/spec/rails/matchers/assert_select.rb +146 -0
- data/lib/spec/rails/matchers/change.rb +11 -0
- data/lib/spec/rails/matchers/have_text.rb +57 -0
- data/lib/spec/rails/matchers/include_text.rb +54 -0
- data/lib/spec/rails/matchers/redirect_to.rb +126 -0
- data/lib/spec/rails/matchers/render_template.rb +114 -0
- data/lib/spec/rails/matchers.rb +32 -0
- data/lib/spec/rails/mocks.rb +135 -0
- data/lib/spec/rails/spec_server.rb +127 -0
- data/lib/spec/rails/story_adapter.rb +79 -0
- data/lib/spec/rails/version.rb +15 -0
- data/lib/spec/rails.rb +28 -0
- data/rspec-rails.gemspec +57 -0
- data/spec/autotest/mappings_spec.rb +86 -0
- data/spec/rails_suite.rb +7 -0
- data/spec/resources/controllers/action_view_base_spec_controller.rb +2 -0
- data/spec/resources/controllers/application.rb +9 -0
- data/spec/resources/controllers/controller_spec_controller.rb +120 -0
- data/spec/resources/controllers/example.txt +1 -0
- data/spec/resources/controllers/redirect_spec_controller.rb +70 -0
- data/spec/resources/controllers/render_spec_controller.rb +30 -0
- data/spec/resources/controllers/rjs_spec_controller.rb +58 -0
- data/spec/resources/helpers/addition_helper.rb +5 -0
- data/spec/resources/helpers/explicit_helper.rb +46 -0
- data/spec/resources/helpers/more_explicit_helper.rb +5 -0
- data/spec/resources/helpers/plugin_application_helper.rb +6 -0
- data/spec/resources/helpers/view_spec_helper.rb +13 -0
- data/spec/resources/models/animal.rb +4 -0
- data/spec/resources/models/person.rb +18 -0
- data/spec/resources/models/thing.rb +3 -0
- data/spec/resources/views/controller_spec/_partial.html.erb +0 -0
- data/spec/resources/views/controller_spec/action_setting_flash_after_session_reset.html.erb +1 -0
- data/spec/resources/views/controller_spec/action_setting_flash_before_session_reset.html.erb +1 -0
- data/spec/resources/views/controller_spec/action_setting_the_assigns_hash.html.erb +0 -0
- data/spec/resources/views/controller_spec/action_with_errors_in_template.html.erb +1 -0
- data/spec/resources/views/controller_spec/action_with_template.html.erb +1 -0
- data/spec/resources/views/layouts/application.html.erb +0 -0
- data/spec/resources/views/layouts/simple.html.erb +0 -0
- data/spec/resources/views/objects/_object.html.erb +1 -0
- data/spec/resources/views/render_spec/_a_partial.html.erb +0 -0
- data/spec/resources/views/render_spec/action_with_alternate_layout.html.erb +0 -0
- data/spec/resources/views/render_spec/some_action.html.erb +0 -0
- data/spec/resources/views/render_spec/some_action.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/_replacement_partial.html.erb +1 -0
- data/spec/resources/views/rjs_spec/hide_div.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/hide_page_element.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/insert_html.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/replace.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/replace_html.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/replace_html_with_partial.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/visual_effect.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/visual_toggle_effect.js.rjs +1 -0
- data/spec/resources/views/tag_spec/no_tags.html.erb +1 -0
- data/spec/resources/views/tag_spec/single_div_with_no_attributes.html.erb +1 -0
- data/spec/resources/views/tag_spec/single_div_with_one_attribute.html.erb +1 -0
- data/spec/resources/views/view_spec/_partial.html.erb +2 -0
- data/spec/resources/views/view_spec/_partial_used_twice.html.erb +0 -0
- data/spec/resources/views/view_spec/_partial_with_local_variable.html.erb +1 -0
- data/spec/resources/views/view_spec/_partial_with_sub_partial.html.erb +1 -0
- data/spec/resources/views/view_spec/_spacer.html.erb +1 -0
- data/spec/resources/views/view_spec/accessor.html.erb +5 -0
- data/spec/resources/views/view_spec/block_helper.html.erb +3 -0
- data/spec/resources/views/view_spec/entry_form.html.erb +2 -0
- data/spec/resources/views/view_spec/explicit_helper.html.erb +2 -0
- data/spec/resources/views/view_spec/foo/show.html.erb +1 -0
- data/spec/resources/views/view_spec/implicit_helper.html.erb +2 -0
- data/spec/resources/views/view_spec/multiple_helpers.html.erb +3 -0
- data/spec/resources/views/view_spec/path_params.html.erb +1 -0
- data/spec/resources/views/view_spec/should_not_receive.html.erb +3 -0
- data/spec/resources/views/view_spec/template_with_partial.html.erb +5 -0
- data/spec/resources/views/view_spec/template_with_partial_using_collection.html.erb +3 -0
- data/spec/resources/views/view_spec/template_with_partial_with_array.html.erb +1 -0
- data/spec/spec/rails/example/assigns_hash_proxy_spec.rb +109 -0
- data/spec/spec/rails/example/configuration_spec.rb +65 -0
- data/spec/spec/rails/example/controller_example_group_spec.rb +299 -0
- data/spec/spec/rails/example/controller_isolation_spec.rb +56 -0
- data/spec/spec/rails/example/cookies_proxy_spec.rb +87 -0
- data/spec/spec/rails/example/error_handling_spec.rb +90 -0
- data/spec/spec/rails/example/example_group_factory_spec.rb +112 -0
- data/spec/spec/rails/example/helper_example_group_spec.rb +233 -0
- data/spec/spec/rails/example/model_example_group_spec.rb +20 -0
- data/spec/spec/rails/example/routing_example_group_spec.rb +9 -0
- data/spec/spec/rails/example/shared_routing_example_group_examples.rb +44 -0
- data/spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb +33 -0
- data/spec/spec/rails/example/view_example_group_spec.rb +335 -0
- data/spec/spec/rails/extensions/action_view_base_spec.rb +48 -0
- data/spec/spec/rails/extensions/active_record_spec.rb +14 -0
- data/spec/spec/rails/interop/testcase_spec.rb +70 -0
- data/spec/spec/rails/matchers/ar_be_valid_spec.rb +45 -0
- data/spec/spec/rails/matchers/assert_select_spec.rb +809 -0
- data/spec/spec/rails/matchers/errors_on_spec.rb +25 -0
- data/spec/spec/rails/matchers/have_text_spec.rb +70 -0
- data/spec/spec/rails/matchers/include_text_spec.rb +62 -0
- data/spec/spec/rails/matchers/redirect_to_spec.rb +253 -0
- data/spec/spec/rails/matchers/render_template_spec.rb +191 -0
- data/spec/spec/rails/matchers/should_change_spec.rb +15 -0
- data/spec/spec/rails/mocks/ar_classes.rb +10 -0
- data/spec/spec/rails/mocks/mock_model_spec.rb +106 -0
- data/spec/spec/rails/mocks/stub_model_spec.rb +80 -0
- data/spec/spec/rails/sample_modified_fixture.rb +8 -0
- data/spec/spec/rails/sample_spec.rb +8 -0
- data/spec/spec/rails/spec_server_spec.rb +107 -0
- data/spec/spec/rails/spec_spec.rb +11 -0
- data/spec/spec_helper.rb +79 -0
- metadata +277 -0
@@ -0,0 +1,150 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../rspec_default_values'
|
2
|
+
|
3
|
+
class RspecScaffoldGenerator < Rails::Generator::NamedBase
|
4
|
+
default_options :skip_migration => false
|
5
|
+
|
6
|
+
attr_reader :controller_name,
|
7
|
+
:controller_class_path,
|
8
|
+
:controller_file_path,
|
9
|
+
:controller_class_nesting,
|
10
|
+
:controller_class_nesting_depth,
|
11
|
+
:controller_class_name,
|
12
|
+
:controller_singular_name,
|
13
|
+
:controller_plural_name,
|
14
|
+
:resource_edit_path,
|
15
|
+
:default_file_extension
|
16
|
+
alias_method :controller_file_name, :controller_singular_name
|
17
|
+
alias_method :controller_table_name, :controller_plural_name
|
18
|
+
|
19
|
+
def initialize(runtime_args, runtime_options = {})
|
20
|
+
super
|
21
|
+
|
22
|
+
@controller_name = @name.pluralize
|
23
|
+
|
24
|
+
base_name, @controller_class_path, @controller_file_path, @controller_class_nesting, @controller_class_nesting_depth = extract_modules(@controller_name)
|
25
|
+
@controller_class_name_without_nesting, @controller_singular_name, @controller_plural_name = inflect_names(base_name)
|
26
|
+
|
27
|
+
if @controller_class_nesting.empty?
|
28
|
+
@controller_class_name = @controller_class_name_without_nesting
|
29
|
+
else
|
30
|
+
@controller_class_name = "#{@controller_class_nesting}::#{@controller_class_name_without_nesting}"
|
31
|
+
end
|
32
|
+
|
33
|
+
@default_file_extension = "html.erb"
|
34
|
+
end
|
35
|
+
|
36
|
+
def manifest
|
37
|
+
record do |m|
|
38
|
+
|
39
|
+
# Check for class naming collisions.
|
40
|
+
m.class_collisions(controller_class_path, "#{controller_class_name}Controller", "#{controller_class_name}Helper")
|
41
|
+
m.class_collisions(class_path, "#{class_name}")
|
42
|
+
|
43
|
+
# Controller, helper, views, and spec directories.
|
44
|
+
m.directory(File.join('app/models', class_path))
|
45
|
+
m.directory(File.join('app/controllers', controller_class_path))
|
46
|
+
m.directory(File.join('app/helpers', controller_class_path))
|
47
|
+
m.directory(File.join('app/views', controller_class_path, controller_file_name))
|
48
|
+
m.directory(File.join('app/views/layouts', controller_class_path))
|
49
|
+
m.directory(File.join('public/stylesheets', class_path))
|
50
|
+
|
51
|
+
m.directory(File.join('spec/controllers', controller_class_path))
|
52
|
+
m.directory(File.join('spec/routing', controller_class_path))
|
53
|
+
m.directory(File.join('spec/models', class_path))
|
54
|
+
m.directory(File.join('spec/helpers', class_path))
|
55
|
+
m.directory File.join('spec/fixtures', class_path)
|
56
|
+
m.directory File.join('spec/views', controller_class_path, controller_file_name)
|
57
|
+
|
58
|
+
# Layout and stylesheet.
|
59
|
+
m.template("scaffold:layout.html.erb", File.join('app/views/layouts', controller_class_path, "#{controller_file_name}.html.erb"))
|
60
|
+
m.template("scaffold:style.css", 'public/stylesheets/scaffold.css')
|
61
|
+
|
62
|
+
# Controller spec, class, and helper.
|
63
|
+
m.template 'rspec_scaffold:routing_spec.rb',
|
64
|
+
File.join('spec/routing', controller_class_path, "#{controller_file_name}_routing_spec.rb")
|
65
|
+
|
66
|
+
m.template 'rspec_scaffold:controller_spec.rb',
|
67
|
+
File.join('spec/controllers', controller_class_path, "#{controller_file_name}_controller_spec.rb")
|
68
|
+
|
69
|
+
m.template "scaffold:controller.rb",
|
70
|
+
File.join('app/controllers', controller_class_path, "#{controller_file_name}_controller.rb")
|
71
|
+
|
72
|
+
m.template 'rspec_scaffold:helper_spec.rb',
|
73
|
+
File.join('spec/helpers', class_path, "#{controller_file_name}_helper_spec.rb")
|
74
|
+
|
75
|
+
m.template "scaffold:helper.rb",
|
76
|
+
File.join('app/helpers', controller_class_path, "#{controller_file_name}_helper.rb")
|
77
|
+
|
78
|
+
for action in scaffold_views
|
79
|
+
m.template(
|
80
|
+
"scaffold:view_#{action}.#{@default_file_extension}",
|
81
|
+
File.join('app/views', controller_class_path, controller_file_name, "#{action}.#{default_file_extension}")
|
82
|
+
)
|
83
|
+
end
|
84
|
+
|
85
|
+
# Model class, unit test, and fixtures.
|
86
|
+
m.template 'model:model.rb', File.join('app/models', class_path, "#{file_name}.rb")
|
87
|
+
m.template 'model:fixtures.yml', File.join('spec/fixtures', class_path, "#{table_name}.yml")
|
88
|
+
m.template 'rspec_model:model_spec.rb', File.join('spec/models', class_path, "#{file_name}_spec.rb")
|
89
|
+
|
90
|
+
# View specs
|
91
|
+
m.template "rspec_scaffold:edit_erb_spec.rb",
|
92
|
+
File.join('spec/views', controller_class_path, controller_file_name, "edit.#{default_file_extension}_spec.rb")
|
93
|
+
m.template "rspec_scaffold:index_erb_spec.rb",
|
94
|
+
File.join('spec/views', controller_class_path, controller_file_name, "index.#{default_file_extension}_spec.rb")
|
95
|
+
m.template "rspec_scaffold:new_erb_spec.rb",
|
96
|
+
File.join('spec/views', controller_class_path, controller_file_name, "new.#{default_file_extension}_spec.rb")
|
97
|
+
m.template "rspec_scaffold:show_erb_spec.rb",
|
98
|
+
File.join('spec/views', controller_class_path, controller_file_name, "show.#{default_file_extension}_spec.rb")
|
99
|
+
|
100
|
+
unless options[:skip_migration]
|
101
|
+
m.migration_template(
|
102
|
+
'model:migration.rb', 'db/migrate',
|
103
|
+
:assigns => {
|
104
|
+
:migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}",
|
105
|
+
:attributes => attributes
|
106
|
+
},
|
107
|
+
:migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}"
|
108
|
+
)
|
109
|
+
end
|
110
|
+
|
111
|
+
m.route_resources controller_file_name
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
protected
|
117
|
+
# Override with your own usage banner.
|
118
|
+
def banner
|
119
|
+
"Usage: #{$0} rspec_scaffold ModelName [field:type field:type]"
|
120
|
+
end
|
121
|
+
|
122
|
+
def add_options!(opt)
|
123
|
+
opt.separator ''
|
124
|
+
opt.separator 'Options:'
|
125
|
+
opt.on("--skip-migration",
|
126
|
+
"Don't generate a migration file for this model") { |v| options[:skip_migration] = v }
|
127
|
+
end
|
128
|
+
|
129
|
+
def scaffold_views
|
130
|
+
%w[ index show new edit ]
|
131
|
+
end
|
132
|
+
|
133
|
+
def model_name
|
134
|
+
class_name.demodulize
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
module Rails
|
139
|
+
module Generator
|
140
|
+
class GeneratedAttribute
|
141
|
+
def input_type
|
142
|
+
@input_type ||= case type
|
143
|
+
when :text then "textarea"
|
144
|
+
else
|
145
|
+
"input"
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
|
2
|
+
|
3
|
+
describe <%= controller_class_name %>Controller do
|
4
|
+
|
5
|
+
def mock_<%= file_name %>(stubs={})
|
6
|
+
@mock_<%= file_name %> ||= mock_model(<%= class_name %>, stubs)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "GET index" do
|
10
|
+
|
11
|
+
it "exposes all <%= table_name.pluralize %> as @<%= table_name.pluralize %>" do
|
12
|
+
<%= class_name %>.should_receive(:find).with(:all).and_return([mock_<%= file_name %>])
|
13
|
+
get :index
|
14
|
+
assigns[:<%= table_name %>].should == [mock_<%= file_name %>]
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "with mime type of xml" do
|
18
|
+
|
19
|
+
it "renders all <%= table_name.pluralize %> as xml" do
|
20
|
+
<%= class_name %>.should_receive(:find).with(:all).and_return(<%= file_name.pluralize %> = mock("Array of <%= class_name.pluralize %>"))
|
21
|
+
<%= file_name.pluralize %>.should_receive(:to_xml).and_return("generated XML")
|
22
|
+
get :index, :format => 'xml'
|
23
|
+
response.body.should == "generated XML"
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "GET show" do
|
31
|
+
|
32
|
+
it "exposes the requested <%= file_name %> as @<%= file_name %>" do
|
33
|
+
<%= class_name %>.should_receive(:find).with("37").and_return(mock_<%= file_name %>)
|
34
|
+
get :show, :id => "37"
|
35
|
+
assigns[:<%= file_name %>].should equal(mock_<%= file_name %>)
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "with mime type of xml" do
|
39
|
+
|
40
|
+
it "renders the requested <%= file_name %> as xml" do
|
41
|
+
<%= class_name %>.should_receive(:find).with("37").and_return(mock_<%= file_name %>)
|
42
|
+
mock_<%= file_name %>.should_receive(:to_xml).and_return("generated XML")
|
43
|
+
get :show, :id => "37", :format => 'xml'
|
44
|
+
response.body.should == "generated XML"
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "GET new" do
|
52
|
+
|
53
|
+
it "exposes a new <%= file_name %> as @<%= file_name %>" do
|
54
|
+
<%= class_name %>.should_receive(:new).and_return(mock_<%= file_name %>)
|
55
|
+
get :new
|
56
|
+
assigns[:<%= file_name %>].should equal(mock_<%= file_name %>)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "GET edit" do
|
62
|
+
|
63
|
+
it "exposes the requested <%= file_name %> as @<%= file_name %>" do
|
64
|
+
<%= class_name %>.should_receive(:find).with("37").and_return(mock_<%= file_name %>)
|
65
|
+
get :edit, :id => "37"
|
66
|
+
assigns[:<%= file_name %>].should equal(mock_<%= file_name %>)
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "POST create" do
|
72
|
+
|
73
|
+
describe "with valid params" do
|
74
|
+
|
75
|
+
it "exposes a newly created <%= file_name %> as @<%= file_name %>" do
|
76
|
+
<%= class_name %>.should_receive(:new).with({'these' => 'params'}).and_return(mock_<%= file_name %>(:save => true))
|
77
|
+
post :create, :<%= file_name %> => {:these => 'params'}
|
78
|
+
assigns(:<%= file_name %>).should equal(mock_<%= file_name %>)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "redirects to the created <%= file_name %>" do
|
82
|
+
<%= class_name %>.stub!(:new).and_return(mock_<%= file_name %>(:save => true))
|
83
|
+
post :create, :<%= file_name %> => {}
|
84
|
+
response.should redirect_to(<%= table_name.singularize %>_url(mock_<%= file_name %>))
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "with invalid params" do
|
90
|
+
|
91
|
+
it "exposes a newly created but unsaved <%= file_name %> as @<%= file_name %>" do
|
92
|
+
<%= class_name %>.stub!(:new).with({'these' => 'params'}).and_return(mock_<%= file_name %>(:save => false))
|
93
|
+
post :create, :<%= file_name %> => {:these => 'params'}
|
94
|
+
assigns(:<%= file_name %>).should equal(mock_<%= file_name %>)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "re-renders the 'new' template" do
|
98
|
+
<%= class_name %>.stub!(:new).and_return(mock_<%= file_name %>(:save => false))
|
99
|
+
post :create, :<%= file_name %> => {}
|
100
|
+
response.should render_template('new')
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "PUT udpate" do
|
108
|
+
|
109
|
+
describe "with valid params" do
|
110
|
+
|
111
|
+
it "updates the requested <%= file_name %>" do
|
112
|
+
<%= class_name %>.should_receive(:find).with("37").and_return(mock_<%= file_name %>)
|
113
|
+
mock_<%= file_name %>.should_receive(:update_attributes).with({'these' => 'params'})
|
114
|
+
put :update, :id => "37", :<%= file_name %> => {:these => 'params'}
|
115
|
+
end
|
116
|
+
|
117
|
+
it "exposes the requested <%= file_name %> as @<%= file_name %>" do
|
118
|
+
<%= class_name %>.stub!(:find).and_return(mock_<%= file_name %>(:update_attributes => true))
|
119
|
+
put :update, :id => "1"
|
120
|
+
assigns(:<%= file_name %>).should equal(mock_<%= file_name %>)
|
121
|
+
end
|
122
|
+
|
123
|
+
it "redirects to the <%= file_name %>" do
|
124
|
+
<%= class_name %>.stub!(:find).and_return(mock_<%= file_name %>(:update_attributes => true))
|
125
|
+
put :update, :id => "1"
|
126
|
+
response.should redirect_to(<%= table_name.singularize %>_url(mock_<%= file_name %>))
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
describe "with invalid params" do
|
132
|
+
|
133
|
+
it "updates the requested <%= file_name %>" do
|
134
|
+
<%= class_name %>.should_receive(:find).with("37").and_return(mock_<%= file_name %>)
|
135
|
+
mock_<%= file_name %>.should_receive(:update_attributes).with({'these' => 'params'})
|
136
|
+
put :update, :id => "37", :<%= file_name %> => {:these => 'params'}
|
137
|
+
end
|
138
|
+
|
139
|
+
it "exposes the <%= file_name %> as @<%= file_name %>" do
|
140
|
+
<%= class_name %>.stub!(:find).and_return(mock_<%= file_name %>(:update_attributes => false))
|
141
|
+
put :update, :id => "1"
|
142
|
+
assigns(:<%= file_name %>).should equal(mock_<%= file_name %>)
|
143
|
+
end
|
144
|
+
|
145
|
+
it "re-renders the 'edit' template" do
|
146
|
+
<%= class_name %>.stub!(:find).and_return(mock_<%= file_name %>(:update_attributes => false))
|
147
|
+
put :update, :id => "1"
|
148
|
+
response.should render_template('edit')
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
describe "DELETE destroy" do
|
156
|
+
|
157
|
+
it "destroys the requested <%= file_name %>" do
|
158
|
+
<%= class_name %>.should_receive(:find).with("37").and_return(mock_<%= file_name %>)
|
159
|
+
mock_<%= file_name %>.should_receive(:destroy)
|
160
|
+
delete :destroy, :id => "37"
|
161
|
+
end
|
162
|
+
|
163
|
+
it "redirects to the <%= table_name %> list" do
|
164
|
+
<%= class_name %>.stub!(:find).and_return(mock_<%= file_name %>(:destroy => true))
|
165
|
+
delete :destroy, :id => "1"
|
166
|
+
response.should redirect_to(<%= table_name %>_url)
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_helper')
|
2
|
+
|
3
|
+
<% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
|
4
|
+
describe "/<%= table_name %>/edit.<%= default_file_extension %>" do
|
5
|
+
include <%= controller_class_name %>Helper
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
assigns[:<%= file_name %>] = @<%= file_name %> = stub_model(<%= class_name %>,
|
9
|
+
:new_record? => false<%= output_attributes.empty? ? '' : ',' %>
|
10
|
+
<% output_attributes.each_with_index do |attribute, attribute_index| -%>
|
11
|
+
:<%= attribute.name %> => <%= attribute.default_value %><%= attribute_index == output_attributes.length - 1 ? '' : ','%>
|
12
|
+
<% end -%>
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "renders the edit <%= file_name %> form" do
|
17
|
+
render
|
18
|
+
|
19
|
+
response.should have_tag("form[action=#{<%= file_name %>_path(@<%= file_name %>)}][method=post]") do
|
20
|
+
<% for attribute in output_attributes -%>
|
21
|
+
with_tag('<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>[name=?]', "<%= file_name %>[<%= attribute.name %>]")
|
22
|
+
<% end -%>
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
|
2
|
+
|
3
|
+
describe <%= controller_class_name %>Helper do
|
4
|
+
|
5
|
+
#Delete this example and add some real ones or delete this file
|
6
|
+
it "is included in the helper object" do
|
7
|
+
included_modules = (class << helper; self; end).send :included_modules
|
8
|
+
included_modules.should include(<%= controller_class_name %>Helper)
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_helper')
|
2
|
+
|
3
|
+
<% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
|
4
|
+
describe "/<%= table_name %>/index.<%= default_file_extension %>" do
|
5
|
+
include <%= controller_class_name %>Helper
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
assigns[:<%= table_name %>] = [
|
9
|
+
<% [1,2].each_with_index do |id, model_index| -%>
|
10
|
+
stub_model(<%= class_name %><%= output_attributes.empty? ? (model_index == 1 ? ')' : '),') : ',' %>
|
11
|
+
<% output_attributes.each_with_index do |attribute, attribute_index| -%>
|
12
|
+
:<%= attribute.name %> => <%= attribute.default_value %><%= attribute_index == output_attributes.length - 1 ? '' : ','%>
|
13
|
+
<% end -%>
|
14
|
+
<% if !output_attributes.empty? -%>
|
15
|
+
<%= model_index == 1 ? ')' : '),' %>
|
16
|
+
<% end -%>
|
17
|
+
<% end -%>
|
18
|
+
]
|
19
|
+
end
|
20
|
+
|
21
|
+
it "renders a list of <%= table_name %>" do
|
22
|
+
render
|
23
|
+
<% for attribute in output_attributes -%>
|
24
|
+
response.should have_tag("tr>td", <%= attribute.default_value %>.to_s, 2)
|
25
|
+
<% end -%>
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_helper')
|
2
|
+
|
3
|
+
<% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
|
4
|
+
describe "/<%= table_name %>/new.<%= default_file_extension %>" do
|
5
|
+
include <%= controller_class_name %>Helper
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
assigns[:<%= file_name %>] = stub_model(<%= class_name %>,
|
9
|
+
:new_record? => true<%= output_attributes.empty? ? '' : ',' %>
|
10
|
+
<% output_attributes.each_with_index do |attribute, attribute_index| -%>
|
11
|
+
:<%= attribute.name %> => <%= attribute.default_value %><%= attribute_index == output_attributes.length - 1 ? '' : ','%>
|
12
|
+
<% end -%>
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "renders new <%= file_name %> form" do
|
17
|
+
render
|
18
|
+
|
19
|
+
response.should have_tag("form[action=?][method=post]", <%= table_name %>_path) do
|
20
|
+
<% for attribute in output_attributes -%>
|
21
|
+
with_tag("<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>[name=?]", "<%= file_name %>[<%= attribute.name %>]")
|
22
|
+
<% end -%>
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
|
2
|
+
|
3
|
+
describe <%= controller_class_name %>Controller do
|
4
|
+
describe "route generation" do
|
5
|
+
it "maps #index" do
|
6
|
+
route_for(:controller => "<%= table_name %>", :action => "index").should == "/<%= table_name %>"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "maps #new" do
|
10
|
+
route_for(:controller => "<%= table_name %>", :action => "new").should == "/<%= table_name %>/new"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "maps #show" do
|
14
|
+
route_for(:controller => "<%= table_name %>", :action => "show", :id => "1").should == "/<%= table_name %>/1"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "maps #edit" do
|
18
|
+
route_for(:controller => "<%= table_name %>", :action => "edit", :id => "1").should == "/<%= table_name %>/1/edit"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "maps #create" do
|
22
|
+
route_for(:controller => "<%= table_name %>", :action => "create").should == {:path => "/<%= table_name %>", :method => :post}
|
23
|
+
end
|
24
|
+
|
25
|
+
it "maps #update" do
|
26
|
+
route_for(:controller => "<%= table_name %>", :action => "update", :id => "1").should == {:path =>"/<%= table_name %>/1", :method => :put}
|
27
|
+
end
|
28
|
+
|
29
|
+
it "maps #destroy" do
|
30
|
+
route_for(:controller => "<%= table_name %>", :action => "destroy", :id => "1").should == {:path =>"/<%= table_name %>/1", :method => :delete}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "route recognition" do
|
35
|
+
it "generates params for #index" do
|
36
|
+
params_from(:get, "/<%= table_name %>").should == {:controller => "<%= table_name %>", :action => "index"}
|
37
|
+
end
|
38
|
+
|
39
|
+
it "generates params for #new" do
|
40
|
+
params_from(:get, "/<%= table_name %>/new").should == {:controller => "<%= table_name %>", :action => "new"}
|
41
|
+
end
|
42
|
+
|
43
|
+
it "generates params for #create" do
|
44
|
+
params_from(:post, "/<%= table_name %>").should == {:controller => "<%= table_name %>", :action => "create"}
|
45
|
+
end
|
46
|
+
|
47
|
+
it "generates params for #show" do
|
48
|
+
params_from(:get, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "show", :id => "1"}
|
49
|
+
end
|
50
|
+
|
51
|
+
it "generates params for #edit" do
|
52
|
+
params_from(:get, "/<%= table_name %>/1/edit").should == {:controller => "<%= table_name %>", :action => "edit", :id => "1"}
|
53
|
+
end
|
54
|
+
|
55
|
+
it "generates params for #update" do
|
56
|
+
params_from(:put, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "update", :id => "1"}
|
57
|
+
end
|
58
|
+
|
59
|
+
it "generates params for #destroy" do
|
60
|
+
params_from(:delete, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "destroy", :id => "1"}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_helper')
|
2
|
+
|
3
|
+
<% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
|
4
|
+
describe "/<%= table_name %>/show.<%= default_file_extension %>" do
|
5
|
+
include <%= controller_class_name %>Helper
|
6
|
+
before(:each) do
|
7
|
+
assigns[:<%= file_name %>] = @<%= file_name %> = stub_model(<%= class_name %><%= output_attributes.empty? ? ')' : ',' %>
|
8
|
+
<% output_attributes.each_with_index do |attribute, attribute_index| -%>
|
9
|
+
:<%= attribute.name %> => <%= attribute.default_value %><%= attribute_index == output_attributes.length - 1 ? '' : ','%>
|
10
|
+
<% end -%>
|
11
|
+
<% if !output_attributes.empty? -%>
|
12
|
+
)
|
13
|
+
<% end -%>
|
14
|
+
end
|
15
|
+
|
16
|
+
it "renders attributes in <p>" do
|
17
|
+
render
|
18
|
+
<% for attribute in output_attributes -%>
|
19
|
+
response.should have_text(/<%= Regexp.escape(attribute.default_value).gsub(/^"|"$/, '')%>/)
|
20
|
+
<% end -%>
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
data/init.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# Placeholder to satisfy Rails.
|
2
|
+
#
|
3
|
+
# Do NOT add any require statements to this file. Doing
|
4
|
+
# so will cause Rails to load this plugin all of the time.
|
5
|
+
#
|
6
|
+
# Running 'ruby script/generate rspec' will
|
7
|
+
# generate spec/spec_helper.rb, which includes the necessary
|
8
|
+
# require statements and configuration. This file should
|
9
|
+
# be required by all of your spec files.
|
@@ -0,0 +1 @@
|
|
1
|
+
# This needs to be here for >= ZenTest-3.9.0 to add this directory to the load path.
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# (c) Copyright 2006 Nick Sieger <nicksieger@gmail.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person
|
4
|
+
# obtaining a copy of this software and associated documentation files
|
5
|
+
# (the "Software"), to deal in the Software without restriction,
|
6
|
+
# including without limitation the rights to use, copy, modify, merge,
|
7
|
+
# publish, distribute, sublicense, and/or sell copies of the Software,
|
8
|
+
# and to permit persons to whom the Software is furnished to do so,
|
9
|
+
# subject to the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
18
|
+
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
19
|
+
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
# SOFTWARE.
|
22
|
+
|
23
|
+
$:.push(*Dir["vendor/rails/*/lib"])
|
24
|
+
|
25
|
+
require 'active_support'
|
26
|
+
require 'autotest/rspec'
|
27
|
+
|
28
|
+
Autotest.add_hook :initialize do |at|
|
29
|
+
%w{config/ coverage/ db/ doc/ log/ public/ script/ tmp/ vendor/rails vendor/plugins previous_failures.txt}.each do |exception|
|
30
|
+
at.add_exception(exception)
|
31
|
+
end
|
32
|
+
|
33
|
+
at.clear_mappings
|
34
|
+
|
35
|
+
at.add_mapping(%r%^(test|spec)/fixtures/(.*).yml$%) { |_, m|
|
36
|
+
["spec/models/#{m[2].singularize}_spec.rb"] + at.files_matching(%r%^spec\/views\/#{m[2]}/.*_spec\.rb$%)
|
37
|
+
}
|
38
|
+
at.add_mapping(%r%^spec/(models|controllers|routing|views|helpers|lib)/.*rb$%) { |filename, _|
|
39
|
+
filename
|
40
|
+
}
|
41
|
+
at.add_mapping(%r%^app/models/(.*)\.rb$%) { |_, m|
|
42
|
+
["spec/models/#{m[1]}_spec.rb"]
|
43
|
+
}
|
44
|
+
at.add_mapping(%r%^app/views/(.*)$%) { |_, m|
|
45
|
+
at.files_matching %r%^spec/views/#{m[1]}_spec.rb$%
|
46
|
+
}
|
47
|
+
at.add_mapping(%r%^app/controllers/(.*)\.rb$%) { |_, m|
|
48
|
+
if m[1] == "application"
|
49
|
+
at.files_matching %r%^spec/controllers/.*_spec\.rb$%
|
50
|
+
else
|
51
|
+
["spec/controllers/#{m[1]}_spec.rb"]
|
52
|
+
end
|
53
|
+
}
|
54
|
+
at.add_mapping(%r%^app/helpers/(.*)_helper\.rb$%) { |_, m|
|
55
|
+
if m[1] == "application" then
|
56
|
+
at.files_matching(%r%^spec/(views|helpers)/.*_spec\.rb$%)
|
57
|
+
else
|
58
|
+
["spec/helpers/#{m[1]}_helper_spec.rb"] + at.files_matching(%r%^spec\/views\/#{m[1]}/.*_spec\.rb$%)
|
59
|
+
end
|
60
|
+
}
|
61
|
+
at.add_mapping(%r%^config/routes\.rb$%) {
|
62
|
+
at.files_matching %r%^spec/(controllers|routing|views|helpers)/.*_spec\.rb$%
|
63
|
+
}
|
64
|
+
at.add_mapping(%r%^config/database\.yml$%) { |_, m|
|
65
|
+
at.files_matching %r%^spec/models/.*_spec\.rb$%
|
66
|
+
}
|
67
|
+
at.add_mapping(%r%^(spec/(spec_helper|shared/.*)|config/(boot|environment(s/test)?))\.rb$%) {
|
68
|
+
at.files_matching %r%^spec/(models|controllers|routing|views|helpers)/.*_spec\.rb$%
|
69
|
+
}
|
70
|
+
at.add_mapping(%r%^lib/(.*)\.rb$%) { |_, m|
|
71
|
+
["spec/lib/#{m[1]}_spec.rb"]
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
class Autotest::RailsRspec < Autotest::Rspec
|
76
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Spec
|
2
|
+
module Rails
|
3
|
+
module Example
|
4
|
+
class AssignsHashProxy #:nodoc:
|
5
|
+
def initialize(example_group, &block)
|
6
|
+
@target = block.call
|
7
|
+
@example_group = example_group
|
8
|
+
end
|
9
|
+
|
10
|
+
def [](key)
|
11
|
+
return false if false == assigns[key] || false == assigns[key.to_s]
|
12
|
+
assigns[key] || assigns[key.to_s] || @target.instance_variable_get("@#{key}")
|
13
|
+
end
|
14
|
+
|
15
|
+
def []=(key, val)
|
16
|
+
@target.instance_variable_set("@#{key}", val)
|
17
|
+
end
|
18
|
+
|
19
|
+
def delete(key)
|
20
|
+
assigns.delete(key.to_s)
|
21
|
+
@target.instance_variable_set("@#{key}", nil)
|
22
|
+
end
|
23
|
+
|
24
|
+
def each(&block)
|
25
|
+
assigns.each &block
|
26
|
+
end
|
27
|
+
|
28
|
+
def has_key?(key)
|
29
|
+
assigns.key?(key.to_s)
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
def assigns
|
34
|
+
@example_group.orig_assigns
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|