diff --git a/app/controllers/public/account_controller.rb b/app/controllers/public/account_controller.rb index 4b5483a..c7d8b18 100644 --- a/app/controllers/public/account_controller.rb +++ b/app/controllers/public/account_controller.rb @@ -60,6 +60,10 @@ class AccountController < ApplicationController def signup @invitation_code = params[:invitation_code] begin + if params[:user] + params[:user].delete(:password_confirmation_clear) + params[:user].delete(:password_clear) + end @user = User.new(params[:user]) @user.terms_of_use = environment.terms_of_use @user.environment = environment @@ -209,16 +213,26 @@ class AccountController < ApplicationController @identifier = params[:identifier] valid = Person.is_available?(@identifier, environment) if valid - @status = _('Available!') + @status = _('This login name is available') @status_class = 'available' else - @status = _('Unavailable!') + @status = _('This login name is unavailable') @status_class = 'unavailable' end - @url = environment.top_url + '/' + @identifier render :partial => 'identifier_status' end + def check_email + if User.find_by_email_and_environment_id(params[:address], environment.id).nil? + @status = _('This e-mail address is available') + @status_class = 'available' + else + @status = _('This e-mail address is taken') + @status_class = 'unavailable' + end + render :partial => 'email_status' + end + def user_data user_data = if logged_in? diff --git a/app/models/person.rb b/app/models/person.rb index 6fee0f5..f7b0356 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -116,6 +116,7 @@ class Person < Profile contact_phone contact_information description + image ] validates_multiparameter_assignments diff --git a/app/views/account/_email_status.rhtml b/app/views/account/_email_status.rhtml new file mode 100644 index 0000000..533e388 --- /dev/null +++ b/app/views/account/_email_status.rhtml @@ -0,0 +1,7 @@ +
+

<%= @status %>

+ +
diff --git a/app/views/account/_identifier_status.rhtml b/app/views/account/_identifier_status.rhtml index 26ebf5f..ec9e58f 100644 --- a/app/views/account/_identifier_status.rhtml +++ b/app/views/account/_identifier_status.rhtml @@ -1,3 +1,7 @@
-

<%= @url %> <%= @status %>

+

<%= @status %>

+
diff --git a/app/views/account/_signup_form.rhtml b/app/views/account/_signup_form.rhtml index b570615..7498b8c 100644 --- a/app/views/account/_signup_form.rhtml +++ b/app/views/account/_signup_form.rhtml @@ -1,66 +1,160 @@ <%= error_messages_for :user, :person %> -<% if ! defined? hidden_atention || ! hidden_atention %> -

-

-<%= _('Dear user, welcome to the %s network. To start your participation in this space, fill in the fields below. After this operation, your login and password will be registered, allowing you to create %s and %s in this environment.') % [environment.name, __('communities'), __('enterprises')] %> -
-<% end %> - -<% labelled_form_for :user, @user, :html => { :multipart => true } do |f| %> +<% labelled_form_for :user, @user, :html => { :multipart => true, :id => 'signup-form' } do |f| %> <%= hidden_field_tag :invitation_code, @invitation_code %> -<%= required_fields_message %> +
-
- <%= required f.text_field(:email) %> - <%= content_tag(:small,_('This e-mail address will be used to contact you.')) %> -
+ <%= label :profile_data, :name %> + <%= required text_field(:profile_data, :name, :rel => _('Name')) %> -<%= required f.text_field(:login, :onchange => 'this.value = convToValidLogin( this.value )') %> -<%= content_tag(:small,_('Insert your login')) %> -
+
+ <%= required f.text_field(:email, :rel => _('e-Mail')) %> + <%= content_tag(:small,_('This e-mail address will be used to contact you.')) %> +

 

+
+ <%= observe_field "user_email", + :url => { :action => "check_email" }, + :with => "address", + :update => "email-check", + :loading => "jQuery('#user_email').removeClass().addClass('checking'); + jQuery('#email-check').html('

#{_('Checking if e-mail address is already taken...')}

');", + :complete => "jQuery('#user_email').removeClass('checking')", + :before => "if (!( jQuery('#user_email').valid() )) { + jQuery('#user_email').removeClass().addClass('unavailable'); + jQuery('#email-check').html('

#{_('This e-mail address is not valid')}

