diff --git a/app/views/projects/update.js.erb b/app/views/projects/update.js.erb
index 7cc6c484..eeaf7021 100644
--- a/app/views/projects/update.js.erb
+++ b/app/views/projects/update.js.erb
@@ -98,5 +98,5 @@ function html_for_project_settings() {
-%>
function html_for_error_messages() {
- return "<%= escape_javascript(error_messages_for('project')) %>";
+ return "<%= escape_javascript(get_list_of_error_messages_for(@project)) %>";
}
\ No newline at end of file
diff --git a/app/views/todos/_new_todo_form.html.erb b/app/views/todos/_new_todo_form.html.erb
index 9a52990c..507b1980 100644
--- a/app/views/todos/_new_todo_form.html.erb
+++ b/app/views/todos/_new_todo_form.html.erb
@@ -7,13 +7,13 @@
- <% if todo.errors.any? -%>
-
- <% todo.errors.full_messages.each do |msg| %>
- - <%= msg %>
- <% end %>
-
- <% end -%>
+ <% if todo.errors.any? -%>
+
+ <% todo.errors.full_messages.each do |msg| %>
+ - <%= msg %>
+ <% end %>
+
+ <% end -%>
diff --git a/app/views/todos/update.js.erb b/app/views/todos/update.js.erb
index 018fa2a4..ddb7ed73 100644
--- a/app/views/todos/update.js.erb
+++ b/app/views/todos/update.js.erb
@@ -110,14 +110,7 @@ function html_for_new_context() {
}
function html_for_error_messages() {
- <%
- error_messages = ""
- if @todo.errors.any?
- list_of_messages = @todo.errors.full_messages.inject("") { |all, msg| all += context_tag(:li, msg) }
- error_messages = content_tag(:ul, list_of_messages)
- end
- -%>
- return "<%= escape_javascript(error_messages) %>";
+ return "<%= escape_javascript(get_list_of_error_messages_for(@todo)) %>";
}
function update_predecessors(next_steps) {
diff --git a/config/routes.rb b/config/routes.rb
index 2a9e1795..630dce2b 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -60,6 +60,8 @@ Tracksapp::Application.routes.draw do
match "tickler" => "todos#list_deferred"
match 'review' => "projects#review"
+ match 'login' => 'users#login'
+ match 'login_cas' => 'users#login_cas'
match 'logout' => 'users#logout'
match 'calendar' => "todos#calendar"
match 'done' => "stats#done", :as => 'done_overview'
@@ -112,6 +114,18 @@ Tracksapp::Application.routes.draw do
end
match 'todos/tag/:name' => 'todos#tag', :as => :tag
+ resources :users do
+ member do
+ get 'change_password'
+ get 'change_auth_type'
+ get 'complete'
+ post 'update_password'
+ post 'update_auth_type'
+ post 'refresh_token'
+ end
+ end
+ match 'signup' => "users#new"
+
resources :notes
# map.resources :users,
diff --git a/lib/login_system.rb b/lib/login_system.rb
index 042c8a9d..ec2d911a 100644
--- a/lib/login_system.rb
+++ b/lib/login_system.rb
@@ -170,7 +170,7 @@ module LoginSystem
# store current uri in the session.
# we can return to this location by calling return_location
def store_location
- session['return-to'] = request.request_uri
+ session['return-to'] = request.url
end
# move to the last store_location call or to the passed default one
diff --git a/test/functional/contexts_controller_test.rb b/test/functional/contexts_controller_test.rb
index 20d46136..d57558b3 100644
--- a/test/functional/contexts_controller_test.rb
+++ b/test/functional/contexts_controller_test.rb
@@ -1,140 +1,12 @@
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
-require File.expand_path(File.dirname(__FILE__) + '/todo_container_controller_test_base')
-require 'contexts_controller'
-# Re-raise errors caught by the controller.
-class ContextsController; def rescue_action(e) raise e end; end
-
-class ContextsControllerTest < TodoContainerControllerTestBase
+class ContextsControllerTest < ActionController::TestCase
fixtures :users, :preferences, :contexts
- def setup
- perform_setup(Context, ContextsController)
- end
-
def test_contexts_list
login_as :admin_user
get :index
end
-
- def test_create_context_via_ajax_increments_number_of_context
- assert_ajax_create_increments_count '@newcontext'
- end
-
-
- def test_create_via_ajax_with_comma_in_name_does_not_increment_number_of_contexts
- assert_ajax_create_does_not_increment_count 'foo,bar'
- end
-
- def test_rss_feed_content
- login_as :admin_user
- get :index, { :format => "rss" }
- assert_equal 'application/rss+xml', @response.content_type
- #puts @response.body
-
- assert_xml_select 'rss[version="2.0"]' do
- assert_select 'channel' do
- assert_select '>title', 'Tracks Contexts'
- assert_select '>description', "Lists all the contexts for #{users(:admin_user).display_name}"
- assert_select 'language', 'en-us'
- assert_select 'ttl', '40'
- end
- assert_select 'item', 10 do
- assert_select 'title', /.+/
- assert_select 'description' do
- assert_select_encoded do
- assert_select 'p', /\d+ actions. Context is (Active|Hidden)./
- end
- end
- %w(guid link).each do |node|
- assert_select node, /http:\/\/test.host\/contexts\/.+/
- end
- assert_select 'pubDate', contexts(:agenda).created_at.to_s(:rfc822)
- end
- end
- end
-
- def test_rss_feed_not_accessible_to_anonymous_user_without_token
- login_as nil
- get :index, { :format => "rss" }
- assert_response 401
- end
-
- def test_rss_feed_not_accessible_to_anonymous_user_with_invalid_token
- login_as nil
- get :index, { :format => "rss", :token => 'foo' }
- assert_response 401
- end
-
- def test_rss_feed_accessible_to_anonymous_user_with_valid_token
- login_as nil
- get :index, { :format => "rss", :token => users(:admin_user).token }
- assert_response :ok
- end
-
- def test_atom_feed_content
- login_as :admin_user
- get :index, { :format => "atom" }
- assert_equal 'application/atom+xml', @response.content_type
- #puts @response.body
-
- assert_xml_select 'feed[xmlns="http://www.w3.org/2005/Atom"]' do
- assert_select '>title', 'Tracks Contexts'
- assert_select '>subtitle', "Lists all the contexts for #{users(:admin_user).display_name}"
- assert_select 'entry', 10 do
- assert_select 'title', /.+/
- assert_select 'content[type="html"]' do
- assert_select_encoded do
- assert_select 'p', /\d+ actions. Context is (Active|Hidden)./
- end
- end
- assert_select 'published', /(#{Regexp.escape(contexts(:agenda).created_at.xmlschema)}|#{Regexp.escape(contexts(:library).created_at.xmlschema)})/
- end
- end
- end
-
- def test_atom_feed_not_accessible_to_anonymous_user_without_token
- login_as nil
- get :index, { :format => "atom" }
- assert_response 401
- end
-
- def test_atom_feed_not_accessible_to_anonymous_user_with_invalid_token
- login_as nil
- get :index, { :format => "atom", :token => 'foo' }
- assert_response 401
- end
-
- def test_atom_feed_accessible_to_anonymous_user_with_valid_token
- login_as nil
- get :index, { :format => "atom", :token => users(:admin_user).token }
- assert_response :ok
- end
-
- def test_text_feed_content
- login_as :admin_user
- get :index, { :format => "txt" }
- assert_equal 'text/plain', @response.content_type
- assert !(/ /.match(@response.body))
- end
-
- def test_text_feed_not_accessible_to_anonymous_user_without_token
- login_as nil
- get :index, { :format => "txt" }
- assert_response 401
- end
-
- def test_text_feed_not_accessible_to_anonymous_user_with_invalid_token
- login_as nil
- get :index, { :format => "txt", :token => 'foo' }
- assert_response 401
- end
-
- def test_text_feed_accessible_to_anonymous_user_with_valid_token
- login_as nil
- get :index, { :format => "txt", :token => users(:admin_user).token }
- assert_response :ok
- end
def test_show_sets_title
login_as :admin_user
@@ -147,28 +19,16 @@ class ContextsControllerTest < TodoContainerControllerTestBase
get :show, { :id => "1" }
assert_template "contexts/show"
end
-
- def test_show_xml_renders_context_to_xml
- login_as :admin_user
- get :show, { :id => "1", :format => 'xml' }
- assert_equal contexts(:agenda).to_xml( :except => :user_id ), @response.body
+
+ def test_create_context_via_ajax_increments_number_of_context
+ login_as :other_user
+ assert_ajax_create_increments_count '@newcontext'
end
-
- def test_show_with_nil_context_returns_404
- login_as :admin_user
- get :show, { :id => "0" }
- assert_equal 'Context not found', @response.body
- assert_response 404
- end
-
- def test_show_xml_with_nil_context_returns_404
- login_as :admin_user
- get :show, { :id => "0", :format => 'xml' }
- assert_response 404
- assert_xml_select 'error', 'Context not found'
- end
-
- def protect_against_forgery?
- false
+
+ def test_create_via_ajax_with_comma_in_name_does_not_increment_number_of_contexts
+ login_as :other_user
+ assert_ajax_create_does_not_increment_count 'foo,bar'
end
+
+
end
diff --git a/test/functional/move_these_to_context_controller_test.rb b/test/functional/move_these_to_context_controller_test.rb
new file mode 100644
index 00000000..0680276b
--- /dev/null
+++ b/test/functional/move_these_to_context_controller_test.rb
@@ -0,0 +1,134 @@
+
+ def test_rss_feed_content
+ login_as :admin_user
+ get :index, { :format => "rss" }
+ assert_equal 'application/rss+xml', @response.content_type
+ #puts @response.body
+
+ assert_xml_select 'rss[version="2.0"]' do
+ assert_select 'channel' do
+ assert_select '>title', 'Tracks Contexts'
+ assert_select '>description', "Lists all the contexts for #{users(:admin_user).display_name}"
+ assert_select 'language', 'en-us'
+ assert_select 'ttl', '40'
+ end
+ assert_select 'item', 10 do
+ assert_select 'title', /.+/
+ assert_select 'description' do
+ assert_select_encoded do
+ assert_select 'p', /\d+ actions. Context is (Active|Hidden)./
+ end
+ end
+ %w(guid link).each do |node|
+ assert_select node, /http:\/\/test.host\/contexts\/.+/
+ end
+ assert_select 'pubDate', contexts(:agenda).created_at.to_s(:rfc822)
+ end
+ end
+ end
+
+ def test_rss_feed_not_accessible_to_anonymous_user_without_token
+ login_as nil
+ get :index, { :format => "rss" }
+ assert_response 401
+ end
+
+ def test_rss_feed_not_accessible_to_anonymous_user_with_invalid_token
+ login_as nil
+ get :index, { :format => "rss", :token => 'foo' }
+ assert_response 401
+ end
+
+ def test_rss_feed_accessible_to_anonymous_user_with_valid_token
+ login_as nil
+ get :index, { :format => "rss", :token => users(:admin_user).token }
+ assert_response :ok
+ end
+
+ def test_atom_feed_content
+ login_as :admin_user
+ get :index, { :format => "atom" }
+ assert_equal 'application/atom+xml', @response.content_type
+ #puts @response.body
+
+ assert_xml_select 'feed[xmlns="http://www.w3.org/2005/Atom"]' do
+ assert_select '>title', 'Tracks Contexts'
+ assert_select '>subtitle', "Lists all the contexts for #{users(:admin_user).display_name}"
+ assert_select 'entry', 10 do
+ assert_select 'title', /.+/
+ assert_select 'content[type="html"]' do
+ assert_select_encoded do
+ assert_select 'p', /\d+ actions. Context is (Active|Hidden)./
+ end
+ end
+ assert_select 'published', /(#{Regexp.escape(contexts(:agenda).created_at.xmlschema)}|#{Regexp.escape(contexts(:library).created_at.xmlschema)})/
+ end
+ end
+ end
+
+ def test_atom_feed_not_accessible_to_anonymous_user_without_token
+ login_as nil
+ get :index, { :format => "atom" }
+ assert_response 401
+ end
+
+ def test_atom_feed_not_accessible_to_anonymous_user_with_invalid_token
+ login_as nil
+ get :index, { :format => "atom", :token => 'foo' }
+ assert_response 401
+ end
+
+ def test_atom_feed_accessible_to_anonymous_user_with_valid_token
+ login_as nil
+ get :index, { :format => "atom", :token => users(:admin_user).token }
+ assert_response :ok
+ end
+
+ def test_text_feed_content
+ login_as :admin_user
+ get :index, { :format => "txt" }
+ assert_equal 'text/plain', @response.content_type
+ assert !(/ /.match(@response.body))
+ end
+
+ def test_text_feed_not_accessible_to_anonymous_user_without_token
+ login_as nil
+ get :index, { :format => "txt" }
+ assert_response 401
+ end
+
+ def test_text_feed_not_accessible_to_anonymous_user_with_invalid_token
+ login_as nil
+ get :index, { :format => "txt", :token => 'foo' }
+ assert_response 401
+ end
+
+ def test_text_feed_accessible_to_anonymous_user_with_valid_token
+ login_as nil
+ get :index, { :format => "txt", :token => users(:admin_user).token }
+ assert_response :ok
+ end
+
+ def test_show_xml_renders_context_to_xml
+ login_as :admin_user
+ get :show, { :id => "1", :format => 'xml' }
+ assert_equal contexts(:agenda).to_xml( :except => :user_id ), @response.body
+ end
+
+ def test_show_with_nil_context_returns_404
+ login_as :admin_user
+ get :show, { :id => "0" }
+ assert_equal 'Context not found', @response.body
+ assert_response 404
+ end
+
+ def test_show_xml_with_nil_context_returns_404
+ login_as :admin_user
+ get :show, { :id => "0", :format => 'xml' }
+ assert_response 404
+ assert_xml_select 'error', 'Context not found'
+ end
+
+ def protect_against_forgery?
+ false
+ end
diff --git a/test/functional/preferences_controller_test.rb b/test/functional/preferences_controller_test.rb
index 6c832994..b8de7a95 100644
--- a/test/functional/preferences_controller_test.rb
+++ b/test/functional/preferences_controller_test.rb
@@ -1,20 +1,16 @@
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
-require 'preferences_controller'
-
-# Re-raise errors caught by the controller.
-class PreferencesController; def rescue_action(e) raise e end; end
class PreferencesControllerTest < ActionController::TestCase
fixtures :users, :preferences
def setup
- assert_equal "test", ENV['RAILS_ENV']
+ assert_equal "test", Rails.env
assert_equal "change-me", Tracks::Config.salt
end
test "render_date_format requires login" do
get :render_date_format
- assert_redirected_to :controller => 'login', :action => 'login'
+ assert_redirected_to login_path
end
test "calling render_date_format returns date" do
@@ -31,7 +27,7 @@ class PreferencesControllerTest < ActionController::TestCase
test "index page requires login" do
get :index # should fail because no login
- assert_redirected_to :controller => 'login', :action => 'login'
+ assert_redirected_to login_path
end
test "index sets prefs and user" do
diff --git a/test/functional/todo_container_controller_test_base.rb b/test/functional/todo_container_controller_test_base.rb
index a751bb5a..ce810195 100644
--- a/test/functional/todo_container_controller_test_base.rb
+++ b/test/functional/todo_container_controller_test_base.rb
@@ -17,21 +17,5 @@ class TodoContainerControllerTestBase < ActionController::TestCase
assert true
end
- def assert_ajax_create_increments_count(name)
- assert_count_after_ajax_create(name, @initial_count + 1)
- end
-
- def assert_ajax_create_does_not_increment_count(name)
- assert_count_after_ajax_create(name, @initial_count)
- end
-
- def assert_count_after_ajax_create(name, expected_count)
- ajax_create(name)
- assert_equal(expected_count, @container_class.count)
- end
-
- def ajax_create(name)
- xhr :post, :create, @container_class.name.downcase.to_sym => {:name => name}
- end
end
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 75ec7e1c..4d9395b9 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -10,6 +10,11 @@ class ActiveSupport::TestCase
fixtures :all
# Add more helper methods to be used by all tests here...
+ def assert_value_changed(object, method = nil)
+ initial_value = object.send(method)
+ yield
+ assert_not_equal initial_value, object.send(method), "#{object}##{method}"
+ end
end
module Tracks
@@ -23,6 +28,37 @@ module Tracks
end
end
+class ActionController::TestCase
+ def login_as(user)
+ @request.session['user_id'] = user ? users(user).id : nil
+ end
+
+ def assert_ajax_create_increments_count(name)
+ assert_count_after_ajax_create(name, get_class_count + 1)
+ end
+
+ def assert_ajax_create_does_not_increment_count(name)
+ assert_count_after_ajax_create(name, get_class_count)
+ end
+
+ def assert_count_after_ajax_create(name, expected_count)
+ ajax_create(name)
+ assert_equal(expected_count, get_class_count)
+ end
+
+ def ajax_create(name)
+ xhr :post, :create, @controller.class.name.downcase.to_sym => {:name => name}
+ end
+
+ private
+
+ def get_class_count
+ model = @controller.class.to_s.tableize.split("_")[0].camelcase.singularize #don't ask... converts ContextsController to Context
+ eval("#{model}.count")
+ end
+
+end
+
class ActiveSupport::TestCase
# Generates a random string of ascii characters (a-z, "1 0")
@@ -43,14 +79,4 @@ class ActiveSupport::TestCase
assert_equal date1.strftime("%d-%m-%y"), date2.strftime("%d-%m-%y")
end
-end
-
-class Test::Unit::TestCase
-
- def assert_value_changed(object, method = nil)
- initial_value = object.send(method)
- yield
- assert_not_equal initial_value, object.send(method), "#{object}##{method}"
- end
-
-end
+end
\ No newline at end of file