merges with master and fixes conflicts

This commit is contained in:
kikito
2015-10-31 17:09:52 +01:00
87 changed files with 1747 additions and 1343 deletions

View File

@@ -49,6 +49,7 @@ gem 'daemons'
gem 'devise-async' gem 'devise-async'
gem 'newrelic_rpm', '~> 3.14' gem 'newrelic_rpm', '~> 3.14'
gem 'whenever', require: false gem 'whenever', require: false
gem 'pg_search'
gem 'ahoy_matey', '~> 1.2.1' gem 'ahoy_matey', '~> 1.2.1'
gem 'groupdate' # group temporary data gem 'groupdate' # group temporary data

View File

@@ -263,6 +263,10 @@ GEM
paranoia (2.1.3) paranoia (2.1.3)
activerecord (~> 4.0) activerecord (~> 4.0)
pg (0.18.3) pg (0.18.3)
pg_search (1.0.5)
activerecord (>= 3.1)
activesupport (>= 3.1)
arel
poltergeist (1.7.0) poltergeist (1.7.0)
capybara (~> 2.1) capybara (~> 2.1)
cliver (~> 0.3.1) cliver (~> 0.3.1)
@@ -455,6 +459,7 @@ DEPENDENCIES
omniauth-twitter omniauth-twitter
paranoia paranoia
pg pg
pg_search
poltergeist poltergeist
quiet_assets quiet_assets
rails (= 4.2.4) rails (= 4.2.4)

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@@ -92,6 +92,10 @@ body.admin {
} }
} }
.for-print-only {
display: none;
}
// 02. Sidebar // 02. Sidebar
// - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@@ -687,6 +687,7 @@ header {
line-height: $line-height*3; line-height: $line-height*3;
margin-left: rem-calc(12); margin-left: rem-calc(12);
margin-right: rem-calc(36); margin-right: rem-calc(36);
margin-right: 12px\9;
} }
&:after { &:after {
@@ -898,6 +899,13 @@ form.locale-form {
select { select {
background-image: image-url("language_select.png"); background-image: image-url("language_select.png");
option {
background: white;
color: $text;
border: 0;
outline: none;
}
&.locale-switcher { &.locale-switcher {
background-color: transparent; background-color: transparent;
border: 0; border: 0;
@@ -916,6 +924,19 @@ form {
line-height: $line-height; line-height: $line-height;
} }
input, textarea {
height: 48px\9;
line-height: 48px\9;
margin-bottom: 24px\9;
width: 100%\9;
}
input[type="checkbox"] {
height: auto\9;
line-height: inherit\9;
width: auto\9;
}
input[type]:not([type=submit]):not([type=file]):not([type=checkbox]) { input[type]:not([type=submit]):not([type=file]):not([type=checkbox]) {
background: $input-bg; background: $input-bg;
height: rem-calc(48); height: rem-calc(48);

View File

@@ -2,6 +2,8 @@
/* Print proposals */ /* Print proposals */
.admin-content { margin-top: 0 !important; }
.tags a { display: none !important; } .tags a { display: none !important; }
.supports { display: none !important; } .supports { display: none !important; }
@@ -24,7 +26,7 @@ img.left { display: none !important; }
.captcha { display: none !important; } .captcha { display: none !important; }
li.name span { display: none !important; } li.name { display: none !important; }
p.proposal-info span:nth-child(3) { display: none !important; } p.proposal-info span:nth-child(3) { display: none !important; }
@@ -36,11 +38,22 @@ p.proposal-info span:nth-child(3) { display: none !important; }
input[type="submit"] { display: none !important; } input[type="submit"] { display: none !important; }
.filters h2 { margin: 0 !important; font-size: 20px !important; line-height: 20px !important; width: auto !important; }
.search-results h2 { margin: 0 !important; font-size: 20px !important; line-height: 20px !important; }
.admin h2 { font-size: 20px !important; line-height: 20px !important; }
.select-order { .select-order {
border: 0; border: 0 !important;
font-size: 24px; font-size: 20px !important;
font-weight: bold; font-weight: bold !important;
margin-left: -6px; line-height: 20px !important;
margin-left: 10px !important;
margin-top: 0 !important;
margin-bottom: 0 !important;
margin-right: 0 !important;
padding: 0 !important;
} }
p.proposal-info { margin-left: -6px; } p.proposal-info { margin-left: -6px; }
@@ -49,16 +62,26 @@ a { text-decoration: none !important; }
a:after { content: none !important; } a:after { content: none !important; }
.proposal .panel { min-height: auto !important; } .proposal .panel { min-height: auto !important; margin: 0 !important; padding-bottom: 0 !important; padding-left: 0 !important; }
.proposal .panel .proposal-content { min-height: auto !important; } .proposal .panel .proposal-content { min-height: auto !important; }
.proposal .panel h3 { min-height: auto !important; } .proposal .panel h3 { min-height: auto !important; font-size: 16px !important; }
.proposal .panel .proposal-description { height: auto; } .proposal .panel .proposal-description { height: auto !important; margin-bottom: 0 !important; }
.proposal .panel { .proposal .panel {
border-left: 0 !important; border-left: 0 !important;
border-right: 0 !important; border-right: 0 !important;
border-top: 0 !important; border-top: 0 !important;
} }
.for-print-only { display: block !important; }
.for-print-only p { font-size: 14px !important; line-height: 24px !important; }
.not-print { display: none !important; }
.date-for-print { font-size: 14px !important; line-height: 20px !important; }
.filters { height: 48px !important;}

View File

@@ -6,8 +6,6 @@ class ApplicationController < ActionController::Base
include HasOrders include HasOrders
before_action :authenticate_http_basic, if: :http_basic_auth_site? before_action :authenticate_http_basic, if: :http_basic_auth_site?
before_action :authenticate_user!, unless: :devise_controller?, if: :beta_site?
before_action :authenticate_beta_tester!, unless: :devise_controller?, if: :beta_site?
before_action :ensure_signup_complete before_action :ensure_signup_complete
before_action :set_locale before_action :set_locale
@@ -33,21 +31,6 @@ class ApplicationController < ActionController::Base
end end
end end
def authenticate_beta_tester!
unless signed_in? && beta_testers.include?(current_user.email)
sign_out(current_user)
redirect_to new_user_session_path, alert: t('application.alert.only_beta_testers')
end
end
def beta_testers
File.readlines('config/beta-testers.txt').map {|email| email.strip }
end
def beta_site?
Rails.application.secrets.beta_site
end
def http_basic_auth_site? def http_basic_auth_site?
Rails.application.secrets.http_basic_auth Rails.application.secrets.http_basic_auth
end end

View File

@@ -13,7 +13,7 @@ class ProposalsController < ApplicationController
respond_to :html, :js respond_to :html, :js
def index_customization def index_customization
@featured_proposals = Proposal.all.sort_by_confidence_score.limit(3) if @search_terms.blank? @featured_proposals = Proposal.all.sort_by_confidence_score.limit(3) if (@search_terms.blank? && @tag_filter.blank?)
if @featured_proposals.present? if @featured_proposals.present?
set_featured_proposal_votes(@featured_proposals) set_featured_proposal_votes(@featured_proposals)
@resources = @resources.where('proposals.id NOT IN (?)', @featured_proposals.map(&:id)) @resources = @resources.where('proposals.id NOT IN (?)', @featured_proposals.map(&:id))

View File

@@ -5,6 +5,7 @@ class Debate < ActiveRecord::Base
include Conflictable include Conflictable
include Measurable include Measurable
include Sanitizable include Sanitizable
include PgSearch
apply_simple_captcha apply_simple_captcha
acts_as_votable acts_as_votable
@@ -36,6 +37,22 @@ class Debate < ActiveRecord::Base
# Ahoy setup # Ahoy setup
visitable # Ahoy will automatically assign visit_id on create visitable # Ahoy will automatically assign visit_id on create
pg_search_scope :pg_search, {
against: {
title: 'A',
description: 'B'
},
associated_against: {
tags: :name
},
using: {
tsearch: { dictionary: "spanish" },
trigram: { threshold: 0.1 },
},
ranked_by: '(:tsearch + debates.cached_votes_up)',
order_within_rank: "debates.created_at DESC"
}
def description def description
super.try :html_safe super.try :html_safe
end end

View File

@@ -4,6 +4,7 @@ class Proposal < ActiveRecord::Base
include Conflictable include Conflictable
include Measurable include Measurable
include Sanitizable include Sanitizable
include PgSearch
apply_simple_captcha apply_simple_captcha
acts_as_votable acts_as_votable
@@ -38,12 +39,30 @@ class Proposal < ActiveRecord::Base
scope :sort_by_random, -> { order("RANDOM()") } scope :sort_by_random, -> { order("RANDOM()") }
scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) } scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) }
pg_search_scope :pg_search, {
against: {
title: 'A',
question: 'B',
summary: 'C',
description: 'D'
},
associated_against: {
tags: :name
},
using: {
tsearch: { dictionary: "spanish" },
trigram: { threshold: 0.1 },
},
ranked_by: '(:tsearch + proposals.cached_votes_up)',
order_within_rank: "proposals.created_at DESC"
}
def description def description
super.try :html_safe super.try :html_safe
end end
def total_votes def total_votes
cached_votes_up cached_votes_up + physical_votes
end end
def editable? def editable?
@@ -74,14 +93,13 @@ class Proposal < ActiveRecord::Base
def calculate_hot_score def calculate_hot_score
self.hot_score = ScoreCalculator.hot_score(created_at, self.hot_score = ScoreCalculator.hot_score(created_at,
cached_votes_up, total_votes,
cached_votes_up, total_votes,
comments_count) comments_count)
end end
def calculate_confidence_score def calculate_confidence_score
self.confidence_score = ScoreCalculator.confidence_score(cached_votes_up, self.confidence_score = ScoreCalculator.confidence_score(total_votes, total_votes)
cached_votes_up)
end end
def after_hide def after_hide
@@ -93,7 +111,7 @@ class Proposal < ActiveRecord::Base
end end
def self.search(terms) def self.search(terms)
terms.present? ? where("title ILIKE ? OR description ILIKE ? OR question ILIKE ?", "%#{terms}%", "%#{terms}%", "%#{terms}%") : none self.pg_search(terms)
end end
def self.votes_needed_for_success def self.votes_needed_for_success

View File

@@ -60,7 +60,6 @@
<div class="row-full subnavigation-container"> <div class="row-full subnavigation-container">
<section class="subnavigation row"> <section class="subnavigation row">
<div class="small-12 medium-8 column"> <div class="small-12 medium-8 column">
<%= link_to t("layouts.header.highlights"), highlights_path, class: ("active" if current_page? highlights_path) %>
<%= link_to t("layouts.header.debates"), debates_path, class: ("active" if current_page?(controller: "/debates")) %> <%= link_to t("layouts.header.debates"), debates_path, class: ("active" if current_page?(controller: "/debates")) %>
<%= link_to t("layouts.header.proposals"), proposals_path, class: ("active" if current_page?(controller: "/proposals")) %> <%= link_to t("layouts.header.proposals"), proposals_path, class: ("active" if current_page?(controller: "/proposals")) %>
<%= link_to t("layouts.header.more_information"), "/more_information", class: ("active" if current_page?("/more_information")) %> <%= link_to t("layouts.header.more_information"), "/more_information", class: ("active" if current_page?("/more_information")) %>

View File

@@ -5,14 +5,24 @@
<%= t('management.proposals.print.print_button') %> <%= t('management.proposals.print.print_button') %>
</a> </a>
<%= image_tag "header_print_proposals.jpg", class: "for-print-only" %>
<div class="filters"> <div class="filters">
<span class="for-print-only date-for-print"><%= l Date.today, format: :long %></span>
<h2 class="inline-block"> <h2 class="inline-block">
<%= t("proposals.index.select_order_long") %> <span class="not-print"><%= t("proposals.index.select_order_long") %></span>
<span class="for-print-only"><%= t("management.print.proposals_title") %></span>
</h2> </h2>
<%= render 'shared/order_selector', i18n_namespace: "proposals.index" %> <%= render 'shared/order_selector', i18n_namespace: "proposals.index" %>
</div> </div>
<%= render @proposals %> <%= render @proposals %>
<div class="for-print-only">
<p><strong><%= t("management.print.info") %></strong><br>
<%= t("management.print.note") %></p>
</div>
</div> </div>
</div> </div>
</section> </section>

View File

@@ -57,7 +57,6 @@ namespace :deploy do
# Custom compile and rsync of assets - works, but it is very slow # Custom compile and rsync of assets - works, but it is very slow
#after 'deploy:symlink:shared', 'deploy:compile_assets_locally' #after 'deploy:symlink:shared', 'deploy:compile_assets_locally'
after :finishing, 'deploy:beta_testers'
after :finishing, 'deploy:cleanup' after :finishing, 'deploy:cleanup'
# Restart unicorn # Restart unicorn
after 'deploy:publishing', 'deploy:restart' after 'deploy:publishing', 'deploy:restart'

View File

@@ -2,17 +2,17 @@ en:
activemodel: activemodel:
models: models:
verification: verification:
residence: Residence residence: "Residence"
sms: SMS sms: "SMS"
attributes: attributes:
verification: verification:
residence: residence:
document_type: Document type document_type: "Document type"
document_number: Document number(including letter) document_number: "Document number (including letters)"
date_of_birth: Date of birth date_of_birth: "Date of birth"
postal_code: Postal code postal_code: "Postcode"
sms: sms:
phone: 'Phone' phone: "Telephone"
confirmation_code: 'Confirmation code' confirmation_code: "Confirmation code"
email: email:
recipient: 'Email' recipient: "Email"

View File

@@ -2,17 +2,17 @@ es:
activemodel: activemodel:
models: models:
verification: verification:
residence: Residencia residence: "Residencia"
sms: SMS sms: "SMS"
attributes: attributes:
verification: verification:
residence: residence:
document_type: Tipo documento document_type: "Tipo documento"
document_number: Numero de documento (incluida letra) document_number: "Numero de documento (incluida letra)"
date_of_birth: Fecha de nacimiento date_of_birth: "Fecha de nacimiento"
postal_code: 'Código postal' postal_code: "Código postal"
sms: sms:
phone: 'Teléfono' phone: "Teléfono"
confirmation_code: 'Código de confirmación' confirmation_code: "Código de confirmación"
email: email:
recipient: 'Email' recipient: "Email"

View File

@@ -7,46 +7,68 @@ en:
email: email:
password_already_set: "This user already has a password" password_already_set: "This user already has a password"
models: models:
activity: Activity activity:
comment: Comment one: "activity"
debate: Debate other: "activities"
proposal: Proposal comment:
tag: Topic one: "Comment"
user: User other: "Comments"
vote: Vote debate:
organization: Organization one: "Debate"
other: "Debates"
tag:
one: "Tag"
other: "Tags"
user:
one: "User"
other: "Users"
moderator:
one: "Moderator"
other: "Moderators"
administrator:
one: "Administrator"
other: "Administrators"
vote:
one: "Vote"
other: "Votes"
organization:
one: "Organisation"
other: "Organisations"
proposal:
one: "Citizen proposal"
other: "Citizen proposals"
attributes: attributes:
comment: comment:
body: Comment body: "Comment"
user: User user: "User"
debate: debate:
author: Author author: "Author"
description: Opinion description: "Opinion"
terms_of_service: Terms of service terms_of_service: "Terms of service"
title: Title title: "Title"
proposal: proposal:
author: Author author: "Author"
title: Title title: "Title"
question: Question question: "Question"
description: Description description: "Description"
terms_of_service: Terms of service terms_of_service: "Terms of service"
user: user:
email: Email email: "Email"
username: Username username: "Username"
password: Password password: "Password"
phone_number: Phone number phone_number: "Phone number"
official_position: Official position official_position: "Official position"
official_level: Official level official_level: "Official level"
organization: organization:
name: Organization name name: "Name of organisation"
responsible_name: Person in charge responsible_name: "Person responsible for the group"
errors: errors:
models: models:
debate: debate:
attributes: attributes:
tag_list: tag_list:
less_than_or_equal_to: tags must be less than or equal to %{count} less_than_or_equal_to: "tags must be less than or equal to %{count}"
proposal: proposal:
attributes: attributes:
tag_list: tag_list:
less_than_or_equal_to: tags must be less than or equal to %{count} less_than_or_equal_to: "tags must be less than or equal to %{count}"

View File

@@ -8,67 +8,67 @@ es:
password_already_set: "Este usuario ya tiene una clave asociada" password_already_set: "Este usuario ya tiene una clave asociada"
models: models:
activity: activity:
one: actividad one: "actividad"
other: actividades other: "actividades"
comment: comment:
one: Comentario one: "Comentario"
other: Comentarios other: "Comentarios"
debate: debate:
one: Debate one: "Debate"
other: Debates other: "Debates"
tag: tag:
one: Tema one: "Tema"
other: Temas other: "Temas"
user: user:
one: Usuario one: "Usuario"
other: Usuarios other: "Usuarios"
moderator: moderator:
one: Moderador one: "Moderador"
other: Moderadores other: "Moderadores"
administrator: administrator:
one: Administrador one: "Administrador"
other: Administradores other: "Administradores"
vote: vote:
one: Voto one: "Voto"
other: Voto other: "Votos"
organization: organization:
one: Organización one: "Organización"
other: Organizaciones other: "Organizaciones"
proposal: proposal:
one: Propuesta ciudadana one: "Propuesta ciudadana"
other: Propuestas ciudadanas other: "Propuestas ciudadanas"
attributes: attributes:
comment: comment:
body: Comentario body: "Comentario"
user: Usuario user: "Usuario"
debate: debate:
author: Autor author: "Autor"
description: Opinión description: "Opinión"
terms_of_service: Términos de servicio terms_of_service: "Términos de servicio"
title: Título title: "Título"
proposal: proposal:
author: Autor author: "Autor"
title: Título title: "Título"
question: Pregunta question: "Pregunta"
description: Descripción description: "Descripción"
terms_of_service: Términos de servicio terms_of_service: "Términos de servicio"
user: user:
email: Correo electrónico email: "Correo electrónico"
username: Nombre de usuario username: "Nombre de usuario"
password: Contraseña password: "Contraseña"
phone_number: Teléfono phone_number: "Teléfono"
official_position: Cargo público official_position: "Cargo público"
official_level: Nivel del cargo official_level: "Nivel del cargo"
organization: organization:
name: Nombre de organización name: "Nombre de organización"
responsible_name: Persona responsable del colectivo responsible_name: "Persona responsable del colectivo"
errors: errors:
models: models:
debate: debate:
attributes: attributes:
tag_list: tag_list:
less_than_or_equal_to: los temas deben ser menor o igual que %{count} less_than_or_equal_to: "los temas deben ser menor o igual que %{count}"
proposal: proposal:
attributes: attributes:
tag_list: tag_list:
less_than_or_equal_to: los temas deben ser menor o igual que %{count} less_than_or_equal_to: "los temas deben ser menor o igual que %{count}"

244
config/locales/admin.en.yml Normal file → Executable file
View File

@@ -2,177 +2,177 @@ en:
admin: admin:
settings: settings:
index: index:
title: Global settings title: "General settings"
update_setting: Update update_setting: "Update"
flash: flash:
updated: 'Setting updated!' updated: "Value updated"
dashboard: dashboard:
index: index:
title: Administration title: "Administration"
menu: menu:
settings: Global settings settings: "General settings"
debate_topics: Debate topics debate_topics: "Debate topics"
hidden_proposals: Hidden proposals hidden_proposals: "Hidden proposals"
hidden_debates: Hidden debates hidden_debates: "Hidden debates"
hidden_comments: Hidden comments hidden_comments: "Hidden comments"
hidden_users: Blocked users hidden_users: "Hidden users"
incomplete_verifications: Incomplete verifications incomplete_verifications: "Incomplete verifications"
organizations: Organizations organizations: "Organisations"
officials: Officials officials: "Officials"
moderators: Moderators moderators: "Moderators"
stats: Statistics stats: "Statistics"
activity: Moderation Activity activity: "Moderator activity"
shared: shared:
user_search: user_search:
placeholder: 'Search user by name or email' placeholder: "Search user by name or email'"
button: 'Search' button: "Search"
proposal_search: proposal_search:
placeholder: 'Search proposals by title, description or question' placeholder: "Search proposals by title, description or question"
button: 'Search' button: "Search"
organizations: organizations:
index: index:
title: Organizations title: "Organisations"
search_placeholder: "Name, email or phone" search_placeholder: "Name, email or phone number"
search: Search search: "Search"
verify: Verify verify: "Verify"
reject: Reject reject: "Reject"
verified: Verified verified: "Verified"
rejected: Rejected rejected: "Rejected"
filter: Filter filter: "Filter"
filters: filters:
all: All all: "All"
pending: Pending pending: "Pending"
verified: Verified verified: "Verified"
rejected: Rejected rejected: "Rejected"
hidden_count: hidden_count:
one: "There is %{count} organization without user or with the user banned" one: "There is also one organisation with no users or with a hidden user"
other: "There is %{count} organizations without user or with the user banned" other: "There are %{count} organisations with no users or with a hidden user"
search: search:
title: "Search Organizations" title: "Search Organisations"
actions: actions:
hide: Hide hide: "Hide"
hide_author: Ban author hide_author: "Hide author"
restore: Restore restore: "Restore"
confirm: 'Are you sure?' confirm: "Are you sure?"
confirm_hide: Confirm confirm_hide: "Confirm"
tags: tags:
index: index:
title: 'Debate topics' title: "Debate topics"
add_tag: 'Add a new debate topic' add_tag: "Add a new debate topic"
mark_as_featured: 'Propose topic to create debate' mark_as_featured: "Propose topic upon creating debate"
name: name:
placeholder: 'Write a topic' placeholder: "Type the name of the topic"
create: Create Topic create: "Create Topic"
update: Update Topic update: "Update Topic"
destroy: Delete Topic destroy: "Destroy Topic"
comments: comments:
index: index:
title: Hidden comments title: "Hidden comments"
hidden_proposal: "Hidden proposal" hidden_proposal: "Hidden proposal"
hidden_debate: "Hidden debate" hidden_debate: "Hidden debate"
filter: Filter filter: "Filter"
filters: filters:
all: All all: "All"
with_confirmed_hide: Confirmed with_confirmed_hide: "Confirmed"
without_confirmed_hide: Pending without_confirmed_hide: "Pending"
debates: debates:
index: index:
title: Hidden debates title: "Hidden debates"
filter: Filter filter: "Filter"
filters: filters:
all: All all: "All"
with_confirmed_hide: Confirmed with_confirmed_hide: "Confirmed"
without_confirmed_hide: Pending without_confirmed_hide: "Pending"
proposals: proposals:
index: index:
title: Hidden proposals title: "Hidden proposals"
filter: Filter filter: "Filter"
filters: filters:
all: All all: "All"
with_confirmed_hide: Confirmed with_confirmed_hide: "Confirmed"
without_confirmed_hide: Pending without_confirmed_hide: "Pending"
users: users:
index: index:
title: Banned users title: "Hidden users"
filter: Filter filter: "Filter"
filters: filters:
all: All all: "All"
with_confirmed_hide: Confirmed with_confirmed_hide: "Confirmed"
without_confirmed_hide: Pending without_confirmed_hide: "Pending"
show: show:
title: "User activity from %{user}" title: "Activity of user %{user}"
back: Back back: "Back"
email: "Email:" email: "Email:"
registered_at: "Registered at:" registered_at: "Registered at:"
hidden_at: "Hidden at:" hidden_at: "Hidden at:"
verifications: verifications:
index: index:
title: Incomplete verifications title: "Incomplete verifications"
phone_not_given: 'Phone not given' phone_not_given: "Phone not given"
sms_code_not_confirmed: 'Has not confirmed the sms code' sms_code_not_confirmed: "Has not confirmed the sms code"
officials: officials:
level_0: Not an official level_0: "Not official"
level_1: Level 1 level_1: "Level 1"
level_2: Level 2 level_2: "Level 2"
level_3: Level 3 level_3: "Level 3"
level_4: Level 4 level_4: "Level 4"
level_5: Level 5 level_5: "Level 5"
index: index:
title: Officials title: "Officials"
search: search:
title: 'Officials: Search users' title: "Official positions: User search"
edit_official: Edit official edit_official: "Edit official"
make_official: Make this user an official make_official: "Make official"
edit: edit:
title: 'Officials: edit user' title: "Officials: Edit user"
destroy: "Remove 'Official' condition" destroy: "Remove 'Official' status"
back: Back back: "Back"
flash: flash:
official_updated: 'Official position saved!' official_updated: "Details of official saved"
official_destroyed: 'User is not an official anymore' official_destroyed: "Details saved: the user is no longer an official"
moderators: moderators:
index: index:
title: Moderators title: "Moderators"
search: search:
email_placeholder: 'Search user by email' email_placeholder: "Search user by email"
search: Search search: "Search"
user_not_found: 'User not found' user_not_found: "User not found"
moderator: moderator:
delete: Delete delete: "Delete"
add: Add add: "Add"
activity: activity:
show: show:
title: Activity of Moderators title: "Moderator activity"
action: Action action: "Action"
by: Moderated by by: "Moderated by"
type: Type type: "Type"
filter: Show filter: "Show"
filters: filters:
all: All all: "All"
on_proposals: On Proposals on_proposals: "Proposals"
on_debates: On Debates on_debates: "Debates"
on_comments: On Comments on_comments: "Comments"
on_users: On Users on_users: "Users"
actions: actions:
hide: Hidden hide: "Hidden"
restore: Restored restore: "Restored"
block: Blocked block: "Blocked"
stats: stats:
show: show:
stats_title: Stats stats_title: "Stats"
visits_title: Visits visits_title: "Visits"
combined_title: Combined combined_title: "Combined"
summary: summary:
visits: Visits visits: "Visits"
debates: Debates debates: "Debates"
proposals: Proposals proposals: "Proposals"
comments: Comments comments: "Comments"
debate_votes: Debate votes debate_votes: "Debate votes"
proposal_votes: Proposal votes proposal_votes: "Proposal votes"
comment_votes: Comment votes comment_votes: "Comment votes"
votes: Total votes votes: "Total votes"
user_level_three: Level three users user_level_three: "Level three users"
user_level_two: Level two users user_level_two: "Level two users"
unverified_users: Unverified users unverified_users: "Unverified users"
verified_users: Verified users verified_users: "Verified users"
users: Total users users: "Total users"

View File

@@ -2,177 +2,177 @@ es:
admin: admin:
settings: settings:
index: index:
title: Configuración global title: "Configuración global"
update_setting: Actualizar update_setting: "Actualizar"
flash: flash:
updated: 'Valor actualizado' updated: "Valor actualizado"
dashboard: dashboard:
index: index:
title: Administración title: "Administración"
menu: menu:
settings: Configuración global settings: "Configuración global"
debate_topics: Temas de debate debate_topics: "Temas de debate"
hidden_proposals: Propuestas ocultas hidden_proposals: "Propuestas ocultas"
hidden_debates: Debates ocultos hidden_debates: "Debates ocultos"
hidden_comments: Comentarios ocultos hidden_comments: "Comentarios ocultos"
hidden_users: Usuarios bloqueados hidden_users: "Usuarios bloqueados"
incomplete_verifications: Verificaciones incompletas incomplete_verifications: "Verificaciones incompletas"
organizations: Organizaciones organizations: "Organizaciones"
officials: Cargos públicos officials: "Cargos públicos"
moderators: Moderadores moderators: "Moderadores"
stats: Estadísticas stats: "Estadísticas"
activity: Actividad de moderadores activity: "Actividad de moderadores"
shared: shared:
user_search: user_search:
placeholder: 'Buscar usuario por nombre o email' placeholder: "Buscar usuario por nombre o email"
button: 'Buscar' button: "Buscar"
proposal_search: proposal_search:
placeholder: 'Buscar propuestas por título, descripción o pregunta' placeholder: "Buscar propuestas por título, descripción o pregunta"
button: 'Buscar' button: "Buscar"
organizations: organizations:
index: index:
title: Organizaciones title: "Organizaciones"
search_placeholder: "Nombre, email o teléfono" search_placeholder: "Nombre, email o teléfono"
search: Buscar search: "Buscar"
verify: Verificar verify: "Verificar"
reject: Rechazar reject: "Rechazar"
verified: Verificada verified: "Verificada"
rejected: Rechazada rejected: "Rechazada"
filter: Filtro filter: "Filtro"
filters: filters:
all: Todas all: "Todas"
pending: Pendientes pending: "Pendientes"
verified: Verificadas verified: "Verificadas"
rejected: Rechazadas rejected: "Rechazadas"
hidden_count: hidden_count:
one: "Hay además una organización sin usuario o con el usuario bloqueado" one: "Hay además una organización sin usuario o con el usuario bloqueado"
other: "Hay %{count} organizaciones sin usuario o con el usuario bloqueado" other: "Hay %{count} organizaciones sin usuario o con el usuario bloqueado"
search: search:
title: "Buscar Organizaciones" title: "Buscar Organizaciones"
actions: actions:
hide: Ocultar hide: "Ocultar"
hide_author: Bloquear al autor hide_author: "Bloquear al autor"
restore: Volver a mostrar restore: "Volver a mostrar"
confirm: '¿Estás seguro?' confirm: "¿Estás seguro?"
confirm_hide: Confirmar confirm_hide: "Confirmar"
tags: tags:
index: index:
title: 'Temas de debate' title: "Temas de debate"
add_tag: 'Añade un nuevo tema de debate' add_tag: "Añade un nuevo tema de debate"
mark_as_featured: 'Proponer tema al crear debate' mark_as_featured: "Proponer tema al crear debate"
name: name:
placeholder: 'Escribe el nombre del tema' placeholder: "Escribe el nombre del tema"
create: Crear Tema create: "Crear Tema"
update: Actualizar Tema update: "Actualizar Tema"
destroy: Eliminar Tema destroy: "Eliminar Tema"
comments: comments:
index: index:
title: Comentarios ocultos title: "Comentarios ocultos"
hidden_proposal: "Propuesta oculta" hidden_proposal: "Propuesta oculta"
hidden_debate: "Debate oculto" hidden_debate: "Debate oculto"
filter: Filtro filter: "Filtro"
filters: filters:
all: Todos all: "Todos"
with_confirmed_hide: Confirmados with_confirmed_hide: "Confirmados"
without_confirmed_hide: Pendientes without_confirmed_hide: "Pendientes"
debates: debates:
index: index:
title: Debates ocultos title: "Debates ocultos"
filter: Filtro filter: "Filtro"
filters: filters:
all: Todos all: "Todos"
with_confirmed_hide: Confirmados with_confirmed_hide: "Confirmados"
without_confirmed_hide: Pendientes without_confirmed_hide: "Pendientes"
proposals: proposals:
index: index:
title: Propuestas ocultos title: "Propuestas ocultos"
filter: Filtro filter: "Filtro"
filters: filters:
all: Todas all: "Todas"
with_confirmed_hide: Confirmadas with_confirmed_hide: "Confirmadas"
without_confirmed_hide: Pendientes without_confirmed_hide: "Pendientes"
users: users:
index: index:
title: Usuarios bloqueados title: "Usuarios bloqueados"
filter: Filtro filter: "Filtro"
filters: filters:
all: Todos all: "Todos"
with_confirmed_hide: Confirmados with_confirmed_hide: "Confirmados"
without_confirmed_hide: Pendientes without_confirmed_hide: "Pendientes"
show: show:
title: "Actividad del usuario %{user}" title: "Actividad del usuario %{user}"
back: Volver back: "Volver"
email: "Email:" email: "Email:"
registered_at: "Fecha de alta:" registered_at: "Fecha de alta:"
hidden_at: "Bloqueado:" hidden_at: "Bloqueado:"
verifications: verifications:
index: index:
title: Verificaciones incompletas title: "Verificaciones incompletas"
phone_not_given: 'No ha dado su teléfono' phone_not_given: "No ha dado su teléfono"
sms_code_not_confirmed: 'No ha introducido su código de seguridad' sms_code_not_confirmed: "No ha introducido su código de seguridad"
officials: officials:
level_0: "No es cargo público" level_0: "No es cargo público"
level_1: Nivel 1 level_1: "Nivel 1"
level_2: Nivel 2 level_2: "Nivel 2"
level_3: Nivel 3 level_3: "Nivel 3"
level_4: Nivel 4 level_4: "Nivel 4"
level_5: Nivel 5 level_5: "Nivel 5"
index: index:
title: Cargos Públicos title: "Cargos Públicos"
search: search:
title: 'Cargos Públicos: Búsqueda de usuarios' title: "Cargos Públicos: Búsqueda de usuarios"
edit_official: Editar cargo público edit_official: "Editar cargo público"
make_official: Convertir en cargo público make_official: "Convertir en cargo público"
edit: edit:
title: 'Cargos Públicos: Editar usuario' title: "Cargos Públicos: Editar usuario"
destroy: "Eliminar condición de 'Cargo Público'" destroy: "Eliminar condición de 'Cargo Público'"
back: Volver back: "Volver"
flash: flash:
official_updated: 'Datos del cargo público guardados' official_updated: "Datos del cargo público guardados"
official_destroyed: 'Datos guardados: el usuario ya no es cargo público' official_destroyed: "Datos guardados: el usuario ya no es cargo público"
moderators: moderators:
index: index:
title: Moderadores title: "Moderadores"
search: search:
email_placeholder: 'Buscar usuario por email' email_placeholder: "Buscar usuario por email"
search: Buscar search: "Buscar"
user_not_found: 'Usuario no encontrado' user_not_found: "Usuario no encontrado"
moderator: moderator:
delete: Borrar delete: "Borrar"
add: Añadir add: "Añadir"
activity: activity:
show: show:
title: Actividad de los Moderadores title: "Actividad de los Moderadores"
action: 'Acción' action: "Acción"
by: Moderado por by: "Moderado por"
type: Tipo type: "Tipo"
filter: Mostrar filter: "Mostrar"
filters: filters:
all: Todo all: "Todo"
on_proposals: Propuestas on_proposals: "Propuestas"
on_debates: Debates on_debates: "Debates"
on_comments: Comentarios on_comments: "Comentarios"
on_users: Usuarios on_users: "Usuarios"
actions: actions:
hide: Ocultado hide: "Ocultado"
restore: Restaurado restore: "Restaurado"
block: Bloqueado block: "Bloqueado"
stats: stats:
show: show:
stats_title: Estadísticas stats_title: "Estadísticas"
visits_title: Visitas visits_title: "Visitas"
combined_title: Combinado combined_title: "Combinado"
summary: summary:
visits: Visitas visits: "Visitas"
debates: Debates debates: "Debates"
proposals: Propuestas proposals: "Propuestas"
comments: Comentarios comments: "Comentarios"
debate_votes: Votos en debates debate_votes: "Votos en debates"
proposal_votes: Votos en propuestas proposal_votes: "Votos en propuestas"
comment_votes: Votos en comentarios comment_votes: "Votos en comentarios"
votes: Votos votes: "Votos"
user_level_three: Usuarios de nivel tres user_level_three: "Usuarios de nivel tres"
user_level_two: Usuarios de nivel dos user_level_two: "Usuarios de nivel dos"
unverified_users: Usuarios sin verificar unverified_users: "Usuarios sin verificar"
verified_users: Usuarios verificados verified_users: "Usuarios verificados"
users: Usuarios users: "Usuarios"

76
config/locales/devise.en.yml Normal file → Executable file
View File

@@ -3,58 +3,62 @@
en: en:
devise: devise:
confirmations: confirmations:
confirmed: "Your email address has been successfully confirmed." confirmed: "Your account has been confirmed."
send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes." send_instructions: "In a few minutes you will receive an email containing instructions on how to reset your password."
send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes." send_paranoid_instructions: "If your email address is in our database, in a few minutes you will receive an email containing instructions on how to reset your password."
failure: failure:
already_authenticated: "You are already signed in." already_authenticated: "You are already signed in."
inactive: "Your account is not activated yet." inactive: "Your account has not yet been activated."
invalid: "Invalid %{authentication_keys} or password." invalid: "Invalid %{authentication_keys} or password."
locked: "Your account is locked." locked: "Your account has been locked."
last_attempt: "You have one more attempt before your account is locked." last_attempt: "You have one more attempt remaining before your account is blocked."
not_found_in_database: "Invalid %{authentication_keys} or password." not_found_in_database: "Invalid %{authentication_keys} or password."
timeout: "Your session expired. Please sign in again to continue." timeout: "Your session has expired. Please sign in again to continue."
unauthenticated: "You need to sign in or sign up before continuing." unauthenticated: "You must sign in or register to continue."
unconfirmed: "You have to confirm your email address before continuing." unconfirmed: "You must confirm your account to continue."
mailer: mailer:
confirmation_instructions: confirmation_instructions:
subject: "Confirmation instructions" subject: "Confirmation instructions"
reset_password_instructions: reset_password_instructions:
subject: "Reset password instructions" subject: "Instructions for resetting your password"
unlock_instructions: unlock_instructions:
subject: "Unlock instructions" subject: "Unlocking instructions"
omniauth_callbacks: omniauth_callbacks:
failure: "Could not authenticate you from %{kind} because \"%{reason}\"." failure: "It has not been possible to authorise you as %{kind} because \"%{reason}\"."
success: "Successfully authenticated from %{kind} account." success: "Successfully identified as %{kind}."
passwords: passwords:
no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided." no_token: "You cannot access this page except through a password reset link. If you have accessed it through a password reset link, please check that the URL is complete."
send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes." send_instructions: "In a few minutes, you will receive an email containing instructions on resetting your password."
send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes." send_paranoid_instructions: "If your email address is in our database, in a few minutes you will receive a link to use to reset your password."
updated: "Your password has been changed successfully. You are now signed in." updated: "Your password has been changed successfully. Authentication successful."
updated_not_active: "Your password has been changed successfully." updated_not_active: "Your password has been changed successfully."
registrations: registrations:
destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon." destroyed:
signed_up: "Welcome! You have signed up successfully." "Goodbye! Your account has been cancelled. We hope to see you again soon. In accordance with your request, personal data registered as
signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated." a user of the site decide.madrid.es and form part of the file 'Gestión de procesos participativos' under the responsibility of the
signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked." Dirección General de Participación Ciudadana, they have been canceled under the terms of the provisions of Article 16 of the
signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account." Ley Orgánica 15/1999 de Protección de Datos de Carácter Personal and Article 31 of its Reglamento de desarrollo (RD 1720/2007)."
update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address." signed_up: "Welcome! You have been authenticated."
signed_up_but_inactive: "Your registration was successful, but you could not be signed in because your account has not been activated."
signed_up_but_locked: "Your registration was successful, but you could not be signed in because your account is locked."
signed_up_but_unconfirmed: "You have been sent a message containing a verification link. Please click on this link to activate your account."
update_needs_confirmation: "Your account has been updated successfully; however, we need to verify your new email address. Please check your email and click on the link to complete the confirmation of your new email address."
updated: "Your account has been updated successfully." updated: "Your account has been updated successfully."
sessions: sessions:
signed_in: "Signed in successfully." signed_in: "You have been signed in successfully."
signed_out: "Signed out successfully." signed_out: "You have been signed out successfully."
already_signed_out: "Signed out successfully." already_signed_out: "You have been signed out successfully."
unlocks: unlocks:
send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes." send_instructions: "In a few minutes, you will receive an email containing instructions on unlocking your account."
send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes." send_paranoid_instructions: "If you have an account, in a few minutes you will receive an email containing instructions on unlocking your account."
unlocked: "Your account has been unlocked successfully. Please sign in to continue." unlocked: "Your account has been unlocked. Please sign in to continue."
errors: errors:
messages: messages:
already_confirmed: "was already confirmed, please try signing in" already_confirmed: "You have already been verified; please attempt to sign in."
confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one" confirmation_period_expired: "You need to be verified within %{period}; please make a repeat request."
expired: "has expired, please request a new one" expired: "has expired; please make a repeat request."
not_found: "not found" not_found: "not found."
not_locked: "was not locked" not_locked: "was not locked."
not_saved: not_saved:
one: "1 error prohibited this %{resource} from being saved:" one: "1 error prevented this %{resource} from being saved:"
other: "%{count} errors prohibited this %{resource} from being saved:" other: "%{count} errors prevented this %{resource} from being saved:"

View File

@@ -31,7 +31,11 @@ es:
updated: "Tu contraseña ha cambiado correctamente. Has sido identificado correctamente." updated: "Tu contraseña ha cambiado correctamente. Has sido identificado correctamente."
updated_not_active: "Tu contraseña se ha cambiado correctamente." updated_not_active: "Tu contraseña se ha cambiado correctamente."
registrations: registrations:
destroyed: "¡Adiós! Tu cuenta ha sido cancelada. Esperamos volver a verte pronto." destroyed:
"¡Adiós! Tu cuenta ha sido cancelada. Esperamos volver a verte pronto. Le informamos que de conformidad con su petición,
sus datos personales registrados como usuario de la Web decide.madrid.es y que forman parte del fichero 'Gestión de procesos participativos'
cuyo responsable es la Dirección General de Participación Ciudadana, han sido cancelados en los términos de lo previsto en el artículo 16 de la
Ley Orgánica 15/1999 de Protección de Datos de Carácter Personal y del artículo 31 de su Reglamento de desarrollo (RD 1720/2007)."
signed_up: "¡Bienvenido! Has sido identificado." 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_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_locked: "Te has registrado correctamente, pero no has podido iniciar sesión porque tu cuenta está bloqueada."

101
config/locales/devise_views.en.yml Normal file → Executable file
View File

@@ -2,9 +2,9 @@ en:
devise_views: devise_views:
confirmations: confirmations:
new: new:
title: "Resend confirmation instructions" title: "Re-send confirmation instructions"
email_label: Email email_label: "Email"
submit: "Resend confirmation" submit: "Re-send instructions"
show: show:
title: "Confirm my account" title: "Confirm my account"
instructions_html: "Confirming the account with email %{email}" instructions_html: "Confirming the account with email %{email}"
@@ -14,28 +14,28 @@ en:
submit: "Confirm" submit: "Confirm"
mailer: mailer:
confirmation_instructions: confirmation_instructions:
title: "Welcome to open government portal" title: "Welcome to the Open Government Portal of the Madrid City Council"
welcome: "Welcome" welcome: "Welcome"
text: "You can confirm your account email through the link below:" text: "You can confirm your email account at the following link:"
confirm_link: "Confirm my account" confirm_link: "Confirm my account"
reset_password_instructions: reset_password_instructions:
hello: "Hello" hello: "Hello"
title: Change your password title: "Change your password"
text: "Someone has requested to change your password. You can do this through the link below:" text: "We have received a request to change your password. You can do this at the following link:"
change_link: "Change my password" change_link: "Change my password"
ignore_text: "If you didn't request this, please ignore this email." ignore_text: "If you did not request a password change, you can ignore this email."
info_text: "Your password won't change until you access the link above and create a new one." info_text: "Your password will not be changed unless you access the link and edit it."
unlock_instructions: unlock_instructions:
hello: "Hello" hello: "Hello"
title: Your account has been locked title: "Your account has been locked"
info_text: "Your account has been locked due to an excessive number of unsuccessful sign in attempts." info_text: "Your account has been blocked due to an excessive number of failed sign-in attempts."
instructions_text: "Click the link below to unlock your account:" instructions_text: "Please click on this link to unlock your account:"
unlock_link: "Unlock my account" unlock_link: "Unlock my account"
menu: menu:
login_items: login_items:
logout: "Logout" logout: "Sign out"
signup: "Sign up" signup: "Register"
login: "Log in" login: "Sign in"
passwords: passwords:
edit: edit:
title: "Change your password" title: "Change your password"
@@ -43,40 +43,40 @@ en:
password_confirmation_label: "Confirm new password" password_confirmation_label: "Confirm new password"
change_submit: "Change my password" change_submit: "Change my password"
new: new:
title: "Forgot your password?" title: "Forgotten password?"
email_label: "Email" email_label: "Email"
send_submit: "Send me reset password" send_submit: "Send instructions"
users: users:
registrations: registrations:
edit: edit:
edit: "Edit" edit: "Edit"
email_label: "Email" email_label: "Email"
waiting_for: "Currently waiting confirmation for:" waiting_for: "Awaiting confirmation of:"
leave_blank: "Leave blank if you don't want to change it" leave_blank: "Leave blank if you do not wish to modify"
password_label: "New password" password_label: "New password"
password_confirmation_label: "Confirm new password" password_confirmation_label: "Confirm new password"
current_password_label: "Current password" current_password_label: "Current password"
need_current: "We need your current password to confirm your changes" need_current: "We need your current password to confirm the changes"
update_submit: "Update" update_submit: "Update"
back_link: "Back" back_link: "Back"
new: new:
title: "Sign up" title: "Register"
username_label: "Username" username_label: "Username"
username_note: "Username which will appear in your publications" username_note: "Name that appears next to your posts"
email_label: "Email" email_label: "Email"
password_label: "Password" password_label: "Password"
password_confirmation_label: "Confirm password" password_confirmation_label: "Confirm password"
submit: "Sign up" submit: "Register"
organization_signup: "Do you represent an organization / group? %{signup_link}" organization_signup: "Do you represent an organisation or collective? %{signup_link}"
organization_signup_link: "Sign up here" organization_signup_link: "Sign up here"
terms: "To sign up in this site your accept the %{terms}" terms: "By registering you accept the %{terms}"
terms_link: "terms of use" terms_link: "terms and conditions of use"
success: success:
title: "Review your email inbox" title: "Modify your email"
thank_you_html: "Thank you for registering. Now you must <b>confirm your email account</b>." thank_you_html: "Thank you for registering for the website. You must now <b>confirm your email address</b>."
instructions_1_html: "Please <b>review your email inbox</b> - we have sent you a <b>link to confirm your account</b>." instructions_1_html: "Please <b>check your email</b> - we have sent you a <b>link to confirm your account</b>."
instructions_2_html: "Once you click that link, you will be able to start participating" instructions_2_html: "Once confirmed, you may begin participation."
back_to_index: "Understood, take me back to the home page" back_to_index: "I understand; go back to main page"
delete_form: delete_form:
title: "Erase account" title: "Erase account"
info: "This action can not be undone. Please make sure this is what you want." info: "This action can not be undone. Please make sure this is what you want."
@@ -86,41 +86,40 @@ en:
organizations: organizations:
registrations: registrations:
new: new:
title: "Sign up as organization / collective" title: "Register as an organisation or collective"
organization_name_label: "Organization name" organization_name_label: "Name of organisation"
responsible_name_label: "Name and surname of the person in charge" responsible_name_label: "Full name of the person responsible for the collective"
responsible_name_note: "The responsible representative of the organization" responsible_name_note: "This would be the person representing the association/collective in whose name the proposals are presented"
email_label: "Email" email_label: "Email"
password_label: "Password" password_label: "Password"
phone_number_label: "Phone number" phone_number_label: "Phone number"
password_confirmation_label: "Confirm password" password_confirmation_label: "Confirm password"
submit: "Sign up" submit: "Register"
success: success:
title: "Registration of organization / collective" title: "Registration of organisation / collective"
thank_you_html: "Thank you for registering your organization or collective in the website. Now is <b>pending verification</b>." thank_you_html: "Thank you for registering your collective on the website. It is now <b>pending verification</b>."
instructions_1_html: "We will <b>contact you soon</b> in order to verify that you represent your collective." instructions_1_html: "<b>We will contact you soon</b> to verify that you do in fact represent this collective."
instructions_2_html: "Meanwhile, <b>review your email</b>. We have sent you a <b>confirmation link to activate your account</b>." instructions_2_html: "While your <b>email is reviewed</b>, we have sent you a <b>link to confirm your account</b>."
instructions_3_html: "When you confirm your account will then be able to participate as a non-verified organization." instructions_3_html: "Once confirmed, you may begin to participate as an unverified collective."
back_to_index: "Understood, take me back to the home page" back_to_index: "I understand; go back to main page"
sessions: sessions:
new: new:
title: "Log in" title: "Sign in"
email_label: "Email" email_label: "Email"
password_label: "Password" password_label: "Password"
remember_me: "Remember me" remember_me: "Remember me"
submit: "Log in" submit: "Enter"
unlocks: unlocks:
new: new:
title: "Resend unlock instructions" title: "Re-sent unlocking instructions"
email_label: "Email" email_label: "Email"
submit: "Resend unlock instructions" submit: "Re-send unlocking instructions"
shared: shared:
links: links:
login: "Log in" login: "Enter"
signup: "Don't have an account? %{signup_link}" signup: "Don't have an account? %{signup_link}"
signup_link: "Sign up" signup_link: "Sign up"
#organization_signup: "Sign up as an organization / collective"
signin_with_provider: "Sign in with %{provider}" signin_with_provider: "Sign in with %{provider}"
new_password: "Forgot your password?" new_password: "Forgotten your password?"
new_confirmation: "Didn't receive confirmation instructions?" new_confirmation: "Haven't received instructions to activate your account?"
new_unlock: "Didn't receive unlock instructions?" new_unlock: "Haven't received unlocking instructions?"

View File

@@ -3,7 +3,7 @@ es:
confirmations: confirmations:
new: new:
title: "Reenviar instrucciones de confirmación" title: "Reenviar instrucciones de confirmación"
email_label: Email email_label: "Email"
submit: "Reenviar instrucciones" submit: "Reenviar instrucciones"
show: show:
title: "Confirmar mi cuenta" title: "Confirmar mi cuenta"
@@ -27,7 +27,7 @@ es:
info_text: "Tu contraseña no cambiará hasta que no accedas al enlace y la modifiques." info_text: "Tu contraseña no cambiará hasta que no accedas al enlace y la modifiques."
unlock_instructions: unlock_instructions:
hello: "Hola" hello: "Hola"
title: Tu cuenta ha sido bloqueada title: "Tu cuenta ha sido bloqueada"
info_text: "Tu cuenta ha sido bloqueada debido a un excesivo número de intentos fallidos de alta." info_text: "Tu cuenta ha sido bloqueada debido a un excesivo número de intentos fallidos de alta."
instructions_text: "Sigue el siguiente enlace para desbloquear tu cuenta:" instructions_text: "Sigue el siguiente enlace para desbloquear tu cuenta:"
unlock_link: "Desbloquear mi cuenta" unlock_link: "Desbloquear mi cuenta"
@@ -119,7 +119,6 @@ es:
login: "Entrar" login: "Entrar"
signup: "¿No tienes una cuenta? %{signup_link}" signup: "¿No tienes una cuenta? %{signup_link}"
signup_link: "Regístrate" signup_link: "Regístrate"
#organization_signup: "Registro para organizaciones / colectivos"
signin_with_provider: "Entrar con %{provider}" signin_with_provider: "Entrar con %{provider}"
new_password: "¿Olvidaste tu contraseña?" new_password: "¿Olvidaste tu contraseña?"
new_confirmation: "¿No has recibido instrucciones para confirmar tu cuenta?" new_confirmation: "¿No has recibido instrucciones para confirmar tu cuenta?"

428
config/locales/en.yml Normal file → Executable file
View File

@@ -1,58 +1,58 @@
en: en:
locale: English locale: "English"
errors: errors:
messages: messages:
user_not_found: "User not found" user_not_found: "User not found"
layouts: layouts:
header: header:
logo: "Madrid" logo: "Madrid"
external_link_transparency: Transparency external_link_transparency: "Transparency"
external_link_transparency_url: "http://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Transparencia?vgnextfmt=default&vgnextchannel=20fd850769797310VgnVCM2000000c205a0aRCRD" external_link_transparency_url: "http://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Transparencia?vgnextfmt=default&vgnextchannel=20fd850769797310VgnVCM2000000c205a0aRCRD"
external_link_opendata: Open data external_link_opendata: "Open data"
external_link_opendata_url: "http://datos.madrid.es" external_link_opendata_url: "http://datos.madrid.es"
external_link_blog: Blog external_link_blog: "Blog"
external_link_blog_url: "/blog" external_link_blog_url: "/blog"
open_gov: "%{open} government" open_gov: "%{open} government"
open: "Open" open: "open"
participation: "Participation" participation: "Participation"
transparency: "Transparency" transparency: "Transparency"
open_data: "Open data" open_data: "Open data"
open_city_title: "The city you want, it will be the city you want." open_city_title: "Love the city, and it will become a city you love."
open_city_slogan_html: open_city_slogan_html:
"Start listening to Madrid. "There are cities that are governed directly by their inhabitants, who <b>discuss</b> the topics they are concerned about, <b>propose</b> ideas to improve
For that we open this digital Puerta del Sol, where all the locals can meet to discuss and share everything we want." their lives and <b>decide</b> among themselves which ones will be carried out. Madrid is already one of these cities."
see_all: "See proposals" see_all: "See proposals"
my_account_link: My account my_account_link: "My account"
locale: "Language:" locale: "Language:"
administration: Administration administration: "Administration"
moderation: Moderation moderation: "Moderation"
highlights: "Highlights" # highlights: "Highlights"
more_information: "More information" more_information: "More information"
debates: Debates debates: "Debates"
proposals: Proposals proposals: "Citizen proposals"
footer: footer:
description: "This portal use %{consul}, is %{open_source}. Madrid, for the whole world." description: "This portal uses the %{consul} which is %{open_source}. From Madrid out into the world."
open_source: "software libre" open_source: "open-source software"
open_source_url: "http://www.gnu.org/licenses/agpl-3.0.html" open_source_url: "http://www.gnu.org/licenses/agpl-3.0.html"
consul: "Consul application" consul: "Consul application"
consul_url: "https://github.com/ayuntamientomadrid" consul_url: "https://github.com/ayuntamientomadrid"
copyright: "Ayuntamiento de Madrid, %{year}" copyright: "Ayuntamiento de Madrid, %{year}"
participation_title: "Participation" participation_title: "Participation"
participation_text: Decide what should be the city of Madrid you want. participation_text: "Decide how to shape the Madrid you want to live in."
transparency_title: Transparency transparency_title: "Transparency"
transparency_text: Get any information on the City of Madrid. transparency_text: "Find out anything about the Madrid City Council."
open_data_title: Open Data open_data_title: "Open data"
open_data_text: "All City Council data are yours." open_data_text: "Every detail about the City Council is yours to access."
contact_us: "For technical support contact us" contact_us: "Contact us at"
privacy: "Privacy Policy" privacy: "Privacy Policy"
conditions: "Terms of use" conditions: "Terms and conditions of use"
more_info: "More information" more_info: "More information"
accessibility: "Accessibility" accessibility: "Accessibility"
application: application:
ie_title: "This site is not optimized for your browser" ie_title: "This website is not optimised for your browser"
ie: ie:
"You are using Internet Explorer. "We have detected that you are browsing with Internet Explorer.
For a better experience we recommend use %{chrome} or %{firefox}." For an enhanced experience, we recommend using %{chrome} or %{firefox}."
chrome: "Google Chrome" chrome: "Google Chrome"
firefox: "Firefox" firefox: "Firefox"
social: social:
@@ -61,89 +61,86 @@ en:
blog: "Blog" blog: "Blog"
youtube: "YouTube" youtube: "YouTube"
form: form:
error: error error: "error"
errors: errors errors: "errors"
not_saved: "prohibited this %{resource} from being saved:" not_saved: "prevented this %{resource} from being saved:"
accept_terms: "I accept the %{policy} and the %{conditions}" accept_terms: "I agree to the %{policy} and the %{conditions}"
policy: "Privacy policy" policy: "Privacy Policy"
conditions: "Terms of use" conditions: "Terms and conditions of use"
user: account user: "Account"
debate: debate debate: "Debate"
proposal: proposal proposal: "Proposal"
verification::sms: phone verification::sms: "Telephone"
verification::letter: verification verification::letter: "the verification"
application: application:
alert:
only_beta_testers: "Sorry only Beta Testers are allowed access at the moment"
close: "Close" close: "Close"
menu: "Menu" menu: "Menu"
debates: debates:
index: index:
title: Debates title: "Debates"
start_debate: Start a debate start_debate: "Start a debate"
select_order: Order by select_order: "Order by"
select_order_long: Order debates by select_order_long: "You are viewing debates according to:"
orders: orders:
confidence_score: best rated confidence_score: "highest rated"
hot_score: most active hot_score: "most active"
created_at: newest created_at: "newest"
most_commented: most commented most_commented: "most commented"
random: random random: "random"
filter_topic: filter_topic:
one: " with the topic '%{topic}'" one: " with topic '%{topic}'"
other: " with the topic '%{topic}'" other: " with topic '%{topic}'"
search_form: search_form:
title: Search title: "Search"
button: Search button: "Search"
placeholder: "Search debates..." placeholder: "Search debates..."
search_results: search_results:
one: " containing '%{search_term}'" one: " containing the term '%{search_term}'"
other: " containing '%{search_term}'" other: " containing the term '%{search_term}'"
debate: debate:
debate: Debate debate: "Debate"
comments: comments:
zero: No comments zero: "No comments"
one: 1 Comment one: "1 comment"
other: "%{count} Comments" other: "%{count} comments"
votes: votes:
zero: No votes zero: "No votes"
one: 1 vote one: "1 vote"
other: "%{count} votes" other: "%{count} votes"
form: form:
debate_title: Debate title debate_title: "Debate title"
debate_text: Initial text for debate debate_text: "Initial debate text"
tags_label: Topics tags_label: "Topics"
tags_instructions: > tags_instructions: "Tag this debate. You can choose from our suggestions or enter your own."
Tag this debate. You can choose among our proposals on the list or add any other topic you want. tags_placeholder: "Enter the tags you would like to use, separated by commas (',')"
tags_placeholder: "Add topics writing them separated by ','"
show: show:
back_link: Back back_link: "Go back"
author_deleted: Deleted user author_deleted: "User deleted"
comments_title: Comments comments_title: "Comments"
comments: comments:
zero: No comments zero: "No comments"
one: 1 Comment one: "1 comment"
other: "%{count} Comments" other: "%{count} comments"
login_to_comment: "You need to %{signin} or %{signup} to comment." login_to_comment: "You must %{signin} or %{signup} to leave a comment."
edit_debate_link: "Edit debate" edit_debate_link: "Edit"
share: Share share: "Share"
flag: "This debate has been flag as innapropiate for some users." flag: "This debate has been flagged as inappropriate by several users."
edit: edit:
editing: Edit debate editing: "Edit debate"
show_link: Show debate show_link: "View debate"
back_link: Back back_link: "Go back"
form: form:
submit_button: "Save changes" submit_button: "Save changes"
new: new:
start_new: Start a debate start_new: "Start a debate"
info: "A debate is a discussion forum, not a proposal. And soon... we opened the section of citizen proposals." info: "A debate is a discussion forum, not a citizen proposal. Very soon we will be opening the citizen proposal section, where anyone will be able to present a proposal which, if they receive support, will be implemented by the City Council."
more_info: "More info" more_info: "More information"
back_link: Back back_link: "Go back"
recommendations_title: Tips for creating a debate recommendations_title: "Recommendations for creating a debate"
recommendation_one: "Do not write the title of the debate or whole sentences in capital. On the Internet this is considered shouting. And nobody likes to scream." recommendation_one: "Do not use capital letters for the debate title or for whole sentences. On the internet, this is considered shouting. And nobody likes being shouted at."
recommendation_two: "Any discussion or comment that involves an illegal act will be eliminated, also intending to sabotage the debate spaces, everything else is permitted." recommendation_two: "Any debate or comment suggesting illegal action will be deleted, as well as those intending to sabotage the debate spaces. Anything else is allowed."
recommendation_three: "The harsh criticism are very welcome. This is a space of thought but we recommend preserving the elegance and intelligence. The world is better with them present." recommendation_three: "Ruthless criticism is very welcome. This is a space for reflection. But we recommend that you stick to elegance and intelligence. The world is a better place with these virtues in it."
recommendation_four: "Enjoy this space, voices that fill it, it is yours too." recommendation_four: "Enjoy this space and the voices that fill it. It belongs to you too."
form: form:
submit_button: "Start a debate" submit_button: "Start a debate"
create: create:
@@ -154,91 +151,90 @@ en:
submit_button: "Save changes" submit_button: "Save changes"
proposals: proposals:
index: index:
title: Proposals title: "Proposals"
featured_proposals_html: "Featured<br>proposals" featured_proposals_html: "Featured<br>proposals"
start_proposal: Start a proposal start_proposal: "Create a proposal"
select_order: Order by select_order: "Order by"
select_order_long: Order proposals by select_order_long: "You are viewing proposals according to:"
orders: orders:
confidence_score: "most supported" confidence_score: "highest rated"
hot_score: "most active today" hot_score: "most active"
created_at: newest created_at: "newest"
most_commented: most commented most_commented: "most commented"
random: random random: "random"
filter_topic: filter_topic:
one: " with the topic '%{topic}'" one: " with topic '%{topic}'"
other: " with the topic '%{topic}'" other: " with topic '%{topic}'"
search_form: search_form:
title: Search title: "Search"
button: Search button: "Search"
placeholder: "Search proposals..." placeholder: "Search citizen proposals..."
search_results: search_results:
one: " containing '%{search_term}'" one: " containing the term '%{search_term}'"
other: " containing '%{search_term}'" other: " containing the term '%{search_term}'"
proposal: proposal:
proposal: Proposal proposal: "Proposal"
support: "Support" support: "Support"
support_title: "Support this proposal" support_title: "Support this proposal"
comments: comments:
zero: No comments zero: "No comments"
one: 1 Comment one: "1 comment"
other: "%{count} Comments" other: "%{count} comments"
supports: supports:
zero: No supports zero: "No supports"
one: 1 support one: "1 support"
other: "%{count} supports" other: "%{count} supports"
supports_necessary: "53.726 necessary supports" supports_necessary: "53,726 supports needed"
census_percent: "2% of census" census_percent: "2% of Census"
total_percent: "100%" total_percent: "100%"
already_supported: "You already supported this proposal, share it!" already_supported: "You have already supported this proposal. Share it!"
form: form:
proposal_title: Proposal title proposal_title: "Proposal title"
proposal_question: Proposal question proposal_question: "Proposal question"
proposal_question_example_html: "Debe ser resumida en una pregunta cuya respuesta sea Sí o No. <em>Ej. '¿Está usted de acuerdo en peatonalizar la calle Mayor?'</em>" proposal_question_example_html: "Must be summarised in one question with a Yes or No answer. <em>E.g. 'Do you agree with the pedestrianisation of Calle Mayor?'</em>"
proposal_text: Initial text for proposal
proposal_external_url: Link to additional documentation
proposal_video_url: "Enlace a vídeo externo"
proposal_video_url_note: "Puedes añadir un enlace a YouTube o Vimeo"
proposal_summary: "Proposal summary" proposal_summary: "Proposal summary"
proposal_summary_note: "200 chars. maximum" proposal_summary_note: "(maximum 200 characters)"
proposal_responsible_name: "First and last name of the person making this proposal" proposal_text: "Proposal text"
proposal_responsible_name_note: "(individualmente o como representante de un colectivo; no se mostrará públicamente)" proposal_external_url: "Link to additional documentation"
tags_label: Topics proposal_video_url: "Link to external video"
tags_instructions: > proposal_video_url_note: "You may add a link to YouTube or Vimeo"
Tag this proposal. You can choose among our proposals on the list or add any other topic you want. proposal_responsible_name: "Full name of the person submitting the proposal"
tags_placeholder: "Add topics writing them separated by ','" proposal_responsible_name_note: "(individually or as representative of a collective; will not be displayed publically)"
tags_label: "Tags"
tags_instructions: "Tag this proposal. You can choose from our tags or add your own."
tags_placeholder: "Enter the tags you would like to use, separated by commas (',')"
show: show:
back_link: Back back_link: "Go back"
author_deleted: Deleted user author_deleted: "User deleted"
code: "Proposal code:" code: "Proposal code:"
comments_title: Comments comments_title: "Comments"
comments: comments:
zero: No comments zero: "No comments"
one: 1 Comment one: "1 comment"
other: "%{count} Comments" other: "%{count} comments"
login_to_comment: "You need to %{signin} or %{signup} to comment." login_to_comment: "You must %{signin} or %{signup} to leave a comment."
edit_proposal_link: "Edit proposal" edit_proposal_link: "Edit"
share: Share share: "Share"
flag: "This proposal has been flag as innapropiate for some users." flag: "This proposal has been flagged as inappropriate by several users."
edit: edit:
editing: Edit proposal editing: "Edit proposal"
show_link: Show proposal show_link: "View proposal"
back_link: Back back_link: "Go back"
form: form:
submit_button: "Save changes" submit_button: "Save changes"
new: new:
start_new: Start a proposal start_new: "Create new proposal"
more_info: "¿Cómo funcionan las propuestas ciudadanas?" more_info: "How do citizen proposals work?"
back_link: Back back_link: "Go back"
recommendations_title: Tips for creating a proposal recommendations_title: "Recommendations for creating a proposal"
recommendation_one: "Do not write the title of the proposal or whole sentences in capital. On the Internet this is considered shouting. And nobody likes to scream." recommendation_one: "Do not use capital letters for the proposal title or for whole sentences. On the internet, this is considered shouting. And nobody likes being shouted at."
recommendation_two: "Any discussion or comment that involves an illegal act will be eliminated, also intending to sabotage the proposal spaces, everything else is permitted." recommendation_two: "Any proposal or comment suggesting illegal action will be deleted, as well as those intending to sabotage the debate spaces. Anything else is allowed."
recommendation_three: "Enjoy this space, voices that fill it, it is yours too." recommendation_three: "Enjoy this space and the voices that fill it. It belongs to you too."
form: form:
submit_button: "Start a proposal" submit_button: "Create proposal"
create: create:
form: form:
submit_button: "Start a proposal" submit_button: "Create proposal"
update: update:
form: form:
submit_button: "Save changes" submit_button: "Save changes"
@@ -248,56 +244,56 @@ en:
confidence_score: "Most voted" confidence_score: "Most voted"
created_at: "Newest" created_at: "Newest"
form: form:
leave_comment: Write a comment leave_comment: "Leave your comment"
comment_as_moderator: Comment as moderator comment_as_moderator: "Comment as moderator"
comment_as_admin: Comment as administrator comment_as_admin: "Comment as admin"
comment: comment:
author: Author author: "Author"
moderator: Moderator moderator: "Moderator"
admin: Administrator admin: "Administrator"
deleted: This comment has been deleted deleted: "This comment has been deleted"
user_deleted: Deleted user user_deleted: "User deleted"
responses: responses:
zero: No Responses zero: "No responses"
one: 1 Response one: "1 response"
other: "%{count} Responses" other: "%{count} responses"
votes: votes:
zero: No votes zero: "No votes"
one: 1 vote one: "1 vote"
other: "%{count} votes" other: "%{count} votes"
comments_helper: comments_helper:
comment_link: Comment comment_link: "Comment"
comment_button: Publish comment comment_button: "Publish comment"
reply_link: Reply reply_link: "Reply"
reply_button: Publish reply reply_button: "Publish reply"
votes: votes:
agree: I agree agree: "I agree"
disagree: I disagree disagree: "I disagree"
supports: Supports supports: "Supports"
unauthenticated: "You need to %{signin} or %{signup} before continuing." unauthenticated: "You must %{signin} or %{signup} to continue."
signin: sign in signin: "Sign in"
signup: sign up signup: "Sign up"
anonymous: "Too many anonymous votes, %{verify_account} to vote." anonymous: "Too many anonymous votes to admit vote %{verify_account}."
verified_only: "Proposals can only be voted by verified users, %{verify_account}." verified_only: "Only verified users can vote on proposals; %{verify_account}."
verify_account: verify your account verify_account: "verify your account"
organizations: Organizations can not vote organizations: "Organisations are not permitted to vote"
account: account:
show: show:
title: "My account" title: "My account"
save_changes_submit: "Save changes" save_changes_submit: "Save changes"
change_credentials_link: "Change my credentials" change_credentials_link: "Change my credentials"
email_on_comment_label: "Receive email when someone comments on my debates or proposals" email_on_comment_label: "Notify me by email when someone comments on my proposals or debates"
email_on_comment_reply_label: "Receive email when someone replies to my comments" email_on_comment_reply_label: "Notify me by email when someone replies to my comments"
erase_account_link: "Erase my account" erase_account_link: "Erase my account"
personal: "Personal data" personal: "Personal details"
username_label: "Username" username_label: "Username"
phone_number_label: "Phone number" phone_number_label: "Phone number"
organization_name_label: "Organization name" organization_name_label: "Name of organisation"
organization_responsible_name_placeholder: "The responsible representative of the organization" organization_responsible_name_placeholder: "Representative of the organisation/collective"
notifications: Notifications notifications: "Notifications"
finish_verification: "Finish verification" finish_verification: "Complete verification"
verified_account: Verified account verified_account: "Account verified"
verify_my_account: Verify my account verify_my_account: "Verify my account"
user_permission_title: "Participation" user_permission_title: "Participation"
user_permission_info: "With your account you can..." user_permission_info: "With your account you can..."
user_permission_debates: "Participate on debates" user_permission_debates: "Participate on debates"
@@ -307,45 +303,45 @@ en:
user_permission_verify: "To perform all the actions verify your account." user_permission_verify: "To perform all the actions verify your account."
user_permission_verify_info: "* Only for users on Madrid City Census." user_permission_verify_info: "* Only for users on Madrid City Census."
simple_captcha: simple_captcha:
placeholder: "Enter the image value" placeholder: "Enter the text from the image"
label: "Enter the image value in the next form" label: "Enter the text from the image in the box below"
refresh_button_text: "Refresh" refresh_button_text: "Refresh"
message: message:
user: "secret code did not match with the image" user: "the secret code does not match the image"
debate: "secret code did not match with the image" debate: "the secret code does not match the image"
proposal: "secret code did not match with the image" proposal: "the secret code does not match the image"
shared: shared:
author_info: author_info:
author_deleted: Deleted user author_deleted: "User deleted"
tags_cloud: tags_cloud:
tags: Trend tags: "Trending"
print: print:
print_button: "Print this info" print_button: "Print this info"
flag: Flag as inappropriate flag: "Flag as inappropriate"
unflag: Undo flag unflag: "Unflag"
collective: Collective collective: "Collective"
check: Select check: "Select"
check_all: All check_all: "All"
check_none: None check_none: "None"
unauthorized: unauthorized:
default: "You are not authorized to access this page." default: "You do not have permission to access this page."
manage: manage:
all: "You are not authorized to %{action} %{subject}." all: "You do not have permission to carry out the action '%{action}' on %{subject}."
welcome: welcome:
highlights: "Highlights: " highlights: "Highlights: "
signed_in_home_title: Recent activity signed_in_home_title: "Recent activity"
debates: debates:
title: "Debate" title: "Debates"
description: "Meet, discuss and share what we think is important in our city." description: "For meeting, discussing and sharing the things that matter to us in our city."
proposal: proposal:
title: "You propose" title: "You propose"
description: "Open to citizens proposals on the kind of city we want to live." description: "Open space for citizen proposals about the kind of city we want to live in."
decide: decide:
title: "You decide" title: "You decide"
description: "Citizenship decide whether to accept or reject the most supported proposals." description: "The public decides if it accepts or rejects the most supported proposals."
do: do:
title: "It does" title: "It gets done"
description: "If the proposal is accepted mostly, the City Council makes his own and done." description: "If the proposal is accepted by the majority, the City Council accepts it as its own and it gets done."
welcome: welcome:
title: "Participate" title: "Participate"
go_to_index: "See proposals and debates" go_to_index: "See proposals and debates"
@@ -353,19 +349,19 @@ en:
user_permission_debates: "Participate on debates" user_permission_debates: "Participate on debates"
user_permission_proposal: "Create new proposals" user_permission_proposal: "Create new proposals"
user_permission_support_proposal: "Support proposals*" user_permission_support_proposal: "Support proposals*"
user_permission_votes: "Participate on final voting*" user_permission_votes: "Participate on final voting"
user_permission_verify: "To perform all the actions %{verify}." user_permission_verify: "To perform all the actions %{verify}."
user_permission_verify_url: "verify your account" user_permission_verify_url: "verify your account"
user_permission_verify_info: "* Only for users on Madrid City Census." user_permission_verify_info: "* Only for users on Madrid Census."
omniauth: omniauth:
finish_signup: finish_signup:
title: Add Email title: "Add your email address"
twitter: twitter:
sign_in: Sign in with Twitter sign_in: "Sign in with Twitter"
sign_up: Sign up with Twitter sign_up: "Sign up with Twitter"
facebook: facebook:
sign_in: Sign in with Facebook sign_in: "Sign in with Facebook"
sign_up: Sign up with Facebook sign_up: "Sign up with Facebook"
google_oauth2: google_oauth2:
sign_in: Sign in with Google sign_in: "Sign in with Google"
sign_up: Sign up with Google sign_up: "Sign up with Google"

View File

@@ -6,11 +6,11 @@ es:
layouts: layouts:
header: header:
logo: "Madrid" logo: "Madrid"
external_link_transparency: Transparencia external_link_transparency: "Transparencia"
external_link_transparency_url: "http://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Transparencia?vgnextfmt=default&vgnextchannel=20fd850769797310VgnVCM2000000c205a0aRCRD" external_link_transparency_url: "http://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Transparencia?vgnextfmt=default&vgnextchannel=20fd850769797310VgnVCM2000000c205a0aRCRD"
external_link_opendata: Datos abiertos external_link_opendata: "Datos abiertos"
external_link_opendata_url: "http://datos.madrid.es" external_link_opendata_url: "http://datos.madrid.es"
external_link_blog: Blog external_link_blog: "Blog"
external_link_blog_url: "/blog" external_link_blog_url: "/blog"
open_gov: "Gobierno %{open}" open_gov: "Gobierno %{open}"
open: "abierto" open: "abierto"
@@ -22,14 +22,14 @@ es:
"Existen ciudades gobernadas directamente por sus habitantes, que <b>debaten</b> sobre temas que les preocupan, <b>proponen</b> ideas para mejorar "Existen ciudades gobernadas directamente por sus habitantes, que <b>debaten</b> sobre temas que les preocupan, <b>proponen</b> ideas para mejorar
sus vidas y <b>deciden</b> entre todas y todos las que se llevan a cabo. Madrid ya es una de ellas." sus vidas y <b>deciden</b> entre todas y todos las que se llevan a cabo. Madrid ya es una de ellas."
see_all: "Ver propuestas" see_all: "Ver propuestas"
my_account_link: Mi cuenta my_account_link: "Mi cuenta"
locale: "Idioma:" locale: "Idioma:"
administration: Administrar administration: "Administrar"
moderation: Moderar moderation: "Moderar"
highlights: "Portada" # highlights: "Portada"
more_information: "Más información" more_information: "Más información"
debates: Debates debates: "Debates"
proposals: Propuestas ciudadanas proposals: "Propuestas ciudadanas"
footer: footer:
description: "Este portal usa la %{consul} que es %{open_source}. De Madrid, para el mundo entero." description: "Este portal usa la %{consul} que es %{open_source}. De Madrid, para el mundo entero."
open_source: "software libre" open_source: "software libre"
@@ -39,9 +39,9 @@ es:
copyright: "Ayuntamiento de Madrid, %{year}" copyright: "Ayuntamiento de Madrid, %{year}"
participation_title: "Participación" participation_title: "Participación"
participation_text: "Decide cómo debe ser la ciudad de Madrid que quieres." participation_text: "Decide cómo debe ser la ciudad de Madrid que quieres."
transparency_title: Transparencia transparency_title: "Transparencia"
transparency_text: "Obtén cualquier información sobre el Ayuntamiento de Madrid." transparency_text: "Obtén cualquier información sobre el Ayuntamiento de Madrid."
open_data_title: Datos Abiertos open_data_title: "Datos Abiertos"
open_data_text: "Todos los datos del Ayuntamiento son tuyos." open_data_text: "Todos los datos del Ayuntamiento son tuyos."
contact_us: "Para asistencia técnica contáctenos en" contact_us: "Para asistencia técnica contáctenos en"
privacy: "Política de privacidad" privacy: "Política de privacidad"
@@ -61,28 +61,26 @@ es:
blog: "Blog" blog: "Blog"
youtube: "YouTube" youtube: "YouTube"
form: form:
error: error error: "error"
errors: errores errors: "errores"
not_saved: "impidieron guardar %{resource}:" not_saved: "impidieron guardar %{resource}:"
accept_terms: "Acepto la %{policy} y las %{conditions}" accept_terms: "Acepto la %{policy} y las %{conditions}"
policy: "Política de privacidad" policy: "Política de privacidad"
conditions: "Condiciones de uso" conditions: "Condiciones de uso"
user: la cuenta user: "la cuenta"
debate: el debate debate: "el debate"
proposal: la propuesta proposal: "la propuesta"
verification::sms: el teléfono verification::sms: "el teléfono"
verification::letter: la verificación verification::letter: "la verificación"
application: application:
alert:
only_beta_testers: "Lo sentimos sólo los usuarios de pruebas tienen acceso de momento"
close: "Cerrar" close: "Cerrar"
menu: "Menú" menu: "Menú"
debates: debates:
index: index:
title: Debates title: "Debates"
start_debate: Empieza un debate start_debate: "Empieza un debate"
select_order: Ordenar por select_order: "Ordenar por"
select_order_long: Estás viendo los debates select_order_long: "Estás viendo los debates"
orders: orders:
confidence_score: "mejor valorados" confidence_score: "mejor valorados"
hot_score: "más activos" hot_score: "más activos"
@@ -93,53 +91,52 @@ es:
one: " con el tema '%{topic}'" one: " con el tema '%{topic}'"
other: " con el tema '%{topic}'" other: " con el tema '%{topic}'"
search_form: search_form:
title: Buscar title: "Buscar"
button: Buscar button: "Buscar"
placeholder: "Buscar debates..." placeholder: "Buscar debates..."
search_results: search_results:
one: " que contiene '%{search_term}'" one: " que contiene '%{search_term}'"
other: " que contienen '%{search_term}'" other: " que contienen '%{search_term}'"
debate: debate:
debate: Debate debate: "Debate"
comments: comments:
zero: Sin comentarios zero: "Sin comentarios"
one: 1 Comentario one: "1 Comentario"
other: "%{count} Comentarios" other: "%{count} Comentarios"
votes: votes:
zero: Sin votos zero: "Sin votos"
one: 1 voto one: "1 voto"
other: "%{count} votos" other: "%{count} votos"
form: form:
debate_title: Título del debate debate_title: "Título del debate"
debate_text: Texto inicial del debate debate_text: "Texto inicial del debate"
tags_label: Temas tags_label: "Temas"
tags_instructions: > tags_instructions: "Etiqueta este debate. Puedes elegir entre nuestras propuestas o introducir las que desees."
Etiqueta este debate. Puedes elegir entre nuestras propuestas o introducir las que desees.
tags_placeholder: "Escribe las etiquetas que desees separadas por coma (',')" tags_placeholder: "Escribe las etiquetas que desees separadas por coma (',')"
show: show:
back_link: Volver back_link: "Volver"
author_deleted: Usuario eliminado author_deleted: "Usuario eliminado"
comments_title: Comentarios comments_title: "Comentarios"
comments: comments:
zero: Sin comentarios zero: "Sin comentarios"
one: 1 Comentario one: "1 Comentario"
other: "%{count} Comentarios" other: "%{count} Comentarios"
login_to_comment: "Necesitas %{signin} o %{signup} para comentar." login_to_comment: "Necesitas %{signin} o %{signup} para comentar."
edit_debate_link: "Editar debate" edit_debate_link: "Editar debate"
share: Compartir share: "Compartir"
flag: "Este debate ha sido marcado como inapropiado por varios usuarios." flag: "Este debate ha sido marcado como inapropiado por varios usuarios."
edit: edit:
editing: Editar debate editing: "Editar debate"
show_link: Ver debate show_link: "Ver debate"
back_link: Volver back_link: "Volver"
form: form:
submit_button: "Guardar cambios" submit_button: "Guardar cambios"
new: new:
start_new: Empezar un debate start_new: "Empezar un debate"
info: "Un debate es un foro de discusión, no una propuesta ciudadana. Muy pronto abriremos la sección de propuestas ciudadanas, donde cualquiera podrá presentar propuestas y, si reciben apoyo, serán puestas en marcha por el Ayuntamiento." info: "Un debate es un foro de discusión, no una propuesta ciudadana. Muy pronto abriremos la sección de propuestas ciudadanas, donde cualquiera podrá presentar propuestas y, si reciben apoyo, serán puestas en marcha por el Ayuntamiento."
more_info: "Más información" more_info: "Más información"
back_link: Volver back_link: "Volver"
recommendations_title: Recomendaciones para crear un debate recommendations_title: "Recomendaciones para crear un debate"
recommendation_one: "No escribas el título del debate o frases enteras en mayúsculas. En internet eso se considera gritar. Y a nadie le gusta que le griten." recommendation_one: "No escribas el título del debate o frases enteras en mayúsculas. En internet eso se considera gritar. Y a nadie le gusta que le griten."
recommendation_two: "Cualquier debate o comentario que implique una acción ilegal será eliminado, también los que tengan la intención de sabotear los espacios de debate, todo lo demás está permitido." recommendation_two: "Cualquier debate o comentario que implique una acción ilegal será eliminado, también los que tengan la intención de sabotear los espacios de debate, todo lo demás está permitido."
recommendation_three: "Las críticas despiadadas son muy bienvenidas. Este es un espacio de pensamiento. Pero te recomendamos conservar la elegancia y la inteligencia. El mundo es mejor con ellas presentes." recommendation_three: "Las críticas despiadadas son muy bienvenidas. Este es un espacio de pensamiento. Pero te recomendamos conservar la elegancia y la inteligencia. El mundo es mejor con ellas presentes."
@@ -154,11 +151,11 @@ es:
submit_button: "Guardar cambios" submit_button: "Guardar cambios"
proposals: proposals:
index: index:
title: Propuestas ciudadanas title: "Propuestas ciudadanas"
featured_proposals_html: "Propuestas<br>destacadas" featured_proposals_html: "Propuestas<br>destacadas"
start_proposal: Crea una propuesta start_proposal: "Crea una propuesta"
select_order: Ordenar por select_order: "Ordenar por"
select_order_long: Estás viendo las propuestas select_order_long: "Estás viendo las propuestas"
orders: orders:
confidence_score: "más apoyadas" confidence_score: "más apoyadas"
hot_score: "más activas hoy" hot_score: "más activas hoy"
@@ -169,68 +166,67 @@ es:
one: " con el tema '%{topic}'" one: " con el tema '%{topic}'"
other: " con el tema '%{topic}'" other: " con el tema '%{topic}'"
search_form: search_form:
title: Search title: "Buscar"
button: Search button: "Buscar"
placeholder: "Buscar propuestas ciudadanas..." placeholder: "Buscar propuestas ciudadanas..."
search_results: search_results:
one: " que contiene '%{search_term}'" one: " que contiene '%{search_term}'"
other: " que contienen '%{search_term}'" other: " que contienen '%{search_term}'"
proposal: proposal:
proposal: Propuesta proposal: "Propuesta"
support: "Apoyar" support: "Apoyar"
support_title: "Apoyar esta propuesta" support_title: "Apoyar esta propuesta"
comments: comments:
zero: Sin comentarios zero: "Sin comentarios"
one: 1 Comentario one: "1 Comentario"
other: "%{count} Comentarios" other: "%{count} Comentarios"
supports: supports:
zero: Sin apoyos zero: "Sin apoyos"
one: 1 apoyo one: "1 apoyo"
other: "%{count} apoyos" other: "%{count} apoyos"
supports_necessary: "53.726 apoyos necesarios" supports_necessary: "53.726 apoyos necesarios"
census_percent: "2% del Censo" census_percent: "2% del Censo"
total_percent: "100%" total_percent: "100%"
already_supported: "¡Ya has apoyado esta propuesta, compártela!" already_supported: "¡Ya has apoyado esta propuesta, compártela!"
form: form:
proposal_title: Título de la propuesta proposal_title: "Título de la propuesta"
proposal_question: Pregunta de la propuesta proposal_question: "Pregunta de la propuesta"
proposal_question_example_html: "Debe ser resumida en una pregunta cuya respuesta sea Sí o No. <em>Ej. '¿Está usted de acuerdo en peatonalizar la calle Mayor?'</em>" proposal_question_example_html: "Debe ser resumida en una pregunta cuya respuesta sea Sí o No. <em>Ej. '¿Está usted de acuerdo en peatonalizar la calle Mayor?'</em>"
proposal_summary: "Resumen de la propuesta" proposal_summary: "Resumen de la propuesta"
proposal_summary_note: "(máximo 200 caracteres)" proposal_summary_note: "(máximo 200 caracteres)"
proposal_text: Texto desarrollado de la propuesta proposal_text: "Texto desarrollado de la propuesta"
proposal_external_url: Enlace a documentación adicional proposal_external_url: "Enlace a documentación adicional"
proposal_video_url: "Enlace a vídeo externo" proposal_video_url: "Enlace a vídeo externo"
proposal_video_url_note: "Puedes añadir un enlace a YouTube o Vimeo" proposal_video_url_note: "Puedes añadir un enlace a YouTube o Vimeo"
proposal_responsible_name: "Nombre y apellidos de la persona que hace esta propuesta" proposal_responsible_name: "Nombre y apellidos de la persona que hace esta propuesta"
proposal_responsible_name_note: "(individualmente o como representante de un colectivo; no se mostrará públicamente)" proposal_responsible_name_note: "(individualmente o como representante de un colectivo; no se mostrará públicamente)"
tags_label: Temas tags_label: "Temas"
tags_instructions: > tags_instructions: "Etiqueta esta propuesta. Puedes elegir entre nuestras propuestas o introducir las que desees."
Etiqueta esta propuesta. Puedes elegir entre nuestras propuestas o introducir las que desees.
tags_placeholder: "Escribe las etiquetas que desees separadas por una coma (',')" tags_placeholder: "Escribe las etiquetas que desees separadas por una coma (',')"
show: show:
back_link: Volver back_link: "Volver"
author_deleted: Usuario eliminado author_deleted: "Usuario eliminado"
code: "Código de la propuesta:" code: "Código de la propuesta:"
comments_title: Comentarios comments_title: "Comentarios"
comments: comments:
zero: Sin comentarios zero: "Sin comentarios"
one: 1 Comentario one: "1 Comentario"
other: "%{count} Comentarios" other: "%{count} Comentarios"
login_to_comment: "Necesitas %{signin} o %{signup} para comentar." login_to_comment: "Necesitas %{signin} o %{signup} para comentar."
edit_proposal_link: "Editar propuesta" edit_proposal_link: "Editar propuesta"
share: Compartir share: "Compartir"
flag: "Esta propuesta ha sido marcada como inapropiada por varios usuarios." flag: "Esta propuesta ha sido marcada como inapropiada por varios usuarios."
edit: edit:
editing: Editar propuesta editing: "Editar propuesta"
show_link: Ver propuesta show_link: "Ver propuesta"
back_link: Volver back_link: "Volver"
form: form:
submit_button: "Guardar cambios" submit_button: "Guardar cambios"
new: new:
start_new: Crear una propuesta start_new: "Crear una propuesta"
more_info: "¿Cómo funcionan las propuestas ciudadanas?" more_info: "¿Cómo funcionan las propuestas ciudadanas?"
back_link: Volver back_link: "Volver"
recommendations_title: Recomendaciones para crear una propuesta recommendations_title: "Recomendaciones para crear una propuesta"
recommendation_one: "No escribas el título de la propuesta o frases enteras en mayúsculas. En internet eso se considera gritar. Y a nadie le gusta que le griten." recommendation_one: "No escribas el título de la propuesta o frases enteras en mayúsculas. En internet eso se considera gritar. Y a nadie le gusta que le griten."
recommendation_two: "Cualquier propuesta o comentario que implique una acción ilegal será eliminada, también las que tengan la intención de sabotear los espacios de propuesta, todo lo demás está permitido." recommendation_two: "Cualquier propuesta o comentario que implique una acción ilegal será eliminada, también las que tengan la intención de sabotear los espacios de propuesta, todo lo demás está permitido."
recommendation_three: "Disfruta de este espacio, de las voces que lo llenan, también es tuyo." recommendation_three: "Disfruta de este espacio, de las voces que lo llenan, también es tuyo."
@@ -248,39 +244,39 @@ es:
confidence_score: "Más votados" confidence_score: "Más votados"
created_at: "Más nuevos" created_at: "Más nuevos"
form: form:
leave_comment: Deja tu comentario leave_comment: "Deja tu comentario"
comment_as_moderator: Comentar como moderador comment_as_moderator: "Comentar como moderador"
comment_as_admin: Comentar como administrador comment_as_admin: "Comentar como administrador"
comment: comment:
author: Autor author: "Autor"
moderator: Moderador moderator: "Moderador"
admin: Administrador admin: "Administrador"
deleted: Este comentario ha sido eliminado deleted: "Este comentario ha sido eliminado"
user_deleted: Usuario eliminado user_deleted: "Usuario eliminado"
responses: responses:
zero: Sin respuestas zero: "Sin respuestas"
one: 1 Respuesta one: "1 Respuesta"
other: "%{count} Respuestas" other: "%{count} Respuestas"
votes: votes:
zero: Sin votos zero: "Sin votos"
one: 1 voto one: "1 voto"
other: "%{count} votos" other: "%{count} votos"
comments_helper: comments_helper:
comment_link: Comentar comment_link: "Comentar"
comment_button: Publicar comentario comment_button: "Publicar comentario"
reply_link: Responder reply_link: "Responder"
reply_button: Publicar respuesta reply_button: "Publicar respuesta"
votes: votes:
agree: Estoy de acuerdo agree: "Estoy de acuerdo"
disagree: No estoy de acuerdo disagree: "No estoy de acuerdo"
supports: Apoyos supports: "Apoyos"
unauthenticated: "Necesitas %{signin} o %{signup} para continuar." unauthenticated: "Necesitas %{signin} o %{signup} para continuar."
signin: iniciar sesión signin: "iniciar sesión"
signup: registrarte signup: "registrarte"
anonymous: "Demasiados votos anónimos, para poder votar %{verify_account}." anonymous: "Demasiados votos anónimos, para poder votar %{verify_account}."
verified_only: "Las propuestas sólo pueden ser votadas por usuarios verificados, %{verify_account}." verified_only: "Las propuestas sólo pueden ser votadas por usuarios verificados, %{verify_account}."
verify_account: verifica tu cuenta verify_account: "verifica tu cuenta"
organizations: Las organizaciones no pueden votar organizations: "Las organizaciones no pueden votar"
account: account:
show: show:
title: "Mi cuenta" title: "Mi cuenta"
@@ -294,10 +290,10 @@ es:
phone_number_label: "Teléfono" phone_number_label: "Teléfono"
organization_name_label: "Nombre de la organización" organization_name_label: "Nombre de la organización"
organization_responsible_name_placeholder: "Representante de la asociación/colectivo" organization_responsible_name_placeholder: "Representante de la asociación/colectivo"
notifications: Notificaciones notifications: "Notificaciones"
finish_verification: "Finalizar verificación" finish_verification: "Finalizar verificación"
verified_account: Cuenta verificada verified_account: "Cuenta verificada"
verify_my_account: Verificar mi cuenta verify_my_account: "Verificar mi cuenta"
user_permission_title: "Participación" user_permission_title: "Participación"
user_permission_info: "Con tu cuenta ya puedes..." user_permission_info: "Con tu cuenta ya puedes..."
user_permission_debates: "Participar en debates" user_permission_debates: "Participar en debates"
@@ -318,22 +314,22 @@ es:
author_info: author_info:
author_deleted: Usuario eliminado author_deleted: Usuario eliminado
tags_cloud: tags_cloud:
tags: Tendencias tags: "Tendencias"
print: print:
print_button: "Imprimir esta información" print_button: "Imprimir esta información"
flag: Denunciar como inapropiado flag: "Denunciar como inapropiado"
unflag: Deshacer denuncia unflag: "Deshacer denuncia"
collective: Colectivo collective: "Colectivo"
check: Seleccionar check: "Seleccionar"
check_all: Todos check_all: "Todos"
check_none: Ninguno check_none: "Ninguno"
unauthorized: unauthorized:
default: "No tienes permiso para acceder a esta página." default: "No tienes permiso para acceder a esta página."
manage: manage:
all: "No tienes permiso para realizar la acción '%{action}' sobre %{subject}." all: "No tienes permiso para realizar la acción '%{action}' sobre %{subject}."
welcome: welcome:
highlights: "Portada: " highlights: "Portada: "
signed_in_home_title: Actividad reciente signed_in_home_title: "Actividad reciente"
debates: debates:
title: "Debates" title: "Debates"
description: "Encontrarnos, debatir y compartir lo que nos parece importante en nuestra ciudad." description: "Encontrarnos, debatir y compartir lo que nos parece importante en nuestra ciudad."
@@ -359,13 +355,13 @@ es:
user_permission_verify_info: "* Sólo usuarios empadronados en el municipio de Madrid." user_permission_verify_info: "* Sólo usuarios empadronados en el municipio de Madrid."
omniauth: omniauth:
finish_signup: finish_signup:
title: Añade tu email title: "Añade tu email"
twitter: twitter:
sign_in: Entra con Twitter sign_in: "Entra con Twitter"
sign_up: Regístrate con Twitter sign_up: "Regístrate con Twitter"
facebook: facebook:
sign_in: Entra con Facebook sign_in: "Entra con Facebook"
sign_up: Regístrate con Facebook sign_up: "Regístrate con Facebook"
google_oauth2: google_oauth2:
sign_in: Entra con Google sign_in: "Entra con Google"
sign_up: Regístrate con Google sign_up: "Regístrate con Google"

16
config/locales/kaminari.en.yml Normal file → Executable file
View File

@@ -3,19 +3,19 @@ en:
pagination: pagination:
first: "&laquo; First" first: "&laquo; First"
last: "Last &raquo;" last: "Last &raquo;"
previous: "&lsaquo; Prev" previous: "&lsaquo; Previous"
next: "Next &rsaquo;" next: "Next &rsaquo;"
truncate: "&hellip;" truncate: "&hellip;"
helpers: helpers:
page_entries_info: page_entries_info:
entry: entry:
zero: "entries" zero: "Entries"
one: "entry" one: "Entry"
other: "entries" other: "Entries"
one_page: one_page:
display_entries: display_entries:
zero: "No %{entry_name} found" zero: "%{entry_name} cannot be found"
one: "Displaying <b>1</b> %{entry_name}" one: "There is <b>1</b> %{entry_name}"
other: "Displaying <b>all %{count}</b> %{entry_name}" other: "There are <b> %{count}</b> %{entry_name}"
more_pages: more_pages:
display_entries: "Displaying %{entry_name} <b>%{first}&nbsp;-&nbsp;%{last}</b> of <b>%{total}</b> in total" display_entries: "Displaying <b>%{first}&nbsp;-&nbsp;%{last}</b> of <b>%{total}</b> %{entry_name}"

25
config/locales/mailers.en.yml Normal file → Executable file
View File

@@ -2,19 +2,18 @@ en:
mailers: mailers:
comment: comment:
subject: "Someone has commented on your %{commentable}" subject: "Someone has commented on your %{commentable}"
hi: Hello hi: "Hi"
title: New comment title: "New comment"
new_comment_by_html: "There is a new comment by <b>%{commenter}</b> on" new_comment_by_html: "There is a new comment from <b>%{commenter}</b>"
reply: reply:
subject: Someone has replied to your comment subject: "Someone has responded to your comment"
hi: Hello hi: "Hi"
title: New reply on your comment title: "New response to your comment"
new_reply_by_html: "There'is a new reply by <b>%{commenter}</b> to your comment on" new_reply_by_html: "There is a new response from <b>%{commenter}</b> to your comment on"
email_verification: email_verification:
subject: Verify your email subject: "Confirm your email"
title: Please verify yourself title: "Confirm your account using the following link"
instructions_html: "We need to verify you using this email, which we got from the Census. %{verification_link}" instructions_html: "To complete the verification of your user account in the Open Government Portal of the Madrid City Council, you must click %{verification_link}."
click_here_to_verify: "Please click here to verify yourself" click_here_to_verify: "this link"
instructions_2_html: "This email will verify your account with <b>%{document_type} %{document_number}</b>. If these don't belong to you, please don't click on the previous link and ignore this email." instructions_2_html: "This email will verify your account with <b>%{document_type} %{document_number}</b>. If these don't belong to you, please don't click on the previous link and ignore this email."
thanks: "Thanks" thanks: "Thank you very much."

View File

@@ -2,17 +2,17 @@ es:
mailers: mailers:
comment: comment:
subject: "Alguien ha comentado en tu %{commentable}" subject: "Alguien ha comentado en tu %{commentable}"
hi: Hola hi: "Hola"
title: Nuevo comentario title: "Nuevo comentario"
new_comment_by_html: "Hay un nuevo comentario de <b>%{commenter}</b> en" new_comment_by_html: "Hay un nuevo comentario de <b>%{commenter}</b> en"
reply: reply:
subject: Alguien ha respondido a tu comentario subject: "Alguien ha respondido a tu comentario"
hi: Hola hi: "Hola"
title: Nueva respuesta a tu comentario title: "Nueva respuesta a tu comentario"
new_reply_by_html: "Hay una nueva respuesta de <b>%{commenter}</b> a tu comentario en" new_reply_by_html: "Hay una nueva respuesta de <b>%{commenter}</b> a tu comentario en"
email_verification: email_verification:
subject: Verifica tu email subject: "Verifica tu email"
title: Verifica tu cuenta con el siguiente enlace title: "Verifica tu cuenta con el siguiente enlace"
instructions_html: "Para terminar de verificar tu cuenta de usuario en el Portal de Gobierno Abierto del Ayuntamiento de Madrid, necesitamos que pulses %{verification_link}." instructions_html: "Para terminar de verificar tu cuenta de usuario en el Portal de Gobierno Abierto del Ayuntamiento de Madrid, necesitamos que pulses %{verification_link}."
click_here_to_verify: "en este enlace" click_here_to_verify: "en este enlace"
instructions_2_html: "Este email es para verificar tu cuenta con <b>%{document_type} %{document_number}</b>. Si esos no son tus datos, por favor no pulses el enlace anterior e ignora este email." instructions_2_html: "Este email es para verificar tu cuenta con <b>%{document_type} %{document_number}</b>. Si esos no son tus datos, por favor no pulses el enlace anterior e ignora este email."

View File

@@ -28,9 +28,9 @@ en:
proposals: proposals:
create_proposal: "Create proposal" create_proposal: "Create proposal"
print: print:
print_button: Print print_button: "Print"
alert: alert:
unverified_user: User is not verified unverified_user: "User is not verified"
permissions: permissions:
debates: "Engage in debates" debates: "Engage in debates"
create_proposals: "Create proposals" create_proposals: "Create proposals"
@@ -65,3 +65,7 @@ en:
"We have sent an email to the email address <b>%{email}</b> in order to verify that it belongs to this user. "We have sent an email to the email address <b>%{email}</b> in order to verify that it belongs to this user.
It contains a link they have to click. Then they will have to set their access password before being able It contains a link they have to click. Then they will have to set their access password before being able
to log in to the website" to log in to the website"
print:
proposals_title: "Proposals:"
info: "Create yor proposal on http://decide.madrid.es"
note: "The proposals more supported will be voted. If are accepted by a majority, the city Council shall be carried out."

View File

@@ -28,9 +28,9 @@ es:
proposals: proposals:
create_proposal: "Crear propuesta" create_proposal: "Crear propuesta"
print: print:
print_button: Imprimir print_button: "Imprimir"
alert: alert:
unverified_user: Este usuario no está verificado unverified_user: "Este usuario no está verificado"
permissions: permissions:
debates: "Participar en debates" debates: "Participar en debates"
create_proposals: "Crear nuevas propuestas" create_proposals: "Crear nuevas propuestas"
@@ -65,3 +65,7 @@ es:
"Hemos enviado un correo electrónico a <b>%{email}</b> para verificar que es suya. "Hemos enviado un correo electrónico a <b>%{email}</b> para verificar que es suya.
El correo enviado contiene un link que el usuario deberá pulsar. Entonces podrá seleccionar El correo enviado contiene un link que el usuario deberá pulsar. Entonces podrá seleccionar
una clave de acceso, y entrar en la web de participación." una clave de acceso, y entrar en la web de participación."
print:
proposals_title: "Propuestas:"
info: "Haz tu propuesta en http://decide.madrid.es"
note: "Las propuestas más apoyadas serán llevadas a votación. Y si las acepta una mayoría, el Ayuntamiento las llevará a cabo."

106
config/locales/moderation.en.yml Normal file → Executable file
View File

@@ -1,75 +1,75 @@
en: en:
moderation: moderation:
menu: menu:
proposals: Proposals proposals: "Proposals"
flagged_debates: Debates flagged_debates: "Debates"
flagged_comments: Comments flagged_comments: "Comments"
users: Ban users users: "Block users"
dashboard: dashboard:
index: index:
title: Moderation title: "Moderation"
comments: comments:
index: index:
hide_comments: Hide comments hide_comments: "Hide comments"
block_authors: Block authors block_authors: "Block authors"
ignore_flags: Ignore flags ignore_flags: "Mark as viewed"
title: Comments title: "Comments"
headers: headers:
comment: Comment comment: "Comment"
moderate: Moderate moderate: "Moderate"
filter: Filter filter: "Filter"
filters: filters:
all: All all: "All"
pending_flag_review: Pending pending_flag_review: "Pending"
with_ignored_flag: Ignored with_ignored_flag: "Marked as viewed"
order: Order order: "Order"
orders: orders:
created_at: Newest created_at: "Newest"
flags: Most flagged flags: "Most flagged"
confirm: Are you sure? confirm: "Are you sure?"
debates: debates:
index: index:
hide_debates: Hide debates hide_debates: "Hide debates"
block_authors: Block authors block_authors: "Block authors"
ignore_flags: Ignore flags ignore_flags: "Mark as viewed"
title: Debates title: "Debates"
headers: headers:
debate: Debate debate: "Debate"
moderate: Moderate moderate: "Moderate"
filter: Filter filter: "Filter"
filters: filters:
all: All all: "All"
pending_flag_review: Pending pending_flag_review: "Pending"
with_ignored_flag: Ignored with_ignored_flag: "Marked as viewed"
order: Order order: "Order"
orders: orders:
created_at: Newest created_at: "Newest"
flags: Most flagged flags: "Most flagged"
confirm: Are you sure? confirm: "Are you sure?"
proposals: proposals:
index: index:
hide_proposals: Hide proposals hide_proposals: "Hide proposals"
block_authors: Block authors block_authors: "Block authors"
ignore_flags: Ignore flags ignore_flags: "Mark as viewed"
title: Proposals title: "Proposals"
headers: headers:
proposal: Proposal proposal: "Proposal"
moderate: Moderate moderate: "Moderate"
filter: Filter filter: "Filter"
filters: filters:
all: All all: "All"
pending_flag_review: Pending pending_flag_review: "Pending review"
with_ignored_flag: Ignored with_ignored_flag: "Mark as viewed"
order: Order order: "Order by"
orders: orders:
created_at: Newest created_at: "Most recent"
flags: Most flagged flags: "Most flagged"
confirm: Are you sure? confirm: "Are you sure?"
users: users:
notice_hide: User banned. notice_hide: "User blocked. All of this user's debates and comments have been hidden."
index: index:
title: User search and banning title: "Block users"
search_placeholder: email or username search_placeholder: "email or name of user"
search: Search search: "Search"
hide: Ban hide: "Block"
hidden: Banned hidden: "Blocked"

View File

@@ -1,75 +1,75 @@
es: es:
moderation: moderation:
menu: menu:
proposals: Propuestas proposals: "Propuestas"
flagged_debates: Debates flagged_debates: "Debates"
flagged_comments: Comentarios flagged_comments: "Comentarios"
users: Bloquear usuarios users: "Bloquear usuarios"
dashboard: dashboard:
index: index:
title: Moderación title: "Moderación"
comments: comments:
index: index:
hide_comments: Ocultar comentarios hide_comments: "Ocultar comentarios"
block_authors: Bloquear autores block_authors: "Bloquear autores"
ignore_flags: Marcar como revisados ignore_flags: "Marcar como revisados"
title: Comentarios title: "Comentarios"
headers: headers:
comment: Comentario comment: "Comentario"
moderate: Moderar moderate: "Moderar"
filter: Filtrar filter: "Filtrar"
filters: filters:
all: Todos all: "Todos"
pending_flag_review: Pendientes pending_flag_review: "Pendientes"
with_ignored_flag: Marcados como revisados with_ignored_flag: "Marcados como revisados"
order: Orden order: "Orden"
orders: orders:
created_at: Más nuevos created_at: "Más nuevos"
flags: Más denunciados flags: "Más denunciados"
confirm: ¿Estás seguro? confirm: "¿Estás seguro?"
debates: debates:
index: index:
hide_debates: Ocultar debates hide_debates: "Ocultar debates"
block_authors: Bloquear autores block_authors: "Bloquear autores"
ignore_flags: Marcar como revisados ignore_flags: "Marcar como revisados"
title: Debates title: "Debates"
headers: headers:
debate: Debate debate: "Debate"
moderate: Moderar moderate: "Moderar"
filter: Filtrar filter: "Filtrar"
filters: filters:
all: Todos all: "Todos"
pending_flag_review: Pendientes pending_flag_review: "Pendientes"
with_ignored_flag: Marcados como revisados with_ignored_flag: "Marcados como revisados"
order: Orden order: "Orden"
orders: orders:
created_at: Más nuevos created_at: "Más nuevos"
flags: Más denunciados flags: "Más denunciados"
confirm: ¿Estás seguro? confirm: "¿Estás seguro?"
proposals: proposals:
index: index:
hide_proposals: Ocultar Propuestas hide_proposals: "Ocultar Propuestas"
block_authors: Bloquear autores block_authors: "Bloquear autores"
ignore_flags: Marcar como revisadas ignore_flags: "Marcar como revisadas"
title: Propuestas title: "Propuestas"
headers: headers:
proposal: Propuesta proposal: "Propuesta"
moderate: Moderar moderate: "Moderar"
filter: Filtro filter: "Filtro"
filters: filters:
all: Todas all: "Todas"
pending_flag_review: Pendientes de revisión pending_flag_review: "Pendientes de revisión"
with_ignored_flag: Marcadas como revisadas with_ignored_flag: "Marcadas como revisadas"
order: Ordenar por order: "Ordenar por"
orders: orders:
created_at: Más recientes created_at: "Más recientes"
flags: Más denunciadas flags: "Más denunciadas"
confirm: ¿Estás seguro? confirm: "¿Estás seguro?"
users: users:
notice_hide: Usuario bloqueado. Se han ocultado todos sus debates y comentarios. notice_hide: "Usuario bloqueado. Se han ocultado todos sus debates y comentarios."
index: index:
title: Bloquear usuarios title: "Bloquear usuarios"
search_placeholder: email o nombre de usuario search_placeholder: "email o nombre de usuario"
search: Buscar search: "Buscar"
hide: Bloquear hide: "Bloquear"
hidden: Bloqueado hidden: "Bloqueado"

11
config/locales/pages.en.yml Normal file → Executable file
View File

@@ -8,17 +8,18 @@ en:
conditions: "Terms of use" conditions: "Terms of use"
accessibility: "Accessibility" accessibility: "Accessibility"
conditions: conditions:
"Terms of use" "Terms and conditions of use"
privacy: privacy:
"Privacy Policy" "Privacy Policy"
general_terms: general_terms:
"Terms and Conditions" "Terms and Conditions"
census_terms: census_terms:
"Census Terms" "To confirm the account, you must be 16 or older and be registered as resident in Madrid, having provided the information requested previously, which the Directorate-General of Civil Participation will verify against the files 'Municipal Census of Inhabitants', for which the Directorate-General for Statistics is responsible, and the 'Citizen Support Services', for which the Directorate-General for Quality and Citizen Services is responsible.
By accepting the verification process, you also consent to the verification of this information, as well as the contact methods featuring in said files.
The data provided will be acquired and processed by the Directorate-General for Civil Participation in the file 'Management of Participatory Activities' mentioned previously in the terms and conditions of use for the Portal."
transparency: transparency:
"Transparency" "Transparency"
opendata: opendata: "Open Data"
"Open Data"
verify: verify:
title: "Verify your account" title: "Verify your account"
info: "For verufy your account introduce your access data:" info: "For verufy your account introduce your access data:"
@@ -26,4 +27,4 @@ en:
email: "Email" email: "Email"
password: "Password" password: "Password"
code: "Code you received in letter" code: "Code you received in letter"
submit: "Verify my account" submit: "Verify my account"

12
config/locales/responders.en.yml Normal file → Executable file
View File

@@ -2,13 +2,11 @@ en:
flash: flash:
actions: actions:
create: create:
notice: '%{resource_name} was successfully created.' notice: "%{resource_name} created successfully."
# alert: '%{resource_name} could not be created.'
update: update:
notice: '%{resource_name} was successfully updated.' notice: "%{resource_name} updated successfully."
# alert: '%{resource_name} could not be updated.'
# destroy: # destroy:
# notice: '%{resource_name} was successfully destroyed.' # notice: "%{resource_name} destroyed successfully."
# alert: '%{resource_name} could not be destroyed.' # alert: "%{resource_name} could not be destroyed."
save_changes: save_changes:
notice: "Saved" notice: "Changes saved"

20
config/locales/settings.en.yml Normal file → Executable file
View File

@@ -1,12 +1,12 @@
en: en:
settings: settings:
official_level_1_name: "Level 1 official positions" official_level_1_name: "Level 1 public official"
official_level_2_name: "Level 2 official positions" official_level_2_name: "Level 2 public official"
official_level_3_name: "Level 3 official positions" official_level_3_name: "Level 3 public official"
official_level_4_name: "Level 4 official positions" official_level_4_name: "Level 4 public official"
official_level_5_name: "Level 5 official positions" official_level_5_name: "Level 5 public official"
max_ratio_anon_votes_on_debates: "Max allowed percentage of anonymous votes per Debate" max_ratio_anon_votes_on_debates: "Maximum ratio of anonymous votes per Debate"
max_votes_for_proposal_edit: "Number of votes where a Proposal is not editable anymore" max_votes_for_proposal_edit: "Number of votes from which a Proposal can no longer be edited"
max_votes_for_debate_edit: "Number of votes where a Debate is not editable anymore" max_votes_for_debate_edit: "Number of votes from which a Debate can no longer be edited"
proposal_code_prefix: "Prefix for Proposals codes" proposal_code_prefix: "Prefix for Proposal codes"
votes_for_proposal_success: "Number of votes needed for Proposal approval" votes_for_proposal_success: "Number of votes necessary for approval of a Proposal"

View File

@@ -1,19 +1,19 @@
en: en:
social_share_button: social_share_button:
share_to: Share to %{name} share_to: "Share to %{name}"
weibo: Sina Weibo weibo: "Sina Weibo"
twitter: Twitter twitter: "Twitter"
facebook: Facebook facebook: "Facebook"
douban: Douban douban: "Douban"
qq: Qzone qq: "Qzone"
tqq: Tqq tqq: "Tqq"
delicious: Delicious delicious: "Delicious"
baidu: Baidu.com baidu: "Baidu.com"
kaixin001: Kaixin001.com kaixin001: "Kaixin001.com"
renren: Renren.com renren: "Renren.com"
google_plus: Google+ google_plus: "Google+"
google_bookmark: Google Bookmark google_bookmark: "Google Bookmark"
tumblr: Tumblr tumblr: "Tumblr"
plurk: Plurk plurk: "Plurk"
pinterest: Pinterest pinterest: "Pinterest"
email: Email email: "Email"

View File

@@ -1,19 +1,19 @@
es: es:
social_share_button: social_share_button:
share_to: Compartir en %{name} share_to: "Compartir en %{name}"
weibo: Sina Weibo weibo: "Sina Weibo"
twitter: Twitter twitter: "Twitter"
facebook: Facebook facebook: "Facebook"
douban: Douban douban: "Douban"
qq: Qzone qq: "Qzone"
tqq: Tqq tqq: "Tqq"
delicious: Delicious delicious: "Delicious"
baidu: Baidu.com baidu: "Baidu.com"
kaixin001: Kaixin001.com kaixin001: "Kaixin001.com"
renren: Renren.com renren: "Renren.com"
google_plus: Google+ google_plus: "Google+"
google_bookmark: Google Bookmark google_bookmark: "Google Bookmark"
tumblr: Tumblr tumblr: "Tumblr"
plurk: Plurk plurk: "Plurk"
pinterest: Pinterest pinterest: "Pinterest"
email: Correo electrónico email: "Correo electrónico"

84
config/locales/verification.en.yml Normal file → Executable file
View File

@@ -1,108 +1,108 @@
en: en:
verification: verification:
back: "Back to my account" back: "Return to my account"
step_1: "Residence" step_1: "Residence"
step_2: "SMS confirmation" step_2: "Confirmation code"
step_3: "Final verification" step_3: "Final verification"
alert: alert:
lock: "You have reached the maximum number of verification tries. Please try again later." lock: "You have reached the maximum number of attempts. Please try again later."
user_permission_info: "Verifing your information you'll be able to..." user_permission_info: "Verifing your information you'll be able to..."
user_permission_debates: "Participar en debates" user_permission_debates: "Participate on debates"
user_permission_proposal: "Crear nuevas propuestas" user_permission_proposal: "Create new proposals"
user_permission_support_proposal: "Apoyar propuestas*" user_permission_support_proposal: "Support proposals*"
user_permission_votes: "Participar en las votaciones finales*" user_permission_votes: "Participate on final voting*"
residence: residence:
new: new:
title: "Verify residence" title: "Verify residence"
document_type_label: "Document type" document_type_label: "Document type"
document_type: document_type:
spanish_id: "Spanish ID" spanish_id: "DNI"
passport: "Passport" passport: "Passport"
residence_card: "Residence card" residence_card: "Residence card"
document_number: "Document number" document_number: "Document number"
date_of_birth: "Date of birth" date_of_birth: "Date of birth"
postal_code: "Postal code" postal_code: "Postcode"
postal_code_note: "To verify your account you must be on Madrid city Census" postal_code_note: "To verify your account you must be on Madrid city Census"
accept_terms_text: "I accept %{terms_url} to access the city Census" accept_terms_text: "I accept %{terms_url} of the Census"
terms: "the terms" terms: "the terms and conditions of access"
verify_residence: "Verify residence" verify_residence: "Verify residence"
form_errors: "prevented your residence verification" form_errors: "prevented the verification of your residence"
error_verifying_census: "The census of the city of Madrid could not verify your information. Pero revise de information and try again or get in touch with us calling to 010 (or 915298210) or visit any of %{offices}." error_verifying_census: "The Madrid Census was unable to verify your information. Please confirm that your census details are correct by calling 010 (or 915298210) or visit any of %{offices}."
error_verifying_census_offices: "26 Office of Citizen" error_verifying_census_offices: "26 Office of Citizen"
error_not_allowed_age: "You need yo be at least 16 years old" error_not_allowed_age: "You must be at least 16 years old"
error_not_allowed_postal_code: "To verify your account you need to be in the census of the Madrid town." error_not_allowed_postal_code: "In order to be verified, you must be registered in the municipality of Madrid."
create: create:
flash: flash:
success: "Residence verified" success: "Residence verified"
alert: alert:
unconfirmed_residency: "You have not yet confirmed your residence" unconfirmed_residency: "You have not yet confirmed your residency"
sms: sms:
new: new:
title: "Phone verification" title: "Send confirmation code"
phone: "Enter your phone for recive the code" phone: "Enter your mobile phone number to receive the code"
phone_note: "We only user your phone for send to you a code, we never contact to you." phone_note: "We only user your phone for send to you a code, we never contact to you."
submit_button: "Send" submit_button: "Send"
create: create:
flash: flash:
success: "Enter the confirmation code we have sent your phone" success: "Enter the confirmation code sent to you by text message"
edit: edit:
title: "Phone confirmation" title: "Security code confirmation"
confirmation_code: "Code confirmation" confirmation_code: "Enter the code you received on your mobile"
resend_sms_text: "You have not received the confirmation code in your phone?" resend_sms_text: "Didn't get a text with your confirmation code?"
resend_sms_link: "Request a new code" resend_sms_link: "Click here to send it again"
submit_button: "Send" submit_button: "Send"
update: update:
error: "Incorrect confirmation code" error: "Incorrect confirmation code"
flash: flash:
level_three: level_three:
success: "Correct code. Your account is verified" success: "Code correct. Your account is now verified"
level_two: level_two:
success: "Correct code" success: "Code correct"
email: email:
show: show:
flash: flash:
success: "You are now a verified user" success: "You are a verified user"
alert: alert:
failure: "Incorrect verification code" failure: "Verification code incorrect"
create: create:
flash: flash:
success: "We have send you a confirmation email to your email account: %{email}" success: "We have sent a confirmation email to your account: %{email}"
alert: alert:
failure: "There was a problem sending you an email to your account" failure: "There was a problem with sending an email to your account"
letter: letter:
new: new:
title: "Final Verification" title: "Congratulations!"
user_permission_info: "With your account you can..." user_permission_info: "With your account you can..."
explanation: "For participate on final voting you can:" explanation: "For participate on final voting you can:"
office: "Verify in any %{office}" office: "Verify in any %{office}"
offices: "Office of Citizen" offices: "Citizen Support Offices"
offices_url: "http://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Atencion-al-ciudadano/Oficinas-de-Atencion-al-Ciudadano?vgnextfmt=default&vgnextchannel=5b99cde2e09a4310VgnVCM1000000b205a0aRCRD" offices_url: "http://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Atencion-al-ciudadano/Oficinas-de-Atencion-al-Ciudadano?vgnextfmt=default&vgnextchannel=5b99cde2e09a4310VgnVCM1000000b205a0aRCRD"
send_letter: "Request a letter" send_letter: "Send me a letter with the code"
go_to_index: "See proposals" go_to_index: "See proposals"
create: create:
flash: flash:
success_html: "Before voting you'll receive a letter whith the instructions for verify your account.<br> Remember you can verify your information in any %{offices}." success_html: "Thank you for requesting your <b>maximum security code (only required for the final votes)</b>. In a few days we will send it to the address featuring in the data we have on file. Please remember that, if you prefer, you can collect your code from any of the %{offices}."
offices: "Office of Citizen" offices: "Citizen Support Offices"
offices_url: "http://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Atencion-al-ciudadano/Oficinas-de-Atencion-al-Ciudadano?vgnextfmt=default&vgnextchannel=5b99cde2e09a4310VgnVCM1000000b205a0aRCRD" offices_url: "http://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Atencion-al-ciudadano/Oficinas-de-Atencion-al-Ciudadano?vgnextfmt=default&vgnextchannel=5b99cde2e09a4310VgnVCM1000000b205a0aRCRD"
edit: edit:
title: "Letter requested" title: "Letter requested"
see_all: "See proposals" see_all: "See proposals"
update: update:
flash: flash:
success: "Your account has been verified" success: "Code correct. Your account is now verified"
alert: alert:
unconfirmed_code: "You have not yet enter the confirmation code" unconfirmed_code: "You have not yet entered the confirmation code"
errors: errors:
incorrect_code: "Incorrect confirmation code" incorrect_code: "Verification code incorrect"
verified_user: verified_user:
show: show:
title: "Available information" title: "Available information"
explanation: "We currently have the following data in the Census, choose where you want to send the confirmation code." explanation: "We currently hold the following details on the Register; please select a method for your confirmation code to be sent."
email_title: "Emails" email_title: "Emails"
phone_title: "Phones" phone_title: "Phone numbers"
use_another_phone: "Use another phone" use_another_phone: "Use other phone"
form: form:
submit_button: "Send code" submit_button: "Send code"
redirect_notices: redirect_notices:
email_already_sent: "We already sent you a confirmation email, if you have not received it you can try resend it here" email_already_sent: "We have already sent an email with a confirmation link. If you cannot locate the email, you can request a reissue here"
already_verified: "You are a verified user!" already_verified: "Your account is already verified"

View File

@@ -0,0 +1,5 @@
class AddUnaccentExtension < ActiveRecord::Migration
def change
execute "create extension if not exists unaccent"
end
end

View File

@@ -0,0 +1,5 @@
class AddPgTrgmExtension < ActiveRecord::Migration
def change
execute "create extension if not exists pg_trgm"
end
end

View File

@@ -0,0 +1,5 @@
class AddPhysicalVotesToProposals < ActiveRecord::Migration
def change
add_column :proposals, :physical_votes, :integer, default: 0
end
end

View File

@@ -11,10 +11,12 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20151028145921) do ActiveRecord::Schema.define(version: 20151030182217) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
enable_extension "unaccent"
enable_extension "pg_trgm"
create_table "activities", force: :cascade do |t| create_table "activities", force: :cascade do |t|
t.integer "user_id" t.integer "user_id"
@@ -211,6 +213,7 @@ ActiveRecord::Schema.define(version: 20151028145921) do
t.string "responsible_name", limit: 60 t.string "responsible_name", limit: 60
t.text "summary" t.text "summary"
t.string "video_url" t.string "video_url"
t.integer "physical_votes", default: 0
end end
add_index "proposals", ["author_id", "hidden_at"], name: "index_proposals_on_author_id_and_hidden_at", using: :btree add_index "proposals", ["author_id", "hidden_at"], name: "index_proposals_on_author_id_and_hidden_at", using: :btree

View File

@@ -1,12 +0,0 @@
namespace :deploy do
desc "compiles assets locally then rsyncs"
task :beta_testers do
on roles(:app) do |role|
run_locally do
execute"rsync -av ./config/beta-testers.txt #{role.user}@#{role.hostname}:#{shared_path}/config/beta-testers.txt;"
end
"chmod -R 755 #{shared_path}/config/beta-testers.txt"
execute "ln -nfs #{shared_path}/config/beta-testers.txt #{current_path}/config/beta-testers.txt"
end
end
end

View File

@@ -37,7 +37,7 @@ feature 'Account' do
check 'account_email_on_comment_reply' check 'account_email_on_comment_reply'
click_button 'Save changes' click_button 'Save changes'
expect(page).to have_content "Saved" expect(page).to have_content "Changes saved"
visit account_path visit account_path
@@ -55,7 +55,7 @@ feature 'Account' do
check 'account_email_on_comment_reply' check 'account_email_on_comment_reply'
click_button 'Save changes' click_button 'Save changes'
expect(page).to have_content "Saved" expect(page).to have_content "Changes saved"
visit account_path visit account_path
@@ -91,7 +91,7 @@ feature 'Account' do
click_button 'Erase my account' click_button 'Erase my account'
expect(page).to have_content "Your account has been successfully cancelled" expect(page).to have_content "Goodbye! Your account has been cancelled. We hope to see you again soon."
login_through_form_as(@user) login_through_form_as(@user)

View File

@@ -201,7 +201,7 @@ feature 'Admin activity' do
visit proposal_path(proposal) visit proposal_path(proposal)
within("#proposal_#{proposal.id}") do within("#proposal_#{proposal.id}") do
click_link 'Ban author' click_link 'Hide author'
end end
visit admin_activity_path visit admin_activity_path
@@ -221,7 +221,7 @@ feature 'Admin activity' do
visit moderation_users_path(name_or_email: user.username) visit moderation_users_path(name_or_email: user.username)
within(".admin-list") do within(".admin-list") do
click_link 'Ban' click_link 'Block'
end end
visit admin_activity_path visit admin_activity_path

View File

@@ -18,7 +18,7 @@ feature 'Admin comments' do
visit proposal_path(proposal) visit proposal_path(proposal)
within("#proposal_#{proposal.id}") do within("#proposal_#{proposal.id}") do
click_link 'Ban author' click_link 'Hide author'
end end
visit admin_comments_path visit admin_comments_path

View File

@@ -32,7 +32,7 @@ feature 'Admin officials' do
select '3', from: 'user_official_level', exact: false select '3', from: 'user_official_level', exact: false
click_button 'Update User' click_button 'Update User'
expect(page).to have_content 'Official position saved!' expect(page).to have_content 'Details of official saved'
visit admin_officials_path visit admin_officials_path
@@ -55,7 +55,7 @@ feature 'Admin officials' do
select '4', from: 'user_official_level', exact: false select '4', from: 'user_official_level', exact: false
click_button 'Update User' click_button 'Update User'
expect(page).to have_content 'Official position saved!' expect(page).to have_content 'Details of official saved'
visit admin_officials_path visit admin_officials_path
@@ -68,9 +68,9 @@ feature 'Admin officials' do
scenario 'Destroy' do scenario 'Destroy' do
visit edit_admin_official_path(@official) visit edit_admin_official_path(@official)
click_link "Remove 'Official' condition" click_link "Remove 'Official' status"
expect(page).to have_content 'User is not an official anymore' expect(page).to have_content 'Details saved: the user is no longer an official'
expect(current_path).to eq(admin_officials_path) expect(current_path).to eq(admin_officials_path)
expect(page).to_not have_content @citizen.name expect(page).to_not have_content @citizen.name
expect(page).to_not have_content @official.name expect(page).to_not have_content @official.name

View File

@@ -22,7 +22,7 @@ feature 'Admin::Organizations' do
expect(page).to have_content(org.user.email) expect(page).to have_content(org.user.email)
expect(page).to_not have_content("Greentroll") expect(page).to_not have_content("Greentroll")
expect(page).to_not have_content("trol@troller.com") expect(page).to_not have_content("trol@troller.com")
expect(page).to have_content("There is 1 organization without user or with the user banned") expect(page).to have_content("There is also one organisation with no users or with a hidden user")
end end
end end

View File

@@ -25,6 +25,6 @@ feature 'Admin settings' do
click_button 'Update' click_button 'Update'
end end
expect(page).to have_content 'Setting updated!' expect(page).to have_content 'Value updated'
end end
end end

View File

@@ -54,7 +54,7 @@ feature 'Admin tags' do
expect(page).to have_content tag2.name expect(page).to have_content tag2.name
within("#edit_tag_#{tag2.id}") do within("#edit_tag_#{tag2.id}") do
click_link 'Delete Topic' click_link 'Destroy Topic'
end end
visit admin_tags_path visit admin_tags_path
@@ -73,7 +73,7 @@ feature 'Admin tags' do
expect(page).to have_content tag2.name expect(page).to have_content tag2.name
within("#edit_tag_#{tag2.id}") do within("#edit_tag_#{tag2.id}") do
click_link 'Delete Topic' click_link 'Destroy Topic'
end end
visit admin_tags_path visit admin_tags_path

View File

@@ -43,7 +43,7 @@ feature 'Incomplete verifications' do
visit admin_verifications_path visit admin_verifications_path
within "#user_#{incompletely_verified_user.id}" do within "#user_#{incompletely_verified_user.id}" do
expect(page).to have_content "Spanish ID" expect(page).to have_content "DNI"
expect(page).to have_content incompletely_verified_user.document_number expect(page).to have_content incompletely_verified_user.document_number
expect(page).to have_content Date.new(1900, 1, 1) expect(page).to have_content Date.new(1900, 1, 1)
expect(page).to have_content "28000" expect(page).to have_content "28000"

View File

@@ -17,7 +17,7 @@ feature 'Admin' do
expect(current_path).not_to eq(admin_root_path) expect(current_path).not_to eq(admin_root_path)
expect(current_path).to eq(proposals_path) expect(current_path).to eq(proposals_path)
expect(page).to have_content "not authorized" expect(page).to have_content "You do not have permission to access this page"
end end
scenario 'Access as a moderator is not authorized' do scenario 'Access as a moderator is not authorized' do
@@ -26,7 +26,7 @@ feature 'Admin' do
expect(current_path).not_to eq(admin_root_path) expect(current_path).not_to eq(admin_root_path)
expect(current_path).to eq(proposals_path) expect(current_path).to eq(proposals_path)
expect(page).to have_content "not authorized" expect(page).to have_content "You do not have permission to access this page"
end end
scenario 'Access as an administrator is authorized' do scenario 'Access as an administrator is authorized' do
@@ -34,7 +34,7 @@ feature 'Admin' do
visit admin_root_path visit admin_root_path
expect(current_path).to eq(admin_root_path) expect(current_path).to eq(admin_root_path)
expect(page).to_not have_content "not authorized" expect(page).to_not have_content "You do not have permission to access this page"
end end
scenario "Admin access links" do scenario "Admin access links" do
@@ -99,7 +99,7 @@ feature 'Admin' do
expect(page).to have_content 'Mi barrio' expect(page).to have_content 'Mi barrio'
click_link 'Delete Topic' click_link 'Destroy Topic'
expect(page).not_to have_content 'Mi barrio' expect(page).not_to have_content 'Mi barrio'
end end

View File

@@ -1,44 +0,0 @@
require 'rails_helper'
feature 'Beta testers' do
background do
allow_any_instance_of(ApplicationController).
to receive(:beta_site?).and_return(true)
allow_any_instance_of(ApplicationController).
to receive(:beta_testers).and_return(['isabel@example.com'])
end
scenario 'Beta testers should have access' do
visit root_path
sign_up('isabel@example.com', 'secretpassword')
confirm_email
fill_in 'user_email', with: 'isabel@example.com'
fill_in 'user_password', with: 'secretpassword'
click_button 'Log in'
expect(page).to have_content "Signed in successfully."
end
scenario 'Non beta testers should not have access' do
visit root_path
sign_up('other@example.com', 'secretpassword')
confirm_email
fill_in 'user_email', with: 'other@example.com'
fill_in 'user_password', with: 'secretpassword'
click_button 'Log in'
expect(page).to have_content "Sorry only Beta Testers are allowed access at the moment"
end
scenario "Trying to access site without being logged in" do
visit debates_path
expect(page).to have_content "Sorry only Beta Testers are allowed access at the moment"
expect(current_path).to eq(new_user_session_path)
end
end

View File

@@ -100,7 +100,7 @@ feature 'Commenting debates' do
create(:comment, commentable: debate) create(:comment, commentable: debate)
visit debate_path(debate) visit debate_path(debate)
expect(page).to have_content 'You need to sign in or sign up to comment' expect(page).to have_content 'You must Sign in or Sign up to leave a comment'
within('#comments') do within('#comments') do
expect(page).to_not have_content 'Write a comment' expect(page).to_not have_content 'Write a comment'
expect(page).to_not have_content 'Reply' expect(page).to_not have_content 'Reply'
@@ -233,7 +233,7 @@ feature 'Commenting debates' do
visit debate_path(debate) visit debate_path(debate)
within "#comment_#{comment.id}" do within "#comment_#{comment.id}" do
expect(page).to have_content('Deleted user') expect(page).to have_content('User deleted')
expect(page).to have_content('this should be visible') expect(page).to have_content('this should be visible')
end end
end end

View File

@@ -100,7 +100,7 @@ feature 'Commenting proposals' do
create(:comment, commentable: proposal) create(:comment, commentable: proposal)
visit proposal_path(proposal) visit proposal_path(proposal)
expect(page).to have_content 'You need to sign in or sign up to comment' expect(page).to have_content 'You must Sign in or Sign up to leave a comment'
within('#comments') do within('#comments') do
expect(page).to_not have_content 'Write a comment' expect(page).to_not have_content 'Write a comment'
expect(page).to_not have_content 'Reply' expect(page).to_not have_content 'Reply'
@@ -233,7 +233,7 @@ feature 'Commenting proposals' do
visit proposal_path(proposal) visit proposal_path(proposal)
within "#comment_#{comment.id}" do within "#comment_#{comment.id}" do
expect(page).to have_content('Deleted user') expect(page).to have_content('User deleted')
expect(page).to have_content('this should be visible') expect(page).to have_content('this should be visible')
end end
end end

View File

@@ -56,7 +56,7 @@ feature 'Debates' do
visit debates_path(order: :hot_score, page: 1) visit debates_path(order: :hot_score, page: 1)
first(:link, debate.title).click first(:link, debate.title).click
link_text = find_link('Back')[:href] link_text = find_link('Go back')[:href]
expect(link_text).to include(debates_path order: :hot_score, page: 1) expect(link_text).to include(debates_path order: :hot_score, page: 1)
end end
@@ -74,7 +74,7 @@ feature 'Debates' do
click_button 'Start a debate' click_button 'Start a debate'
expect(page).to have_content 'A title for a debate' expect(page).to have_content 'A title for a debate'
expect(page).to have_content 'Debate was successfully created.' expect(page).to have_content 'Debate created successfully.'
expect(page).to have_content 'This is very important because...' expect(page).to have_content 'This is very important because...'
expect(page).to have_content author.name expect(page).to have_content author.name
expect(page).to have_content I18n.l(Debate.last.created_at.to_date) expect(page).to have_content I18n.l(Debate.last.created_at.to_date)
@@ -91,13 +91,13 @@ feature 'Debates' do
click_button "Start a debate" click_button "Start a debate"
expect(page).to_not have_content "Debate was successfully created." expect(page).to_not have_content "Debate created successfully."
expect(page).to have_content "1 error" expect(page).to have_content "1 error"
fill_in 'debate_captcha', with: correct_captcha_text fill_in 'debate_captcha', with: correct_captcha_text
click_button "Start a debate" click_button "Start a debate"
expect(page).to have_content "Debate was successfully created." expect(page).to have_content "Debate created successfully."
end end
scenario 'Failed creation goes back to new showing featured tags' do scenario 'Failed creation goes back to new showing featured tags' do
@@ -113,7 +113,7 @@ feature 'Debates' do
click_button "Start a debate" click_button "Start a debate"
expect(page).to_not have_content "Debate was successfully created." expect(page).to_not have_content "Debate created successfully."
expect(page).to have_content "error" expect(page).to have_content "error"
within(".tags") do within(".tags") do
expect(page).to have_content featured_tag.name expect(page).to have_content featured_tag.name
@@ -142,7 +142,7 @@ feature 'Debates' do
click_button 'Start a debate' click_button 'Start a debate'
expect(page).to have_content 'Debate was successfully created.' expect(page).to have_content 'Debate created successfully.'
expect(page).to have_content 'Testing an attack' expect(page).to have_content 'Testing an attack'
expect(page.html).to include '<p>This is alert("an attack");</p>' expect(page.html).to include '<p>This is alert("an attack");</p>'
expect(page.html).to_not include '<script>alert("an attack");</script>' expect(page.html).to_not include '<script>alert("an attack");</script>'
@@ -161,7 +161,7 @@ feature 'Debates' do
click_button 'Start a debate' click_button 'Start a debate'
expect(page).to have_content 'Debate was successfully created.' expect(page).to have_content 'Debate created successfully.'
expect(page).to have_content 'Testing auto link' expect(page).to have_content 'Testing auto link'
expect(page).to have_link('www.example.org', href: 'http://www.example.org') expect(page).to have_link('www.example.org', href: 'http://www.example.org')
end end
@@ -178,13 +178,13 @@ feature 'Debates' do
click_button 'Start a debate' click_button 'Start a debate'
expect(page).to have_content 'Debate was successfully created.' expect(page).to have_content 'Debate created successfully.'
expect(page).to have_content 'Testing auto link' expect(page).to have_content 'Testing auto link'
expect(page).to have_link('http://example.org', href: 'http://example.org') expect(page).to have_link('http://example.org', href: 'http://example.org')
expect(page).not_to have_link('click me') expect(page).not_to have_link('click me')
expect(page.html).to_not include "<script>alert('hey')</script>" expect(page.html).to_not include "<script>alert('hey')</script>"
click_link 'Edit debate' click_link 'Edit'
expect(current_path).to eq edit_debate_path(Debate.last) expect(current_path).to eq edit_debate_path(Debate.last)
expect(page).not_to have_link('click me') expect(page).not_to have_link('click me')
@@ -216,7 +216,7 @@ feature 'Debates' do
click_button 'Start a debate' click_button 'Start a debate'
expect(page).to have_content 'Debate was successfully created.' expect(page).to have_content 'Debate created successfully.'
['Medio Ambiente', 'Ciencia'].each do |tag_name| ['Medio Ambiente', 'Ciencia'].each do |tag_name|
expect(page).to have_content tag_name expect(page).to have_content tag_name
end end
@@ -234,7 +234,7 @@ feature 'Debates' do
click_button 'Start a debate' click_button 'Start a debate'
expect(page).to have_content 'Debate was successfully created.' expect(page).to have_content 'Debate created successfully.'
expect(page).to have_content 'user_id1' expect(page).to have_content 'user_id1'
expect(page).to have_content 'a3' expect(page).to have_content 'a3'
expect(page).to have_content 'scriptalert("hey");script' expect(page).to have_content 'scriptalert("hey");script'
@@ -250,7 +250,7 @@ feature 'Debates' do
visit edit_debate_path(debate) visit edit_debate_path(debate)
expect(current_path).not_to eq(edit_debate_path(debate)) expect(current_path).not_to eq(edit_debate_path(debate))
expect(current_path).to eq(proposals_path) expect(current_path).to eq(proposals_path)
expect(page).to have_content 'not authorized' expect(page).to have_content "You do not have permission to carry out the action 'edit' on debate."
end end
scenario 'Update should not be posible if debate is not editable' do scenario 'Update should not be posible if debate is not editable' do
@@ -265,7 +265,7 @@ feature 'Debates' do
expect(current_path).not_to eq(edit_debate_path(debate)) expect(current_path).not_to eq(edit_debate_path(debate))
expect(current_path).to eq(proposals_path) expect(current_path).to eq(proposals_path)
expect(page).to have_content 'not authorized' expect(page).to have_content 'You do not have permission to'
end end
scenario 'Update should be posible for the author of an editable debate' do scenario 'Update should be posible for the author of an editable debate' do
@@ -281,7 +281,7 @@ feature 'Debates' do
click_button "Save changes" click_button "Save changes"
expect(page).to have_content "Debate was successfully updated." expect(page).to have_content "Debate updated successfully."
expect(page).to have_content "End child poverty" expect(page).to have_content "End child poverty"
expect(page).to have_content "Let's do something to end child poverty" expect(page).to have_content "Let's do something to end child poverty"
end end
@@ -308,13 +308,13 @@ feature 'Debates' do
fill_in 'debate_captcha', with: "wrong!" fill_in 'debate_captcha', with: "wrong!"
click_button "Save changes" click_button "Save changes"
expect(page).to_not have_content "Debate was successfully updated." expect(page).to_not have_content "Debate updated successfully."
expect(page).to have_content "error" expect(page).to have_content "error"
fill_in 'debate_captcha', with: correct_captcha_text fill_in 'debate_captcha', with: correct_captcha_text
click_button "Save changes" click_button "Save changes"
expect(page).to have_content "Debate was successfully updated." expect(page).to have_content "Debate updated successfully."
end end
scenario 'Failed update goes back to edit showing featured tags' do scenario 'Failed update goes back to edit showing featured tags' do
@@ -330,7 +330,7 @@ feature 'Debates' do
fill_in 'debate_captcha', with: correct_captcha_text fill_in 'debate_captcha', with: correct_captcha_text
click_button "Save changes" click_button "Save changes"
expect(page).to_not have_content "Debate was successfully updated." expect(page).to_not have_content "Debate updated successfully."
expect(page).to have_content "error" expect(page).to have_content "error"
within(".tags") do within(".tags") do
expect(page).to have_content featured_tag.name expect(page).to have_content featured_tag.name
@@ -419,7 +419,7 @@ feature 'Debates' do
create(:debate, title: 'Medium').update_column(:confidence_score, 5) create(:debate, title: 'Medium').update_column(:confidence_score, 5)
visit debates_path visit debates_path
select 'best rated', from: 'order-selector' select 'highest rated', from: 'order-selector'
expect(page).to have_selector('.js-order-selector[data-order="confidence_score"]') expect(page).to have_selector('.js-order-selector[data-order="confidence_score"]')
@@ -504,10 +504,12 @@ feature 'Debates' do
within("#debates") do within("#debates") do
expect(page).to have_css('.debate', count: 4) expect(page).to have_css('.debate', count: 4)
expect(page).to have_content(debate2.title) expect(page).to have_content(debate2.title)
expect(page).to have_content(debate4.title) expect(page).to have_content(debate4.title)
expect(page).to have_content(debate5.title) expect(page).to have_content(debate5.title)
expect(page).to have_content(debate6.title) expect(page).to have_content(debate6.title)
expect(page).to_not have_content(debate1.title) expect(page).to_not have_content(debate1.title)
expect(page).to_not have_content(debate3.title) expect(page).to_not have_content(debate3.title)
end end
@@ -518,10 +520,10 @@ feature 'Debates' do
conflictive_debate = create(:debate, :conflictive) conflictive_debate = create(:debate, :conflictive)
visit debate_path(conflictive_debate) visit debate_path(conflictive_debate)
expect(page).to have_content "This debate has been flag as innapropiate for some users." expect(page).to have_content "This debate has been flagged as inappropriate by several users."
visit debate_path(good_debate) visit debate_path(good_debate)
expect(page).to_not have_content "This debate has been flag as innapropiate for some users." expect(page).to_not have_content "This debate has been flagged as inappropriate by several users."
end end
scenario 'Erased author' do scenario 'Erased author' do
@@ -530,9 +532,9 @@ feature 'Debates' do
user.erase user.erase
visit debates_path visit debates_path
expect(page).to have_content('Deleted user') expect(page).to have_content('User deleted')
visit debate_path(debate) visit debate_path(debate)
expect(page).to have_content('Deleted user') expect(page).to have_content('User deleted')
end end
end end

View File

@@ -19,7 +19,7 @@ feature 'Emails' do
reset_password reset_password
email = open_last_email email = open_last_email
expect(email).to have_subject('Reset password instructions') expect(email).to have_subject('Instructions for resetting your password')
expect(email).to deliver_to('manuela@madrid.es') expect(email).to deliver_to('manuela@madrid.es')
expect(email).to have_body_text(edit_user_password_path) expect(email).to have_body_text(edit_user_password_path)
end end
@@ -31,7 +31,7 @@ feature 'Emails' do
comment_on(proposal) comment_on(proposal)
email = open_last_email email = open_last_email
expect(email).to have_subject('Someone has commented on your proposal') expect(email).to have_subject('Someone has commented on your citizen proposal')
expect(email).to deliver_to(proposal.author) expect(email).to deliver_to(proposal.author)
expect(email).to have_body_text(proposal_path(proposal)) expect(email).to have_body_text(proposal_path(proposal))
end end
@@ -88,7 +88,7 @@ feature 'Emails' do
reply_to(user) reply_to(user)
email = open_last_email email = open_last_email
expect(email).to have_subject('Someone has replied to your comment') expect(email).to have_subject('Someone has responded to your comment')
expect(email).to deliver_to(user) expect(email).to deliver_to(user)
expect(email).to have_body_text(debate_path(Comment.first.commentable)) expect(email).to have_body_text(debate_path(Comment.first.commentable))
end end

View File

@@ -27,7 +27,7 @@ feature "Highlights" do
visit highlights_path visit highlights_path
expect(page).to have_link("Start a proposal") expect(page).to have_link("Create a proposal")
expect(page).to have_link("Start a debate") expect(page).to have_link("Start a debate")
end end

View File

@@ -6,7 +6,7 @@ feature "Home" do
scenario 'Welcome message' do scenario 'Welcome message' do
visit root_path visit root_path
expect(page).to have_content "we open this digital Puerta del Sol" expect(page).to have_content "Love the city, and it will become a city you love"
end end
end end

View File

@@ -25,10 +25,10 @@ feature 'EmailVerifications' do
sent_token = /.*email_verification_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1] sent_token = /.*email_verification_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1]
visit email_path(email_verification_token: sent_token) visit email_path(email_verification_token: sent_token)
expect(page).to have_content "You are now a verified user" expect(page).to have_content "You are a verified user"
expect(page).to_not have_link "Verify my account" expect(page).to_not have_link "Verify my account"
expect(page).to have_content "Verified account" expect(page).to have_content "Account verified"
expect(user.reload.document_number).to eq('1234') expect(user.reload.document_number).to eq('1234')
expect(user).to be_level_three_verified expect(user).to be_level_three_verified

View File

@@ -30,9 +30,9 @@ feature 'Proposals' do
fill_in 'proposal_captcha', with: correct_captcha_text fill_in 'proposal_captcha', with: correct_captcha_text
check 'proposal_terms_of_service' check 'proposal_terms_of_service'
click_button 'Start a proposal' click_button 'Create proposal'
expect(page).to have_content 'Proposal was successfully created.' expect(page).to have_content 'Proposal created successfully.'
expect(page).to have_content 'Help refugees' expect(page).to have_content 'Help refugees'
expect(page).to have_content '¿Would you like to give assistance to war refugees?' expect(page).to have_content '¿Would you like to give assistance to war refugees?'
@@ -120,7 +120,7 @@ feature 'Proposals' do
find('.in-favor a').click find('.in-favor a').click
expect(page).to have_content "1 support" expect(page).to have_content "1 support"
expect(page).to have_content "You already supported this proposal" expect(page).to have_content "You have already supported this proposal. Share it!"
end end
expect(current_path).to eq(management_proposals_path) expect(current_path).to eq(management_proposals_path)
end end
@@ -139,7 +139,7 @@ feature 'Proposals' do
find('.in-favor a').click find('.in-favor a').click
expect(page).to have_content "1 support" expect(page).to have_content "1 support"
expect(page).to have_content "You already supported this proposal" expect(page).to have_content "You have already supported this proposal. Share it!"
expect(current_path).to eq(management_proposal_path(proposal)) expect(current_path).to eq(management_proposal_path(proposal))
end end

View File

@@ -39,7 +39,7 @@ feature 'users' do
expect(user.reload).to be_confirmed expect(user.reload).to be_confirmed
expect(page).to have_content "Your email address has been successfully confirmed." expect(page).to have_content "Your account has been confirmed."
end end
end end

View File

@@ -75,7 +75,7 @@ feature 'Moderate comments' do
end end
scenario 'Ignore the comment' do scenario 'Ignore the comment' do
click_on "Ignore flags" click_on "Mark as viewed"
expect(page).to_not have_css("comment_#{@comment.id}") expect(page).to_not have_css("comment_#{@comment.id}")
expect(@comment.reload).to be_ignored_flag expect(@comment.reload).to be_ignored_flag
expect(@comment.reload).to_not be_hidden expect(@comment.reload).to_not be_hidden
@@ -106,7 +106,7 @@ feature 'Moderate comments' do
visit moderation_comments_path(filter: 'all', page: '2', order: 'created_at') visit moderation_comments_path(filter: 'all', page: '2', order: 'created_at')
click_on "Ignore flags" click_on "Mark as viewed"
expect(page).to have_selector('.js-order-selector[data-order="created_at"]') expect(page).to have_selector('.js-order-selector[data-order="created_at"]')
@@ -120,27 +120,27 @@ feature 'Moderate comments' do
visit moderation_comments_path visit moderation_comments_path
expect(page).to_not have_link('Pending') expect(page).to_not have_link('Pending')
expect(page).to have_link('All') expect(page).to have_link('All')
expect(page).to have_link('Ignored') expect(page).to have_link('Marked as viewed')
visit moderation_comments_path(filter: 'all') visit moderation_comments_path(filter: 'all')
within('.sub-nav') do within('.sub-nav') do
expect(page).to_not have_link('All') expect(page).to_not have_link('All')
expect(page).to have_link('Pending') expect(page).to have_link('Pending')
expect(page).to have_link('Ignored') expect(page).to have_link('Marked as viewed')
end end
visit moderation_comments_path(filter: 'pending_flag_review') visit moderation_comments_path(filter: 'pending_flag_review')
within('.sub-nav') do within('.sub-nav') do
expect(page).to have_link('All') expect(page).to have_link('All')
expect(page).to_not have_link('Pending') expect(page).to_not have_link('Pending')
expect(page).to have_link('Ignored') expect(page).to have_link('Marked as viewed')
end end
visit moderation_comments_path(filter: 'with_ignored_flag') visit moderation_comments_path(filter: 'with_ignored_flag')
within('.sub-nav') do within('.sub-nav') do
expect(page).to have_link('All') expect(page).to have_link('All')
expect(page).to have_link('Pending') expect(page).to have_link('Pending')
expect(page).to_not have_link('Ignored') expect(page).to_not have_link('Marked as viewed')
end end
end end

View File

@@ -74,7 +74,7 @@ feature 'Moderate debates' do
end end
scenario 'Ignore the debate' do scenario 'Ignore the debate' do
click_on "Ignore flags" click_on "Mark as viewed"
expect(page).to_not have_css("debate_#{@debate.id}") expect(page).to_not have_css("debate_#{@debate.id}")
expect(@debate.reload).to be_ignored_flag expect(@debate.reload).to be_ignored_flag
expect(@debate.reload).to_not be_hidden expect(@debate.reload).to_not be_hidden
@@ -105,7 +105,7 @@ feature 'Moderate debates' do
visit moderation_debates_path(filter: 'all', page: '2', order: 'created_at') visit moderation_debates_path(filter: 'all', page: '2', order: 'created_at')
click_on "Ignore flags" click_on "Mark as viewed"
expect(page).to have_selector('.js-order-selector[data-order="created_at"]') expect(page).to have_selector('.js-order-selector[data-order="created_at"]')
@@ -119,27 +119,27 @@ feature 'Moderate debates' do
visit moderation_debates_path visit moderation_debates_path
expect(page).to_not have_link('Pending') expect(page).to_not have_link('Pending')
expect(page).to have_link('All') expect(page).to have_link('All')
expect(page).to have_link('Ignored') expect(page).to have_link('Marked as viewed')
visit moderation_debates_path(filter: 'all') visit moderation_debates_path(filter: 'all')
within('.sub-nav') do within('.sub-nav') do
expect(page).to_not have_link('All') expect(page).to_not have_link('All')
expect(page).to have_link('Pending') expect(page).to have_link('Pending')
expect(page).to have_link('Ignored') expect(page).to have_link('Marked as viewed')
end end
visit moderation_debates_path(filter: 'pending_flag_review') visit moderation_debates_path(filter: 'pending_flag_review')
within('.sub-nav') do within('.sub-nav') do
expect(page).to have_link('All') expect(page).to have_link('All')
expect(page).to_not have_link('Pending') expect(page).to_not have_link('Pending')
expect(page).to have_link('Ignored') expect(page).to have_link('Marked as viewed')
end end
visit moderation_debates_path(filter: 'with_ignored_flag') visit moderation_debates_path(filter: 'with_ignored_flag')
within('.sub-nav') do within('.sub-nav') do
expect(page).to have_link('All') expect(page).to have_link('All')
expect(page).to have_link('Pending') expect(page).to have_link('Pending')
expect(page).to_not have_link('Ignored') expect(page).to_not have_link('Marked as viewed')
end end
end end

View File

@@ -74,7 +74,7 @@ feature 'Moderate proposals' do
end end
scenario 'Ignore the proposal' do scenario 'Ignore the proposal' do
click_on "Ignore flags" click_button "Mark as viewed"
expect(page).to_not have_css("proposal_#{@proposal.id}") expect(page).to_not have_css("proposal_#{@proposal.id}")
expect(@proposal.reload).to be_ignored_flag expect(@proposal.reload).to be_ignored_flag
expect(@proposal.reload).to_not be_hidden expect(@proposal.reload).to_not be_hidden
@@ -105,7 +105,7 @@ feature 'Moderate proposals' do
visit moderation_proposals_path(filter: 'all', page: '2', order: 'created_at') visit moderation_proposals_path(filter: 'all', page: '2', order: 'created_at')
click_on "Ignore flags" click_button "Mark as viewed"
expect(page).to have_selector('.js-order-selector[data-order="created_at"]') expect(page).to have_selector('.js-order-selector[data-order="created_at"]')
@@ -119,27 +119,27 @@ feature 'Moderate proposals' do
visit moderation_proposals_path visit moderation_proposals_path
expect(page).to_not have_link('Pending') expect(page).to_not have_link('Pending')
expect(page).to have_link('All') expect(page).to have_link('All')
expect(page).to have_link('Ignored') expect(page).to have_link('Mark as viewed')
visit moderation_proposals_path(filter: 'all') visit moderation_proposals_path(filter: 'all')
within('.sub-nav') do within('.sub-nav') do
expect(page).to_not have_link('All') expect(page).to_not have_link('All')
expect(page).to have_link('Pending') expect(page).to have_link('Pending review')
expect(page).to have_link('Ignored') expect(page).to have_link('Mark as viewed')
end end
visit moderation_proposals_path(filter: 'pending_flag_review') visit moderation_proposals_path(filter: 'pending_flag_review')
within('.sub-nav') do within('.sub-nav') do
expect(page).to have_link('All') expect(page).to have_link('All')
expect(page).to_not have_link('Pending') expect(page).to_not have_link('Pending')
expect(page).to have_link('Ignored') expect(page).to have_link('Mark as viewed')
end end
visit moderation_proposals_path(filter: 'with_ignored_flag') visit moderation_proposals_path(filter: 'with_ignored_flag')
within('.sub-nav') do within('.sub-nav') do
expect(page).to have_link('All') expect(page).to have_link('All')
expect(page).to have_link('Pending') expect(page).to have_link('Pending review')
expect(page).to_not have_link('Ignored') expect(page).to_not have_link('Marked as viewed')
end end
end end

View File

@@ -25,7 +25,7 @@ feature 'Moderate users' do
visit debate_path(debate1) visit debate_path(debate1)
within("#debate_#{debate1.id}") do within("#debate_#{debate1.id}") do
click_link 'Ban author' click_link 'Hide author'
end end
expect(current_path).to eq(debates_path) expect(current_path).to eq(debates_path)
@@ -37,12 +37,12 @@ feature 'Moderate users' do
expect(page).to_not have_content(comment3.body) expect(page).to_not have_content(comment3.body)
click_link("Logout") click_link("Sign out")
click_link 'Log in' click_link 'Sign in'
fill_in 'user_email', with: citizen.email fill_in 'user_email', with: citizen.email
fill_in 'user_password', with: citizen.password fill_in 'user_password', with: citizen.password
click_button 'Log in' click_button 'Enter'
expect(page).to have_content 'Invalid email or password' expect(page).to have_content 'Invalid email or password'
expect(current_path).to eq(new_user_session_path) expect(current_path).to eq(new_user_session_path)
@@ -62,13 +62,13 @@ feature 'Moderate users' do
within(".admin-list") do within(".admin-list") do
expect(page).to have_content citizen.name expect(page).to have_content citizen.name
expect(page).not_to have_content "Banned" expect(page).not_to have_content "Blocked"
click_link 'Ban' click_link 'Block'
end end
within(".admin-list") do within(".admin-list") do
expect(page).to have_content citizen.name expect(page).to have_content citizen.name
expect(page).to have_content "Banned" expect(page).to have_content "Blocked"
end end
end end

View File

@@ -12,7 +12,7 @@ feature 'Admin' do
expect(current_path).not_to eq(moderation_root_path) expect(current_path).not_to eq(moderation_root_path)
expect(current_path).to eq(proposals_path) expect(current_path).to eq(proposals_path)
expect(page).to have_content "not authorized" expect(page).to have_content "You do not have permission to access this page"
end end
scenario 'Access as a moderator is authorized' do scenario 'Access as a moderator is authorized' do
@@ -25,7 +25,7 @@ feature 'Admin' do
click_on "Moderation" click_on "Moderation"
expect(current_path).to eq(moderation_root_path) expect(current_path).to eq(moderation_root_path)
expect(page).to_not have_content "not authorized" expect(page).to_not have_content "You do not have permission to access this page"
end end
scenario 'Access as an administrator is authorized' do scenario 'Access as an administrator is authorized' do
@@ -38,7 +38,7 @@ feature 'Admin' do
click_on "Moderation" click_on "Moderation"
expect(current_path).to eq(moderation_root_path) expect(current_path).to eq(moderation_root_path)
expect(page).to_not have_content "not authorized" expect(page).to_not have_content "You do not have permission to access this page"
end end
end end

View File

@@ -16,7 +16,7 @@ feature 'Organizations' do
fill_in 'user_captcha', with: correct_captcha_text fill_in 'user_captcha', with: correct_captcha_text
check 'user_terms_of_service' check 'user_terms_of_service'
click_button 'Sign up' click_button 'Register'
user = User.organizations.where(email: 'green@peace.com').first user = User.organizations.where(email: 'green@peace.com').first
expect(user).to be expect(user).to be
@@ -27,7 +27,7 @@ feature 'Organizations' do
scenario 'Errors on create' do scenario 'Errors on create' do
visit new_organization_registration_path visit new_organization_registration_path
click_button 'Sign up' click_button 'Register'
expect(page).to have_content error_message expect(page).to have_content error_message
end end

View File

@@ -87,9 +87,9 @@ feature 'Proposals' do
fill_in 'proposal_captcha', with: correct_captcha_text fill_in 'proposal_captcha', with: correct_captcha_text
check 'proposal_terms_of_service' check 'proposal_terms_of_service'
click_button 'Start a proposal' click_button 'Create proposal'
expect(page).to have_content 'Proposal was successfully created.' expect(page).to have_content 'Proposal created successfully.'
expect(page).to have_content 'Help refugees' expect(page).to have_content 'Help refugees'
expect(page).to have_content '¿Would you like to give assistance to war refugees?' expect(page).to have_content '¿Would you like to give assistance to war refugees?'
expect(page).to have_content 'In summary, what we want is...' expect(page).to have_content 'In summary, what we want is...'
@@ -115,9 +115,9 @@ feature 'Proposals' do
fill_in 'proposal_responsible_name', with: 'Isabel Garcia' fill_in 'proposal_responsible_name', with: 'Isabel Garcia'
check 'proposal_terms_of_service' check 'proposal_terms_of_service'
click_button 'Start a proposal' click_button 'Create proposal'
expect(page).to have_content 'Proposal was successfully created.' expect(page).to have_content 'Proposal created successfully.'
expect(Proposal.last.responsible_name).to eq('Isabel Garcia') expect(Proposal.last.responsible_name).to eq('Isabel Garcia')
end end
@@ -136,9 +136,9 @@ feature 'Proposals' do
fill_in 'proposal_captcha', with: correct_captcha_text fill_in 'proposal_captcha', with: correct_captcha_text
check 'proposal_terms_of_service' check 'proposal_terms_of_service'
click_button 'Start a proposal' click_button 'Create proposal'
expect(page).to have_content 'Proposal was successfully created.' expect(page).to have_content 'Proposal created successfully.'
end end
scenario 'Captcha is required for proposal creation' do scenario 'Captcha is required for proposal creation' do
@@ -154,15 +154,15 @@ feature 'Proposals' do
fill_in 'proposal_captcha', with: "wrongText!" fill_in 'proposal_captcha', with: "wrongText!"
check 'proposal_terms_of_service' check 'proposal_terms_of_service'
click_button "Start a proposal" click_button "Create proposal"
expect(page).to_not have_content "Proposal was successfully created." expect(page).to_not have_content "Proposal created successfully."
expect(page).to have_content "1 error" expect(page).to have_content "1 error"
fill_in 'proposal_captcha', with: correct_captcha_text fill_in 'proposal_captcha', with: correct_captcha_text
click_button "Start a proposal" click_button "Create proposal"
expect(page).to have_content "Proposal was successfully created." expect(page).to have_content "Proposal created successfully."
end end
scenario 'Failed creation goes back to new showing featured tags' do scenario 'Failed creation goes back to new showing featured tags' do
@@ -180,9 +180,9 @@ feature 'Proposals' do
fill_in 'proposal_captcha', with: correct_captcha_text fill_in 'proposal_captcha', with: correct_captcha_text
check 'proposal_terms_of_service' check 'proposal_terms_of_service'
click_button "Start a proposal" click_button "Create proposal"
expect(page).to_not have_content "Proposal was successfully created." expect(page).to_not have_content "Proposal created successfully."
expect(page).to have_content "error" expect(page).to have_content "error"
within(".tags") do within(".tags") do
expect(page).to have_content featured_tag.name expect(page).to have_content featured_tag.name
@@ -195,7 +195,7 @@ feature 'Proposals' do
login_as(author) login_as(author)
visit new_proposal_path visit new_proposal_path
click_button 'Start a proposal' click_button 'Create proposal'
expect(page).to have_content error_message expect(page).to have_content error_message
end end
@@ -213,9 +213,9 @@ feature 'Proposals' do
fill_in 'proposal_captcha', with: correct_captcha_text fill_in 'proposal_captcha', with: correct_captcha_text
check 'proposal_terms_of_service' check 'proposal_terms_of_service'
click_button 'Start a proposal' click_button 'Create proposal'
expect(page).to have_content 'Proposal was successfully created.' expect(page).to have_content 'Proposal created successfully.'
expect(page).to have_content 'Testing an attack' expect(page).to have_content 'Testing an attack'
expect(page.html).to include '<p>This is alert("an attack");</p>' expect(page.html).to include '<p>This is alert("an attack");</p>'
expect(page.html).to_not include '<script>alert("an attack");</script>' expect(page.html).to_not include '<script>alert("an attack");</script>'
@@ -235,9 +235,9 @@ feature 'Proposals' do
fill_in 'proposal_captcha', with: correct_captcha_text fill_in 'proposal_captcha', with: correct_captcha_text
check 'proposal_terms_of_service' check 'proposal_terms_of_service'
click_button 'Start a proposal' click_button 'Create proposal'
expect(page).to have_content 'Proposal was successfully created.' expect(page).to have_content 'Proposal created successfully.'
expect(page).to have_content 'Testing auto link' expect(page).to have_content 'Testing auto link'
expect(page).to have_link('www.example.org', href: 'http://www.example.org') expect(page).to have_link('www.example.org', href: 'http://www.example.org')
end end
@@ -255,15 +255,15 @@ feature 'Proposals' do
fill_in 'proposal_captcha', with: correct_captcha_text fill_in 'proposal_captcha', with: correct_captcha_text
check 'proposal_terms_of_service' check 'proposal_terms_of_service'
click_button 'Start a proposal' click_button 'Create proposal'
expect(page).to have_content 'Proposal was successfully created.' expect(page).to have_content 'Proposal created successfully.'
expect(page).to have_content 'Testing auto link' expect(page).to have_content 'Testing auto link'
expect(page).to have_link('http://example.org', href: 'http://example.org') expect(page).to have_link('http://example.org', href: 'http://example.org')
expect(page).not_to have_link('click me') expect(page).not_to have_link('click me')
expect(page.html).to_not include "<script>alert('hey')</script>" expect(page.html).to_not include "<script>alert('hey')</script>"
click_link 'Edit proposal' click_link 'Edit'
expect(current_path).to eq edit_proposal_path(Proposal.last) expect(current_path).to eq edit_proposal_path(Proposal.last)
expect(page).not_to have_link('click me') expect(page).not_to have_link('click me')
@@ -297,9 +297,9 @@ feature 'Proposals' do
find('.js-add-tag-link', text: tag_name).click find('.js-add-tag-link', text: tag_name).click
end end
click_button 'Start a proposal' click_button 'Create proposal'
expect(page).to have_content 'Proposal was successfully created.' expect(page).to have_content 'Proposal created successfully.'
['Medio Ambiente', 'Ciencia'].each do |tag_name| ['Medio Ambiente', 'Ciencia'].each do |tag_name|
expect(page).to have_content tag_name expect(page).to have_content tag_name
end end
@@ -319,9 +319,9 @@ feature 'Proposals' do
fill_in 'proposal_tag_list', with: 'user_id=1, &a=3, <script>alert("hey");</script>' fill_in 'proposal_tag_list', with: 'user_id=1, &a=3, <script>alert("hey");</script>'
click_button 'Start a proposal' click_button 'Create proposal'
expect(page).to have_content 'Proposal was successfully created.' expect(page).to have_content 'Proposal created successfully.'
expect(page).to have_content 'user_id1' expect(page).to have_content 'user_id1'
expect(page).to have_content 'a3' expect(page).to have_content 'a3'
expect(page).to have_content 'scriptalert("hey");script' expect(page).to have_content 'scriptalert("hey");script'
@@ -337,7 +337,7 @@ feature 'Proposals' do
visit edit_proposal_path(proposal) visit edit_proposal_path(proposal)
expect(current_path).not_to eq(edit_proposal_path(proposal)) expect(current_path).not_to eq(edit_proposal_path(proposal))
expect(current_path).to eq(proposals_path) expect(current_path).to eq(proposals_path)
expect(page).to have_content 'not authorized' expect(page).to have_content 'You do not have permission'
end end
scenario 'Update should not be posible if proposal is not editable' do scenario 'Update should not be posible if proposal is not editable' do
@@ -352,7 +352,7 @@ feature 'Proposals' do
expect(current_path).not_to eq(edit_proposal_path(proposal)) expect(current_path).not_to eq(edit_proposal_path(proposal))
expect(current_path).to eq(proposals_path) expect(current_path).to eq(proposals_path)
expect(page).to have_content 'not authorized' expect(page).to have_content 'You do not have permission'
end end
scenario 'Update should be posible for the author of an editable proposal' do scenario 'Update should be posible for the author of an editable proposal' do
@@ -372,7 +372,7 @@ feature 'Proposals' do
click_button "Save changes" click_button "Save changes"
expect(page).to have_content "Proposal was successfully updated." expect(page).to have_content "Proposal updated successfully."
expect(page).to have_content "Basically..." expect(page).to have_content "Basically..."
expect(page).to have_content "End child poverty" expect(page).to have_content "End child poverty"
expect(page).to have_content "Let's do something to end child poverty" expect(page).to have_content "Let's do something to end child poverty"
@@ -400,13 +400,13 @@ feature 'Proposals' do
fill_in 'proposal_captcha', with: "wrong!" fill_in 'proposal_captcha', with: "wrong!"
click_button "Save changes" click_button "Save changes"
expect(page).to_not have_content "Proposal was successfully updated." expect(page).to_not have_content "Proposal updated successfully."
expect(page).to have_content "error" expect(page).to have_content "error"
fill_in 'proposal_captcha', with: correct_captcha_text fill_in 'proposal_captcha', with: correct_captcha_text
click_button "Save changes" click_button "Save changes"
expect(page).to have_content "Proposal was successfully updated." expect(page).to have_content "Proposal updated successfully."
end end
scenario 'Failed update goes back to edit showing featured tags' do scenario 'Failed update goes back to edit showing featured tags' do
@@ -422,7 +422,7 @@ feature 'Proposals' do
fill_in 'proposal_captcha', with: correct_captcha_text fill_in 'proposal_captcha', with: correct_captcha_text
click_button "Save changes" click_button "Save changes"
expect(page).to_not have_content "Proposal was successfully updated." expect(page).to_not have_content "Proposal updated successfully."
expect(page).to have_content "error" expect(page).to have_content "error"
within(".tags") do within(".tags") do
expect(page).to have_content featured_tag.name expect(page).to have_content featured_tag.name
@@ -482,7 +482,7 @@ feature 'Proposals' do
create(:proposal, title: 'Medium proposal').update_column(:confidence_score, 5) create(:proposal, title: 'Medium proposal').update_column(:confidence_score, 5)
visit proposals_path visit proposals_path
select 'most supported', from: 'order-selector' select 'highest rated', from: 'order-selector'
expect(page).to have_selector('.js-order-selector[data-order="confidence_score"]') expect(page).to have_selector('.js-order-selector[data-order="confidence_score"]')
@@ -559,7 +559,7 @@ feature 'Proposals' do
end end
end end
scenario 'proposal index search' do scenario 'Proposal index search' do
proposal1 = create(:proposal, title: "Show me what you got") proposal1 = create(:proposal, title: "Show me what you got")
proposal2 = create(:proposal, title: "Get Schwifty") proposal2 = create(:proposal, title: "Get Schwifty")
proposal3 = create(:proposal) proposal3 = create(:proposal)
@@ -574,23 +574,47 @@ feature 'Proposals' do
within("#proposals") do within("#proposals") do
expect(page).to have_css('.proposal', count: 3) expect(page).to have_css('.proposal', count: 3)
expect(page).to have_content(proposal2.title) expect(page).to have_content(proposal2.title)
expect(page).to have_content(proposal4.title) expect(page).to have_content(proposal4.title)
expect(page).to have_content(proposal5.title) expect(page).to have_content(proposal5.title)
expect(page).to_not have_content(proposal1.title) expect(page).to_not have_content(proposal1.title)
expect(page).to_not have_content(proposal3.title) expect(page).to_not have_content(proposal3.title)
end end
end end
scenario 'Index search does not show featured proposals' do
featured_proposals = create_featured_proposals
proposal = create(:proposal, title: "Abcdefghi")
visit proposals_path
fill_in "search", with: proposal.title
click_button "Search"
expect(page).to_not have_selector('#proposals .proposal-featured')
expect(page).to_not have_selector('#featured-proposals')
end
scenario 'Tag index tag does not show featured proposals' do
featured_proposals = create_featured_proposals
proposal = create(:proposal, tag_list: "123")
visit proposals_path(tag: "123")
expect(page).to_not have_selector('#proposals .proposal-featured')
expect(page).to_not have_selector('#featured-proposals')
end
scenario 'Conflictive' do scenario 'Conflictive' do
good_proposal = create(:proposal) good_proposal = create(:proposal)
conflictive_proposal = create(:proposal, :conflictive) conflictive_proposal = create(:proposal, :conflictive)
visit proposal_path(conflictive_proposal) visit proposal_path(conflictive_proposal)
expect(page).to have_content "This proposal has been flag as innapropiate for some users." expect(page).to have_content "This proposal has been flagged as inappropriate by several users."
visit proposal_path(good_proposal) visit proposal_path(good_proposal)
expect(page).to_not have_content "This proposal has been flag as innapropiate for some users." expect(page).to_not have_content "This proposal has been flagged as inappropriate by several users."
end end
scenario "Flagging", :js do scenario "Flagging", :js do
@@ -634,14 +658,14 @@ feature 'Proposals' do
user.erase user.erase
visit proposals_path visit proposals_path
expect(page).to have_content('Deleted user') expect(page).to have_content('User deleted')
visit proposal_path(proposal) visit proposal_path(proposal)
expect(page).to have_content('Deleted user') expect(page).to have_content('User deleted')
create_featured_proposals create_featured_proposals
visit proposals_path visit proposals_path
expect(page).to have_content('Deleted user') expect(page).to have_content('User deleted')
end end
end end

View File

@@ -84,7 +84,7 @@ feature 'Tags' do
click_button 'Start a debate' click_button 'Start a debate'
expect(page).to have_content 'Debate was successfully created.' expect(page).to have_content 'Debate created successfully.'
expect(page).to have_content 'Economía' expect(page).to have_content 'Economía'
expect(page).to have_content 'Hacienda' expect(page).to have_content 'Hacienda'
expect(page).to have_content 'Impuestos' expect(page).to have_content 'Impuestos'
@@ -104,7 +104,7 @@ feature 'Tags' do
click_button 'Start a debate' click_button 'Start a debate'
expect(page).to have_content '1 error prohibited this debate from being saved:' expect(page).to have_content error_message
expect(page).to have_content 'tags must be less than or equal to 6' expect(page).to have_content 'tags must be less than or equal to 6'
end end
@@ -120,7 +120,7 @@ feature 'Tags' do
fill_in 'debate_captcha', with: correct_captcha_text fill_in 'debate_captcha', with: correct_captcha_text
click_button 'Save changes' click_button 'Save changes'
expect(page).to have_content 'Debate was successfully updated.' expect(page).to have_content 'Debate updated successfully.'
within('.tags') do within('.tags') do
expect(page).to have_css('a', text: 'Economía') expect(page).to have_css('a', text: 'Economía')
expect(page).to have_css('a', text: 'Hacienda') expect(page).to have_css('a', text: 'Hacienda')
@@ -137,7 +137,7 @@ feature 'Tags' do
fill_in 'debate_captcha', with: correct_captcha_text fill_in 'debate_captcha', with: correct_captcha_text
click_button 'Save changes' click_button 'Save changes'
expect(page).to have_content 'Debate was successfully updated.' expect(page).to have_content 'Debate updated successfully.'
expect(page).to_not have_content 'Economía' expect(page).to_not have_content 'Economía'
end end

View File

@@ -5,7 +5,7 @@ feature 'Users' do
context 'Regular authentication' do context 'Regular authentication' do
scenario 'Sign up' do scenario 'Sign up' do
visit '/' visit '/'
click_link 'Sign up' click_link 'Register'
fill_in 'user_username', with: 'Manuela Carmena' fill_in 'user_username', with: 'Manuela Carmena'
fill_in 'user_email', with: 'manuela@madrid.es' fill_in 'user_email', with: 'manuela@madrid.es'
@@ -14,20 +14,20 @@ feature 'Users' do
fill_in 'user_captcha', with: correct_captcha_text fill_in 'user_captcha', with: correct_captcha_text
check 'user_terms_of_service' check 'user_terms_of_service'
click_button 'Sign up' click_button 'Register'
expect(page).to have_content "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account." expect(page).to have_content "You have been sent a message containing a verification link. Please click on this link to activate your account."
sent_token = /.*confirmation_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1] sent_token = /.*confirmation_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1]
visit user_confirmation_path(confirmation_token: sent_token) visit user_confirmation_path(confirmation_token: sent_token)
expect(page).to have_content "Your email address has been successfully confirmed" expect(page).to have_content "Your account has been confirmed."
end end
scenario 'Errors on sign up' do scenario 'Errors on sign up' do
visit '/' visit '/'
click_link 'Sign up' click_link 'Register'
click_button 'Sign up' click_button 'Register'
expect(page).to have_content error_message expect(page).to have_content error_message
end end
@@ -36,12 +36,12 @@ feature 'Users' do
create(:user, email: 'manuela@madrid.es', password: 'judgementday') create(:user, email: 'manuela@madrid.es', password: 'judgementday')
visit '/' visit '/'
click_link 'Log in' click_link 'Sign in'
fill_in 'user_email', with: 'manuela@madrid.es' fill_in 'user_email', with: 'manuela@madrid.es'
fill_in 'user_password', with: 'judgementday' fill_in 'user_password', with: 'judgementday'
click_button 'Log in' click_button 'Enter'
expect(page).to have_content 'Signed in successfully.' expect(page).to have_content 'You have been signed in successfully.'
end end
end end
@@ -70,7 +70,7 @@ feature 'Users' do
OmniAuth.config.add_mock(:twitter, omniauth_twitter_hash) OmniAuth.config.add_mock(:twitter, omniauth_twitter_hash)
visit '/' visit '/'
click_link 'Sign up' click_link 'Register'
expect do expect do
expect do expect do
@@ -105,7 +105,7 @@ feature 'Users' do
OmniAuth.config.add_mock(:twitter, omniauth_twitter_hash) OmniAuth.config.add_mock(:twitter, omniauth_twitter_hash)
visit '/' visit '/'
click_link 'Sign up' click_link 'Register'
expect do expect do
expect do expect do
@@ -122,7 +122,7 @@ feature 'Users' do
expect(user.email).to eq("omniauth@participacion-12345-twitter.com") expect(user.email).to eq("omniauth@participacion-12345-twitter.com")
fill_in 'user_email', with: 'manueladelascarmenas@example.com' fill_in 'user_email', with: 'manueladelascarmenas@example.com'
click_button 'Sign up' click_button 'Register'
sent_token = /.*confirmation_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1] sent_token = /.*confirmation_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1]
visit user_confirmation_path(confirmation_token: sent_token) visit user_confirmation_path(confirmation_token: sent_token)
@@ -145,7 +145,7 @@ feature 'Users' do
OmniAuth.config.add_mock(:twitter, omniauth_twitter_hash) OmniAuth.config.add_mock(:twitter, omniauth_twitter_hash)
visit '/' visit '/'
click_link 'Log in' click_link 'Sign in'
expect do expect do
expect do expect do
@@ -163,22 +163,22 @@ feature 'Users' do
login_as(user) login_as(user)
visit "/" visit "/"
click_link 'Logout' click_link 'Sign out'
expect(page).to have_content 'Signed out successfully.' expect(page).to have_content 'You have been signed out successfully.'
end end
scenario 'Reset password' do scenario 'Reset password' do
create(:user, email: 'manuela@madrid.es') create(:user, email: 'manuela@madrid.es')
visit '/' visit '/'
click_link 'Log in' click_link 'Sign in'
click_link 'Forgot your password?' click_link 'Forgotten your password?'
fill_in 'user_email', with: 'manuela@madrid.es' fill_in 'user_email', with: 'manuela@madrid.es'
click_button 'Send me reset password' click_button 'Send instructions'
expect(page).to have_content "You will receive an email with instructions on how to reset your password in a few minutes." expect(page).to have_content "In a few minutes, you will receive an email containing instructions on resetting your password."
sent_token = /.*reset_password_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1] sent_token = /.*reset_password_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1]
visit edit_user_password_path(reset_password_token: sent_token) visit edit_user_password_path(reset_password_token: sent_token)
@@ -187,6 +187,6 @@ feature 'Users' do
fill_in 'user_password_confirmation', with: 'new password' fill_in 'user_password_confirmation', with: 'new password'
click_button 'Change my password' click_button 'Change my password'
expect(page).to have_content "Your password has been changed successfully. You are now signed in." expect(page).to have_content "Your password has been changed successfully."
end end
end end

