diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb new file mode 100644 index 000000000..4ccafe235 --- /dev/null +++ b/app/controllers/registrations_controller.rb @@ -0,0 +1,9 @@ +class RegistrationsController < Devise::RegistrationsController + + private + + def sign_up_params + params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation) + end + +end \ No newline at end of file diff --git a/app/views/devise/menu/_login_items.html.erb b/app/views/devise/menu/_login_items.html.erb new file mode 100644 index 000000000..89b9ad253 --- /dev/null +++ b/app/views/devise/menu/_login_items.html.erb @@ -0,0 +1,9 @@ +<% if user_signed_in? %> +
  • + <%= link_to('Logout', destroy_user_session_path, :method => :delete) %> +
  • +<% else %> +
  • + <%= link_to('Login', new_user_session_path) %> +
  • +<% end %> \ No newline at end of file diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb index 5a238ce6e..8c4da21cd 100644 --- a/app/views/devise/registrations/new.html.erb +++ b/app/views/devise/registrations/new.html.erb @@ -3,9 +3,20 @@ <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> <%= devise_error_messages! %> + +
    + <%= f.label :first_name %>
    + <%= f.text_field :first_name, autofocus: true %> +
    + +
    + <%= f.label :last_name %>
    + <%= f.text_field :last_name %> +
    +
    <%= f.label :email %>
    - <%= f.email_field :email, autofocus: true %> + <%= f.email_field :email %>
    diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 10302f65f..bb1a5c28f 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -14,6 +14,9 @@

    <%= notice %>

    <%= alert %>

    + + <%= render 'devise/menu/login_items' %> + <%= yield %> \ No newline at end of file diff --git a/config/locales/devise.es.yml b/config/locales/devise.es.yml new file mode 100644 index 000000000..f39099f57 --- /dev/null +++ b/config/locales/devise.es.yml @@ -0,0 +1,58 @@ +es: + devise: + confirmations: + confirmed: "Tu cuenta ha sido confirmada." + send_instructions: "Recibirás un correo electrónico en unos minutos con instrucciones sobre cómo restablecer tu contraseña." + send_paranoid_instructions: "Si tu correo electrónico existe en nuestra base de datos recibirás un correo electrónico en unos minutos con instrucciones sobre cómo restablecer tu contraseña." + failure: + already_authenticated: "Ya has iniciado sesión." + inactive: "Tu cuenta aún no ha sido activada." + invalid: "%{authentication_keys} o contraseña inválidos." + locked: "Tu cuenta ha sido bloqueada." + last_attempt: "Tienes un último intento antes de que tu cuenta sea bloqueada." + not_found_in_database: "%{authentication_keys} o contraseña inválidos." + timeout: "Tu sesión ha expirado, por favor inicia sesión nuevamente para continuar." + unauthenticated: "Necesitas iniciar sesión o registrarte para continuar." + unconfirmed: "Debes confirmar tu cuenta para continuar." + mailer: + confirmation_instructions: + subject: "Instrucciones de confirmación" + reset_password_instructions: + subject: "Instrucciones para restablecer tu contraseña" + unlock_instructions: + subject: "Instrucciones de desbloqueo" + omniauth_callbacks: + failure: "No se te ha podido autorizar de %{kind} debido a \"%{reason}\"." + success: "Identificado correctamente de %{kind}." + passwords: + no_token: "No puedes acceder a esta página si no es a través de un enlace para restablecer la contraseña. Si has accedido desde el enlace para restablecer la contraseña, asegúrate de que la URL esté completa." + send_instructions: "Recibirás un correo electrónico con instrucciones sobre cómo restablecer tu contraseña en unos minutos." + send_paranoid_instructions: "Si tu correo electrónico existe en nuestra base de datos, recibirás un enlace para restablecer la contraseña en unos minutos." + updated: "Tu contraseña ha cambiado correctamente. Has sido identificado correctamente." + updated_not_active: "Tu contraseña se ha cambiado correctamente." + registrations: + destroyed: "¡Adiós! Tu cuenta ha sido cancelada. Esperamos volver a verte pronto." + signed_up: "¡Bienvenido! Has sido identificado." + signed_up_but_inactive: "Te has registrado correctamente, pero no has podido iniciar sesión porque tu cuenta no ha sido activada." + signed_up_but_locked: "Te has registrado correctamente, pero no has podido iniciar sesión porque tu cuenta está bloqueada." + signed_up_but_unconfirmed: "Se te ha enviado un mensaje con un enlace de confirmación. Por favor visita el enlace para activar tu cuenta." + update_needs_confirmation: "Has actualizado tu cuenta correctamente, sin embargo necesitamos verificar tu nueva cuenta de correo. Por favor revisa tu correo electrónico y visita el enlace para finalizar la confirmación de tu nueva dirección de correo electrónico." + updated: "Has actualizado tu cuenta correctamente." + sessions: + signed_in: "Has iniciado sesión correctamente." + signed_out: "Has cerrado la sesión correctamente." + already_signed_out: "Has cerrado la sesión correctamente." + unlocks: + send_instructions: "Recibirás un correo electrónico en unos minutos con instrucciones sobre cómo desbloquear tu cuenta." + send_paranoid_instructions: "Si tu cuenta existe, recibirás un correo electrónico en unos minutos con instrucciones sobre cómo desbloquear tu cuenta." + unlocked: "Tu cuenta ha sido desbloqueada. Por favor inicia sesión para continuar." + errors: + messages: + already_confirmed: "ya has sido confirmado, por favor intenta iniciar sesión." + confirmation_period_expired: "necesitas ser confirmado en %{period}, por favor vuelve a solicitarla." + expired: "ha expirado, por favor vuelve a solicitarla." + not_found: "no se ha encontrado." + not_locked: "no estaba bloqueado." + not_saved: + one: "1 error impidió que este %{resource} fuera guardado:" + other: "%{count} errores impidieron que este %{resource} fuera guardado:" \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index eae8764ed..a1dbec65f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,6 @@ Rails.application.routes.draw do - devise_for :users + devise_for :users, :controllers => { registrations: 'registrations' } + # The priority is based upon order of creation: first created -> highest priority. # See how all your routes lay out with "rake routes". diff --git a/db/migrate/20150717164054_add_first_name_and_last_name_to_users.rb b/db/migrate/20150717164054_add_first_name_and_last_name_to_users.rb new file mode 100644 index 000000000..3be763bfd --- /dev/null +++ b/db/migrate/20150717164054_add_first_name_and_last_name_to_users.rb @@ -0,0 +1,6 @@ +class AddFirstNameAndLastNameToUsers < ActiveRecord::Migration + def change + add_column :users, :first_name, :string + add_column :users, :last_name, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 61fb86a58..ef20ee3cf 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -34,9 +34,26 @@ ActiveRecord::Schema.define(version: 20150716174358) do t.string "last_sign_in_ip" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.string "first_name" + t.string "last_name" end add_index "users", ["email"], name: "index_users_on_email", unique: true add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true + create_table "votes", force: :cascade do |t| + t.integer "votable_id" + t.string "votable_type" + t.integer "voter_id" + t.string "voter_type" + t.boolean "vote_flag" + t.string "vote_scope" + t.integer "vote_weight" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "votes", ["votable_id", "votable_type", "vote_scope"], name: "index_votes_on_votable_id_and_votable_type_and_vote_scope" + add_index "votes", ["voter_id", "voter_type", "vote_scope"], name: "index_votes_on_voter_id_and_voter_type_and_vote_scope" + end diff --git a/spec/factories.rb b/spec/factories.rb index 58f320ea7..971791b0b 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,7 +1,16 @@ FactoryGirl.define do + + factory :user do + first_name 'Manuela' + last_name 'Carmena' + sequence(:email) { |n| "manuela#{n}@madrid.es" } + password 'judgmentday' + end + factory :debate do title 'Debate title' description 'Debate description' terms_of_service '1' end + end \ No newline at end of file diff --git a/spec/features/users_spec.rb b/spec/features/users_spec.rb new file mode 100644 index 000000000..30755c56f --- /dev/null +++ b/spec/features/users_spec.rb @@ -0,0 +1,43 @@ +require 'rails_helper' + +feature 'Users' do + + scenario 'Sign up' do + visit '/' + click_link 'Login' + click_link 'Sign up' + + fill_in 'user_first_name', with: 'Manuela' + fill_in 'user_last_name', with: 'Carmena' + fill_in 'user_email', with: 'manuela@madrid.es' + fill_in 'user_password', with: 'judgementday' + fill_in 'user_password_confirmation', with: 'judgementday' + + click_button 'Sign up' + + expect(page).to have_content '¡Bienvenido! Has sido identificado.' + end + + scenario 'Sign in' do + user = create(:user, email: 'manuela@madrid.es', password: 'judgementday') + + visit '/' + click_link 'Login' + fill_in 'user_email', with: 'manuela@madrid.es' + fill_in 'user_password', with: 'judgementday' + click_button 'Log in' + + expect(page).to have_content 'Has iniciado sesión correctamente.' + end + + scenario 'Sign out' do + user = create(:user) + login_as(user) + + visit "/" + click_link 'Logout' + + expect(page).to have_content 'Has cerrado la sesión correctamente.' + end + +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 5c5fedee7..fc6f2bb68 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -6,6 +6,10 @@ require 'spec_helper' require 'rspec/rails' require 'capybara/rails' require 'capybara/rspec' + +include Warden::Test::Helpers +Warden.test_mode! + ActiveRecord::Migration.maintain_test_schema! RSpec.configure do |config|