From 50211a3ebe32b0e0c1b1af8e88a8259826d37e4f Mon Sep 17 00:00:00 2001 From: lukemelia Date: Sun, 17 Sep 2006 06:53:33 +0000 Subject: [PATCH] Add a preference to hide hidden contexts in the sidebar. Rework the preferences as a model unto itself and clean up the view and controller code around preferences. git-svn-id: http://www.rousette.org.uk/svn/tracks-repos/trunk@321 a4c988fc-2ded-0310-b66e-134b36920a42 --- tracks/app/controllers/application.rb | 4 +- tracks/app/controllers/login_controller.rb | 6 +- tracks/app/controllers/todo_controller.rb | 2 +- tracks/app/controllers/user_controller.rb | 19 +-- tracks/app/helpers/application_helper.rb | 4 +- tracks/app/helpers/todo_helper.rb | 12 +- tracks/app/models/context.rb | 2 +- tracks/app/models/preference.rb | 18 +++ tracks/app/models/project.rb | 2 +- tracks/app/models/user.rb | 4 +- tracks/app/views/context/show.rhtml | 2 +- tracks/app/views/context/toggle_check.rjs | 2 +- tracks/app/views/project/toggle_check.rjs | 2 +- tracks/app/views/shared/sidebar.rhtml | 4 +- tracks/app/views/todo/toggle_check.rjs | 2 +- .../app/views/user/preference_edit_form.rhtml | 129 +++++------------- tracks/app/views/user/preferences.rhtml | 35 ++--- ...ow_hide_completed_projects_on_home_page.rb | 13 -- .../011_pref_to_show_hide_sidebar_items.rb | 22 +++ .../db/migrate/012_add_preferences_model.rb | 23 ++++ tracks/db/migrate/013_convert_preferences.rb | 40 ++++++ tracks/db/schema.rb | 16 ++- tracks/test/fixtures/preferences.yml | 26 ++++ tracks/test/fixtures/users.yml | 20 +-- .../test/functional/login_controller_test.rb | 4 +- .../test/functional/user_controller_test.rb | 6 +- .../test/integration/context_xml_api_test.rb | 4 +- .../test/integration/project_xml_api_test.rb | 2 +- tracks/test/integration/stories_test.rb | 2 +- tracks/test/test_helper.rb | 9 +- 30 files changed, 236 insertions(+), 200 deletions(-) create mode 100644 tracks/app/models/preference.rb delete mode 100644 tracks/db/migrate/011_pref_to_show_hide_completed_projects_on_home_page.rb create mode 100644 tracks/db/migrate/011_pref_to_show_hide_sidebar_items.rb create mode 100644 tracks/db/migrate/012_add_preferences_model.rb create mode 100644 tracks/db/migrate/013_convert_preferences.rb create mode 100644 tracks/test/fixtures/preferences.yml diff --git a/tracks/app/controllers/application.rb b/tracks/app/controllers/application.rb index 8f7ef3f4..984d38e0 100644 --- a/tracks/app/controllers/application.rb +++ b/tracks/app/controllers/application.rb @@ -74,7 +74,7 @@ class ApplicationController < ActionController::Base def get_current_user @user = User.find(session['user_id']) if session['user_id'] - @prefs = @user.preferences unless @user.nil? + @prefs = @user.preference unless @user.nil? end def get_admin_user @@ -83,7 +83,7 @@ class ApplicationController < ActionController::Base def parse_date_per_user_prefs( s ) return nil if s == '' - Date.strptime(s, @user.preferences["date_format"]) + Date.strptime(s, @user.preference.date_format) end def init_data_for_sidebar diff --git a/tracks/app/controllers/login_controller.rb b/tracks/app/controllers/login_controller.rb index 2d49e1b7..3bf88bbe 100644 --- a/tracks/app/controllers/login_controller.rb +++ b/tracks/app/controllers/login_controller.rb @@ -1,5 +1,5 @@ class LoginController < ApplicationController - model :user + model :user, :preference layout 'login' skip_before_filter :set_session_expiration @@ -34,7 +34,7 @@ class LoginController < ApplicationController @user = get_new_user else # all other situations (i.e. a non-admin is logged in, or no one is logged in, but we have some users) @page_title = "No signups" - @admin_email = admin.preferences["admin_email"] + @admin_email = admin.preference.admin_email render :action => "nosignup" end end @@ -51,7 +51,7 @@ class LoginController < ApplicationController user.is_admin = true if User.find_all.empty? if user.save @user = User.authenticate(user.login, params['user']['password']) - @user.preferences = { "date_format" => "%d/%m/%Y", "week_starts" => "1", "no_completed" => "5", "staleness_starts" => "7", "due_style" => "1", "admin_email" => "butshesagirl@rousette.org.uk"} + @user.create_preference @user.save flash['notice'] = "Signup successful for user #{@user.login}." redirect_back_or_default :controller => "todo", :action => "index" diff --git a/tracks/app/controllers/todo_controller.rb b/tracks/app/controllers/todo_controller.rb index 3002c3bd..736358b8 100644 --- a/tracks/app/controllers/todo_controller.rb +++ b/tracks/app/controllers/todo_controller.rb @@ -22,7 +22,7 @@ class TodoController < ApplicationController # If you've set no_completed to zero, the completed items box # isn't shown on the home page - max_completed = @user.preferences["no_completed"].to_i-1 + max_completed = @user.preference.show_number_completed - 1 @done = nil if max_completed > 0 @done = Todo.find(:all, diff --git a/tracks/app/controllers/user_controller.rb b/tracks/app/controllers/user_controller.rb index da43cb4f..4046f1cd 100644 --- a/tracks/app/controllers/user_controller.rb +++ b/tracks/app/controllers/user_controller.rb @@ -50,29 +50,20 @@ class UserController < ApplicationController def preferences @page_title = "TRACKS::Preferences" - @prefs = @user.preferences + @prefs = @user.preference end def edit_preferences @page_title = "TRACKS::Edit Preferences" - @prefs = @user.preferences + @prefs = @user.preference render :action => "preference_edit_form", :object => @prefs end def update_preferences - @user.preferences = { "date_format" => "#{params['prefs']['date_format']}", - "week_starts" => "#{params['prefs']['week_starts']}", - "no_completed" => "#{params['prefs']['no_completed']}", - "staleness_starts" => "#{params['prefs']['staleness_starts']}", - "show_completed_projects_on_home_page" => "#{params['prefs']['show_completed_projects_on_home_page']}", - "due_style" => "#{params['prefs']['due_style']}", - "admin_email" => "#{params['prefs']['admin_email']}", - "refresh" => "#{params['prefs']['refresh']}" - } - @user.first_name = params['user']['first_name'] - @user.last_name = params['user']['last_name'] - if @user.save + user_success = @user.update_attributes(params['user']) + prefs_success = @user.preference.update_attributes(params['prefs']) + if user_success && prefs_success redirect_to :action => 'preferences' else render :action => 'edit_preferences' diff --git a/tracks/app/helpers/application_helper.rb b/tracks/app/helpers/application_helper.rb index ce213884..a7cc7860 100644 --- a/tracks/app/helpers/application_helper.rb +++ b/tracks/app/helpers/application_helper.rb @@ -6,7 +6,7 @@ module ApplicationHelper # def format_date(date) if date - date_format = @user.preferences["date_format"] + date_format = @user.preference.date_format formatted_date = date.strftime("#{date_format}") else formatted_date = '' @@ -72,7 +72,7 @@ module ApplicationHelper "Due Tomorrow " # due 2-7 days away when 2..7 - if @user.preferences["due_style"] == "1" + if @user.preference.due_style == "1" "Due on " + due.strftime("%A") + " " else "Due in " + @days.to_s + " days " diff --git a/tracks/app/helpers/todo_helper.rb b/tracks/app/helpers/todo_helper.rb index 7ecbb0e3..108b9d86 100644 --- a/tracks/app/helpers/todo_helper.rb +++ b/tracks/app/helpers/todo_helper.rb @@ -44,11 +44,11 @@ module TodoHelper def staleness_class(item) if item.due || item.done? return "" - elsif item.created_at < (@user.preferences["staleness_starts"].to_i*3).days.ago + elsif item.created_at < (@user.preference.staleness_starts * 3).days.ago return " stale_l3" - elsif item.created_at < (@user.preferences["staleness_starts"].to_i*2).days.ago + elsif item.created_at < (@user.preference.staleness_starts * 2).days.ago return " stale_l2" - elsif item.created_at < (@user.preferences["staleness_starts"].to_i).days.ago + elsif item.created_at < (@user.preference.staleness_starts).days.ago return " stale_l1" else return "" @@ -76,7 +76,7 @@ module TodoHelper "Show Tomorrow " # due 2-7 days away when 2..7 - if @user.preferences["due_style"] == "1" + if @user.preference.due_style == 1 "Show on " + due.strftime("%A") + " " else "Show in " + @days.to_s + " days " @@ -99,8 +99,8 @@ module TodoHelper end def calendar_setup( input_field ) - date_format = @user.preferences["date_format"] - week_starts = @user.preferences["week_starts"] + date_format = @user.preference.date_format + week_starts = @user.preference.week_starts str = "Calendar.setup({ ifFormat:\"#{date_format}\"" str << ",firstDay:#{week_starts},showOthers:true,range:[2004, 2010]" str << ",step:1,inputField:\"" + input_field + "\",cache:true,align:\"TR\" })\n" diff --git a/tracks/app/models/context.rb b/tracks/app/models/context.rb index c8e47368..808f1d01 100644 --- a/tracks/app/models/context.rb +++ b/tracks/app/models/context.rb @@ -35,7 +35,7 @@ class Context < ActiveRecord::Base todos = Todo.find :all, :conditions => ["todos.context_id = ? AND todos.type = ? AND todos.done = ?", id, "Immediate", true], :order => "completed DESC", :include => [:context, :project], - :limit => @user.preferences["no_completed"].to_i + :limit => @user.preference.show_number_completed end def hidden? diff --git a/tracks/app/models/preference.rb b/tracks/app/models/preference.rb new file mode 100644 index 00000000..316f2e22 --- /dev/null +++ b/tracks/app/models/preference.rb @@ -0,0 +1,18 @@ +class Preference < ActiveRecord::Base + belongs_to :user + + def self.day_number_to_name_map + { 0 => "Sunday", + 1 => "Monday", + 2 => "Tuesday", + 3 => "Wednesday", + 4 => "Thursday", + 5 => "Friday", + 6 => "Saturday"} + end + + def hide_completed_actions? + return show_number_completed == 0 + end + +end \ No newline at end of file diff --git a/tracks/app/models/project.rb b/tracks/app/models/project.rb index d080c9c7..3ea6e46e 100644 --- a/tracks/app/models/project.rb +++ b/tracks/app/models/project.rb @@ -44,7 +44,7 @@ class Project < ActiveRecord::Base todos = Todo.find :all, :conditions => ["todos.project_id = ? AND todos.type = ? AND todos.done = ?", id, "Immediate", true], :order => "completed DESC", :include => [:context, :project], - :limit => @user.preferences["no_completed"].to_i + :limit => @user.preference.show_number_completed end diff --git a/tracks/app/models/user.rb b/tracks/app/models/user.rb index 73d56cdb..5f4a91d7 100644 --- a/tracks/app/models/user.rb +++ b/tracks/app/models/user.rb @@ -1,14 +1,12 @@ require 'digest/sha1' -# this model expects a certain database layout and its based on the name/login pattern. class User < ActiveRecord::Base has_many :contexts, :order => "position ASC" has_many :projects, :order => "position ASC" has_many :todos, :order => "completed DESC, created_at DESC" has_many :notes, :order => "created_at DESC" + has_one :preference - serialize :preferences - attr_protected :is_admin def self.authenticate(login, pass) diff --git a/tracks/app/views/context/show.rhtml b/tracks/app/views/context/show.rhtml index f36f0058..fa0db281 100644 --- a/tracks/app/views/context/show.rhtml +++ b/tracks/app/views/context/show.rhtml @@ -8,7 +8,7 @@ <%= render :partial => "context/context", :locals => { :context => @context, :collapsible => false } %> <% unless @done.empty? -%> - <%= render :partial => "todo/completed", :locals => { :done => @done, :collapsible => false, :append_descriptor => "in this context (last #{@user.preferences["no_completed"]})" } %> + <%= render :partial => "todo/completed", :locals => { :done => @done, :collapsible => false, :append_descriptor => "in this context (last #{@user.preference.show_number_completed})" } %> <% end -%> diff --git a/tracks/app/views/context/toggle_check.rjs b/tracks/app/views/context/toggle_check.rjs index b20725d8..bb25d3b8 100644 --- a/tracks/app/views/context/toggle_check.rjs +++ b/tracks/app/views/context/toggle_check.rjs @@ -2,7 +2,7 @@ if @saved page.remove "item-#{@item.id}-container" if @item.done? # Don't try to insert contents into a non-existent container! - unless @user.preferences["no_completed"].to_i == 0 + unless @user.preference.hide_completed_actions? page.insert_html :top, "completed", :partial => 'todo/item', :locals => { :parent_container_type => "completed" } page.visual_effect :highlight, "item-#{@item.id}", {'startcolor' => "'#99ff99'"} if @down_count == '0' diff --git a/tracks/app/views/project/toggle_check.rjs b/tracks/app/views/project/toggle_check.rjs index a898baba..4ac8a403 100644 --- a/tracks/app/views/project/toggle_check.rjs +++ b/tracks/app/views/project/toggle_check.rjs @@ -2,7 +2,7 @@ if @saved page.remove "item-#{@item.id}-container" if @item.done? # Don't try to insert contents into a non-existent container! - unless @user.preferences["no_completed"].to_i == 0 + unless @user.preference.hide_completed_actions? page.insert_html :top, "completed", :partial => 'todo/item', :locals => { :parent_container_type => "project" } page.visual_effect :highlight, "item-#{@item.id}", {'startcolor' => "'#99ff99'"} if @down_count == '0' diff --git a/tracks/app/views/shared/sidebar.rhtml b/tracks/app/views/shared/sidebar.rhtml index c272b9fd..1ffbf286 100644 --- a/tracks/app/views/shared/sidebar.rhtml +++ b/tracks/app/views/shared/sidebar.rhtml @@ -6,7 +6,7 @@ <% end -%> -<% if @user.preferences['show_completed_projects_on_home_page'].downcase == 'true' %> +<% if @user.preference.show_completed_projects_in_sidebar %>