View File

@@ -22,15 +22,15 @@ feature 'Verify email' do
click_button "Send code" click_button "Send code"
end end
expect(page).to have_content 'We have send you a confirmation email to your email account: rock@example.com' expect(page).to have_content 'We have sent a confirmation email to your account: rock@example.com'
sent_token = /.*email_verification_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1] sent_token = /.*email_verification_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1]
visit email_path(email_verification_token: sent_token) visit email_path(email_verification_token: sent_token)
expect(page).to have_content "You are now a verified user" expect(page).to have_content "You are a verified user"
expect(page).to_not have_link "Verify my account" expect(page).to_not have_link "Verify my account"
expect(page).to have_content "Verified account" expect(page).to have_content "Account verified"
end end
scenario "Errors on token verification" do scenario "Errors on token verification" do
@@ -39,7 +39,7 @@ feature 'Verify email' do
login_as(user) login_as(user)
visit email_path(email_verification_token: "1234") visit email_path(email_verification_token: "1234")
expect(page).to have_content "Incorrect verification code" expect(page).to have_content "Verification code incorrect"
end end
scenario "Errors on sending confirmation email" do scenario "Errors on sending confirmation email" do
@@ -60,6 +60,6 @@ feature 'Verify email' do
verified_user.destroy verified_user.destroy
click_button "Send code" click_button "Send code"
expect(page).to have_content "There was a problem sending you an email to your account" expect(page).to have_content "There was a problem with sending an email to your account"
end end
end end

