From 3e0a1a47c0eafb7f9b79e5f2765ea33ce1ad159b Mon Sep 17 00:00:00 2001 From: Azul Date: Wed, 24 Oct 2012 20:35:52 +0200 Subject: basic admin controller methods and helpers + tests --- users/test/support/auth_test_helper.rb | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 users/test/support/auth_test_helper.rb (limited to 'users/test/support') diff --git a/users/test/support/auth_test_helper.rb b/users/test/support/auth_test_helper.rb new file mode 100644 index 0000000..c30421f --- /dev/null +++ b/users/test/support/auth_test_helper.rb @@ -0,0 +1,7 @@ +module AuthTestHelper + + def assert_access_denied + assert_equal({:alert => "Not authorized"}, flash.to_hash) + assert_redirected_to login_path + end +end -- cgit v1.2.3 From b724d53b36878c96d30676c22ee4e4369dcc37f8 Mon Sep 17 00:00:00 2001 From: Azul Date: Wed, 24 Oct 2012 20:41:30 +0200 Subject: Extraction of test support methods --- users/test/support/auth_test_helper.rb | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'users/test/support') diff --git a/users/test/support/auth_test_helper.rb b/users/test/support/auth_test_helper.rb index c30421f..d5d52b1 100644 --- a/users/test/support/auth_test_helper.rb +++ b/users/test/support/auth_test_helper.rb @@ -1,7 +1,25 @@ module AuthTestHelper - def assert_access_denied - assert_equal({:alert => "Not authorized"}, flash.to_hash) - assert_redirected_to login_path + def stub_logged_in + @user_id = stub + @user = stub + session[:user_id] = @user_id + User.expects(:find).once.with(@user_id).returns(@user) + return @user + end + + def stub_logged_out + @user_id = stub + session[:user_id] = @user_id + User.expects(:find).once.with(@user_id).returns(nil) + end + + def assert_access_denied(denied = true) + if denied + assert_equal({:alert => "Not authorized"}, flash.to_hash) + assert_redirected_to login_path + else + assert flash[:alert].blank? + end end end -- cgit v1.2.3 From 5c6395d8b1a8c7cf540dae9fdd37f3e68554215c Mon Sep 17 00:00:00 2001 From: Azul Date: Sun, 4 Nov 2012 16:24:35 +0100 Subject: fixing tests, including support files from all engines --- users/test/support/auth_test_helper.rb | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'users/test/support') diff --git a/users/test/support/auth_test_helper.rb b/users/test/support/auth_test_helper.rb index d5d52b1..9412058 100644 --- a/users/test/support/auth_test_helper.rb +++ b/users/test/support/auth_test_helper.rb @@ -23,3 +23,7 @@ module AuthTestHelper end end end + +class ActionController::TestCase + include AuthTestHelper +end -- cgit v1.2.3 From e1fc3f4850ee73e0591bd67a92b104db4f63e4cb Mon Sep 17 00:00:00 2001 From: Azul Date: Sun, 4 Nov 2012 21:01:27 +0100 Subject: stubbing current_user the warden way --- users/test/support/auth_test_helper.rb | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'users/test/support') diff --git a/users/test/support/auth_test_helper.rb b/users/test/support/auth_test_helper.rb index 9412058..f211597 100644 --- a/users/test/support/auth_test_helper.rb +++ b/users/test/support/auth_test_helper.rb @@ -1,17 +1,18 @@ module AuthTestHelper + extend ActiveSupport::Concern - def stub_logged_in - @user_id = stub - @user = stub - session[:user_id] = @user_id - User.expects(:find).once.with(@user_id).returns(@user) - return @user + # Controller will fetch current user from warden. + # Make it pick up our current_user + included do + setup do + request.env['warden'] ||= stub :user => nil + end end - def stub_logged_out - @user_id = stub - session[:user_id] = @user_id - User.expects(:find).once.with(@user_id).returns(nil) + def login(user = nil) + @current_user = user || stub + request.env['warden'] = stub :user => @current_user + return @current_user end def assert_access_denied(denied = true) -- cgit v1.2.3 From 46c0140a8eab632c783d309a7afd87cb7aad4280 Mon Sep 17 00:00:00 2001 From: Azul Date: Fri, 23 Nov 2012 10:55:49 +0100 Subject: refactored creation of record stubs --- users/test/support/auth_test_helper.rb | 3 +++ users/test/support/stub_record_helper.rb | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 users/test/support/stub_record_helper.rb (limited to 'users/test/support') diff --git a/users/test/support/auth_test_helper.rb b/users/test/support/auth_test_helper.rb index f211597..0b73f5f 100644 --- a/users/test/support/auth_test_helper.rb +++ b/users/test/support/auth_test_helper.rb @@ -11,6 +11,9 @@ module AuthTestHelper def login(user = nil) @current_user = user || stub + unless @current_user.respond_to? :is_admin? + @current_user.stubs(:is_admin?).returns(false) + end request.env['warden'] = stub :user => @current_user return @current_user end diff --git a/users/test/support/stub_record_helper.rb b/users/test/support/stub_record_helper.rb new file mode 100644 index 0000000..95b9d63 --- /dev/null +++ b/users/test/support/stub_record_helper.rb @@ -0,0 +1,18 @@ +module StubRecordHelper + + # Create a stub that has the usual functions of a database record. + # It won't fail on rendering a form for example. + def stub_record(klass, params = {}, persisted = true) + if klass.respond_to?(:valid_attributes_hash) + params.reverse_merge!(klass.valid_attributes_hash) + end + params[:params] = params.stringify_keys + params.reverse_merge! :id => 123, + :class => klass, + :to_key => ['123'], + :new_record? => !persisted, + :persisted? => persisted + stub params + end + +end -- cgit v1.2.3 From 595518684b9c4364f96c97a84cc481b5ae0da981 Mon Sep 17 00:00:00 2001 From: Azul Date: Mon, 26 Nov 2012 11:54:11 +0100 Subject: simplified controller and adjusted tests Also added #assert_json_error to tests. --- users/test/support/stub_record_helper.rb | 1 + 1 file changed, 1 insertion(+) (limited to 'users/test/support') diff --git a/users/test/support/stub_record_helper.rb b/users/test/support/stub_record_helper.rb index 95b9d63..e744ad7 100644 --- a/users/test/support/stub_record_helper.rb +++ b/users/test/support/stub_record_helper.rb @@ -10,6 +10,7 @@ module StubRecordHelper params.reverse_merge! :id => 123, :class => klass, :to_key => ['123'], + :to_json => %Q({"stub":"#{klass.name}"}), :new_record? => !persisted, :persisted? => persisted stub params -- cgit v1.2.3 From 277b9f98bfbe2ef0217dfd17c8d9d6597369b903 Mon Sep 17 00:00:00 2001 From: Azul Date: Wed, 28 Nov 2012 15:13:47 +0100 Subject: admins can destroy users I changed the permissions a little to be more consistent. Now: * admins can edit users * users can destroy themselves. There's no ui for either of them but theoretically they could. Not sure this is what we want though. --- users/test/support/auth_test_helper.rb | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'users/test/support') diff --git a/users/test/support/auth_test_helper.rb b/users/test/support/auth_test_helper.rb index 0b73f5f..e0b673a 100644 --- a/users/test/support/auth_test_helper.rb +++ b/users/test/support/auth_test_helper.rb @@ -1,4 +1,5 @@ module AuthTestHelper + include StubRecordHelper extend ActiveSupport::Concern # Controller will fetch current user from warden. @@ -9,8 +10,8 @@ module AuthTestHelper end end - def login(user = nil) - @current_user = user || stub + def login(user_or_method_hash = nil) + @current_user = stub_user(user_or_method_hash) unless @current_user.respond_to? :is_admin? @current_user.stubs(:is_admin?).returns(false) end @@ -26,6 +27,20 @@ module AuthTestHelper assert flash[:alert].blank? end end + + protected + + # Will create a stub user for logging in from either + # * a hash of methods to stub + # * a user record + # * nil -> create a user record stub + def stub_user(user_or_method_hash) + if user_or_method_hash.is_a?(Hash) + stub_record User, user_or_method_hash + else + user_or_method_hash || stub_record(User) + end + end end class ActionController::TestCase -- cgit v1.2.3 From 0b23df922336289b6f8062653b4d3e852ed927ec Mon Sep 17 00:00:00 2001 From: Azul Date: Mon, 3 Dec 2012 08:55:49 +0100 Subject: make tests pass on an empty db --- users/test/support/stub_record_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'users/test/support') diff --git a/users/test/support/stub_record_helper.rb b/users/test/support/stub_record_helper.rb index e744ad7..ede21cf 100644 --- a/users/test/support/stub_record_helper.rb +++ b/users/test/support/stub_record_helper.rb @@ -7,7 +7,7 @@ module StubRecordHelper params.reverse_merge!(klass.valid_attributes_hash) end params[:params] = params.stringify_keys - params.reverse_merge! :id => 123, + params.reverse_merge! :id => "A123", :class => klass, :to_key => ['123'], :to_json => %Q({"stub":"#{klass.name}"}), -- cgit v1.2.3 From 1b411de39f38eb0925cf255e941545933f227759 Mon Sep 17 00:00:00 2001 From: Azul Date: Mon, 3 Dec 2012 14:02:16 +0100 Subject: refactored tests with new find_record helper find_record User will return a stubbed user record and make sure User.find_by_id(user.id) returns the same so it can be used in controllers. --- users/test/support/auth_test_helper.rb | 17 ++--------------- users/test/support/stub_record_helper.rb | 26 ++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 17 deletions(-) (limited to 'users/test/support') diff --git a/users/test/support/auth_test_helper.rb b/users/test/support/auth_test_helper.rb index e0b673a..f3506ae 100644 --- a/users/test/support/auth_test_helper.rb +++ b/users/test/support/auth_test_helper.rb @@ -10,8 +10,8 @@ module AuthTestHelper end end - def login(user_or_method_hash = nil) - @current_user = stub_user(user_or_method_hash) + def login(user_or_method_hash = {}) + @current_user = stub_record(User, user_or_method_hash) unless @current_user.respond_to? :is_admin? @current_user.stubs(:is_admin?).returns(false) end @@ -28,19 +28,6 @@ module AuthTestHelper end end - protected - - # Will create a stub user for logging in from either - # * a hash of methods to stub - # * a user record - # * nil -> create a user record stub - def stub_user(user_or_method_hash) - if user_or_method_hash.is_a?(Hash) - stub_record User, user_or_method_hash - else - user_or_method_hash || stub_record(User) - end - end end class ActionController::TestCase diff --git a/users/test/support/stub_record_helper.rb b/users/test/support/stub_record_helper.rb index ede21cf..2e1a533 100644 --- a/users/test/support/stub_record_helper.rb +++ b/users/test/support/stub_record_helper.rb @@ -1,19 +1,41 @@ module StubRecordHelper + # Will expect find_by_param or find_by_id to be called on klass and + # return the record given. + # If no record is given but a hash or nil will create a stub based on + # that instead and returns the stub. + def find_record(klass, record_or_method_hash = {}) + record = stub_record(klass, record_or_method_hash) + finder = klass.respond_to?(:find_by_param) ? :find_by_param : :find_by_id + klass.expects(finder).with(record.to_param).returns(record) + return record + end + # Create a stub that has the usual functions of a database record. # It won't fail on rendering a form for example. - def stub_record(klass, params = {}, persisted = true) + # + # If the second parameter is a record we return the record itself. + # This way you can build functions that either take a record or a + # method hash to stub from. See find_record for an example. + def stub_record(klass, record_or_method_hash = {}, persisted = true) + if record_or_method_hash && !record_or_method_hash.is_a?(Hash) + return record_or_method_hash + end + stub record_params_for(klass, record_or_method_hash, persisted) + end + + def record_params_for(klass, params = {}, persisted = true) if klass.respond_to?(:valid_attributes_hash) params.reverse_merge!(klass.valid_attributes_hash) end params[:params] = params.stringify_keys params.reverse_merge! :id => "A123", + :to_param => "A123", :class => klass, :to_key => ['123'], :to_json => %Q({"stub":"#{klass.name}"}), :new_record? => !persisted, :persisted? => persisted - stub params end end -- cgit v1.2.3