Completed Projects:

+<% if @user.preference.show_hidden_contexts_in_sidebar %>

Hidden Contexts:

+<% end %> diff --git a/tracks/app/views/todo/toggle_check.rjs b/tracks/app/views/todo/toggle_check.rjs index 535e6312..a2ff2bc2 100644 --- a/tracks/app/views/todo/toggle_check.rjs +++ b/tracks/app/views/todo/toggle_check.rjs @@ -5,7 +5,7 @@ if @saved # page.call "fadeAndRemoveItem", "item-#{@item.id}-container" if @item.done? # Don't try to insert contents into a non-existent container! - unless @user.preferences["no_completed"].to_i == 0 + unless @user.preference.hide_completed_actions? page.insert_html :top, "completed", :partial => 'todo/item', :locals => { :parent_container_type => "completed" } page.visual_effect :highlight, "item-#{@item.id}", {'startcolor' => "'#99ff99'"} end diff --git a/tracks/app/views/user/preference_edit_form.rhtml b/tracks/app/views/user/preference_edit_form.rhtml index 68246a65..7ccbd66e 100644 --- a/tracks/app/views/user/preference_edit_form.rhtml +++ b/tracks/app/views/user/preference_edit_form.rhtml @@ -3,15 +3,16 @@

The preference settings should mostly be self-explanatory, but some hints are included below:

@@ -27,94 +28,36 @@ <%= text_field 'user', 'last_name' %> - - - - - - - - - - - - - - - - - - - <% if @user.is_admin? %> - - - - - - - <% end %> - - - - - - - - - - - - - - - - - - - - - - - - <%= submit_tag "Update" %> <%= link_to "Cancel", :controller => 'user', :action => 'preferences' %> diff --git a/tracks/app/views/user/preferences.rhtml b/tracks/app/views/user/preferences.rhtml index c24980e6..bdfef812 100644 --- a/tracks/app/views/user/preferences.rhtml +++ b/tracks/app/views/user/preferences.rhtml @@ -11,40 +11,23 @@ <%= link_to "Edit preferences", :controller => 'user', :action => 'edit_preferences' %> | <%= link_to 'Change password', :controller => 'user', :action => 'change_password' %> diff --git a/tracks/db/migrate/011_pref_to_show_hide_completed_projects_on_home_page.rb b/tracks/db/migrate/011_pref_to_show_hide_completed_projects_on_home_page.rb deleted file mode 100644 index 1ed3e4c3..00000000 --- a/tracks/db/migrate/011_pref_to_show_hide_completed_projects_on_home_page.rb +++ /dev/null @@ -1,13 +0,0 @@ -class PrefToShowHideCompletedProjectsOnHomePage < ActiveRecord::Migration - - def self.up - @users = User.find(:all) - @users.each do |user| - user.preferences.merge!({"show_completed_projects_on_home_page" => true}) - user.save - end - end - - def self.down - end -end diff --git a/tracks/db/migrate/011_pref_to_show_hide_sidebar_items.rb b/tracks/db/migrate/011_pref_to_show_hide_sidebar_items.rb new file mode 100644 index 00000000..97bd7f2b --- /dev/null +++ b/tracks/db/migrate/011_pref_to_show_hide_sidebar_items.rb @@ -0,0 +1,22 @@ +class PrefToShowHideSidebarItems < ActiveRecord::Migration + + class User < ActiveRecord::Base; serialize :preferences; end + + def self.up + @users = User.find(:all) + @users.each do |user| + user.preferences.merge!({"show_completed_projects_in_sidebar" => true}) + user.preferences.merge!({"show_hidden_contexts_in_sidebar" => true}) + user.save + end + end + + def self.down + @users = User.find(:all) + @users.each do |user| + user.preferences.delete("show_completed_projects_in_sidebar") + user.preferences.delete("show_hidden_contexts_in_sidebar") + user.save + end + end +end diff --git a/tracks/db/migrate/012_add_preferences_model.rb b/tracks/db/migrate/012_add_preferences_model.rb new file mode 100644 index 00000000..075ef489 --- /dev/null +++ b/tracks/db/migrate/012_add_preferences_model.rb @@ -0,0 +1,23 @@ +class AddPreferencesModel < ActiveRecord::Migration + + class User < ActiveRecord::Base; serialize :preferences; end + + def self.up + create_table :preferences do |t| + t.column :user_id, :integer, :null => false + t.column :date_format, :string, :limit => 40, :null => false, :default => '%d/%m/%Y' + t.column :week_starts, :integer, :null => false, :default => 0 + t.column :show_number_completed, :integer, :null => false, :default => 5 + t.column :staleness_starts, :integer, :null => false, :default => 7 + t.column :show_completed_projects_in_sidebar, :boolean, :default => true, :null => false + t.column :show_hidden_contexts_in_sidebar, :boolean, :default => true, :null => false + t.column :due_style, :integer, :null => false, :default => 0 + t.column :admin_email, :string, :limit => 255, :null => false, :default => 'butshesagirl@rousette.org.uk' + t.column :refresh, :integer, :null => false, :default => 0 + end + end + + def self.down + drop_table :preferences + end +end diff --git a/tracks/db/migrate/013_convert_preferences.rb b/tracks/db/migrate/013_convert_preferences.rb new file mode 100644 index 00000000..dca4b50e --- /dev/null +++ b/tracks/db/migrate/013_convert_preferences.rb @@ -0,0 +1,40 @@ +class ConvertPreferences < ActiveRecord::Migration + + class User < ActiveRecord::Base; has_one :preference; serialize :preferences; end + + def self.up + @users = User.find(:all) + @users.each do |user| + user.create_preference + user.preference.date_format = user.preferences['date_format'] + user.preference.week_starts = user.preferences['week_starts'] + user.preference.show_number_completed = user.preferences['show_number_completed'] + user.preference.staleness_starts = user.preferences['staleness_starts'] + user.preference.show_completed_projects_in_sidebar = user.preferences['show_completed_projects_in_sidebar'] + user.preference.show_hidden_contexts_in_sidebar = user.preferences['show_hidden_contexts_in_sidebar'] + user.preference.due_style = user.preferences['due_style'] + user.preference.admin_email = user.preferences['admin_email'] + user.preference.refresh = user.preferences['refresh'] + user.preference.save! + end + remove_column :users, :preferences + end + + def self.down + add_column :users, :preferences, :text + @users = User.find(:all) + @users.each do |user| + user.preferences = { "date_format" => "#{user.preference.date_format}", + "week_starts" => "#{user.preference.week_starts}", + "no_completed" => "#{user.preference.show_number_completed}", + "staleness_starts" => "#{user.preference.staleness_starts}", + "show_completed_projects_in_sidebar" => "#{user.preference.show_completed_projects_in_sidebar}", + "show_hidden_contexts_in_sidebar" => "#{user.preference.show_hidden_contexts_in_sidebar}", + "due_style" => "#{user.preference.due_style}", + "admin_email" => "#{user.preference.admin_email}", + "refresh" => "#{user.preference.refresh}" + } + user.save + end + end +end diff --git a/tracks/db/schema.rb b/tracks/db/schema.rb index 645cac3c..bea37478 100644 --- a/tracks/db/schema.rb +++ b/tracks/db/schema.rb @@ -2,7 +2,7 @@ # migrations feature of ActiveRecord to incrementally modify your database, and # then regenerate this schema definition. -ActiveRecord::Schema.define(:version => 11) do +ActiveRecord::Schema.define(:version => 13) do create_table "contexts", :force => true do |t| t.column "name", :string, :default => "", :null => false @@ -19,6 +19,19 @@ ActiveRecord::Schema.define(:version => 11) do t.column "updated_at", :datetime end + create_table "preferences", :force => true do |t| + t.column "user_id", :integer, :default => 0, :null => false + t.column "date_format", :string, :limit => 40, :default => "%d/%m/%Y", :null => false + t.column "week_starts", :integer, :default => 0, :null => false + t.column "show_number_completed", :integer, :default => 5, :null => false + t.column "staleness_starts", :integer, :default => 14, :null => false + t.column "show_completed_projects_in_sidebar", :boolean, :default => true, :null => false + t.column "show_hidden_contexts_in_sidebar", :boolean, :default => true, :null => false + t.column "due_style", :integer, :default => 0, :null => false + t.column "admin_email", :string, :default => "", :null => false + t.column "refresh", :integer, :default => 0, :null => false + end + create_table "projects", :force => true do |t| t.column "name", :string, :default => "", :null => false t.column "position", :integer, :default => 0, :null => false @@ -54,7 +67,6 @@ ActiveRecord::Schema.define(:version => 11) do t.column "password", :string, :limit => 40 t.column "word", :string t.column "is_admin", :integer, :limit => 4, :default => 0, :null => false - t.column "preferences", :text t.column "first_name", :string t.column "last_name", :string end diff --git a/tracks/test/fixtures/preferences.yml b/tracks/test/fixtures/preferences.yml new file mode 100644 index 00000000..52908c1c --- /dev/null +++ b/tracks/test/fixtures/preferences.yml @@ -0,0 +1,26 @@ +# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html +admin_user_prefs: + id: 1 + user_id: 1 + staleness_starts: 7 + date_format: "%d/%m/%Y" + show_number_completed: 5 + show_completed_projects_in_sidebar: true + show_hidden_contexts_in_sidebar: true + admin_email: butshesagirl@rousette.org.uk + week_starts: 1 + due_style: 0 + refresh: 0 + +other_user_prefs: + id: 2 + user_id: 2 + staleness_starts: 7 + date_format: "%d/%m/%Y" + show_number_completed: 5 + show_completed_projects_in_sidebar: true + show_hidden_contexts_in_sidebar: true + admin_email: butshesagirl@rousette.org.uk + week_starts: 1 + due_style: 0 + refresh: 0 diff --git a/tracks/test/fixtures/users.yml b/tracks/test/fixtures/users.yml index 388c0aa2..b613202f 100644 --- a/tracks/test/fixtures/users.yml +++ b/tracks/test/fixtures/users.yml @@ -5,14 +5,8 @@ admin_user: password: <%= Digest::SHA1.hexdigest("#{User.get_salt()}--abracadabra--") %> word: <%= Digest::SHA1.hexdigest("adminSat Feb 25 17:14:00 GMT 20060.236961325863376") %> is_admin: true - preferences: - staleness_starts: "7" - date_format: "%d/%m/%Y" - no_completed: "5" - admin_email: butshesagirl@rousette.org.uk - weeks_starts: "1" - due_style: "0" - refresh: "0" + first_name: Admin + last_name: Schmadmin other_user: id: 2 @@ -20,11 +14,5 @@ other_user: password: <%= Digest::SHA1.hexdigest("#{User.get_salt()}--sesame--") %> word: <%= Digest::SHA1.hexdigest("janeSun Feb 19 14:42:45 GMT 20060.408173979260027") %> is_admin: false - preferences: - staleness_starts: "7" - date_format: "%d/%m/%Y" - no_completed: "5" - admin_email: butshesagirl@rousette.org.uk - weeks_starts: "1" - due_style: "0" - refresh: "0" + first_name: Jane + last_name: Doe diff --git a/tracks/test/functional/login_controller_test.rb b/tracks/test/functional/login_controller_test.rb index dbda2c47..d11d0b7a 100644 --- a/tracks/test/functional/login_controller_test.rb +++ b/tracks/test/functional/login_controller_test.rb @@ -6,7 +6,7 @@ require_dependency "login_system" class LoginController; def rescue_action(e) raise e end; end class LoginControllerTest < Test::Unit::TestCase - fixtures :users + fixtures :preferences, :users def setup assert_equal "test", ENV['RAILS_ENV'] @@ -87,7 +87,7 @@ class LoginControllerTest < Test::Unit::TestCase get :logout # logout the admin user assert_equal newbie.login, "newbie" assert newbie.is_admin == false || newbie.is_admin == 0 - assert_not_nil newbie.preferences # have user preferences been created? + assert_not_nil newbie.preference # have user preferences been created? user = login('newbie', 'newbiepass', 'on') # log in the new user assert_redirected_to :controller => 'todo', :action => 'index' assert_equal 'newbie', user.login diff --git a/tracks/test/functional/user_controller_test.rb b/tracks/test/functional/user_controller_test.rb index a1391465..39b2a426 100644 --- a/tracks/test/functional/user_controller_test.rb +++ b/tracks/test/functional/user_controller_test.rb @@ -44,7 +44,6 @@ class UserControllerTest < Test::Unit::TestCase assert_response :success assert_equal assigns['page_title'], "TRACKS::Preferences" assert_not_nil assigns['prefs'] - assert_equal assigns['prefs'].length, 7 end def test_edit_preferences @@ -55,7 +54,6 @@ class UserControllerTest < Test::Unit::TestCase assert_response :success assert_equal assigns['page_title'], "TRACKS::Edit Preferences" assert_not_nil assigns['prefs'] - assert_equal assigns['prefs'].length, 7 assert_template 'user/preference_edit_form' end @@ -64,9 +62,9 @@ class UserControllerTest < Test::Unit::TestCase # def test_update_preferences @request.session['user_id'] = users(:admin_user).id # log in the admin user - post :update_preferences, {:user => { :first_name => 'Jane', :last_name => 'Doe'}, :prefs => { :date_format => "%m-%d-%Y", :week_starts => "0", :no_completed => "10", :staleness_starts => "14", :due_style => "1", :admin_email => "my.email@domain.com" }} + post :update_preferences, {:user => { :first_name => 'Jane', :last_name => 'Doe'}, :prefs => { :date_format => "%m-%d-%Y", :week_starts => "0", :show_number_completed => "10", :show_completed_projects_in_sidebar => "false", :show_hidden_contexts_in_sidebar => "false", :staleness_starts => "14", :due_style => "1", :admin_email => "my.email@domain.com" }} updated_admin_user = User.find(users(:admin_user).id) - assert_not_nil updated_admin_user.preferences + assert_not_nil updated_admin_user.preference assert_equal 'Jane', updated_admin_user.first_name assert_equal 'Doe', updated_admin_user.last_name assert_redirected_to :action => 'preferences' diff --git a/tracks/test/integration/context_xml_api_test.rb b/tracks/test/integration/context_xml_api_test.rb index aceb363a..1d9562e7 100644 --- a/tracks/test/integration/context_xml_api_test.rb +++ b/tracks/test/integration/context_xml_api_test.rb @@ -50,10 +50,10 @@ class ContextControllerXmlApiTest < ActionController::IntegrationTest assert_response_and_body 404, "Name cannot contain the slash ('/') character" end - def test_creates_new_project + def test_creates_new_context initial_count = Context.count authenticated_post_xml_to_context_create - assert_response_and_body 200, "\n\n #{@@context_name}\n 0\n 0\n 1\n\n" + assert_response_and_body_matches 200, %r|^<\?xml version="1.0" encoding="UTF-8"\?>\n\n #{@@context_name}\n 0\n \d+\n 1\n\n$| assert_equal initial_count + 1, Context.count context1 = Context.find_by_name(@@context_name) assert_not_nil context1, "expected context '#{@@context_name}' to be created" diff --git a/tracks/test/integration/project_xml_api_test.rb b/tracks/test/integration/project_xml_api_test.rb index eac36a38..4f71d687 100644 --- a/tracks/test/integration/project_xml_api_test.rb +++ b/tracks/test/integration/project_xml_api_test.rb @@ -53,7 +53,7 @@ class ProjectControllerXmlApiTest < ActionController::IntegrationTest def test_creates_new_project initial_count = Project.count authenticated_post_xml_to_project_create - assert_response_and_body 200, "\n\n #{@@project_name}\n 0\n 0\n \n 1\n\n" + assert_response_and_body_matches 200, %r|^<\?xml version="1\.0" encoding="UTF-8"\?>\n\n #{@@project_name}\n 0\n [0-9]+\n \n 1\n\n$| assert_equal initial_count + 1, Project.count project1 = Project.find_by_name(@@project_name) assert_not_nil project1, "expected project '#{@@project_name}' to be created" diff --git a/tracks/test/integration/stories_test.rb b/tracks/test/integration/stories_test.rb index e38cbee5..0fb6edde 100644 --- a/tracks/test/integration/stories_test.rb +++ b/tracks/test/integration/stories_test.rb @@ -1,7 +1,7 @@ require "#{File.dirname(__FILE__)}/../test_helper" class StoriesTest < ActionController::IntegrationTest - fixtures :users, :projects, :contexts, :todos, :notes + fixtures :users, :preferences, :projects, :contexts, :todos, :notes def setup assert_test_environment_ok diff --git a/tracks/test/test_helper.rb b/tracks/test/test_helper.rb index 9bf82ae0..ac0b55bd 100644 --- a/tracks/test/test_helper.rb +++ b/tracks/test/test_helper.rb @@ -71,11 +71,16 @@ class ActionController::IntegrationTest }.merge(headers) end - def assert_response_and_body (type, body, message = nil) + def assert_response_and_body(type, body, message = nil) #puts @response.body assert_response type, message assert_equal body, @response.body, message - end + end + + def assert_response_and_body_matches(type, body_regex, message = nil) + assert_response type, message + assert_match body_regex, @response.body, message + end def assert_401_unauthorized assert_response_and_body 401, "401 Unauthorized: You are not authorized to interact with Tracks."