View File

@@ -9,9 +9,9 @@ feature 'Verify Letter' do
login_as(user) login_as(user)
visit new_letter_path visit new_letter_path
click_link "Request a letter" click_link "Send me a letter with the code"
expect(page).to have_content "Before voting you'll receive a letter whith the instructions for verify your account." expect(page).to have_content "Thank you for requesting your maximum security code (only required for the final votes). In a few days we will send it to the address featuring in the data we have on file."
user.reload user.reload
@@ -26,7 +26,7 @@ feature 'Verify Letter' do
login_as(user) login_as(user)
visit new_letter_path visit new_letter_path
expect(page).to have_link "Office of Citizen", href: "http://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Atencion-al-ciudadano/Oficinas-de-Atencion-al-Ciudadano?vgnextfmt=default&vgnextchannel=5b99cde2e09a4310VgnVCM1000000b205a0aRCRD" expect(page).to have_link "Citizen Support Offices", href: "http://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Atencion-al-ciudadano/Oficinas-de-Atencion-al-Ciudadano?vgnextfmt=default&vgnextchannel=5b99cde2e09a4310VgnVCM1000000b205a0aRCRD"
end end
scenario "Deny access unless verified residence" do scenario "Deny access unless verified residence" do
@@ -35,7 +35,7 @@ feature 'Verify Letter' do
login_as(user) login_as(user)
visit new_letter_path visit new_letter_path
expect(page).to have_content 'You have not yet confirmed your residence' expect(page).to have_content 'You have not yet confirmed your residency'
expect(current_path).to eq(new_residence_path) expect(current_path).to eq(new_residence_path)
end end
@@ -45,7 +45,7 @@ feature 'Verify Letter' do
login_as(user) login_as(user)
visit new_letter_path visit new_letter_path
expect(page).to have_content 'You have not yet enter the confirmation code' expect(page).to have_content 'You have not yet entered the confirmation code'
expect(current_path).to eq(new_sms_path) expect(current_path).to eq(new_sms_path)
end end
@@ -64,7 +64,7 @@ feature 'Verify Letter' do
fill_in "verification_letter_verification_code", with: user.letter_verification_code fill_in "verification_letter_verification_code", with: user.letter_verification_code
click_button "Verify my account" click_button "Verify my account"
expect(page).to have_content "Your account has been verified" expect(page).to have_content "Code correct. Your account is now verified"
expect(current_path).to eq(account_path) expect(current_path).to eq(account_path)
end end
@@ -81,7 +81,7 @@ feature 'Verify Letter' do
fill_in "verification_letter_verification_code", with: "12345" fill_in "verification_letter_verification_code", with: "12345"
click_button "Verify my account" click_button "Verify my account"
expect(page).to have_content "Your account has been verified" expect(page).to have_content "Account verified"
expect(current_path).to eq(account_path) expect(current_path).to eq(account_path)
end end
@@ -97,7 +97,7 @@ feature 'Verify Letter' do
fill_in "verification_letter_verification_code", with: user.letter_verification_code fill_in "verification_letter_verification_code", with: user.letter_verification_code
click_button "Verify my account" click_button "Verify my account"
expect(page).to have_content "Your account has been verified" expect(page).to have_content "Code correct. Your account is now verified"
expect(current_path).to eq(account_path) expect(current_path).to eq(account_path)
end end
@@ -135,7 +135,7 @@ feature 'Verify Letter' do
click_button "Verify my account" click_button "Verify my account"
end end
expect(page).to have_content "You have reached the maximum number of verification tries. Please try again later." expect(page).to have_content "You have reached the maximum number of attempts. Please try again later."
expect(current_path).to eq(account_path) expect(current_path).to eq(account_path)
end end

