jcnetdev-shoulda 4.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CONTRIBUTION_GUIDELINES.rdoc +12 -0
- data/MIT-LICENSE +22 -0
- data/README.rdoc +123 -0
- data/Rakefile +32 -0
- data/bin/convert_to_should_syntax +40 -0
- data/init.rb +1 -0
- data/lib/shoulda.rb +43 -0
- data/lib/shoulda/active_record_helpers.rb +670 -0
- data/lib/shoulda/color.rb +77 -0
- data/lib/shoulda/controller_tests/controller_tests.rb +467 -0
- data/lib/shoulda/controller_tests/formats/html.rb +201 -0
- data/lib/shoulda/controller_tests/formats/xml.rb +170 -0
- data/lib/shoulda/gem/proc_extensions.rb +14 -0
- data/lib/shoulda/gem/shoulda.rb +246 -0
- data/lib/shoulda/general.rb +118 -0
- data/lib/shoulda/private_helpers.rb +22 -0
- data/rails/init.rb +1 -0
- data/shoulda.gemspec +109 -0
- data/tasks/list_tests.rake +23 -0
- data/tasks/yaml_to_shoulda.rake +28 -0
- data/test/README +36 -0
- data/test/fixtures/addresses.yml +3 -0
- data/test/fixtures/posts.yml +5 -0
- data/test/fixtures/taggings.yml +0 -0
- data/test/fixtures/tags.yml +9 -0
- data/test/fixtures/users.yml +6 -0
- data/test/functional/posts_controller_test.rb +43 -0
- data/test/functional/users_controller_test.rb +36 -0
- data/test/other/context_test.rb +115 -0
- data/test/other/helpers_test.rb +80 -0
- data/test/other/private_helpers_test.rb +26 -0
- data/test/rails_root/app/controllers/application.rb +25 -0
- data/test/rails_root/app/controllers/posts_controller.rb +78 -0
- data/test/rails_root/app/controllers/users_controller.rb +81 -0
- data/test/rails_root/app/helpers/application_helper.rb +3 -0
- data/test/rails_root/app/helpers/posts_helper.rb +2 -0
- data/test/rails_root/app/helpers/users_helper.rb +2 -0
- data/test/rails_root/app/models/address.rb +4 -0
- data/test/rails_root/app/models/dog.rb +4 -0
- data/test/rails_root/app/models/flea.rb +3 -0
- data/test/rails_root/app/models/post.rb +11 -0
- data/test/rails_root/app/models/tag.rb +8 -0
- data/test/rails_root/app/models/tagging.rb +4 -0
- data/test/rails_root/app/models/user.rb +17 -0
- data/test/rails_root/app/views/layouts/posts.rhtml +17 -0
- data/test/rails_root/app/views/layouts/users.rhtml +17 -0
- data/test/rails_root/app/views/posts/edit.rhtml +27 -0
- data/test/rails_root/app/views/posts/index.rhtml +25 -0
- data/test/rails_root/app/views/posts/new.rhtml +26 -0
- data/test/rails_root/app/views/posts/show.rhtml +18 -0
- data/test/rails_root/app/views/users/edit.rhtml +22 -0
- data/test/rails_root/app/views/users/index.rhtml +22 -0
- data/test/rails_root/app/views/users/new.rhtml +21 -0
- data/test/rails_root/app/views/users/show.rhtml +13 -0
- data/test/rails_root/config/boot.rb +109 -0
- data/test/rails_root/config/database.yml +4 -0
- data/test/rails_root/config/environment.rb +18 -0
- data/test/rails_root/config/environments/sqlite3.rb +0 -0
- data/test/rails_root/config/initializers/new_rails_defaults.rb +15 -0
- data/test/rails_root/config/routes.rb +6 -0
- data/test/rails_root/db/migrate/001_create_users.rb +17 -0
- data/test/rails_root/db/migrate/002_create_posts.rb +13 -0
- data/test/rails_root/db/migrate/003_create_taggings.rb +12 -0
- data/test/rails_root/db/migrate/004_create_tags.rb +11 -0
- data/test/rails_root/db/migrate/005_create_dogs.rb +11 -0
- data/test/rails_root/db/migrate/006_create_addresses.rb +13 -0
- data/test/rails_root/db/migrate/007_create_fleas.rb +11 -0
- data/test/rails_root/db/migrate/008_create_dogs_fleas.rb +12 -0
- data/test/rails_root/db/migrate/009_add_ssn_to_users.rb +9 -0
- data/test/rails_root/db/schema.rb +0 -0
- data/test/rails_root/log/.keep +0 -0
- data/test/rails_root/public/.htaccess +40 -0
- data/test/rails_root/public/404.html +30 -0
- data/test/rails_root/public/422.html +30 -0
- data/test/rails_root/public/500.html +30 -0
- data/test/rails_root/script/console +3 -0
- data/test/rails_root/script/generate +3 -0
- data/test/rails_root/vendor/plugins/.keep +0 -0
- data/test/test_helper.rb +35 -0
- data/test/unit/address_test.rb +7 -0
- data/test/unit/dog_test.rb +7 -0
- data/test/unit/flea_test.rb +7 -0
- data/test/unit/post_test.rb +14 -0
- data/test/unit/tag_test.rb +12 -0
- data/test/unit/tagging_test.rb +8 -0
- data/test/unit/user_test.rb +32 -0
- metadata +148 -0
@@ -0,0 +1,118 @@
|
|
1
|
+
module ThoughtBot # :nodoc:
|
2
|
+
module Shoulda # :nodoc:
|
3
|
+
module General
|
4
|
+
def self.included(other) # :nodoc:
|
5
|
+
other.class_eval do
|
6
|
+
extend ThoughtBot::Shoulda::General::ClassMethods
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
# Loads all fixture files (<tt>test/fixtures/*.yml</tt>)
|
12
|
+
def load_all_fixtures
|
13
|
+
all_fixtures = Dir.glob(File.join(Test::Unit::TestCase.fixture_path, "*.yml")).collect do |f|
|
14
|
+
File.basename(f, '.yml').to_sym
|
15
|
+
end
|
16
|
+
fixtures *all_fixtures
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Prints a message to stdout, tagged with the name of the calling method.
|
21
|
+
def report!(msg = "")
|
22
|
+
puts("#{caller.first}: #{msg}")
|
23
|
+
end
|
24
|
+
|
25
|
+
# Asserts that two arrays contain the same elements, the same number of times. Essentially ==, but unordered.
|
26
|
+
#
|
27
|
+
# assert_same_elements([:a, :b, :c], [:c, :a, :b]) => passes
|
28
|
+
def assert_same_elements(a1, a2, msg = nil)
|
29
|
+
[:select, :inject, :size].each do |m|
|
30
|
+
[a1, a2].each {|a| assert_respond_to(a, m, "Are you sure that #{a.inspect} is an array? It doesn't respond to #{m}.") }
|
31
|
+
end
|
32
|
+
|
33
|
+
assert a1h = a1.inject({}) { |h,e| h[e] = a1.select { |i| i == e }.size; h }
|
34
|
+
assert a2h = a2.inject({}) { |h,e| h[e] = a2.select { |i| i == e }.size; h }
|
35
|
+
|
36
|
+
assert_equal(a1h, a2h, msg)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Asserts that the given collection contains item x. If x is a regular expression, ensure that
|
40
|
+
# at least one element from the collection matches x. +extra_msg+ is appended to the error message if the assertion fails.
|
41
|
+
#
|
42
|
+
# assert_contains(['a', '1'], /\d/) => passes
|
43
|
+
# assert_contains(['a', '1'], 'a') => passes
|
44
|
+
# assert_contains(['a', '1'], /not there/) => fails
|
45
|
+
def assert_contains(collection, x, extra_msg = "")
|
46
|
+
collection = [collection] unless collection.is_a?(Array)
|
47
|
+
msg = "#{x.inspect} not found in #{collection.to_a.inspect} #{extra_msg}"
|
48
|
+
case x
|
49
|
+
when Regexp: assert(collection.detect { |e| e =~ x }, msg)
|
50
|
+
else assert(collection.include?(x), msg)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Asserts that the given collection does not contain item x. If x is a regular expression, ensure that
|
55
|
+
# none of the elements from the collection match x.
|
56
|
+
def assert_does_not_contain(collection, x, extra_msg = "")
|
57
|
+
collection = [collection] unless collection.is_a?(Array)
|
58
|
+
msg = "#{x.inspect} found in #{collection.to_a.inspect} " + extra_msg
|
59
|
+
case x
|
60
|
+
when Regexp: assert(!collection.detect { |e| e =~ x }, msg)
|
61
|
+
else assert(!collection.include?(x), msg)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Asserts that the given object can be saved
|
66
|
+
#
|
67
|
+
# assert_save User.new(params)
|
68
|
+
def assert_save(obj)
|
69
|
+
assert obj.save, "Errors: #{pretty_error_messages obj}"
|
70
|
+
obj.reload
|
71
|
+
end
|
72
|
+
|
73
|
+
# Asserts that the given object is valid
|
74
|
+
#
|
75
|
+
# assert_valid User.new(params)
|
76
|
+
def assert_valid(obj)
|
77
|
+
assert obj.valid?, "Errors: #{pretty_error_messages obj}"
|
78
|
+
end
|
79
|
+
|
80
|
+
# Asserts that an email was delivered. Can take a block that can further
|
81
|
+
# narrow down the types of emails you're expecting.
|
82
|
+
#
|
83
|
+
# assert_sent_email
|
84
|
+
#
|
85
|
+
# Passes if ActionMailer::Base.deliveries has an email
|
86
|
+
#
|
87
|
+
# assert_sent_email do |email|
|
88
|
+
# email.subject =~ /hi there/ && email.to.include?('none@none.com')
|
89
|
+
# end
|
90
|
+
#
|
91
|
+
# Passes if there is an email with subject containing 'hi there' and
|
92
|
+
# 'none@none.com' as one of the recipients.
|
93
|
+
#
|
94
|
+
def assert_sent_email
|
95
|
+
emails = ActionMailer::Base.deliveries
|
96
|
+
assert !emails.empty?, "No emails were sent"
|
97
|
+
if block_given?
|
98
|
+
matching_emails = emails.select {|email| yield email }
|
99
|
+
assert !matching_emails.empty?, "None of the emails matched."
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# Asserts that no ActionMailer mails were delivered
|
104
|
+
#
|
105
|
+
# assert_did_not_send_email
|
106
|
+
def assert_did_not_send_email
|
107
|
+
msg = "Sent #{ActionMailer::Base.deliveries.size} emails.\n"
|
108
|
+
ActionMailer::Base.deliveries.each { |m| msg << " '#{m.subject}' sent to #{m.to.to_sentence}\n" }
|
109
|
+
assert ActionMailer::Base.deliveries.empty?, msg
|
110
|
+
end
|
111
|
+
|
112
|
+
def pretty_error_messages(obj)
|
113
|
+
obj.errors.map { |a, m| "#{a} #{m} (#{obj.send(a).inspect})" }
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module ThoughtBot # :nodoc:
|
2
|
+
module Shoulda # :nodoc:
|
3
|
+
module Private # :nodoc:
|
4
|
+
# Returns the values for the entries in the args hash who's keys are listed in the wanted array.
|
5
|
+
# Will raise if there are keys in the args hash that aren't listed.
|
6
|
+
def get_options!(args, *wanted)
|
7
|
+
ret = []
|
8
|
+
opts = (args.last.is_a?(Hash) ? args.pop : {})
|
9
|
+
wanted.each {|w| ret << opts.delete(w)}
|
10
|
+
raise ArgumentError, "Unsupported options given: #{opts.keys.join(', ')}" unless opts.keys.empty?
|
11
|
+
return *ret
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns the model class constant, as determined by the test class name.
|
15
|
+
#
|
16
|
+
# class TestUser; model_class; end => User
|
17
|
+
def model_class
|
18
|
+
self.name.gsub(/Test$/, '').constantize
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/rails/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'shoulda'
|
data/shoulda.gemspec
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'shoulda'
|
3
|
+
s.version = '4.2'
|
4
|
+
s.date = '2008-07-04'
|
5
|
+
|
6
|
+
s.summary = "Makes tests easy on the fingers and the eyes"
|
7
|
+
s.description = "Shoulda consists of test macros, assertions, and helpers added on to the Test::Unit framework"
|
8
|
+
|
9
|
+
s.authors = ['Tammer Saleh']
|
10
|
+
s.email = 'tsaleh@thoughtbot.com'
|
11
|
+
s.homepage = 'http://github.com/thoughtbot/shoulda'
|
12
|
+
|
13
|
+
s.has_rdoc = true
|
14
|
+
s.rdoc_options = ["--main", "README.rdoc"]
|
15
|
+
s.extra_rdoc_files = ["README.rdoc"]
|
16
|
+
|
17
|
+
s.add_dependency 'rails', ['>= 2.1']
|
18
|
+
|
19
|
+
s.files = ["CONTRIBUTION_GUIDELINES.rdoc",
|
20
|
+
"MIT-LICENSE",
|
21
|
+
"README.rdoc",
|
22
|
+
"Rakefile",
|
23
|
+
"bin/convert_to_should_syntax",
|
24
|
+
"init.rb",
|
25
|
+
"lib/shoulda/active_record_helpers.rb",
|
26
|
+
"lib/shoulda/color.rb",
|
27
|
+
"lib/shoulda/controller_tests",
|
28
|
+
"lib/shoulda/controller_tests/controller_tests.rb",
|
29
|
+
"lib/shoulda/controller_tests/formats",
|
30
|
+
"lib/shoulda/controller_tests/formats/html.rb",
|
31
|
+
"lib/shoulda/controller_tests/formats/xml.rb",
|
32
|
+
"lib/shoulda/gem/proc_extensions.rb",
|
33
|
+
"lib/shoulda/gem/shoulda.rb",
|
34
|
+
"lib/shoulda/general.rb",
|
35
|
+
"lib/shoulda/private_helpers.rb",
|
36
|
+
"lib/shoulda.rb",
|
37
|
+
"rails/init.rb",
|
38
|
+
"shoulda.gemspec",
|
39
|
+
"tasks/list_tests.rake",
|
40
|
+
"tasks/yaml_to_shoulda.rake"]
|
41
|
+
|
42
|
+
s.test_files = ["test/fixtures/addresses.yml",
|
43
|
+
"test/fixtures/posts.yml",
|
44
|
+
"test/fixtures/taggings.yml",
|
45
|
+
"test/fixtures/tags.yml",
|
46
|
+
"test/fixtures/users.yml",
|
47
|
+
"test/functional/posts_controller_test.rb",
|
48
|
+
"test/functional/users_controller_test.rb",
|
49
|
+
"test/other/context_test.rb",
|
50
|
+
"test/other/helpers_test.rb",
|
51
|
+
"test/other/private_helpers_test.rb",
|
52
|
+
"test/rails_root/app/controllers/application.rb",
|
53
|
+
"test/rails_root/app/controllers/posts_controller.rb",
|
54
|
+
"test/rails_root/app/controllers/users_controller.rb",
|
55
|
+
"test/rails_root/app/helpers/application_helper.rb",
|
56
|
+
"test/rails_root/app/helpers/posts_helper.rb",
|
57
|
+
"test/rails_root/app/helpers/users_helper.rb",
|
58
|
+
"test/rails_root/app/models/address.rb",
|
59
|
+
"test/rails_root/app/models/dog.rb",
|
60
|
+
"test/rails_root/app/models/flea.rb",
|
61
|
+
"test/rails_root/app/models/post.rb",
|
62
|
+
"test/rails_root/app/models/tag.rb",
|
63
|
+
"test/rails_root/app/models/tagging.rb",
|
64
|
+
"test/rails_root/app/models/user.rb",
|
65
|
+
"test/rails_root/app/views/layouts/posts.rhtml",
|
66
|
+
"test/rails_root/app/views/layouts/users.rhtml",
|
67
|
+
"test/rails_root/app/views/posts/edit.rhtml",
|
68
|
+
"test/rails_root/app/views/posts/index.rhtml",
|
69
|
+
"test/rails_root/app/views/posts/new.rhtml",
|
70
|
+
"test/rails_root/app/views/posts/show.rhtml",
|
71
|
+
"test/rails_root/app/views/users/edit.rhtml",
|
72
|
+
"test/rails_root/app/views/users/index.rhtml",
|
73
|
+
"test/rails_root/app/views/users/new.rhtml",
|
74
|
+
"test/rails_root/app/views/users/show.rhtml",
|
75
|
+
"test/rails_root/config/boot.rb",
|
76
|
+
"test/rails_root/config/database.yml",
|
77
|
+
"test/rails_root/config/environment.rb",
|
78
|
+
"test/rails_root/config/environments/sqlite3.rb",
|
79
|
+
"test/rails_root/config/initializers/new_rails_defaults.rb",
|
80
|
+
"test/rails_root/config/routes.rb",
|
81
|
+
"test/rails_root/db/migrate/001_create_users.rb",
|
82
|
+
"test/rails_root/db/migrate/002_create_posts.rb",
|
83
|
+
"test/rails_root/db/migrate/003_create_taggings.rb",
|
84
|
+
"test/rails_root/db/migrate/004_create_tags.rb",
|
85
|
+
"test/rails_root/db/migrate/005_create_dogs.rb",
|
86
|
+
"test/rails_root/db/migrate/006_create_addresses.rb",
|
87
|
+
"test/rails_root/db/migrate/007_create_fleas.rb",
|
88
|
+
"test/rails_root/db/migrate/008_create_dogs_fleas.rb",
|
89
|
+
"test/rails_root/db/migrate/009_add_ssn_to_users.rb",
|
90
|
+
"test/rails_root/db/schema.rb",
|
91
|
+
"test/rails_root/log/.keep",
|
92
|
+
"test/rails_root/public/.htaccess",
|
93
|
+
"test/rails_root/public/404.html",
|
94
|
+
"test/rails_root/public/422.html",
|
95
|
+
"test/rails_root/public/500.html",
|
96
|
+
"test/rails_root/script/console",
|
97
|
+
"test/rails_root/script/generate",
|
98
|
+
"test/rails_root/vendor/plugins/.keep",
|
99
|
+
"test/README",
|
100
|
+
"test/test_helper.rb",
|
101
|
+
"test/unit/address_test.rb",
|
102
|
+
"test/unit/dog_test.rb",
|
103
|
+
"test/unit/flea_test.rb",
|
104
|
+
"test/unit/post_test.rb",
|
105
|
+
"test/unit/tag_test.rb",
|
106
|
+
"test/unit/tagging_test.rb",
|
107
|
+
"test/unit/user_test.rb"]
|
108
|
+
|
109
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
namespace :shoulda do
|
2
|
+
desc "List the names of the test methods in a specification like format"
|
3
|
+
task :list do
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
require 'rubygems'
|
7
|
+
require 'active_support'
|
8
|
+
|
9
|
+
# bug in test unit. Set to true to stop from running.
|
10
|
+
Test::Unit.run = true
|
11
|
+
|
12
|
+
test_files = Dir.glob(File.join('test', '**', '*_test.rb'))
|
13
|
+
test_files.each do |file|
|
14
|
+
load file
|
15
|
+
klass = File.basename(file, '.rb').classify.constantize
|
16
|
+
|
17
|
+
puts klass.name.gsub('Test', '')
|
18
|
+
|
19
|
+
test_methods = klass.instance_methods.grep(/^test/).map {|s| s.gsub(/^test: /, '')}.sort
|
20
|
+
test_methods.each {|m| puts " " + m }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
namespace :shoulda do
|
2
|
+
# From http://blog.internautdesign.com/2007/11/2/a-yaml_to_shoulda-rake-task
|
3
|
+
# David.Lowenfels@gmail.com
|
4
|
+
desc "Converts a YAML file (FILE=./path/to/yaml) into a Shoulda skeleton"
|
5
|
+
task :from_yaml do
|
6
|
+
require 'yaml'
|
7
|
+
|
8
|
+
def yaml_to_context(hash, indent = 0)
|
9
|
+
indent1 = ' ' * indent
|
10
|
+
indent2 = ' ' * (indent + 1)
|
11
|
+
hash.each_pair do |context, shoulds|
|
12
|
+
puts indent1 + "context \"#{context}\" do"
|
13
|
+
puts
|
14
|
+
shoulds.each do |should|
|
15
|
+
yaml_to_context( should, indent + 1 ) and next if should.is_a?( Hash )
|
16
|
+
puts indent2 + "should_eventually \"" + should.gsub(/^should +/,'') + "\" do"
|
17
|
+
puts indent2 + "end"
|
18
|
+
puts
|
19
|
+
end
|
20
|
+
puts indent1 + "end"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
puts("Please pass in a FILE argument.") and exit unless ENV['FILE']
|
25
|
+
|
26
|
+
yaml_to_context( YAML.load_file( ENV['FILE'] ) )
|
27
|
+
end
|
28
|
+
end
|
data/test/README
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
The Shoulda test suite (in particular - the tests that test shoulda)
|
2
|
+
|
3
|
+
Quick overview:
|
4
|
+
|
5
|
+
The test directory contains the following files and subdirectories:
|
6
|
+
|
7
|
+
* rails_root - contains the stripped down rails application that the tests run against. The rails root contains:
|
8
|
+
** the models, controllers, and views defined under app/
|
9
|
+
** the sqlite3.rb environment file
|
10
|
+
** a migration file for each model
|
11
|
+
* fixtures - contain the sample DB data for each model
|
12
|
+
* functional - controller tests for each of the controllers under rails_root/app
|
13
|
+
* unit - model tests for each of the models under rails_root/app
|
14
|
+
* other - tests for the shoulda contexts, should statements, and assertions
|
15
|
+
* test_helper.rb - responsible for initializing the test environment
|
16
|
+
** sets the rails_env to sqlite3
|
17
|
+
** sets the rails_root
|
18
|
+
** creates the rails_root/vendor/plugins/shoulda symlink
|
19
|
+
** runs all the migrations against the in-memory sqlite3 db
|
20
|
+
** adds some magic to load the right fixture files
|
21
|
+
|
22
|
+
In order to add a new model (or controller) to the test suite:
|
23
|
+
|
24
|
+
* add that model to rails_root/app/models
|
25
|
+
* add a migration for that model
|
26
|
+
* add a fixture file
|
27
|
+
* add a test for that file under test/units
|
28
|
+
|
29
|
+
Dependencies:
|
30
|
+
|
31
|
+
* Rails gem installed in the host system
|
32
|
+
* A working sqlite3 installation.
|
33
|
+
|
34
|
+
If you have problems running these tests, please notify the mailing list: shoulda@googlegroups.com
|
35
|
+
|
36
|
+
- Tammer Saleh <tsaleh@thoughtbot.com>
|
File without changes
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
require 'posts_controller'
|
3
|
+
|
4
|
+
# Re-raise errors caught by the controller.
|
5
|
+
class PostsController; def rescue_action(e) raise e end; end
|
6
|
+
|
7
|
+
class PostsControllerTest < Test::Unit::TestCase
|
8
|
+
load_all_fixtures
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@controller = PostsController.new
|
12
|
+
@request = ActionController::TestRequest.new
|
13
|
+
@response = ActionController::TestResponse.new
|
14
|
+
@post = Post.find(:first)
|
15
|
+
end
|
16
|
+
|
17
|
+
context "The public" do
|
18
|
+
setup do
|
19
|
+
@request.session[:logged_in] = false
|
20
|
+
end
|
21
|
+
|
22
|
+
should_be_restful do |resource|
|
23
|
+
resource.parent = :user
|
24
|
+
|
25
|
+
resource.denied.actions = [:index, :show, :edit, :new, :create, :update, :destroy]
|
26
|
+
resource.denied.flash = /what/i
|
27
|
+
resource.denied.redirect = '"/"'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "Logged in" do
|
32
|
+
setup do
|
33
|
+
@request.session[:logged_in] = true
|
34
|
+
end
|
35
|
+
|
36
|
+
should_be_restful do |resource|
|
37
|
+
resource.parent = :user
|
38
|
+
|
39
|
+
resource.create.params = { :title => "first post", :body => 'blah blah blah'}
|
40
|
+
resource.update.params = { :title => "changed" }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
require 'users_controller'
|
3
|
+
|
4
|
+
# Re-raise errors caught by the controller.
|
5
|
+
class UsersController; def rescue_action(e) raise e end; end
|
6
|
+
|
7
|
+
class UsersControllerTest < Test::Unit::TestCase
|
8
|
+
load_all_fixtures
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@controller = UsersController.new
|
12
|
+
@request = ActionController::TestRequest.new
|
13
|
+
@response = ActionController::TestResponse.new
|
14
|
+
@user = User.find(:first)
|
15
|
+
end
|
16
|
+
|
17
|
+
should_be_restful do |resource|
|
18
|
+
resource.identifier = :id
|
19
|
+
resource.klass = User
|
20
|
+
resource.object = :user
|
21
|
+
resource.parent = []
|
22
|
+
resource.actions = [:index, :show, :new, :edit, :update, :create, :destroy]
|
23
|
+
resource.formats = [:html, :xml]
|
24
|
+
|
25
|
+
resource.create.params = { :name => "bob", :email => 'bob@bob.com', :age => 13, :ssn => "123456789"}
|
26
|
+
resource.update.params = { :name => "sue" }
|
27
|
+
|
28
|
+
resource.create.redirect = "user_url(@user)"
|
29
|
+
resource.update.redirect = "user_url(@user)"
|
30
|
+
resource.destroy.redirect = "users_url"
|
31
|
+
|
32
|
+
resource.create.flash = /created/i
|
33
|
+
resource.update.flash = /updated/i
|
34
|
+
resource.destroy.flash = /removed/i
|
35
|
+
end
|
36
|
+
end
|