test_helper.rb
3.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require 'test_help'
require 'mocha'
class Test::Unit::TestCase
# Transactional fixtures accelerate your tests by wrapping each test method
# in a transaction that's rolled back on completion. This ensures that the
# test database remains unchanged so your fixtures don't have to be reloaded
# between every test method. Fewer database queries means faster tests.
#
# Read Mike Clark's excellent walkthrough at
# http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
#
# Every Active Record database supports transactions except MyISAM tables
# in MySQL. Turn off transactional fixtures in this case; however, if you
# don't care one way or the other, switching from MyISAM to InnoDB tables
# is recommended.
self.use_transactional_fixtures = true
# Instantiated fixtures are slow, but give you @david where otherwise you
# would need people(:david). If you don't want to migrate your existing
# test cases which use the @david style and don't mind the speed hit (each
# instantiated fixtures translates to a database query per test method),
# then set this back to true.
self.use_instantiated_fixtures = false
# Add more helper methods to be used by all tests here...
include AuthenticatedTestHelper
def self.all_fixtures
Dir.glob(File.join(RAILS_ROOT, 'test', 'fixtures', '*.yml')).each do |item|
fixtures File.basename(item).sub(/\.yml$/, '').to_s
end
end
# all_fixtures
def self.should(name, &block)
@shoulds ||= []
destname = 'test_should_' + name.gsub(/[^a-zA-z0-9]+/, '_')
if @shoulds.include?(destname)
raise "there is already a test named \"#{destname}\""
end
@shoulds << destname
self.send(:define_method, destname, &block)
end
def self.extra_parameters
@extra_parameters
end
def self.add_extra_parameter(name, value)
@extra_parameters ||= {}
@extra_parameters[name] = value.to_s
self.send(:include, NoosferoTest) unless self.include?(NoosferoTest)
end
def self.under_profile(profile_identifier)
add_extra_parameter(:profile, profile_identifier)
raise "profile_identifier must be set!" unless extra_parameters[:profile]
end
def create_admin_user(env)
admin_user = User.find_by_login('root') || User.create!(:login => 'root', :email => 'root@noosfero.org', :password => 'root', :password_confirmation => 'root')
admin_role = Role.find_by_name('admin_role') || Role.create!(:name => 'admin_role', :permissions => ['view_environment_admin_panel','edit_environment_features', 'edit_environment_design', 'manage_environment_categories', 'manage_environment_roles', 'manage_environment_validators'])
RoleAssignment.create!(:accessor => admin_user.person, :role => admin_role, :resource => env) unless admin_user.person.role_assignments.map{|ra|[ra.role, ra.accessor, ra.resource]}.include?([admin_role, admin_user, env])
admin_user.login
end
def create_user(name)
User.create!(:login => name,
:email => name + '@noosfero.org',
:password => name.underscore,
:password_confirmation => name.underscore)
end
def create_user_with_permission(name, permission, target)
user = create_user(name).person
i = 0
while Role.find_by_name('test_role' + i.to_s)
i+=1
end
role = Role.create!(:name => 'test_role' + i.to_s, :permissions => [permission])
assert user.add_role(role, target)
assert user.has_permission?(permission, target)
user
end
private
def uses_host(name)
@request.instance_variable_set('@host', name)
end
end
class ActionController::IntegrationTest
def login(username, password)
post '/account/login', :login => username, :password => password
assert_response :redirect
follow_redirect!
assert_not_equal '/account/login', path
end
end