View File

@@ -20,16 +20,16 @@ feature 'Level three verification' do
click_button "Send code" click_button "Send code"
end end
expect(page).to have_content 'Phone confirmation' expect(page).to have_content 'Security code confirmation'
user = user.reload user = user.reload
fill_in 'sms_confirmation_code', with: user.sms_confirmation_code fill_in 'sms_confirmation_code', with: user.sms_confirmation_code
click_button 'Send' click_button 'Send'
expect(page).to have_content "Correct code. Your account is verified" expect(page).to have_content "Code correct. Your account is now verified"
expect(page).to_not have_link "Verify my account" expect(page).to_not have_link "Verify my account"
expect(page).to have_content "Verified account" expect(page).to have_content "Account verified"
end end
scenario 'Verification with residency and verified email' do scenario 'Verification with residency and verified email' do
@@ -51,15 +51,15 @@ feature 'Level three verification' do
click_button "Send code" click_button "Send code"
end end
expect(page).to have_content 'We have send you a confirmation email to your email account: rock@example.com' expect(page).to have_content 'We have sent a confirmation email to your account: rock@example.com'
sent_token = /.*email_verification_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1] sent_token = /.*email_verification_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1]
visit email_path(email_verification_token: sent_token) visit email_path(email_verification_token: sent_token)
expect(page).to have_content "You are now a verified user" expect(page).to have_content "You are a verified user"
expect(page).to_not have_link "Verify my account" expect(page).to_not have_link "Verify my account"
expect(page).to have_content "Verified account" expect(page).to have_content "Account verified"
end end
scenario 'Verification with residency and sms and letter' do scenario 'Verification with residency and sms and letter' do
@@ -75,16 +75,16 @@ feature 'Level three verification' do
fill_in 'sms_phone', with: "611111111" fill_in 'sms_phone', with: "611111111"
click_button 'Send' click_button 'Send'
expect(page).to have_content 'Phone confirmation' expect(page).to have_content 'Security code confirmation'
user = user.reload user = user.reload
fill_in 'sms_confirmation_code', with: user.sms_confirmation_code fill_in 'sms_confirmation_code', with: user.sms_confirmation_code
click_button 'Send' click_button 'Send'
expect(page).to have_content 'Correct code' expect(page).to have_content 'Code correct'
click_link "Request a letter" click_link "Send me a letter with the code"
expect(page).to have_content "Before voting you'll receive a letter whith the instructions for verify your account." expect(page).to have_content "Thank you for requesting your maximum security code (only required for the final votes). In a few days we will send it to the address featuring in the data we have on file."
end end
end end

