diff --git a/Gemfile b/Gemfile index b7e6f710..8883213e 100644 --- a/Gemfile +++ b/Gemfile @@ -29,7 +29,7 @@ gem "RedCloth" gem "sanitize", "~> 5.2" gem "will_paginate" gem "acts_as_list" -gem "aasm", '~> 4.12.3' +gem "aasm", '~> 5.1.1' gem "htmlentities" gem "rails_autolink" gem 'puma', '~> 4.3' diff --git a/Gemfile.lock b/Gemfile.lock index 60f3c4c1..1892e92c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -9,7 +9,7 @@ GEM remote: https://rubygems.org/ specs: RedCloth (4.3.2) - aasm (4.12.3) + aasm (5.1.1) concurrent-ruby (~> 1.0) actioncable (6.0.3.2) actionpack (= 6.0.3.2) @@ -304,7 +304,7 @@ PLATFORMS DEPENDENCIES RedCloth - aasm (~> 4.12.3) + aasm (~> 5.1.1) actionpack-xml_parser (~> 2.0) activemodel-serializers-xml (~> 1.0.1) acts_as_list diff --git a/app/controllers/preferences_controller.rb b/app/controllers/preferences_controller.rb index 9e6db06d..b391ab9c 100644 --- a/app/controllers/preferences_controller.rb +++ b/app/controllers/preferences_controller.rb @@ -9,8 +9,8 @@ class PreferencesController < ApplicationController def update @prefs = current_user.prefs @user = current_user - user_updated = current_user.update_attributes(user_params) - prefs_updated = current_user.preference.update_attributes(prefs_params) + user_updated = current_user.update(user_params) + prefs_updated = current_user.preference.update(prefs_params) if (user_updated && prefs_updated) if params['user']['password'].present? # password updated? logout_user t('preferences.password_changed') diff --git a/app/models/context.rb b/app/models/context.rb index f9331fcb..2eaad6fb 100644 --- a/app/models/context.rb +++ b/app/models/context.rb @@ -35,7 +35,7 @@ class Context < ApplicationRecord validates_presence_of :name, :message => "context must have a name" validates_length_of :name, :maximum => 255, :message => "context name must be less than 256 characters" - validates_uniqueness_of :name, :message => "already exists", :scope => "user_id" + validates_uniqueness_of :name, :message => "already exists", :scope => "user_id", :case_sensitive => false def self.null_object NullContext.new diff --git a/app/models/project.rb b/app/models/project.rb index d10594a9..c7e62a85 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -18,7 +18,7 @@ class Project < ApplicationRecord validates_presence_of :name validates_length_of :name, :maximum => 255 - validates_uniqueness_of :name, :scope => "user_id" + validates_uniqueness_of :name, :scope => "user_id", :case_sensitive => true acts_as_list :scope => 'user_id = #{user_id} AND state = \'#{state}\'', :top_of_list => 0 diff --git a/app/models/recurring_todo.rb b/app/models/recurring_todo.rb index e9f09ff3..2c082fbf 100644 --- a/app/models/recurring_todo.rb +++ b/app/models/recurring_todo.rb @@ -12,8 +12,8 @@ class RecurringTodo < ApplicationRecord include AASM aasm :column => :state do - state :active, :initial => true, :before_enter => Proc.new { |t| t.occurrences_count = 0 } - state :completed, :before_enter => Proc.new { |t| t.completed_at = Time.zone.now }, :before_exit => Proc.new { |t| t.completed_at = nil } + state :active, :initial => true, :before_enter => Proc.new { self.occurrences_count = 0 } + state :completed, :before_enter => Proc.new { self.completed_at = Time.zone.now }, :before_exit => Proc.new { self.completed_at = nil } event :complete do transitions :to => :completed, :from => [:active] diff --git a/app/models/todo.rb b/app/models/todo.rb index c69bb69c..f40da3ca 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -70,13 +70,13 @@ class Todo < ApplicationRecord # state machine include AASM - aasm_initial_state = Proc.new { |t| (t.show_from && t.user && (t.show_from > t.user.date)) ? :deferred : :active} + aasm_initial_state = Proc.new { (self.show_from && self.user && (self.show_from > self.user.date)) ? :deferred : :active} aasm :column => :state do state :active - state :completed, :before_enter => Proc.new { |t| t.completed_at = Time.zone.now }, :before_exit => Proc.new { |t| t.completed_at = nil} - state :deferred, :before_exit => Proc.new { |t| t[:show_from] = nil } + state :completed, :before_enter => Proc.new { self.completed_at = Time.zone.now }, :before_exit => Proc.new { self.completed_at = nil} + state :deferred, :before_exit => Proc.new { self[:show_from] = nil } state :pending event :defer do diff --git a/app/models/user.rb b/app/models/user.rb index fd9bcaad..61c22e98 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -105,7 +105,7 @@ class User < ApplicationRecord validates_presence_of :password_confirmation, if: :password_required? validates_confirmation_of :password validates_length_of :login, within: 3..80 - validates_uniqueness_of :login, on: :create + validates_uniqueness_of :login, on: :create, :case_sensitive => false validate :validate_auth_type validates :email, :allow_blank => true, format: { with: URI::MailTo::EMAIL_REGEXP } diff --git a/app/views/contexts/show.html.erb b/app/views/contexts/show.html.erb index 6b6460c7..f9e111ab 100644 --- a/app/views/contexts/show.html.erb +++ b/app/views/contexts/show.html.erb @@ -21,5 +21,5 @@
<%= render :partial => "shared/add_new_item_form" %> - <%= render :file => "sidebar/sidebar" %> + <%= render :template => "sidebar/sidebar" %>
diff --git a/app/views/feedlist/index.html.erb b/app/views/feedlist/index.html.erb index 544282fe..3bf2318b 100644 --- a/app/views/feedlist/index.html.erb +++ b/app/views/feedlist/index.html.erb @@ -19,5 +19,5 @@
- <%= render :file => "sidebar/sidebar" %> + <%= render :template => "sidebar/sidebar" %>
diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index 0696e175..090371eb 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -42,5 +42,5 @@
<%= render :partial => "shared/add_new_item_form" %> - <%= render :file => "sidebar/sidebar" %> + <%= render :template => "sidebar/sidebar" %>
diff --git a/app/views/todos/index.html.erb b/app/views/todos/index.html.erb index 11b85cca..54042a9c 100644 --- a/app/views/todos/index.html.erb +++ b/app/views/todos/index.html.erb @@ -12,5 +12,5 @@
<%= render :partial => "shared/add_new_item_form" %> - <%= render :file => "sidebar/sidebar" %> -
\ No newline at end of file + <%= render :template => "sidebar/sidebar" %> + diff --git a/app/views/todos/tag.html.erb b/app/views/todos/tag.html.erb index 1c20c5fc..55a4120c 100644 --- a/app/views/todos/tag.html.erb +++ b/app/views/todos/tag.html.erb @@ -27,5 +27,5 @@
<%= render :partial => "shared/add_new_item_form" %> - <%= render :file => "sidebar/sidebar" %> + <%= render :template => "sidebar/sidebar" %>
diff --git a/test/controllers/contexts_controller_test.rb b/test/controllers/contexts_controller_test.rb index 10adb746..f1660f95 100644 --- a/test/controllers/contexts_controller_test.rb +++ b/test/controllers/contexts_controller_test.rb @@ -10,7 +10,7 @@ class ContextsControllerTest < ActionController::TestCase login_as :admin_user get :index end - + def test_show_sets_title login_as :admin_user get :show, params: { :id => "1" } @@ -32,7 +32,7 @@ class ContextsControllerTest < ActionController::TestCase get :show, params: { :id => "1" } assert_template "contexts/show" end - + def test_get_edit_form_using_xhr login_as(:admin_user) get :edit, xhr: true, params: { :id => contexts(:errand).id } @@ -54,26 +54,25 @@ class ContextsControllerTest < ActionController::TestCase end # TXT feed - def test_text_feed_content login_as :admin_user get :index, params: { :format => "txt" } - assert_equal 'text/plain', @response.content_type + assert_equal 'text/plain', @response.media_type assert !(/ /.match(@response.body)) end - + def test_text_feed_not_accessible_to_anonymous_user_without_token login_as nil get :index, params: { :format => "txt" } assert_response 401 end - + def test_text_feed_not_accessible_to_anonymous_user_with_invalid_token login_as nil get :index, params: { :format => "txt", :token => 'foo' } assert_response 401 end - + def test_text_feed_accessible_to_anonymous_user_with_valid_token login_as nil get :index, params: { :format => "txt", :token => users(:admin_user).token } @@ -81,35 +80,33 @@ class ContextsControllerTest < ActionController::TestCase end # REST xml - def test_show_xml_renders_context_to_xml login_as :admin_user get :show, params: { :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, params: { :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, params: { :id => "0", :format => 'xml' } assert_response 404 assert_select 'error', 'Context not found' end - - # RSS + # RSS def test_rss_feed_content login_as :admin_user get :index, params: { :format => "rss" } - assert_equal 'application/rss+xml', @response.content_type + assert_equal 'application/rss+xml', @response.media_type #puts @response.body - + assert_select 'rss[version="2.0"]' do assert_select 'channel' do assert_select '>title', 'Tracks Contexts' @@ -131,19 +128,19 @@ class ContextsControllerTest < ActionController::TestCase end end end - + def test_rss_feed_not_accessible_to_anonymous_user_without_token login_as nil get :index, params: { :format => "rss" } assert_response 401 end - + def test_rss_feed_not_accessible_to_anonymous_user_with_invalid_token login_as nil get :index, params: { :format => "rss", :token => 'foo' } assert_response 401 end - + def test_rss_feed_accessible_to_anonymous_user_with_valid_token login_as nil get :index, params: { :format => "rss", :token => users(:admin_user).token } @@ -151,11 +148,10 @@ class ContextsControllerTest < ActionController::TestCase end # ATOM - def test_atom_feed_content login_as :admin_user get :index, params: { :format => "atom" } - assert_equal 'application/atom+xml', @response.content_type + assert_equal 'application/atom+xml', @response.media_type assert_equal 'http://www.w3.org/2005/Atom', html_document.children[0].namespace.href assert_select 'feed' do assert_select '>title', 'Tracks Contexts' @@ -171,24 +167,22 @@ class ContextsControllerTest < ActionController::TestCase end end end - + def test_atom_feed_not_accessible_to_anonymous_user_without_token login_as nil get :index, params: { :format => "atom" } assert_response 401 end - + def test_atom_feed_not_accessible_to_anonymous_user_with_invalid_token login_as nil get :index, params: { :format => "atom", :token => 'foo' } assert_response 401 end - + def test_atom_feed_accessible_to_anonymous_user_with_valid_token login_as nil get :index, params: { :format => "atom", :token => users(:admin_user).token } assert_response :ok end - - end diff --git a/test/controllers/projects_controller_test.rb b/test/controllers/projects_controller_test.rb index 023d82ba..4666dddd 100644 --- a/test/controllers/projects_controller_test.rb +++ b/test/controllers/projects_controller_test.rb @@ -82,7 +82,7 @@ class ProjectsControllerTest < ActionController::TestCase def test_rss_feed_content login_as(:admin_user) get :index, params: { :format => "rss" } - assert_equal 'application/rss+xml', @response.content_type + assert_equal 'application/rss+xml', @response.media_type #puts @response.body assert_select 'rss[version="2.0"]' do @@ -128,7 +128,7 @@ class ProjectsControllerTest < ActionController::TestCase def test_atom_feed_content login_as :admin_user get :index, params: { :format => "atom" } - assert_equal 'application/atom+xml', @response.content_type + assert_equal 'application/atom+xml', @response.media_type assert_equal 'http://www.w3.org/2005/Atom', html_document.children[0].namespace.href assert_select 'feed' do assert_select '>title', 'Tracks Projects' @@ -166,7 +166,7 @@ class ProjectsControllerTest < ActionController::TestCase def test_text_feed_content login_as :admin_user get :index, params: { :format => "txt" } - assert_equal 'text/plain', @response.content_type + assert_equal 'text/plain', @response.media_type assert !(/ /.match(@response.body)) end @@ -238,7 +238,7 @@ class ProjectsControllerTest < ActionController::TestCase def test_xml_content login_as(:admin_user) get :index, params: { :format => "xml" } - assert_equal 'application/xml', @response.content_type + assert_equal 'application/xml', @response.media_type assert_select 'projects' do assert_select 'project', 3 do diff --git a/test/controllers/todos_controller_test.rb b/test/controllers/todos_controller_test.rb index 731b8497..70983854 100644 --- a/test/controllers/todos_controller_test.rb +++ b/test/controllers/todos_controller_test.rb @@ -128,17 +128,17 @@ class TodosControllerTest < ActionController::TestCase get :tag, params: { name: 'first.last.m' } assert_equal "text/html", request.format, "controller should set right content type" - assert_equal "text/html", @response.content_type + assert_equal "text/html", @response.media_type assert_equal "first.last", assigns['tag_name'], ".m should be chomped" get :tag, params: { name: 'first.last.txt' } assert_equal "text/plain", request.format, "controller should set right content type" - assert_equal "text/plain", @response.content_type + assert_equal "text/plain", @response.media_type assert_equal "first.last", assigns['tag_name'], ".txt should be chomped" get :tag, params: { name: 'first.last' } assert_equal "text/html", request.format, "controller should set right content type" - assert_equal "text/html", @response.content_type + assert_equal "text/html", @response.media_type assert_equal "first.last", assigns['tag_name'], ":name should be correct" end @@ -479,7 +479,7 @@ class TodosControllerTest < ActionController::TestCase def test_rss_feed_not_completed login_as(:admin_user) get :index, params: { :format => "rss" } - assert_equal 'application/rss+xml', @response.content_type + assert_equal 'application/rss+xml', @response.media_type # puts @response.body assert_select 'rss[version="2.0"]' do @@ -502,7 +502,7 @@ class TodosControllerTest < ActionController::TestCase def test_atom_feed_not_completed login_as :admin_user get :index, params: { :format => "atom" } - assert_equal 'application/atom+xml', @response.content_type + assert_equal 'application/atom+xml', @response.media_type assert_equal 'http://www.w3.org/2005/Atom', html_document.children[0].namespace.href assert_select 'feed' do assert_select '>title', 'Tracks Actions' @@ -518,7 +518,7 @@ class TodosControllerTest < ActionController::TestCase def test_text_feed_not_completed login_as(:admin_user) get :index, params: { :format => "txt" } - assert_equal 'text/plain', @response.content_type + assert_equal 'text/plain', @response.media_type assert !(/ /.match(@response.body)) assert_number_of_items_in_text_feed 11 end @@ -526,7 +526,7 @@ class TodosControllerTest < ActionController::TestCase def test_ical_feed_not_completed login_as :admin_user get :index, params: { :format => "ics" } - assert_equal 'text/calendar', @response.content_type + assert_equal 'text/calendar', @response.media_type assert !(/ /.match(@response.body)) assert_number_of_items_in_ical_feed 11 end @@ -756,7 +756,7 @@ class TodosControllerTest < ActionController::TestCase def test_mobile_index_uses_text_html_content_type login_as(:admin_user) get :index, params: { :format => "m" } - assert_equal 'text/html', @response.content_type + assert_equal 'text/html', @response.media_type end def test_mobile_index_assigns_down_count diff --git a/test/models/user_test.rb b/test/models/user_test.rb index 66d5c801..607a0ff1 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -274,12 +274,12 @@ class UserTest < ActiveSupport::TestCase end def test_should_reset_password - users(:other_user).update_attributes(:password => 'new password', :password_confirmation => 'new password') + users(:other_user).update(:password => 'new password', :password_confirmation => 'new password') assert_equal users(:other_user), User.authenticate('jane', 'new password') end def test_should_not_rehash_password - users(:other_user).update_attributes(:login => 'jane2') + users(:other_user).update(:login => 'jane2') assert_equal users(:other_user), User.authenticate('jane2', 'sesame') end