'); + return false; + }" + %> -<%= observe_field 'user_login', :url => {:action => 'check_url'}, :with => 'identifier', :update => 'url-check' %> +
+ <%= required f.password_field(:password, :id => 'user_pw') %> + <%= f.text_field(:password_clear, :value => _('password')) %> + <%= content_tag(:small,_('Choose a password that you can remember easily. It must have at least 4 characters.')) %> +
-
- <%= required f.password_field(:password) %> - <%= content_tag(:small,_('Choose a password that you can remember easily. It must have at least 4 characters.')) %> -
+
+ <%= required f.password_field(:password_confirmation) %> + <%= f.text_field(:password_confirmation_clear, :value => _('password confirmation')) %> + <%= content_tag(:small, _('Passwords must match'), :id => 'password-balloon') %> +
+ + <%= @environment.top_url.gsub(/^http:\/\//, '') %>/ -<%= required f.password_field(:password_confirmation) %> -<%= content_tag(:small,_('To confirm, repeat your password.')) %> - -<% labelled_fields_for :profile_data, @person do |f| %> - <%= render :partial => 'profile_editor/person_form', :locals => {:f => f} %> -<% end %> - -<% unless @terms_of_use.blank? %> -
- <%= _("By clicking on 'I accept the terms of use' below you are agreeing to the %s") % - link_to_function(_('Terms of use'), nil) do |page| - page['terms-of-use'].show - end %> - - + +
+ + <% labelled_fields_for :profile_data, @person do |f| %> + <%= render :partial => 'profile_editor/person_form', :locals => {:f => f} %> + <% end %> + + <% unless @terms_of_use.blank? %> +
+ <%= labelled_check_box( + _('I accept the %s') % link_to_function( + _('terms of use'), + "jQuery.colorbox({ width : '400px', height : '400px', html : '#{escape_javascript(@terms_of_use) + + content_tag(:p, button(:cancel, _('Close'), {}, :onclick => 'jQuery.colorbox.close(); return false;'), :style => 'text-align: center')}' })" + ), + 'user[terms_accepted]' + ) %> +
+ <% end %> + + <% if params[:enterprise_code] %> + <%= hidden_field_tag :enterprise_code, params[:enterprise_code] %> + <%= hidden_field_tag :answer, params[:answer] %> + <%= hidden_field_tag :terms_accepted, params[:terms_accepted] %> + <%= hidden_field_tag :new_user, true %> + <% end %> +
+ +

+ <%= submit_button('save', _('Sign up')) %> +

+ <% end -%> + + diff --git a/app/views/account/signup.rhtml b/app/views/account/signup.rhtml index 3ddb693..e6e1b3b 100644 --- a/app/views/account/signup.rhtml +++ b/app/views/account/signup.rhtml @@ -1,4 +1,4 @@ -

<%= _('Signup') %>

+

<%= _('Sign up for %s!') % environment.name %>

<% if @register_pending %> <%= _('Thanks for signing up! Now check your e-mail to activate your account!') %>

<%= link_to(_('Go to the homepage'), '/') %>

diff --git a/app/views/profile_editor/_person.rhtml b/app/views/profile_editor/_person.rhtml index 7d1f357..4b2e3da 100644 --- a/app/views/profile_editor/_person.rhtml +++ b/app/views/profile_editor/_person.rhtml @@ -2,6 +2,8 @@ <%= required_fields_message %> - <%= required f.text_field(:email)%> + <%= required f.text_field(:name) %> + + <%= required f.text_field(:email) %> <%= render :partial => 'person_form', :locals => {:f => f} %> diff --git a/app/views/profile_editor/_person_form.rhtml b/app/views/profile_editor/_person_form.rhtml index 9d23436..c84d99a 100644 --- a/app/views/profile_editor/_person_form.rhtml +++ b/app/views/profile_editor/_person_form.rhtml @@ -1,28 +1,26 @@ <% @person ||= @profile %> -<%= required f.text_field(:name) %> - <% optional_field(@person, 'nickname') do %> - <%= f.text_field(:nickname, :maxlength => 16, :size => 30) %> + <%= f.text_field(:nickname, :maxlength => 16, :size => 30, :rel => _('Nickname')) %>
<%= _('A short name by which you like to be known. Will be used in friends listings, community member listings etc.') %>
<% end %> -<%= optional_field(@person, 'description', f.text_area(:description, :rows => 5)) %> +<%= optional_field(@person, 'description', f.text_area(:description, :rows => 5, :rel => _('Description'))) %> <%= optional_field(@person, 'preferred_domain', select_preferred_domain(:profile_data)) %> -<%= optional_field(@person, 'contact_information', f.text_field(:contact_information)) %> -<%= optional_field(@person, 'contact_phone', labelled_form_field(_('Home phone'), text_field(:profile_data, :contact_phone))) %> -<%= optional_field(@person, 'cell_phone', f.text_field(:cell_phone)) %> -<%= optional_field(@person, 'comercial_phone', f.text_field(:comercial_phone)) %> +<%= optional_field(@person, 'contact_information', f.text_field(:contact_information, :rel => _('Contact information'))) %> +<%= optional_field(@person, 'contact_phone', labelled_form_field(_('Home phone'), text_field(:profile_data, :contact_phone, :rel => _('Contact phone')))) %> +<%= optional_field(@person, 'cell_phone', f.text_field(:cell_phone, :rel => _('Cell phone'))) %> +<%= optional_field(@person, 'comercial_phone', f.text_field(:comercial_phone, :rel => _('Comercial phone'))) %> <%= optional_field(@person, 'sex', f.radio_group(:profile_data, :sex, [ ['male',_('Male')], ['female',_('Female')] ])) %> <%= optional_field(@person, 'birth_date', labelled_form_field(_('Birth date'), '
' + pick_date(:profile_data, :birth_date, {:start_year => (Date.today.year - 100), :end_year => (Date.today.year - 5)}) + '
')) %> -<%= optional_field(@person, 'nationality', f.text_field(:nationality)) %> +<%= optional_field(@person, 'nationality', f.text_field(:nationality, :rel => _('Nationality'))) %> <%= optional_field(@person, 'country', select_country(_('Country'), 'profile_data', 'country', {:class => 'type-select'})) %> -<%= optional_field(@person, 'state', f.text_field(:state)) %> -<%= optional_field(@person, 'city', f.text_field(:city)) %> -<%= optional_field(@person, 'zip_code', labelled_form_field(_('ZIP code'), text_field(:profile_data, :zip_code))) %> -<%= optional_field(@person, 'address', labelled_form_field(_('Address (street and number)'), text_field(:profile_data, :address))) %> +<%= optional_field(@person, 'state', f.text_field(:state, :rel => _('State'))) %> +<%= optional_field(@person, 'city', f.text_field(:city, :rel => _('City'))) %> +<%= optional_field(@person, 'zip_code', labelled_form_field(_('ZIP code'), text_field(:profile_data, :zip_code, :rel => _('ZIP code')))) %> +<%= optional_field(@person, 'address', labelled_form_field(_('Address (street and number)'), text_field(:profile_data, :address, :rel => _('Address')))) %> <% optional_field(@person, 'schooling') do %>
@@ -47,18 +45,25 @@ <%= optional_field(@person, 'formation', select_area(_('Education'), 'profile_data', 'formation', {:class => 'type-select-full-line'})) %> > - <%= optional_field(@person, 'custom_formation', f.text_field(:custom_formation)) %> + <%= optional_field(@person, 'custom_formation', f.text_field(:custom_formation, :rel => _('Custom formation'))) %> <%= observe_field 'profile_data_formation', :function =>'toggle_text_field("profile_data_formation", "profile_data_custom_formation_span")' %> <%= optional_field(@person, 'area_of_study', select_area(_('Area of study'), 'profile_data', 'area_of_study', {:class => 'type-select-full-line'})) %> > - <%= optional_field(@person, 'custom_area_of_study', f.text_field(:custom_area_of_study)) %> + <%= optional_field(@person, 'custom_area_of_study', f.text_field(:custom_area_of_study, :rel => _('Custom area of study'))) %> <%= observe_field 'profile_data_area_of_study', :function =>'toggle_text_field("profile_data_area_of_study", "profile_data_custom_area_of_study_span")' %> -<%= optional_field(@person, 'professional_activity', f.text_field(:professional_activity)) %> -<%= optional_field(@person, 'organization', f.text_field(:organization)) %> -<%= optional_field(@person, 'organization_website', f.text_field(:organization_website)) %> +<%= optional_field(@person, 'professional_activity', f.text_field(:professional_activity, :rel => _('Professional activity'))) %> +<%= optional_field(@person, 'organization', f.text_field(:organization, :rel => _('Organization'))) %> +<%= optional_field(@person, 'organization_website', f.text_field(:organization_website, :rel => _('Organization website'))) %> +<% optional_field(@person, 'image') do %> +
+ <% f.fields_for :image_builder, @person.image do |i| %> + <%= file_field_or_thumbnail(_('Image:'), @person.image, i) %><%= _("Max size: %s (.jpg, .gif, .png)")% Image.max_size.to_humanreadable %> + <% end %> +
+<% end %> diff --git a/app/views/profile_editor/edit.rhtml b/app/views/profile_editor/edit.rhtml index 9ff179e..01d6aba 100644 --- a/app/views/profile_editor/edit.rhtml +++ b/app/views/profile_editor/edit.rhtml @@ -6,12 +6,14 @@ <%= render :partial => partial_for_class(@profile.class), :locals => { :f => f } %> + <% unless @profile.person? && @environment.active_person_fields.include?('image') %>

<%= _('Change picture') %>

<% f.fields_for :image_builder, @profile.image do |i| %> <%= file_field_or_thumbnail(_('Image:'), @profile.image, i) %><%= _("Max size: %s (.jpg, .gif, .png)")% Image.max_size.to_humanreadable %> <% end %>
+ <% end %>

<%= _('Privacy options') %>

diff --git a/public/fonts/DroidSerif-Regular.ttf b/public/fonts/DroidSerif-Regular.ttf new file mode 100644 index 0000000..239ba38 Binary files /dev/null and b/public/fonts/DroidSerif-Regular.ttf differ diff --git a/public/images/field-bg.png b/public/images/field-bg.png new file mode 100644 index 0000000..12acff2 Binary files /dev/null and b/public/images/field-bg.png differ diff --git a/public/images/login_checking.png b/public/images/login_checking.png new file mode 100644 index 0000000..5dd52f1 Binary files /dev/null and b/public/images/login_checking.png differ diff --git a/public/images/orange-balloon.png b/public/images/orange-balloon.png new file mode 100644 index 0000000..6a5540c Binary files /dev/null and b/public/images/orange-balloon.png differ diff --git a/public/images/orange-bg.png b/public/images/orange-bg.png new file mode 100644 index 0000000..e3b1979 Binary files /dev/null and b/public/images/orange-bg.png differ diff --git a/public/images/passwords_match.png b/public/images/passwords_match.png new file mode 100644 index 0000000..a837436 Binary files /dev/null and b/public/images/passwords_match.png differ diff --git a/public/images/passwords_nomatch.png b/public/images/passwords_nomatch.png new file mode 100644 index 0000000..1cc786b Binary files /dev/null and b/public/images/passwords_nomatch.png differ diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index a1957e3..c2668ff 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -6173,33 +6173,355 @@ h1#agenda-title { /* Captcha */ -.comment_reply #recaptcha_area { - margin-bottom: 3px !important; -} +/* Colorbox */ -.comment_reply .recaptchatable tr td + td + td { +#cboxClose { display: none !important; } -.comment_reply .recaptcha-container { +/* Signup interface */ + +#url-check { + margin: 0 0 2px 0; width: 100%; - overflow: hidden; + text-align: right; } -.comment_reply .recaptcha-container:hover { - overflow: visible; +#email-check { + margin: -2px 171px 2px 0; + text-align: right; + clear: both; +} + +#email-check p { + margin: 0; +} + +.available { + color: #88BD00; +} + +.unavailable { + color: #FFA000; +} + +.checking { + color: #4A4A4A; } -.comment_reply .recaptcha-container tr:hover td { +#email-check p, #url-check p { + margin: 0; + text-transform: lowercase; + font-size: 11px; + clear: both; +} + +.action-account-signup #main-content-wrapper-8 { + background: #ECECEC; +} + +@font-face { + font-family: droidserif; + src: url('/fonts/DroidSerif-Regular.ttf'); +} + +.action-account-signup #content .no-boxes h1 { + font-variant: normal; + border-bottom: 0; + color: #666666; + font-family: droidserif, serif; + font-weight: lighter; + text-align: center; + margin-top: 35px; + margin-left: 12px; +} + +.action-account-signup #wrap-1 .formfield select, +.action-account-signup #wrap-1 .formfield textarea, +.action-account-signup #wrap-1 #profile_data_name, +.action-account-signup #wrap-1 .formfield input { + background: transparent url(/images/field-bg.png) left top no-repeat; + padding: 7px 3px 10px 7px; + height: 24px; + width: 335px; + color: #6d786e; + font-size: 20px; + font-family: droidserif, serif; + margin: 9px 14px 0; + border: 0; +} + +.action-account-signup #wrap-1 .formfield select { + height: auto; +} + +.action-account-signup #wrap-1 .formfield .select-birth-date select { + width: 93px; + margin-right: 2px; + margin-left: 0; +} + +.webkit.action-account-signup #wrap-1 .formfield select { + background: #fff; +} + +.action-account-signup #wrap-1 .formfield textarea { + height: 335px; + background: #fff; +} + +.action-account-signup #wrap-1 .formfield input[type=file] { + font-size: 12px; +} + +.action-account-signup #wrap-1 .formfield textarea { + height: 100px; +} + +.action-account-signup #wrap-1 label, +.action-account-signup #wrap-1 small, +.action-account-signup #wrap-1 #user_password, +.action-account-signup #wrap-1 #user_password_confirmation { + display: none; +} + +.action-account-signup #wrap-1 input[type=radio] { + height: auto; + margin: 0; + margin-left: 3px; +} + +.action-account-signup #wrap-1 .fieldgroup { + margin: 5px 10px; +} + +.action-account-signup #wrap-1 label[for=profile_data_sex_female], +.action-account-signup #wrap-1 label[for=profile_data_sex_male] { + color: #6d786e; + font-size: 20px; + font-family: droidserif; + text-transform: lowercase; + display: inline; + margin-left: 8px; +} + +.action-account-signup #wrap-1 label[for=profile_data_country], +.action-account-signup #wrap-1 label[for=profile_data_preferred_domain_id], +.action-account-signup #wrap-1 label[for=profile_data_birth_date_2i], +.action-account-signup #wrap-1 label[for=profile_data_birth_date_3i], +.action-account-signup #wrap-1 label[for=profile_data_schooling], +.action-account-signup #wrap-1 label[for=profile_data_formation], +.action-account-signup #wrap-1 label[for=profile_data_area_of_study], +.action-account-signup #wrap-1 label[for=profile_data_image_builder_uploaded_data] { + display: block; +} + +.action-account-signup #wrap-1 .formfield input[type=password] { + margin-bottom: -6px; + margin-top: 15px; +} + +.action-account-signup #wrap-1 .formfield textarea, +.action-account-signup #wrap-1 .formfield input[type=password], +.action-account-signup #wrap-1 #profile_data_name, +.action-account-signup #wrap-1 .formfield input[type=text] { + width: 400px; +} + +.action-account-signup #wrap-1 #profile_data_name { + padding-left: 10px; + margin-top: 12px; + margin-bottom: 3px; +} + +.action-account-signup #wrap-1 #signup-form-header { + background: #E3E3E3; + padding-top: 10px; + -moz-border-radius: 8px; + border-radius: 8px; + -webkit-border-radius: 8px; + margin: 75px auto 20px; + position: relative; + width: 563px; +} + +.action-account-signup #wrap-1 #user_email, +.action-account-signup #wrap-1 .formfield input.passwords_match, +.action-account-signup #wrap-1 .formfield input.passwords_differ { + width: 338px; + padding-right: 30px; +} + +.action-account-signup #wrap-1 #user_login.available, +.action-account-signup #wrap-1 #user_email.available, +.action-account-signup #wrap-1 #user_login.unavailable, +.action-account-signup #wrap-1 #user_email.unavailable, +.action-account-signup #wrap-1 #user_email.checking, +.action-account-signup #wrap-1 #user_login.checking, +.action-account-signup #wrap-1 #user_login.available, +.action-account-signup #wrap-1 #user_email.available, +.action-account-signup #wrap-1 .formfield input.passwords_differ, +.action-account-signup #wrap-1 .formfield input.passwords_match { + border-width: 2px; + border-style: solid; + background-color: #fff; + background-position: right center; + background-repeat: no-repeat; + padding: 5px 30px 8px 5px; +} + +.action-account-signup #wrap-1 #user_login.unavailable, +.action-account-signup #wrap-1 #user_email.unavailable, +.action-account-signup #wrap-1 .formfield input.passwords_differ { + border-color: #FFA000; + background-image: url(/images/passwords_nomatch.png); +} + +.action-account-signup #wrap-1 #user_email.checking, +.action-account-signup #wrap-1 #user_login.checking { + border-color: #4A4A4A; + background-image: url(/images/login_checking.png); +} + +.action-account-signup #wrap-1 #user_login.available, +.action-account-signup #wrap-1 #user_email.available, +.action-account-signup #wrap-1 .formfield input.passwords_match { + border-color: #88BD00; + background-image: url(/images/passwords_match.png); +} + +#signup-domain { + float: left; + display: inline-block; + vertical-align: middle; + background: #EAEAEA; + border-right: 2px solid #FFFFFF; + border-top: 2px solid #FFFFFF; + border-left: 2px solid #CFCFCF; + border-bottom: 2px solid #CFCFCF; + line-height: 37px; + padding: 0px 7px; + color: #4A4A4A; + font-size: 20px; + font-family: droidserif; + text-transform: lowercase; + margin: 14px 0 0 14px; +} + +.action-account-signup #wrap-1 #signup-form-header #user_login { + margin: 0; + width: 200px; + padding-right: 30px; +} + +#url-check { + width: 239px; +} + +#signup-login-field { + float: left; + margin: 11px 0 0 0; +} + +.action-account-signup #wrap-1 #signup-password-confirmation, +.action-account-signup #wrap-1 #signup-login { + position: relative; +} + +.action-account-signup #wrap-1 small#signup-balloon, +.action-account-signup #wrap-1 small#password-balloon { + display: none; + width: 142px; + height: 69px; + color: #FFFFFF; + font-weight: bold; + font-size: 11px; + padding: 5px 10px 45px 10px; + margin: 0; + line-height: 1.5em; + background: transparent url(/images/orange-balloon.png) bottom center no-repeat; + position: absolute; + z-index: 2; + right: -40px; + top: -80px; +} + +.action-account-signup #wrap-1 .required-field label, +.action-account-signup #wrap-1 .formlabel { + color: #b4b9b5; + font-size: 20px; + text-transform: lowercase; + font-weight: normal; + margin-left: 15px; + font-family: droidserif; +} + +.action-account-signup #wrap-1 .required-field label::after { + content: ''; +} + +.action-account-signup #wrap-1 div.fieldWithErrors { background: transparent; } -.comment_reply .recaptcha_image_cell { - background: transparent !important; +.person_image_maxsize { + margin: 0 18px; + font: 13px sans-serif; + color: #BABABA; } -/* Colorbox */ +#terms-of-use-box { + margin: 20px 0 30px 40px; + color: #B3B3B3; +} -#cboxClose { - display: none !important; +#terms-of-use-box input[type=checkbox] { + border: 1px solid #FFA514; + background: #FFF; +} + +.action-account-signup #terms-of-use-box label { + display: inline; + font-size: 14px; +} + +.action-account-signup #terms-of-use-box label a { + color: #FF7F2A; +} + +.action-account-signup #content form input.button.submit { + border: 0; + padding: 8px 36px 12px; + background: transparent url(/images/orange-bg.png) left center repeat-x; + font-size: 17px; + font-family: droidserif; + color: #FFFFD5; + text-align: center; + text-shadow: #d45500 0 -1px 0; + border-radius: 7px; + -moz-border-radius: 7px; + -webkit-border-radius: 7px; + max-height: none; + height: 39px; +} + +.action-account-signup .no-boxes { + margin-left: 128px; + margin-right: 128px; +} + +#signup-password { + margin-top: -19px; +} + +#signup-password-confirmation { + margin-top: -5px; +} + +#signup-form-profile { + margin: 30px 0 0 40px; +} + +.select-birth-date { + margin-left: 14px; } diff --git a/test/functional/account_controller_test.rb b/test/functional/account_controller_test.rb index a60861a..d3ccebe 100644 --- a/test/functional/account_controller_test.rb +++ b/test/functional/account_controller_test.rb @@ -666,6 +666,22 @@ class AccountControllerTest < Test::Unit::TestCase assert_equal 'unavailable', assigns(:status_class) end + should 'check if e-mail is available on environment' do + env = fast_create(Environment, :name => 'Environment test') + @controller.expects(:environment).returns(env).at_least_once + profile = create_user('mylogin', :email => 'mylogin@noosfero.org', :environment_id => fast_create(Environment).id) + get :check_email, :address => 'mylogin@noosfero.org' + assert_equal 'available', assigns(:status_class) + end + + should 'check if e-mail is not available on environment' do + env = fast_create(Environment, :name => 'Environment test') + @controller.expects(:environment).returns(env).at_least_once + profile = create_user('mylogin', :email => 'mylogin@noosfero.org', :environment_id => env) + get :check_email, :address => 'mylogin@noosfero.org' + assert_equal 'unavailable', assigns(:status_class) + end + should 'merge user data with extra stuff from plugins' do class Plugin1 < Noosfero::Plugin def user_data_extras @@ -719,6 +735,42 @@ class AccountControllerTest < Test::Unit::TestCase assert_redirected_to '/bli' end + should 'be able to upload an image' do + new_user({}, :profile_data => { :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png') } }) + assert_not_nil Person.last.image + end + + should 'not be able to upload an image bigger than max size' do + Image.any_instance.stubs(:size).returns(Image.attachment_options[:max_size] + 1024) + new_user({}, :profile_data => { :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png') } }) + assert_nil Person.last.image + end + + should 'display error message when image has more than max size' do + Image.any_instance.stubs(:size).returns(Image.attachment_options[:max_size] + 1024) + new_user({}, :profile_data => { :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png') } }) + assert_tag :tag => 'div', :attributes => { :class => 'errorExplanation', :id => 'errorExplanation' } + end + + should 'not display error message when image has less than max size' do + Image.any_instance.stubs(:size).returns(Image.attachment_options[:max_size] - 1024) + new_user({}, :profile_data => { :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png') } }) + assert_no_tag :tag => 'div', :attributes => { :class => 'errorExplanation', :id => 'errorExplanation' } + end + + should 'not redirect when some file has errors' do + Image.any_instance.stubs(:size).returns(Image.attachment_options[:max_size] + 1024) + new_user({}, :profile_data => { :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png') } }) + assert_response :success + assert_template 'signup' + end + + should 'remove useless user data on signup' do + assert_nothing_raised do + new_user :password_clear => 'nothing', :password_confirmation_clear => 'nothing' + end + end + protected def new_user(options = {}, extra_options ={}) data = {:profile_data => person_data} diff --git a/test/functional/profile_editor_controller_test.rb b/test/functional/profile_editor_controller_test.rb index 3fd0eb5..0c36c04 100644 --- a/test/functional/profile_editor_controller_test.rb +++ b/test/functional/profile_editor_controller_test.rb @@ -878,4 +878,22 @@ class ProfileEditorControllerTest < Test::Unit::TestCase assert_tag :tag => 'a', :content => plugin2_button[:title], :attributes => {:class => /#{plugin2_button[:icon]}/, :href => /#{plugin2_button[:url]}/} end + should 'show image upload field from environment person fields' do + env = Environment.default + env.custom_person_fields = { 'image' => {'active' => 'true', 'required' => 'true'} } + env.save! + get :edit, :profile => profile.identifier + assert_tag :tag => 'input', :attributes => { :name => 'profile_data[image_builder][uploaded_data]' } + assert_no_tag :tag => 'div', :attributes => { :id => 'profile_change_picture' } + end + + should 'show image upload field from profile editor' do + env = Environment.default + env.custom_person_fields = { } + env.save! + get :edit, :profile => profile.identifier + assert_tag :tag => 'input', :attributes => { :name => 'profile_data[image_builder][uploaded_data]' } + assert_tag :tag => 'div', :attributes => { :id => 'profile_change_picture' } + end + end diff --git a/test/unit/person_test.rb b/test/unit/person_test.rb index 9632b60..bc31a3d 100644 --- a/test/unit/person_test.rb +++ b/test/unit/person_test.rb @@ -64,7 +64,7 @@ class PersonTest < Test::Unit::TestCase should "have person info fields" do p = Person.new(:environment => Environment.default) - [ :name, :photo, :contact_information, :birth_date, :sex, :address, :city, :state, :country, :zip_code ].each do |i| + [ :name, :photo, :contact_information, :birth_date, :sex, :address, :city, :state, :country, :zip_code, :image ].each do |i| assert_respond_to p, i end end -- libgit2 0.21.2