View File

@@ -14,13 +14,13 @@ feature 'Level two verification' do
fill_in 'sms_phone', with: "611111111" fill_in 'sms_phone', with: "611111111"
click_button 'Send' click_button 'Send'
expect(page).to have_content 'Phone confirmation' expect(page).to have_content 'Security code confirmation'
user = user.reload user = user.reload
fill_in 'sms_confirmation_code', with: user.sms_confirmation_code fill_in 'sms_confirmation_code', with: user.sms_confirmation_code
click_button 'Send' click_button 'Send'
expect(page).to have_content 'Correct code' expect(page).to have_content 'Code correct'
end end
end end

View File

@@ -10,7 +10,7 @@ feature 'Residence' do
click_link 'Verify my account' click_link 'Verify my account'
fill_in 'residence_document_number', with: "12345678Z" fill_in 'residence_document_number', with: "12345678Z"
select 'Spanish ID', from: 'residence_document_type' select 'DNI', from: 'residence_document_type'
select_date '31-December-1980', from: 'residence_date_of_birth' select_date '31-December-1980', from: 'residence_date_of_birth'
fill_in 'residence_postal_code', with: '28013' fill_in 'residence_postal_code', with: '28013'
check 'residence_terms_of_service' check 'residence_terms_of_service'
@@ -29,7 +29,7 @@ feature 'Residence' do
click_button 'Verify residence' click_button 'Verify residence'
expect(page).to have_content /\d errors? prevented your residence verification/ expect(page).to have_content /\d errors? prevented the verification of your residence/
end end
scenario 'Error on postal code not in Madrid census' do scenario 'Error on postal code not in Madrid census' do
@@ -40,7 +40,7 @@ feature 'Residence' do
click_link 'Verify my account' click_link 'Verify my account'
fill_in 'residence_document_number', with: "12345678Z" fill_in 'residence_document_number', with: "12345678Z"
select 'Spanish ID', from: 'residence_document_type' select 'DNI', from: 'residence_document_type'
select '1997', from: 'residence_date_of_birth_1i' select '1997', from: 'residence_date_of_birth_1i'
select 'January', from: 'residence_date_of_birth_2i' select 'January', from: 'residence_date_of_birth_2i'
select '1', from: 'residence_date_of_birth_3i' select '1', from: 'residence_date_of_birth_3i'
@@ -49,7 +49,7 @@ feature 'Residence' do
click_button 'Verify residence' click_button 'Verify residence'
expect(page).to have_content 'To verify your account you need to be in the census of the Madrid town.' expect(page).to have_content 'In order to be verified, you must be registered in the municipality of Madrid'
end end
scenario 'Error on Madrid census' do scenario 'Error on Madrid census' do
@@ -60,7 +60,7 @@ feature 'Residence' do
click_link 'Verify my account' click_link 'Verify my account'
fill_in 'residence_document_number', with: "12345678Z" fill_in 'residence_document_number', with: "12345678Z"
select 'Spanish ID', from: 'residence_document_type' select 'DNI', from: 'residence_document_type'
select '1997', from: 'residence_date_of_birth_1i' select '1997', from: 'residence_date_of_birth_1i'
select 'January', from: 'residence_date_of_birth_2i' select 'January', from: 'residence_date_of_birth_2i'
select '1', from: 'residence_date_of_birth_3i' select '1', from: 'residence_date_of_birth_3i'
@@ -69,7 +69,7 @@ feature 'Residence' do
click_button 'Verify residence' click_button 'Verify residence'
expect(page).to have_content 'The census of the city of Madrid could not verify your information' expect(page).to have_content 'The Madrid Census was unable to verify your information'
end end
scenario '5 tries allowed' do scenario '5 tries allowed' do
@@ -81,7 +81,7 @@ feature 'Residence' do
5.times do 5.times do
fill_in 'residence_document_number', with: "12345678Z" fill_in 'residence_document_number', with: "12345678Z"
select 'Spanish ID', from: 'residence_document_type' select 'DNI', from: 'residence_document_type'
select '1997', from: 'residence_date_of_birth_1i' select '1997', from: 'residence_date_of_birth_1i'
select 'January', from: 'residence_date_of_birth_2i' select 'January', from: 'residence_date_of_birth_2i'
select '1', from: 'residence_date_of_birth_3i' select '1', from: 'residence_date_of_birth_3i'
@@ -89,15 +89,15 @@ feature 'Residence' do
check 'residence_terms_of_service' check 'residence_terms_of_service'
click_button 'Verify residence' click_button 'Verify residence'
expect(page).to have_content 'The census of the city of Madrid could not verify your information' expect(page).to have_content 'The Madrid Census was unable to verify your information'
end end
click_button 'Verify residence' click_button 'Verify residence'
expect(page).to have_content "You have reached the maximum number of verification tries. Please try again later." expect(page).to have_content "You have reached the maximum number of attempts. Please try again later."
expect(current_path).to eq(account_path) expect(current_path).to eq(account_path)
visit new_residence_path visit new_residence_path
expect(page).to have_content "You have reached the maximum number of verification tries. Please try again later." expect(page).to have_content "You have reached the maximum number of attempts. Please try again later."
expect(current_path).to eq(account_path) expect(current_path).to eq(account_path)
end end
end end

