Mercurial > hg > soundsoftware-site
changeset 84:432bb11e0390 cannam
Merge from branch "luisf"
author | Chris Cannam |
---|---|
date | Thu, 16 Dec 2010 10:03:20 +0000 |
parents | 8a49eabbb30a (current diff) 387ad4f40686 (diff) |
children | 22c68d60853d |
files | config/locales/en-GB.yml config/locales/en.yml |
diffstat | 19 files changed, 331 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/app/controllers/account_controller.rb Tue Dec 14 14:05:06 2010 +0000 +++ b/app/controllers/account_controller.rb Thu Dec 16 10:03:20 2010 +0000 @@ -77,13 +77,19 @@ # User self-registration def register redirect_to(home_url) && return unless Setting.self_registration? || session[:auth_source_registration] + if request.get? session[:auth_source_registration] = nil @user = User.new(:language => Setting.default_language) + + @ssamr_user_details = SsamrUserDetail.new + else @user = User.new(params[:user]) @user.admin = false + @user.register + if session[:auth_source_registration] @user.activate @user.login = session[:auth_source_registration][:login] @@ -98,6 +104,11 @@ @user.login = params[:user][:login] @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] + @ssamr_user_details = SsamrUserDetail.new(params[:ssamr_user_details]) + + # associates the 2 objects + @user.ssamr_user_detail = @ssamr_user_details + case Setting.self_registration when '1' register_by_email_activation(@user) @@ -257,6 +268,9 @@ # Pass a block for behavior when a user fails to save def register_manually_by_administrator(user, &block) if user.save + + @ssamr_user_details.save! + # Sends an email to the administrators Mailer.deliver_account_activation_request(user) account_pending
--- a/app/controllers/issues_controller.rb Tue Dec 14 14:05:06 2010 +0000 +++ b/app/controllers/issues_controller.rb Thu Dec 16 10:03:20 2010 +0000 @@ -132,7 +132,19 @@ attachments = Attachment.attach_files(@issue, params[:attachments]) render_attachment_warning_if_needed(@issue) flash[:notice] = l(:notice_successful_create) + call_hook(:controller_issues_new_after_save, { :params => params, :issue => @issue}) + + # Adds user to watcher's list + @issue.add_watcher(User.current) + + # Also adds the assignee to the watcher's list + if params[:issue][:assigned_to_id] && !params[:issue][:assigned_to_id].empty?: + unless @issue.watcher_ids.include?(params[:issue][:assigned_to_id]): + @issue.add_watcher(User.find(params[:issue][:assigned_to_id])) + end + end + respond_to do |format| format.html { redirect_to(params[:continue] ? { :action => 'new', :project_id => @project, :issue => {:tracker_id => @issue.tracker, :parent_issue_id => @issue.parent_issue_id}.reject {|k,v| v.nil?} } : @@ -274,6 +286,18 @@ @notes = params[:notes] || (params[:issue].present? ? params[:issue][:notes] : nil) @issue.init_journal(User.current, @notes) @issue.safe_attributes = params[:issue] + + # tests if the the user assigned_to_id + # is in this issues watcher's list + # if not, adds it. + + if params[:issue][:assigned_to_id] && !params[:issue][:assigned_to_id].empty?: + unless @issue.watcher_ids.include?(params[:issue][:assigned_to_id]): + @issue.add_watcher(User.find(params[:issue][:assigned_to_id])) + end + end + + end # TODO: Refactor, lots of extra code in here
--- a/app/controllers/users_controller.rb Tue Dec 14 14:05:06 2010 +0000 +++ b/app/controllers/users_controller.rb Thu Dec 16 10:03:20 2010 +0000 @@ -52,6 +52,8 @@ def show @user = User.find(params[:id]) + @description = @user.ssamr_user_detail.description + # show projects based on current user visibility @memberships = @user.memberships.all(:conditions => Project.visible_by(User.current)) @@ -70,12 +72,15 @@ render_404 end - def new + def new @notification_options = User::MAIL_NOTIFICATION_OPTIONS @notification_option = Setting.default_notification_option @user = User.new(:language => Setting.default_language) @auth_sources = AuthSource.find(:all) + + @ssamr_user_details = SsamrUserDetail.new + end verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } @@ -83,7 +88,7 @@ @notification_options = User::MAIL_NOTIFICATION_OPTIONS @notification_option = Setting.default_notification_option - @user = User.new(params[:user]) + @user = User.new(params[:user]) @user.admin = params[:user][:admin] || false @user.login = params[:user][:login] @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id @@ -93,8 +98,16 @@ @user.pref.attributes = params[:pref] @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') + @ssamr_user_details = SsamrUserDetail.new(params[:ssamr_user_details]) + + # associates the 2 objects + @user.ssamr_user_detail = @ssamr_user_details + if @user.save @user.pref.save + + @ssamr_user_details.save! + @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) Mailer.deliver_account_information(@user, params[:password]) if params[:send_information] @@ -114,7 +127,9 @@ @user = User.find(params[:id]) @notification_options = @user.valid_notification_options @notification_option = @user.mail_notification - + + @ssamr_user_details = @user.ssamr_user_detail + @auth_sources = AuthSource.find(:all) @membership ||= Member.new end @@ -122,6 +137,7 @@ verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } def update @user = User.find(params[:id]) + @notification_options = @user.valid_notification_options @notification_option = @user.mail_notification @@ -139,6 +155,14 @@ @user.pref.attributes = params[:pref] @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') + @ssamr_user_details = @user.ssamr_user_detail + if params[:ssamr_user_details].nil? or params[:ssamr_user_details].empty? + @ssamr_user_details.description = @user.ssamr_user_detail.description + else + @ssamr_user_details.description = params[:ssamr_user_details][:description] + @ssamr_user_details.save! + end + if @user.save @user.pref.save @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : [])
--- a/app/helpers/projects_helper.rb Tue Dec 14 14:05:06 2010 +0000 +++ b/app/helpers/projects_helper.rb Thu Dec 16 10:03:20 2010 +0000 @@ -83,6 +83,113 @@ s end + + # Renders a tree of projects where the current user belongs + # as a nested set of unordered lists + # The given collection may be a subset of the whole project tree + # (eg. some intermediate nodes are private and can not be seen) + def render_my_project_hierarchy(projects) + s = '' + + a = '' + + # Flag to tell if user has any projects + t = FALSE + + if projects.any? + ancestors = [] + original_project = @project + projects.each do |project| + # set the project environment to please macros. + + @project = project + + if User.current.member_of?(project): + + t = TRUE + + if (ancestors.empty? || project.is_descendant_of?(ancestors.last)) + s << "<ul class='projects #{ ancestors.empty? ? 'root' : nil}'>\n" + else + ancestors.pop + s << "</li>" + while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) + ancestors.pop + s << "</ul></li>\n" + end + end + + classes = (ancestors.empty? ? 'root' : 'child') + s << "<li class='#{classes}'><div class='#{classes}'>" + + link_to_project(project, {}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}") + s << "<div class='wiki description'>#{textilizable(project.short_description, :project => project)}</div>" unless project.description.blank? + s << "</div>\n" + ancestors << project + end + end + s << ("</li></ul>\n" * ancestors.size) + @project = original_project + end + + if t == TRUE + a << "<h2>" + a << l("label_my_project_plural") + a << "</h2>" + a << s + else + a = s + end + + a + end + + # Renders a tree of projects where the current DOES NOT belong + # as a nested set of unordered lists + # The given collection may be a subset of the whole project tree + # (eg. some intermediate nodes are private and can not be seen) + def render_other_project_hierarchy(projects) + s = '' + + if projects.any? + ancestors = [] + original_project = @project + projects.each do |project| + # set the project environment to please macros. + + @project = project + + if not User.current.member_of?(project): + + if (ancestors.empty? || project.is_descendant_of?(ancestors.last)) + s << "<ul class='projects #{ ancestors.empty? ? 'root' : nil}'>\n" + else + ancestors.pop + s << "</li>" + while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) + ancestors.pop + s << "</ul></li>\n" + end + end + + classes = (ancestors.empty? ? 'root' : 'child') + s << "<li class='#{classes}'><div class='#{classes}'>" + + link_to_project(project, {}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}") + s << "<div class='wiki description'>#{textilizable(project.short_description, :project => project)}</div>" unless project.description.blank? + s << "</div>\n" + ancestors << project + end + end + + s << ("</li></ul>\n" * ancestors.size) + @project = original_project + end + + + s + end + + + # Returns a set of options for a select field, grouped by project. def version_options_for_select(versions, selected=nil) grouped = Hash.new {|h,k| h[k] = []}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/models/ssamr_user_detail.rb Thu Dec 16 10:03:20 2010 +0000 @@ -0,0 +1,5 @@ +class SsamrUserDetail < ActiveRecord::Base + belongs_to :user + + validates_presence_of :description +end
--- a/app/models/user.rb Tue Dec 14 14:05:06 2010 +0000 +++ b/app/models/user.rb Thu Dec 16 10:03:20 2010 +0000 @@ -51,6 +51,9 @@ has_one :api_token, :dependent => :destroy, :class_name => 'Token', :conditions => "action='api'" belongs_to :auth_source + has_one :ssamr_user_detail, :dependent => :destroy, :class_name => 'SsamrUserDetail' + accepts_nested_attributes_for :ssamr_user_detail + # Active non-anonymous users scope named_scope :active, :conditions => "#{User.table_name}.status = #{STATUS_ACTIVE}" @@ -62,6 +65,9 @@ attr_protected :login, :admin, :password, :password_confirmation, :hashed_password, :group_ids validates_presence_of :login, :firstname, :lastname, :mail, :if => Proc.new { |user| !user.is_a?(AnonymousUser) } + + # TODO: is this validation correct validates_presence_of :ssamr_user_detail + validates_uniqueness_of :login, :if => Proc.new { |user| !user.login.blank? }, :case_sensitive => false validates_uniqueness_of :mail, :if => Proc.new { |user| !user.mail.blank? }, :case_sensitive => false # Login must contain lettres, numbers, underscores only @@ -92,6 +98,10 @@ write_attribute(:mail, arg.to_s.strip) end + def description=(arg) + write_attribute(:description, arg.to_s.strip) + end + def identity_url=(url) if url.blank? write_attribute(:identity_url, '')
--- a/app/views/account/register.rhtml Tue Dec 14 14:05:06 2010 +0000 +++ b/app/views/account/register.rhtml Thu Dec 16 10:03:20 2010 +0000 @@ -29,6 +29,23 @@ <p><label for="user_language"><%=l(:field_language)%></label> <%= select("user", "language", lang_options_for_select) %></p> + +<h3><%=l(:label_ssamr_details)%></h3> + + <% fields_for :ssamr_user_details, :builder => TabularFormBuilder, :lang => current_language do |ssamr_user_detail| %> + <p> + + <%= ssamr_user_detail.text_area :description, :rows => 3, :cols => 40, :required => true, :class => 'wiki-edit' %> + <%= wikitoolbar_for 'ssamr_user_details_description' %> + + <br /> + <em> <%=l(:text_user_ssamr_description_info)%></em> + </p> + <% end %> + + + + <% if Setting.openid? %> <p><label for="user_identity_url"><%=l(:field_identity_url)%></label> <%= text_field 'user', 'identity_url' %></p>
--- a/app/views/issues/_form.rhtml Tue Dec 14 14:05:06 2010 +0000 +++ b/app/views/issues/_form.rhtml Thu Dec 16 10:03:20 2010 +0000 @@ -9,9 +9,12 @@ <p><%= f.text_field :subject, :size => 80, :required => true %></p> <% if User.current.allowed_to?(:manage_subtasks, @project) %> -<p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10 %></p> -<div id="parent_issue_candidates" class="autocomplete"></div> -<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %> + <p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10, :autocomplete => :on %> + <br /> + <em> <%=l(:text_issue_parent_issue_info)%></em> + </p> + <div id="parent_issue_candidates" class="autocomplete"></div> + <%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %> <% end %> <p><%= f.text_area :description,
--- a/app/views/mailer/account_activation_request.text.html.rhtml Tue Dec 14 14:05:06 2010 +0000 +++ b/app/views/mailer/account_activation_request.text.html.rhtml Thu Dec 16 10:03:20 2010 +0000 @@ -1,2 +1,12 @@ <p><%= l(:mail_body_account_activation_request, h(@user.login)) %></p> <p><%= link_to @url, @url %></p> + +<h3><%= l(:label_ssamr_details) %></h3> +<p> + <%=l(:field_name)%>: <%= h @user.name %><br /> + <%=l(:field_mail)%>: <%= h @user.mail %> +</p> + +<h4><%= l(:label_ssamr_description ) %></h4> +<%= textilizable @user.ssamr_user_detail['description'] %> +
--- a/app/views/mailer/account_activation_request.text.plain.rhtml Tue Dec 14 14:05:06 2010 +0000 +++ b/app/views/mailer/account_activation_request.text.plain.rhtml Thu Dec 16 10:03:20 2010 +0000 @@ -1,2 +1,11 @@ <%= l(:mail_body_account_activation_request, @user.login) %> <%= @url %> + +*<%= l(:label_ssamr_details) %>* +<%=l(:field_name)%>: <%= h @user.name %> +<%=l(:field_mail)%>: <%= h @user.mail %> + +*<%= l(:label_ssamr_description ) %>* +<%= h @user.ssamr_user_detail['description'] %> + +
--- a/app/views/projects/_form.rhtml Tue Dec 14 14:05:06 2010 +0000 +++ b/app/views/projects/_form.rhtml Thu Dec 16 10:03:20 2010 +0000 @@ -2,7 +2,10 @@ <div class="box"> <!--[form:project]--> -<p><%= f.text_field :name, :required => true, :size => 60 %></p> +<p><%= f.text_field :name, :required => true, :size => 60 %> + <br /> + <em> <%= l(:text_project_name_info) %></em> +</p> <% unless @project.allowed_parents.compact.empty? %> <p><%= label(:project, :parent_id, l(:field_parent)) %><%= parent_project_select_tag(@project) %></p> @@ -11,10 +14,17 @@ <p><%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %></p> <p><%= f.text_field :identifier, :required => true, :size => 60, :disabled => @project.identifier_frozen? %> <% unless @project.identifier_frozen? %> -<br /><em><%= l(:text_length_between, :min => 1, :max => Project::IDENTIFIER_MAX_LENGTH) %> <%= l(:text_project_identifier_info) %></em> + <br /> + <em><%= l(:text_length_between, :min => 1, :max => Project::IDENTIFIER_MAX_LENGTH) %> <%= l(:text_project_identifier_info) %></em> <% end %></p> -<p><%= f.text_field :homepage, :size => 60 %></p> -<p><%= f.check_box :is_public %></p> +<p><%= f.text_field :homepage, :size => 60 %> +<br /> + <em> <%= l(:text_project_homepage_info) %></em> +</p> +<p><%= f.check_box :is_public %> +<br /> + <em> <%= l(:text_project_visibility_info) %></em> +</p> <%= wikitoolbar_for 'project_description' %> <% @project.custom_field_values.each do |value| %>
--- a/app/views/projects/index.rhtml Tue Dec 14 14:05:06 2010 +0000 +++ b/app/views/projects/index.rhtml Thu Dec 16 10:03:20 2010 +0000 @@ -9,9 +9,20 @@ <%= link_to l(:label_overall_activity), { :controller => 'activities', :action => 'index' }%> </div> -<h2><%=l(:label_project_plural)%></h2> +<% if User.current.logged? %> + + <%= render_my_project_hierarchy(@projects)%> -<%= render_project_hierarchy(@projects)%> + <h2><%=l(:label_other_project_plural)%></h2> + <%= render_other_project_hierarchy(@projects)%> + +<% else %> + + <h2><%=l(:label_project_plural)%></h2> + <%= render_project_hierarchy(@projects)%> +<% end %> + + <% if User.current.logged? %> <p style="text-align:right;"> @@ -19,6 +30,7 @@ </p> <% end %> + <% other_formats_links do |f| %> <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %> <% end %>
--- a/app/views/projects/settings/_members.rhtml Tue Dec 14 14:05:06 2010 +0000 +++ b/app/views/projects/settings/_members.rhtml Thu Dec 16 10:03:20 2010 +0000 @@ -13,19 +13,18 @@ </tr></thead> <tbody> <% members.each do |member| %> - <% next if member.new_record? %> - <tr id="member-<%= member.id %>" class="<%= cycle 'odd', 'even' %> member"> - <td class="<%= member.principal.class.name.downcase %>"><%= link_to_user member.principal %></td> - <td class="roles"> - <span id="member-<%= member.id %>-roles"><%=h member.roles.sort.collect(&:to_s).join(', ') %></span> - <% if authorize_for('members', 'edit') %> - <% remote_form_for(:member, member, :url => {:controller => 'members', :action => 'edit', :id => member}, - :method => :post, - :html => { :id => "member-#{member.id}-roles-form", :class => 'hol' }) do |f| %> - <p><% roles.each do |role| %> - <label><%= check_box_tag 'member[role_ids][]', role.id, member.roles.include?(role), + <% next if member.new_record? %> + <tr id="member-<%= member.id %>" class="<%= cycle 'odd', 'even' %> member"> + <td class="<%= member.principal.class.name.downcase %>"><%= link_to_user member.principal %></td> + <td class="roles"> + <span id="member-<%= member.id %>-roles"><%=h member.roles.sort.collect(&:to_s).join(', ') %></span> + <% if authorize_for('members', 'edit') %> + <% remote_form_for(:member, member, :url => {:controller => 'members', :action => 'edit', :id => member}, + :method => :post, :html => { :id => "member-#{member.id}-roles-form", :class => 'hol' }) do |f| %> + <p><% roles.each do |role| %> + <label><%= check_box_tag 'member[role_ids][]', role.id, member.roles.include?(role), :disabled => member.member_roles.detect {|mr| mr.role_id == role.id && !mr.inherited_from.nil?} %> <%=h role %></label><br /> - <% end %></p> + <% end %></p> <%= hidden_field_tag 'member[role_ids][]', '' %> <p><%= submit_tag l(:button_change), :class => "small" %> <%= link_to_function l(:button_cancel), "$('member-#{member.id}-roles').show(); $('member-#{member.id}-roles-form').hide(); return false;" %></p> @@ -51,7 +50,7 @@ </div> -<% principals = Principal.active.find(:all, :limit => 100, :order => 'type, login, lastname ASC') - @project.principals %> +<% principals = Principal.active.find(:all, :limit => 10, :order => 'type, login, lastname ASC') - @project.principals %> <div class="splitcontentright"> <% if roles.any? && principals.any? %>
--- a/app/views/users/_form.rhtml Tue Dec 14 14:05:06 2010 +0000 +++ b/app/views/users/_form.rhtml Thu Dec 16 10:03:20 2010 +0000 @@ -20,6 +20,20 @@ </div> <div class="box tabular"> + <h3><%=l(:label_ssamr_details)%></h3> + <% fields_for :ssamr_user_details, :builder => TabularFormBuilder, :lang => current_language do |ssamr_user_detail| %> + <p> + <%= ssamr_user_detail.text_area :description, :rows => 3, :cols => 40, :required => true, :class => 'wiki-edit' %> + <%= wikitoolbar_for 'ssamr_user_details_description' %> + <br /> + <em> <%=l(:text_user_ssamr_description_info)%></em> + </p> + <% end %> +</div> + + + +<div class="box tabular"> <h3><%=l(:label_authentication)%></h3> <% unless @auth_sources.empty? %> <p><%= f.select :auth_source_id, ([[l(:label_internal), ""]] + @auth_sources.collect { |a| [a.name, a.id] }), {}, :onchange => "if (this.value=='') {Element.show('password_fields');} else {Element.hide('password_fields');}" %></p>
--- a/app/views/users/show.rhtml Tue Dec 14 14:05:06 2010 +0000 +++ b/app/views/users/show.rhtml Thu Dec 16 10:03:20 2010 +0000 @@ -20,6 +20,10 @@ <% end %> </ul> +<h3><%=l(:label_ssamr_description)%></h3> +<%= textilizable @description %> + + <% unless @memberships.empty? %> <h3><%=l(:label_project_plural)%></h3> <ul>
--- a/config/locales/en.yml Tue Dec 14 14:05:06 2010 +0000 +++ b/config/locales/en.yml Thu Dec 16 10:03:20 2010 +0000 @@ -200,7 +200,9 @@ gui_validation_error: 1 error gui_validation_error_plural: "{{count}} errors" - + + field_ssamr_user_detail: + description: User Description field_name: Name field_description: Description field_summary: Summary @@ -299,11 +301,12 @@ field_text: Text field field_visible: Visible + setting_tipoftheday_text: Tip of the Day + setting_notifications_text: Notifications + label_ssamr_description: Description setting_app_title: Application title setting_app_subtitle: Application subtitle setting_welcome_text: Welcome text - setting_tipoftheday_text: Tip of the Day - setting_notifications_text: Notifications setting_default_language: Default language setting_login_required: Authentication required setting_self_registration: Self-registration @@ -425,6 +428,7 @@ project_module_gantt: Gantt label_tipoftheday: Tip of the day + label_ssamr_details: Other Details label_user: User label_user_plural: Users label_user_new: New user @@ -432,6 +436,8 @@ label_project: Project label_project_new: New project label_project_plural: Projects + label_my_project_plural: My Projects + label_other_project_plural: Other Projects label_x_projects: zero: no projects one: 1 project @@ -859,7 +865,12 @@ text_tip_issue_begin_day: issue beginning this day text_tip_issue_end_day: issue ending this day text_tip_issue_begin_end_day: issue beginning and ending this day - text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.' + text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br /> This will be used in all project-related URLs, and as the repository name. Once saved, the identifier <b>can not</b> be changed.' + text_project_name_info: "This will be the name of your project throughout this site.<br /> You can change your project's name at any time, in the project's settings." + text_project_visibility_info: "If your project is not public, it will only be visible to users that you have added as project members." + text_project_homepage_info: 'Link to an external project page.' + text_user_ssamr_description_info: 'Description of your interests and experience as a Researcher/Developer in the field of Audio and Music.' + text_issue_parent_issue_info: 'If this is a subtask, please insert its parent task number or write the main task name.' text_caracters_maximum: "{{count}} characters maximum." text_caracters_minimum: "Must be at least {{count}} characters long." text_length_between: "Length between {{min}} and {{max}} characters."
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20101123161346_create_ssamr_user_details.rb Thu Dec 16 10:03:20 2010 +0000 @@ -0,0 +1,14 @@ +class CreateSsamrUserDetails < ActiveRecord::Migration + def self.up + create_table :ssamr_user_details do |t| + t.integer :user_id + t.text :description + t.text :university + end + end + + def self.down + drop_table :ssamr_user_details + end + +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/fixtures/ssamr_user_details.yml Thu Dec 16 10:03:20 2010 +0000 @@ -0,0 +1,7 @@ +# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html + +# one: +# column: value +# +# two: +# column: value
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/unit/ssamr_user_details_test.rb Thu Dec 16 10:03:20 2010 +0000 @@ -0,0 +1,8 @@ +require 'test_helper' + +class SsamrUserDetailsTest < ActiveSupport::TestCase + # Replace this with your real tests. + test "User Id should be correct" do + assert_equal user_id, user.id + end +end