View File

@@ -11,13 +11,13 @@ feature 'SMS Verification' do
fill_in 'sms_phone', with: "611111111" fill_in 'sms_phone', with: "611111111"
click_button 'Send' click_button 'Send'
expect(page).to have_content 'Phone confirmation' expect(page).to have_content 'Security code confirmation'
user = user.reload user = user.reload
fill_in 'sms_confirmation_code', with: user.sms_confirmation_code fill_in 'sms_confirmation_code', with: user.sms_confirmation_code
click_button 'Send' click_button 'Send'
expect(page).to have_content 'Correct code' expect(page).to have_content 'Code correct'
end end
scenario 'Errors on phone number' do scenario 'Errors on phone number' do
@@ -40,7 +40,7 @@ feature 'SMS Verification' do
fill_in 'sms_phone', with: "611111111" fill_in 'sms_phone', with: "611111111"
click_button 'Send' click_button 'Send'
expect(page).to have_content 'Phone confirmation' expect(page).to have_content 'Security code confirmation'
click_button 'Send' click_button 'Send'
@@ -53,7 +53,7 @@ feature 'SMS Verification' do
visit new_sms_path visit new_sms_path
expect(page).to have_content 'You have not yet confirmed your residence' expect(page).to have_content 'You have not yet confirmed your residency'
expect(current_path).to eq(new_residence_path) expect(current_path).to eq(new_residence_path)
end end
@@ -66,14 +66,14 @@ feature 'SMS Verification' do
5.times do 5.times do
fill_in 'sms_phone', with: "611111111" fill_in 'sms_phone', with: "611111111"
click_button 'Send' click_button 'Send'
click_link 'Request a new code' click_link 'Click here to send it again'
end end
expect(page).to have_content "You have reached the maximum number of verification tries. Please try again later." expect(page).to have_content "You have reached the maximum number of attempts. Please try again later."
expect(current_path).to eq(account_path) expect(current_path).to eq(account_path)
visit new_sms_path visit new_sms_path
expect(page).to have_content "You have reached the maximum number of verification tries. Please try again later." expect(page).to have_content "You have reached the maximum number of attempts. Please try again later."
expect(current_path).to eq(account_path) expect(current_path).to eq(account_path)
end end

View File

@@ -19,7 +19,7 @@ feature 'Verification path' do
visit verification_path visit verification_path
expect(current_path).to eq account_path expect(current_path).to eq account_path
expect(page).to have_content 'You are a verified user!' expect(page).to have_content 'Your account is already verified'
end end
scenario "User requested a letter" do scenario "User requested a letter" do
@@ -95,7 +95,7 @@ feature 'Verification path' do
visit step_path visit step_path
expect(current_path).to eq account_path expect(current_path).to eq account_path
expect(page).to have_content 'You are a verified user!' expect(page).to have_content 'Your account is already verified'
end end
end end
end end

View File

@@ -86,7 +86,7 @@ feature 'Verified users' do
click_button "Send code" click_button "Send code"
end end
expect(page).to have_content 'We have send you a confirmation email to your email account: rock@example.com' expect(page).to have_content 'We have sent a confirmation email to your account: rock@example.com'
expect(current_path).to eq(account_path) expect(current_path).to eq(account_path)
end end
@@ -121,7 +121,7 @@ feature 'Verified users' do
login_as(user) login_as(user)
visit verified_user_path visit verified_user_path
click_link "Use another phone" click_link "Use other phone"
expect(current_path).to eq(new_sms_path) expect(current_path).to eq(new_sms_path)
end end

View File

@@ -177,8 +177,6 @@ feature 'Votes' do
expect(current_path).to eq(debates_path) expect(current_path).to eq(debates_path)
end end
end end
end end
feature 'Proposals' do feature 'Proposals' do
@@ -194,15 +192,15 @@ feature 'Votes' do
within("#proposals") do within("#proposals") do
within("#proposal_#{proposal1.id}_votes") do within("#proposal_#{proposal1.id}_votes") do
expect(page).to have_content "You already supported this proposal, share it!" expect(page).to have_content "You have already supported this proposal. Share it!"
end end
within("#proposal_#{proposal2.id}_votes") do within("#proposal_#{proposal2.id}_votes") do
expect(page).to_not have_content "You already supported this proposal, share it!" expect(page).to_not have_content "You have already supported this proposal. Share it!"
end end
within("#proposal_#{proposal3.id}_votes") do within("#proposal_#{proposal3.id}_votes") do
expect(page).to_not have_content "You already supported this proposal, share it!" expect(page).to_not have_content "You have already supported this proposal. Share it!"
end end
end end
end end
@@ -246,7 +244,7 @@ feature 'Votes' do
find('.in-favor a').click find('.in-favor a').click
expect(page).to have_content "1 support" expect(page).to have_content "1 support"
expect(page).to have_content "You already supported this proposal, share it!" expect(page).to have_content "You have already supported this proposal. Share it!"
end end
end end
@@ -258,7 +256,7 @@ feature 'Votes' do
find('.in-favor a').click find('.in-favor a').click
expect(page).to have_content "1 support" expect(page).to have_content "1 support"
expect(page).to have_content "You already supported this proposal, share it!" expect(page).to have_content "You have already supported this proposal. Share it!"
end end
expect(current_path).to eq(proposals_path) expect(current_path).to eq(proposals_path)
end end
@@ -269,7 +267,7 @@ feature 'Votes' do
within("#proposal_#{@proposal.id}") do within("#proposal_#{@proposal.id}") do
find('.in-favor a').click find('.in-favor a').click
expect(page).to have_content "You already supported this proposal, share it!" expect(page).to have_content "You have already supported this proposal. Share it!"
end end
expect(current_path).to eq(proposals_path) expect(current_path).to eq(proposals_path)
end end
@@ -284,12 +282,6 @@ feature 'Votes' do
find("div.votes").hover find("div.votes").hover
expect_message_you_need_to_sign_in expect_message_you_need_to_sign_in
end end
visit debate_path(debate)
within("#debate_#{debate.id}") do
find("div.votes").hover
expect_message_you_need_to_sign_in
end
end end
scenario 'Not logged user trying to vote proposals', :js do scenario 'Not logged user trying to vote proposals', :js do

View File

@@ -21,9 +21,9 @@ feature "Welcome screen" do
fill_in 'user_email', with: user.email fill_in 'user_email', with: user.email
fill_in 'user_password', with: user.password fill_in 'user_password', with: user.password
click_button 'Log in' click_button 'Enter'
expect(page).to have_content("You are now a verified user") expect(page).to have_content("You are a verified user")
expect(current_path).to eq(account_path) expect(current_path).to eq(account_path)
end end

View File

@@ -4,7 +4,7 @@ describe UserHelper do
describe '#humanize_document_type' do describe '#humanize_document_type' do
it "should return a humanized document type" do it "should return a humanized document type" do
expect(humanize_document_type("1")).to eq "Spanish ID" expect(humanize_document_type("1")).to eq "DNI"
expect(humanize_document_type("2")).to eq "Passport" expect(humanize_document_type("2")).to eq "Passport"
expect(humanize_document_type("3")).to eq "Residence card" expect(humanize_document_type("3")).to eq "Residence card"
end end

View File

@@ -318,35 +318,6 @@ describe Debate do
end end
describe "self.search" do
it "find debates by title" do
debate1 = create(:debate, title: "Karpov vs Kasparov")
create(:debate, title: "Bird vs Magic")
search = Debate.search("Kasparov")
expect(search.size).to eq(1)
expect(search.first).to eq(debate1)
end
it "find debates by description" do
debate1 = create(:debate, description: "...chess masters...")
create(:debate, description: "...basket masters...")
search = Debate.search("chess")
expect(search.size).to eq(1)
expect(search.first).to eq(debate1)
end
it "find debates by title and description" do
create(:debate, title: "Karpov vs Kasparov", description: "...played like Gauss...")
create(:debate, title: "Euler vs Gauss", description: "...math masters...")
search = Debate.search("Gauss")
expect(search.size).to eq(2)
end
it "returns no results if no search term provided" do
expect(Debate.search(" ").size).to eq(0)
end
end
describe "cache" do describe "cache" do
let(:debate) { create(:debate) } let(:debate) { create(:debate) }
@@ -457,4 +428,169 @@ describe Debate do
end end
describe "search" do
context "attributes" do
xit "searches by title" do
debate = create(:debate, title: 'save the world')
results = Debate.search('save the world')
expect(results).to eq([debate])
end
xit "searches by description" do
debate = create(:debate, description: 'in order to save the world one must think about...')
results = Debate.search('one must think')
expect(results).to eq([debate])
end
end
context "stemming" do
xit "searches word stems" do
debate = create(:debate, title: 'limpiar')
results = Debate.search('limpiará')
expect(results).to eq([debate])
results = Debate.search('limpiémos')
expect(results).to eq([debate])
results = Debate.search('limpió')
expect(results).to eq([debate])
end
end
context "accents" do
xit "searches with accents" do
debate = create(:debate, title: 'difusión')
results = Debate.search('difusion')
expect(results).to eq([debate])
debate2 = create(:debate, title: 'estadisticas')
results = Debate.search('estadísticas')
expect(results).to eq([debate2])
end
end
context "case" do
xit "searches case insensite" do
debate = create(:debate, title: 'SHOUT')
results = Debate.search('shout')
expect(results).to eq([debate])
debate2 = create(:debate, title: "scream")
results = Debate.search("SCREAM")
expect(results).to eq([debate2])
end
end
context "typos" do
xit "searches with typos" do
debate = create(:debate, title: 'difusión')
results = Debate.search('difuon')
expect(results).to eq([debate])
debate2 = create(:debate, title: 'desarrollo')
results = Debate.search('desarolo')
expect(results).to eq([debate2])
end
end
context "order" do
xit "orders by weight" do
debate_description = create(:debate, description: 'stop corruption')
debate_title = create(:debate, title: 'stop corruption')
results = Debate.search('stop corruption')
expect(results.first).to eq(debate_title)
expect(results.second).to eq(debate_description)
end
xit "orders by weight and then votes" do
title_some_votes = create(:debate, title: 'stop corruption', cached_votes_up: 5)
title_least_voted = create(:debate, title: 'stop corruption', cached_votes_up: 2)
title_most_voted = create(:debate, title: 'stop corruption', cached_votes_up: 10)
description_most_voted = create(:debate, description: 'stop corruption', cached_votes_up: 10)
results = Debate.search('stop corruption')
expect(results.first).to eq(title_most_voted)
expect(results.second).to eq(description_most_voted)
expect(results.third).to eq(title_some_votes)
expect(results.fourth).to eq(title_least_voted)
end
xit "orders by weight and then votes and then created_at" do
newest = create(:debate, title: 'stop corruption', cached_votes_up: 5, created_at: Time.now)
oldest = create(:debate, title: 'stop corruption', cached_votes_up: 5, created_at: 1.month.ago)
old = create(:debate, title: 'stop corruption', cached_votes_up: 5, created_at: 1.week.ago)
results = Debate.search('stop corruption')
expect(results.first).to eq(newest)
expect(results.second).to eq(old)
expect(results.third).to eq(oldest)
end
end
context "tags" do
xit "searches by tags" do
debate = create(:debate, tag_list: 'Latina')
results = Debate.search('Latina')
expect(results.first).to eq(debate)
end
end
context "no results" do
xit "no words match" do
debate = create(:debate, title: 'save world')
results = Debate.search('destroy planet')
expect(results).to eq([])
end
xit "too many typos" do
debate = create(:debate, title: 'fantastic')
results = Debate.search('frantac')
expect(results).to eq([])
end
xit "too much stemming" do
debate = create(:debate, title: 'reloj')
results = Debate.search('superrelojimetro')
expect(results).to eq([])
end
xit "empty" do
debate = create(:debate, title: 'great')
results = Debate.search('')
expect(results).to eq([])
end
end
end
end end

View File

@@ -38,7 +38,7 @@ describe 'Verification::Letter' do
letter.verification_code = "5555" letter.verification_code = "5555"
expect(letter.valid?).to eq(false) expect(letter.valid?).to eq(false)
expect(letter.errors[:verification_code].first).to eq("Incorrect confirmation code") expect(letter.errors[:verification_code].first).to eq("Verification code incorrect")
end end
it "correct code" do it "correct code" do

View File

@@ -355,4 +355,185 @@ describe Proposal do
end end
end end
describe "search" do
context "attributes" do
it "searches by title" do
proposal = create(:proposal, title: 'save the world')
results = Proposal.search('save the world')
expect(results).to eq([proposal])
end
it "searches by summary" do
proposal = create(:proposal, summary: 'basically...')
results = Proposal.search('basically')
expect(results).to eq([proposal])
end
it "searches by description" do
proposal = create(:proposal, description: 'in order to save the world one must think about...')
results = Proposal.search('one must think')
expect(results).to eq([proposal])
end
it "searches by question" do
proposal = create(:proposal, question: 'to be or not to be')
results = Proposal.search('to be or not to be')
expect(results).to eq([proposal])
end
end
context "stemming" do
it "searches word stems" do
proposal = create(:proposal, summary: 'limpiar')
results = Proposal.search('limpiará')
expect(results).to eq([proposal])
results = Proposal.search('limpiémos')
expect(results).to eq([proposal])
results = Proposal.search('limpió')
expect(results).to eq([proposal])
end
end
context "accents" do
it "searches with accents" do
proposal = create(:proposal, summary: 'difusión')
results = Proposal.search('difusion')
expect(results).to eq([proposal])
proposal2 = create(:proposal, summary: 'estadisticas')
results = Proposal.search('estadísticas')
expect(results).to eq([proposal2])
end
end
context "case" do
it "searches case insensite" do
proposal = create(:proposal, title: 'SHOUT')
results = Proposal.search('shout')
expect(results).to eq([proposal])
proposal2 = create(:proposal, title: "scream")
results = Proposal.search("SCREAM")
expect(results).to eq([proposal2])
end
end
context "typos" do
it "searches with typos" do
proposal = create(:proposal, summary: 'difusión')
results = Proposal.search('difuon')
expect(results).to eq([proposal])
proposal2 = create(:proposal, summary: 'desarrollo')
results = Proposal.search('desarolo')
expect(results).to eq([proposal2])
end
end
context "order" do
it "orders by weight" do
proposal_question = create(:proposal, question: 'stop corruption')
proposal_title = create(:proposal, title: 'stop corruption')
proposal_description = create(:proposal, description: 'stop corruption')
proposal_summary = create(:proposal, summary: 'stop corruption')
results = Proposal.search('stop corruption')
expect(results.first).to eq(proposal_title)
expect(results.second).to eq(proposal_question)
expect(results.third).to eq(proposal_summary)
expect(results.fourth).to eq(proposal_description)
end
it "orders by weight and then votes" do
title_some_votes = create(:proposal, title: 'stop corruption', cached_votes_up: 5)
title_least_voted = create(:proposal, title: 'stop corruption', cached_votes_up: 2)
title_most_voted = create(:proposal, title: 'stop corruption', cached_votes_up: 10)
summary_most_voted = create(:proposal, summary: 'stop corruption', cached_votes_up: 10)
results = Proposal.search('stop corruption')
expect(results.first).to eq(title_most_voted)
expect(results.second).to eq(summary_most_voted)
expect(results.third).to eq(title_some_votes)
expect(results.fourth).to eq(title_least_voted)
end
it "orders by weight and then votes and then created_at" do
newest = create(:proposal, title: 'stop corruption', cached_votes_up: 5, created_at: Time.now)
oldest = create(:proposal, title: 'stop corruption', cached_votes_up: 5, created_at: 1.month.ago)
old = create(:proposal, title: 'stop corruption', cached_votes_up: 5, created_at: 1.week.ago)
results = Proposal.search('stop corruption')
expect(results.first).to eq(newest)
expect(results.second).to eq(old)
expect(results.third).to eq(oldest)
end
end
context "tags" do
it "searches by tags" do
proposal = create(:proposal, tag_list: 'Latina')
results = Proposal.search('Latina')
expect(results.first).to eq(proposal)
end
end
context "no results" do
it "no words match" do
proposal = create(:proposal, title: 'save world')
results = Proposal.search('destroy planet')
expect(results).to eq([])
end
it "too many typos" do
proposal = create(:proposal, title: 'fantastic')
results = Proposal.search('frantac')
expect(results).to eq([])
end
it "too much stemming" do
proposal = create(:proposal, title: 'reloj')
results = Proposal.search('superrelojimetro')
expect(results).to eq([])
end
it "empty" do
proposal = create(:proposal, title: 'great')
results = Proposal.search('')
expect(results).to eq([])
end
end
end
end end

View File

@@ -26,7 +26,7 @@ describe Verification::Residence do
it "should validate user has allowed age" do it "should validate user has allowed age" do
residence = Verification::Residence.new({"date_of_birth(3i)"=>"1", "date_of_birth(2i)"=>"1", "date_of_birth(1i)"=>"#{5.year.ago.year}"}) residence = Verification::Residence.new({"date_of_birth(3i)"=>"1", "date_of_birth(2i)"=>"1", "date_of_birth(1i)"=>"#{5.year.ago.year}"})
expect(residence).to_not be_valid expect(residence).to_not be_valid
expect(residence.errors[:date_of_birth]).to include("You need yo be at least 16 years old") expect(residence.errors[:date_of_birth]).to include("You must be at least 16 years old")
end end
describe "postal code" do describe "postal code" do
@@ -48,7 +48,7 @@ describe Verification::Residence do
residence.postal_code = "13280" residence.postal_code = "13280"
residence.valid? residence.valid?
expect(residence.errors[:postal_code].size).to eq(1) expect(residence.errors[:postal_code].size).to eq(1)
expect(residence.errors[:postal_code]).to include("To verify your account you need to be in the census of the Madrid town.") expect(residence.errors[:postal_code]).to include("In order to be verified, you must be registered in the municipality of Madrid.")
end end
end end

View File

@@ -2,7 +2,8 @@ module CommonActions
def sign_up(email='manuela@madrid.es', password='judgementday') def sign_up(email='manuela@madrid.es', password='judgementday')
visit '/' visit '/'
click_link 'Sign up'
click_link 'Register'
fill_in 'user_username', with: "Manuela Carmena #{rand(99999)}" fill_in 'user_username', with: "Manuela Carmena #{rand(99999)}"
fill_in 'user_email', with: email fill_in 'user_email', with: email
@@ -11,17 +12,17 @@ module CommonActions
fill_in 'user_captcha', with: correct_captcha_text fill_in 'user_captcha', with: correct_captcha_text
check 'user_terms_of_service' check 'user_terms_of_service'
click_button 'Sign up' click_button 'Register'
end end
def login_through_form_as(user) def login_through_form_as(user)
visit root_path visit root_path
click_link 'Log in' click_link 'Sign in'
fill_in 'user_email', with: user.email fill_in 'user_email', with: user.email
fill_in 'user_password', with: user.password fill_in 'user_password', with: user.password
click_button 'Log in' click_button 'Enter'
end end
def login_as_manager def login_as_manager
@@ -47,11 +48,11 @@ module CommonActions
create(:user, email: 'manuela@madrid.es') create(:user, email: 'manuela@madrid.es')
visit '/' visit '/'
click_link 'Log in' click_link 'Sign in'
click_link 'Forgot your password?' click_link 'Forgotten your password?'
fill_in 'user_email', with: 'manuela@madrid.es' fill_in 'user_email', with: 'manuela@madrid.es'
click_button 'Send me reset password' click_button 'Send instructions'
end end
def comment_on(commentable, user = nil) def comment_on(commentable, user = nil)
@@ -107,7 +108,7 @@ module CommonActions
end end
def error_message def error_message
/\d errors? prohibited this (.*) from being saved:/ /\d errors? prevented this (.*) from being saved:/
end end
def expect_to_be_signed_in def expect_to_be_signed_in
@@ -123,7 +124,7 @@ module CommonActions
end end
def verify_residence def verify_residence
select 'Spanish ID', from: 'residence_document_type' select 'DNI', from: 'residence_document_type'
fill_in 'residence_document_number', with: "12345678Z" fill_in 'residence_document_number', with: "12345678Z"
select_date '31-December-1980', from: 'residence_date_of_birth' select_date '31-December-1980', from: 'residence_date_of_birth'
fill_in 'residence_postal_code', with: '28013' fill_in 'residence_postal_code', with: '28013'
@@ -137,27 +138,27 @@ module CommonActions
fill_in 'sms_phone', with: "611111111" fill_in 'sms_phone', with: "611111111"
click_button 'Send' click_button 'Send'
expect(page).to have_content 'Phone confirmation' expect(page).to have_content 'Enter the confirmation code sent to you by text message'
user = User.last.reload user = User.last.reload
fill_in 'sms_confirmation_code', with: user.sms_confirmation_code fill_in 'sms_confirmation_code', with: user.sms_confirmation_code
click_button 'Send' click_button 'Send'
expect(page).to have_content 'Correct code' expect(page).to have_content 'Code correct'
end end
def expect_message_you_need_to_sign_in def expect_message_you_need_to_sign_in
expect(page).to have_content 'You need to sign in or sign up before continuing' expect(page).to have_content 'You must Sign in or Sign up to continue'
expect(page).to have_selector('.in-favor a', visible: false) expect(page).to have_selector('.in-favor a', visible: false)
end end
def expect_message_to_many_anonymous_votes def expect_message_to_many_anonymous_votes
expect(page).to have_content 'Too many anonymous votes, verify your account to vote.' expect(page).to have_content 'Too many anonymous votes to admit vote'
expect(page).to have_selector('.in-favor a', visible: false) expect(page).to have_selector('.in-favor a', visible: false)
end end
def expect_message_only_verified_can_vote_proposals def expect_message_only_verified_can_vote_proposals
expect(page).to have_content 'Proposals can only be voted by verified users, verify your account.' expect(page).to have_content 'Only verified users can vote on proposals'
expect(page).to have_selector('.in-favor a', visible: false) expect(page).to have_selector('.in-favor a', visible: false)
end end