diff --git a/.rubocop.yml b/.rubocop.yml index 58cf10d34..cbb1bd0fb 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -31,6 +31,9 @@ Style/FrozenStringLiteralComment: Style/PercentLiteralDelimiters: Enabled: false +Style/SymbolArray: + Enabled: false + Layout/EmptyLinesAroundClassBody: Enabled: false diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 19e3a59a6..54a3f650f 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -86,14 +86,6 @@ Performance/RedundantMatch: - 'app/controllers/valuation/spending_proposals_controller.rb' - 'app/helpers/embed_videos_helper.rb' -# Offense count: 2 -# Configuration parameters: EnforcedStyle, SupportedStyles. -# SupportedStyles: strict, flexible -Rails/Date: - Exclude: - - 'app/controllers/concerns/commentable_actions.rb' - - 'app/models/direct_message.rb' - # Offense count: 4 # Cop supports --auto-correct. # Configuration parameters: Whitelist. @@ -138,35 +130,6 @@ Rails/OutputSafety: - 'app/helpers/users_helper.rb' - 'app/helpers/valuation_helper.rb' -# Offense count: 6 -# Cop supports --auto-correct. -Rails/PluralizationGrammar: - Exclude: - - 'spec/features/admin/banners_spec.rb' - - 'spec/features/debates_spec.rb' - - 'spec/features/proposals_spec.rb' - - 'spec/models/residence_spec.rb' - -# Offense count: 11 -# Configuration parameters: EnforcedStyle, SupportedStyles. -# SupportedStyles: strict, flexible -Rails/TimeZone: - Exclude: - - 'lib/score_calculator.rb' - - 'spec/controllers/admin/api/stats_controller_spec.rb' - - 'spec/models/ahoy/data_source_spec.rb' - -# Offense count: 7 -# Cop supports --auto-correct. -# Configuration parameters: Include. -# Include: app/models/**/*.rb -Rails/Validation: - Exclude: - - 'app/models/comment.rb' - - 'app/models/spending_proposal.rb' - - 'app/models/verification/residence.rb' - - 'app/models/verification/sms.rb' - # Offense count: 9 Style/AccessorMethodName: Exclude: @@ -202,13 +165,6 @@ Layout/AlignParameters: - 'spec/models/user_spec.rb' - 'spec/rails_helper.rb' -# Offense count: 2 -# Cop supports --auto-correct. -Layout/BlockEndNewline: - Exclude: - - 'app/models/banner.rb' - - 'spec/features/users_auth_spec.rb' - # Offense count: 19 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles. @@ -290,12 +246,6 @@ Layout/EmptyLines: - 'spec/features/verification/verified_user_spec.rb' - 'spec/support/verifiable.rb' -# Offense count: 1 -# Cop supports --auto-correct. -Layout/EmptyLinesAroundAccessModifier: - Exclude: - - 'app/controllers/users_controller.rb' - # Offense count: 29 # Cop supports --auto-correct. # Configuration parameters: AllowForAlignment, ForceEqualSignAlignment. @@ -607,111 +557,6 @@ Style/RescueModifier: - 'app/controllers/concerns/commentable_actions.rb' - 'app/controllers/verification/sms_controller.rb' -# Offense count: 2 -# Cop supports --auto-correct. -Layout/SpaceAfterColon: - Exclude: - - 'spec/models/user_spec.rb' - -# Offense count: 14 -# Cop supports --auto-correct. -Layout/SpaceAfterComma: - Exclude: - - 'app/models/ahoy/data_source.rb' - - 'app/models/banner.rb' - - 'app/models/concerns/search_cache.rb' - - 'app/models/concerns/taggable.rb' - - 'app/models/spending_proposal.rb' - - 'app/models/user.rb' - - 'spec/features/valuation/spending_proposals_spec.rb' - - 'spec/lib/census_api_spec.rb' - - 'spec/models/abilities/moderator_spec.rb' - - 'spec/models/verification/management/email_spec.rb' - -# Offense count: 1 -# Cop supports --auto-correct. -Layout/SpaceAfterNot: - Exclude: - - 'app/models/flag.rb' - -# Offense count: 20 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -# SupportedStyles: space, no_space -Layout/SpaceAroundEqualsInParameterDefault: - Exclude: - - 'app/helpers/cache_keys_helper.rb' - - 'app/helpers/proposals_helper.rb' - - 'app/helpers/spending_proposals_helper.rb' - - 'app/helpers/stats_helper.rb' - - 'app/helpers/tracks_helper.rb' - - 'app/helpers/valuation_helper.rb' - - 'app/mailers/devise_mailer.rb' - - 'app/models/comment.rb' - - 'app/models/tag_cloud.rb' - - 'app/models/verification/residence.rb' - - 'lib/acts_as_paranoid_aliases.rb' - - 'lib/capistrano/template.rb' - - 'lib/census_api.rb' - - 'lib/manager_authenticator.rb' - - 'spec/support/common_actions.rb' - -# Offense count: 66 -# Cop supports --auto-correct. -# Configuration parameters: AllowForAlignment. -Layout/SpaceAroundOperators: - Enabled: false - -# Offense count: 6 -# Cop supports --auto-correct. -Layout/SpaceBeforeComma: - Exclude: - - 'app/models/proposal.rb' - - 'spec/controllers/management/sessions_controller_spec.rb' - - 'spec/controllers/management/users_controller_spec.rb' - -# Offense count: 2 -# Cop supports --auto-correct. -# Configuration parameters: AllowForAlignment. -Layout/SpaceBeforeFirstArg: - Exclude: - - 'spec/factories.rb' - -# Offense count: 9 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -# SupportedStyles: require_no_space, require_space -Layout/SpaceInLambdaLiteral: - Exclude: - - 'app/models/concerns/filterable.rb' - - 'app/models/spending_proposal.rb' - - 'app/models/user.rb' - - 'app/models/verified_user.rb' - -# Offense count: 8 -# Cop supports --auto-correct. -Layout/SpaceInsideParens: - Exclude: - - 'app/models/user.rb' - - 'lib/manager_authenticator.rb' - - 'spec/features/proposals_spec.rb' - - 'spec/models/abilities/moderator_spec.rb' - -# Offense count: 2 -# Cop supports --auto-correct. -Layout/SpaceInsidePercentLiteralDelimiters: - Exclude: - - 'app/models/activity.rb' - -# Offense count: 2 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -# SupportedStyles: single_quotes, double_quotes -Style/StringLiteralsInInterpolation: - Exclude: - - 'app/controllers/stats_controller.rb' - - 'app/models/proposal.rb' - # Offense count: 9 # Cop supports --auto-correct. # Configuration parameters: IgnoredMethods. @@ -724,12 +569,6 @@ Style/SymbolProc: - 'lib/manager_authenticator.rb' - 'spec/factories.rb' -# Offense count: 2 -# Cop supports --auto-correct. -Layout/TrailingWhitespace: - Exclude: - - 'app/controllers/admin/api/stats_controller.rb' - # Offense count: 31 # Cop supports --auto-correct. Style/UnneededInterpolation: @@ -756,9 +595,3 @@ Style/VariableNumber: Style/WordArray: EnforcedStyle: percent MinSize: 3 - -# Offense count: 1 -# Cop supports --auto-correct. -Style/ZeroLengthPredicate: - Exclude: - - 'app/models/concerns/verification.rb' diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..a487eadb4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,38 @@ +### 0.9 - 2017-06-15 + +* New features + * Budgets + * Basic polls + * Collaborative legistlation + * Custom pages + * GraphQL API + * Improved admin section +* Enhancements + * Improved admin section + * Rails 4.2.8 + * Ruby 2.3.2 +* Bug fixes + * CKEditor locale compilation fixed + * Fixed bugs in mobile layouts +* Deprecations + * SpendingProposals are deprecated now in favor of Budgets + +### 0.8 - 2016-07-21 + +* New features + * Support for customization schema, vía specific custom files, assets and folders +* Enhancements + * Rails 2.4.7 + * Ruby 2.3.1 +* Bug fixes + * Fixed bug causing errors on user deletion + +### 0.7 - 2016-04-25 + +* New features + * Debates + * Proposals + * Basic Spending Proposals +* Enhancements + * Rails 2.4.6 + * Ruby 2.2.3 \ No newline at end of file diff --git a/CODE_OF_CONDUCT_EN.md b/CODE_OF_CONDUCT.md similarity index 100% rename from CODE_OF_CONDUCT_EN.md rename to CODE_OF_CONDUCT.md diff --git a/CONTRIBUTING_EN.md b/CONTRIBUTING.md similarity index 83% rename from CONTRIBUTING_EN.md rename to CONTRIBUTING.md index 2c5f6a591..3147d1e4a 100644 --- a/CONTRIBUTING_EN.md +++ b/CONTRIBUTING.md @@ -1,15 +1,16 @@ # How to Contribute to this Project -## Team members +## Core team members -* Raimond Garcia [github](https://github.com/voodoorai2000) | [twitter](https://twitter.com/voodoorai2000) +* Raimond García [github](https://github.com/voodoorai2000) | [twitter](https://twitter.com/voodoorai2000) * Juanjo Bazán [github](https://github.com/xuanxu) | [twitter](https://twitter.com/xuanxu) * Enrique García Cota [github](https://github.com/kikito) | [twitter](https://twitter.com/otikik) -* Alberto Garcia Cabeza [github](https://github.com/decabeza) | [twitter](https://twitter.com/decabeza) +* Alberto García Cabeza [github](https://github.com/decabeza) | [twitter](https://twitter.com/decabeza) +* Alberto Calderón [github](https://github.com/bertocq) | [twitter](https://twitter.com/bertocq) ## Code of conduct -The team members and the project's community adopts an inclusive Code of Conduct that you can read in the [CODE_OF_CONDUCT_EN.md](CODE_OF_CONDUCT_EN.md) file. +The core team members and the project's community adopts an inclusive Code of Conduct that you can read in the [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) file. ## Report an issue diff --git a/CONTRIBUTING_ES.md b/CONTRIBUTING_ES.md index 6be8be9cd..b981bc408 100644 --- a/CONTRIBUTING_ES.md +++ b/CONTRIBUTING_ES.md @@ -2,10 +2,11 @@ ## Miembros del equipo -* Raimond Garcia [github](https://github.com/voodoorai2000) | [twitter](https://twitter.com/voodoorai2000) +* Raimond García [github](https://github.com/voodoorai2000) | [twitter](https://twitter.com/voodoorai2000) * Juanjo Bazán [github](https://github.com/xuanxu) | [twitter](https://twitter.com/xuanxu) * Enrique García Cota [github](https://github.com/kikito) | [twitter](https://twitter.com/otikik) -* Alberto Garcia Cabeza [github](https://github.com/decabeza) | [twitter](https://twitter.com/decabeza) +* Alberto García Cabeza [github](https://github.com/decabeza) | [twitter](https://twitter.com/decabeza) +* Alberto Calderón [github](https://github.com/bertocq) | [twitter](https://twitter.com/bertocq) ## Código de conducta diff --git a/Gemfile b/Gemfile index 86ac55fd3..245ca2a88 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'https://rubygems.org' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' -gem 'rails', '4.2.8' +gem 'rails', '4.2.9' # Use PostgreSQL gem 'pg', '~> 0.20.0' # Use SCSS for stylesheets diff --git a/Gemfile.lock b/Gemfile.lock index 6a9d8a1ce..de9002e3a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,36 +2,36 @@ GEM remote: https://rubygems.org/ remote: https://rails-assets.org/ specs: - actionmailer (4.2.8) - actionpack (= 4.2.8) - actionview (= 4.2.8) - activejob (= 4.2.8) + actionmailer (4.2.9) + actionpack (= 4.2.9) + actionview (= 4.2.9) + activejob (= 4.2.9) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 1.0, >= 1.0.5) - actionpack (4.2.8) - actionview (= 4.2.8) - activesupport (= 4.2.8) + actionpack (4.2.9) + actionview (= 4.2.9) + activesupport (= 4.2.9) rack (~> 1.6) rack-test (~> 0.6.2) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (4.2.8) - activesupport (= 4.2.8) + actionview (4.2.9) + activesupport (= 4.2.9) builder (~> 3.1) erubis (~> 2.7.0) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.3) - activejob (4.2.8) - activesupport (= 4.2.8) + activejob (4.2.9) + activesupport (= 4.2.9) globalid (>= 0.3.0) - activemodel (4.2.8) - activesupport (= 4.2.8) + activemodel (4.2.9) + activesupport (= 4.2.9) builder (~> 3.1) - activerecord (4.2.8) - activemodel (= 4.2.8) - activesupport (= 4.2.8) + activerecord (4.2.9) + activemodel (= 4.2.9) + activesupport (= 4.2.9) arel (~> 6.0) - activesupport (4.2.8) + activesupport (4.2.9) i18n (~> 0.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) @@ -174,8 +174,8 @@ GEM rspec-core (~> 3.0) ruby-progressbar (~> 1.4) geocoder (1.4.3) - globalid (0.3.7) - activesupport (>= 4.1.0) + globalid (0.4.0) + activesupport (>= 4.2.0) graphiql-rails (1.4.1) rails graphql (1.6.3) @@ -188,7 +188,7 @@ GEM htmlentities (4.3.4) httpi (2.4.1) rack - i18n (0.8.1) + i18n (0.8.4) i18n-tasks (0.9.15) activesupport (>= 4.0.2) ast (>= 2.1.0) @@ -248,8 +248,8 @@ GEM mime-types-data (~> 3.2015) mime-types-data (3.2016.0521) mimemagic (0.3.2) - mini_portile2 (2.1.0) - minitest (5.10.1) + mini_portile2 (2.2.0) + minitest (5.10.2) mixlib-cli (1.7.0) mixlib-config (2.2.4) multi_json (1.12.1) @@ -259,8 +259,8 @@ GEM net-ssh (>= 2.6.5) net-ssh (4.1.0) newrelic_rpm (4.1.0.333) - nokogiri (1.7.2) - mini_portile2 (~> 2.1.0) + nokogiri (1.8.0) + mini_portile2 (~> 2.2.0) nori (2.6.0) oauth (0.5.1) oauth2 (1.3.1) @@ -313,23 +313,23 @@ GEM public_suffix (2.0.5) quiet_assets (1.1.0) railties (>= 3.1, < 5.0) - rack (1.6.5) + rack (1.6.8) rack-accept (0.4.5) rack (>= 0.4) rack-attack (5.0.1) rack rack-test (0.6.3) rack (>= 1.0) - rails (4.2.8) - actionmailer (= 4.2.8) - actionpack (= 4.2.8) - actionview (= 4.2.8) - activejob (= 4.2.8) - activemodel (= 4.2.8) - activerecord (= 4.2.8) - activesupport (= 4.2.8) + rails (4.2.9) + actionmailer (= 4.2.9) + actionpack (= 4.2.9) + actionview (= 4.2.9) + activejob (= 4.2.9) + activemodel (= 4.2.9) + activerecord (= 4.2.9) + activesupport (= 4.2.9) bundler (>= 1.3.0, < 2.0) - railties (= 4.2.8) + railties (= 4.2.9) sprockets-rails rails-assets-markdown-it (8.2.1) rails-deprecated_sanitizer (1.0.3) @@ -340,9 +340,9 @@ GEM rails-deprecated_sanitizer (>= 1.0.1) rails-html-sanitizer (1.0.3) loofah (~> 2.0) - railties (4.2.8) - actionpack (= 4.2.8) - activesupport (= 4.2.8) + railties (4.2.9) + actionpack (= 4.2.9) + activesupport (= 4.2.9) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rainbow (2.2.2) @@ -541,7 +541,7 @@ DEPENDENCIES pg_search poltergeist (~> 1.15.0) quiet_assets - rails (= 4.2.8) + rails (= 4.2.9) rails-assets-markdown-it! redcarpet (~> 3.4.0) responders (~> 2.4.0) diff --git a/README.md b/README.md index a9ec82550..380d03031 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Run the app locally: bin/rails s ``` -Prerequisites for testing: install PhantomJS >= 1.9.8 +Prerequisites for testing: install PhantomJS >= 2.1.1 Run the tests with: @@ -65,6 +65,8 @@ If you add SCSS code you can check it with: scss-lint ``` +To maintain accesibility level, if you add new colors use a [Color contrast checker](http://webaim.org/resources/contrastchecker/) (WCAG AA is mandatory, WCAG AAA is recommended) + If you work on Coffeescript code you can check it with [coffeelint](http://www.coffeelint.org/) (install with `npm install -g coffeelint`) : ``` @@ -100,4 +102,4 @@ Code published under AFFERO GPL v3 (see [LICENSE-AGPLv3.txt](LICENSE-AGPLv3.txt) ## Contributions -See [CONTRIBUTING_EN.md](CONTRIBUTING_EN.md) +See [CONTRIBUTING.md](CONTRIBUTING.md) diff --git a/README_ES.md b/README_ES.md index 81a7ba465..9a57b1f18 100644 --- a/README_ES.md +++ b/README_ES.md @@ -51,7 +51,7 @@ Para ejecutar la aplicación en local: bin/rails s ``` -Prerequisitos para los tests: tener instalado PhantomJS >= 1.9.8 +Prerequisitos para los tests: tener instalado PhantomJS >= 2.1.1 Para ejecutar los tests: @@ -65,6 +65,8 @@ Si añades código SCSS puedes revisarlo con: scss-lint ``` +Para mantener el nivel de accesibilidad, si añades colores nuevos utiliza un [Comprobador de contraste de color](http://webaim.org/resources/contrastchecker/) (WCAG AA es obligatorio, WCAG AAA es recomendable) + Si trabajas en código coffeescript puedes revisarlo con [coffeelint](http://www.coffeelint.org/) (instalalo con `npm install -g coffeelint`) : ``` diff --git a/app/assets/stylesheets/layout.scss b/app/assets/stylesheets/layout.scss index 2bca33bf5..9673cdc88 100644 --- a/app/assets/stylesheets/layout.scss +++ b/app/assets/stylesheets/layout.scss @@ -825,23 +825,6 @@ form { margin: $line-height / 2 0 $line-height / 2 $line-height / 4; } - .note, - .note-marked { - display: block; - font-size: rem-calc(13); - margin-bottom: $line-height / 2; - } - - .note-marked { - background: #ff0; - display: inline-block; - - em { - background: #fff; - display: block; - } - } - .ckeditor { min-height: $line-height * 13; } diff --git a/app/assets/stylesheets/participation.scss b/app/assets/stylesheets/participation.scss index a9cde9f55..8af8071ea 100644 --- a/app/assets/stylesheets/participation.scss +++ b/app/assets/stylesheets/participation.scss @@ -494,6 +494,109 @@ } } +.tab-milestones ul { + margin-top: rem-calc(40); + position: relative; + + li { + margin: 0 auto; + position: relative; + width: 0; + } + + li::before { + background: $budget; + border-radius: rem-calc(20); + content: ''; + height: rem-calc(20); + position: absolute; + top: 5px; + transform: translateX(-50%); + width: rem-calc(20); + z-index: 2; + } + + li::after { + background: $light-gray; + bottom: 100%; + content: ''; + height: 100%; + position: absolute; + top: 25px; + width: 1px; + z-index: 1; + } +} + +.tab-milestones ul .milestone-content { + padding: $line-height / 6 $line-height / 2; + position: relative; + + h3 { + margin-bottom: 0; + } + + .milestone-date { + color: $text-medium; + font-size: $small-font-size; + } +} + +.tab-milestones .timeline ul li:nth-child(odd), +.tab-milestones .timeline ul li:nth-child(even) { + + .milestone-content { + + @include breakpoint(medium) { + width: rem-calc(300); + } + + @include breakpoint(large) { + width: rem-calc(450); + } + } +} + +.tab-milestones .timeline ul li:nth-child(odd) { + + .milestone-content { + text-align: right; + + @include breakpoint(medium) { + margin-left: rem-calc(-315); + } + + @include breakpoint(large) { + margin-left: rem-calc(-465); + } + } +} + +.tab-milestones .timeline ul li:nth-child(even) { + + .milestone-content { + left: 15px; + } +} + +.tab-milestones { + @include breakpoint(small only) { + + .timeline ul li { + width: 100%; + + &:nth-child(odd), + &:nth-child(even) { + + .milestone-content { + left: 15px; + text-align: left; + } + } + } + } +} + // 04. List participation // ---------------------- diff --git a/app/controllers/admin/budget_investment_milestones_controller.rb b/app/controllers/admin/budget_investment_milestones_controller.rb new file mode 100644 index 000000000..a4b8acc5d --- /dev/null +++ b/app/controllers/admin/budget_investment_milestones_controller.rb @@ -0,0 +1,55 @@ +class Admin::BudgetInvestmentMilestonesController < Admin::BaseController + + before_action :load_budget_investment, only: [:index, :new, :create, :edit, :update, :destroy] + before_action :load_budget_investment_milestone, only: [:edit, :update, :destroy] + + def index + end + + def new + @milestone = Budget::Investment::Milestone.new + end + + def create + @milestone = Budget::Investment::Milestone.new(milestone_params) + @milestone.investment = @investment + if @milestone.save + redirect_to admin_budget_budget_investment_path(@investment.budget, @investment), notice: t('admin.milestones.create.notice') + else + render :new + end + end + + def edit + end + + def update + if @milestone.update(milestone_params) + redirect_to admin_budget_budget_investment_path(@investment.budget, @investment), notice: t('admin.milestones.update.notice') + else + render :edit + end + end + + def destroy + @milestone.destroy + redirect_to admin_budget_budget_investment_path(@investment.budget, @investment), notice: t('admin.milestones.delete.notice') + end + + private + + def milestone_params + params.require(:budget_investment_milestone) + .permit(:title, :description, :budget_investment_id) + end + + def load_budget_investment + @investment = Budget::Investment.find params[:budget_investment_id] + end + + def load_budget_investment_milestone + @milestone = Budget::Investment::Milestone.find params[:id] + end + + +end diff --git a/app/controllers/admin/budgets_controller.rb b/app/controllers/admin/budgets_controller.rb index 0b373c0bd..b37351028 100644 --- a/app/controllers/admin/budgets_controller.rb +++ b/app/controllers/admin/budgets_controller.rb @@ -14,10 +14,15 @@ class Admin::BudgetsController < Admin::BaseController @budget = Budget.includes(groups: :headings).find(params[:id]) end - def new - end + def new; end - def edit + def edit; end + + def calculate_winners + return unless @budget.balloting_process? + @budget.headings.each { |heading| Budget::Result.new(@budget, heading).calculate_winners } + redirect_to admin_budget_budget_investments_path(budget_id: @budget.id, filter: 'winners'), + notice: I18n.t("admin.budgets.winners.calculated") end def update diff --git a/app/controllers/admin/poll/polls_controller.rb b/app/controllers/admin/poll/polls_controller.rb index eda5736b0..6046ffb48 100644 --- a/app/controllers/admin/poll/polls_controller.rb +++ b/app/controllers/admin/poll/polls_controller.rb @@ -67,6 +67,7 @@ class Admin::Poll::PollsController < Admin::BaseController end private + def load_geozones @geozones = Geozone.all.order(:name) end diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index d1dd1c79c..e36a6a4f0 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -4,7 +4,7 @@ class Admin::UsersController < Admin::BaseController def index if params[:search] s = params[:search] - @users = User.where("username ILIKE ? OR email ILIKE ? OR document_number ILIKE ?", "%#{s}%","%#{s}%","%#{s}%").page(params[:page]) + @users = User.where("username ILIKE ? OR email ILIKE ? OR document_number ILIKE ?", "%#{s}%", "%#{s}%", "%#{s}%").page(params[:page]) else @users = @users.page(params[:page]) end diff --git a/app/controllers/budgets/investments_controller.rb b/app/controllers/budgets/investments_controller.rb index 469b09255..ea782d47c 100644 --- a/app/controllers/budgets/investments_controller.rb +++ b/app/controllers/budgets/investments_controller.rb @@ -93,7 +93,7 @@ module Budgets def set_random_seed if params[:order] == 'random' || params[:order].blank? - params[:random_seed] ||= rand(99)/100.0 + params[:random_seed] ||= rand(99) / 100.0 seed = Float(params[:random_seed]) rescue 0 Budget::Investment.connection.execute("select setseed(#{seed})") else diff --git a/app/controllers/legislation/answers_controller.rb b/app/controllers/legislation/answers_controller.rb index 6d3c33580..36f87de1f 100644 --- a/app/controllers/legislation/answers_controller.rb +++ b/app/controllers/legislation/answers_controller.rb @@ -19,13 +19,14 @@ class Legislation::AnswersController < Legislation::BaseController end else respond_to do |format| - format.js { render json: {} , status: :not_found } + format.js { render json: {}, status: :not_found } format.html { redirect_to legislation_process_question_path(@process, @question), alert: t('legislation.questions.participation.phase_not_open') } end end end private + def answer_params params.require(:legislation_answer).permit( :legislation_question_option_id, diff --git a/app/controllers/management/budgets/investments_controller.rb b/app/controllers/management/budgets/investments_controller.rb index 652d2b9a7..1fdf33911 100644 --- a/app/controllers/management/budgets/investments_controller.rb +++ b/app/controllers/management/budgets/investments_controller.rb @@ -20,7 +20,7 @@ class Management::Budgets::InvestmentsController < Management::BaseController @investment.author = managed_user if @investment.save - notice= t('flash.actions.create.notice', resource_name: Budget::Investment.model_name.human, count: 1) + notice = t('flash.actions.create.notice', resource_name: Budget::Investment.model_name.human, count: 1) redirect_to management_budget_investment_path(@budget, @investment), notice: notice else render :new diff --git a/app/controllers/officing/final_recounts_controller.rb b/app/controllers/officing/final_recounts_controller.rb index e381240e7..8be6e1a91 100644 --- a/app/controllers/officing/final_recounts_controller.rb +++ b/app/controllers/officing/final_recounts_controller.rb @@ -28,6 +28,7 @@ class Officing::FinalRecountsController < Officing::BaseController end private + def load_poll @poll = Poll.expired.find(params[:poll_id]) end diff --git a/app/controllers/officing/recounts_controller.rb b/app/controllers/officing/recounts_controller.rb index 1c66e57fd..9e3989c05 100644 --- a/app/controllers/officing/recounts_controller.rb +++ b/app/controllers/officing/recounts_controller.rb @@ -27,6 +27,7 @@ class Officing::RecountsController < Officing::BaseController end private + def load_poll @poll = Poll.find(params[:poll_id]) end diff --git a/app/controllers/stats_controller.rb b/app/controllers/stats_controller.rb index ab6bedd6e..cd2efac6b 100644 --- a/app/controllers/stats_controller.rb +++ b/app/controllers/stats_controller.rb @@ -23,6 +23,6 @@ class StatsController < ApplicationController private def daily_cache(key, &block) - Rails.cache.fetch("public_stats/#{Time.current.strftime("%Y-%m-%d")}/#{key}", &block) + Rails.cache.fetch("public_stats/#{Time.current.strftime('%Y-%m-%d')}/#{key}", &block) end end diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index cbe43390b..ef1ef31de 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -30,7 +30,7 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController identity = Identity.first_or_create_from_oauth(auth) @user = current_user || identity.user || User.first_or_initialize_for_oauth(auth) - if save_user(@user) + if save_user identity.update(user: @user) sign_in_and_redirect @user, event: :authentication set_flash_message(:notice, :success, kind: "#{provider}".capitalize) if is_navigational_format? @@ -40,8 +40,8 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController end end - def save_user(user) + def save_user @user.save || @user.save_requiring_finish_signup end -end \ No newline at end of file +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 9bd98aedd..07ff645e6 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -10,6 +10,7 @@ class UsersController < ApplicationController end private + def set_activity_counts @activity_counts = HashWithIndifferentAccess.new( proposals: Proposal.where(author_id: @user.id).count, diff --git a/app/helpers/ballots_helper.rb b/app/helpers/ballots_helper.rb index ece1be9fa..8bdc5f231 100644 --- a/app/helpers/ballots_helper.rb +++ b/app/helpers/ballots_helper.rb @@ -1,7 +1,7 @@ module BallotsHelper def progress_bar_width(amount_available, amount_spent) - (amount_spent/amount_available.to_f * 100).to_s + "%" + (amount_spent / amount_available.to_f * 100).to_s + "%" end end \ No newline at end of file diff --git a/app/helpers/cache_keys_helper.rb b/app/helpers/cache_keys_helper.rb index 566b3cd81..75fc4a0ea 100644 --- a/app/helpers/cache_keys_helper.rb +++ b/app/helpers/cache_keys_helper.rb @@ -1,11 +1,11 @@ module CacheKeysHelper - def locale_and_user_status(authorable=nil) + def locale_and_user_status(authorable = nil) @cache_key_user ||= calculate_user_status(authorable) "#{I18n.locale}/#{@cache_key_user}" end - def calculate_user_status(authorable=nil) + def calculate_user_status(authorable = nil) user_status = "user" if user_signed_in? diff --git a/app/helpers/embed_videos_helper.rb b/app/helpers/embed_videos_helper.rb index cb077ef36..1034a7a59 100644 --- a/app/helpers/embed_videos_helper.rb +++ b/app/helpers/embed_videos_helper.rb @@ -11,7 +11,7 @@ module EmbedVideosHelper if server == "Vimeo" reg_exp = /vimeo.*(staffpicks\/|channels\/|videos\/|video\/|\/)([^#\&\?]*).*/ - src = "https://player.vimeo.com/video/" + src = "https://player.vimeo.com/video/" elsif server == "YouTube" reg_exp = /youtu.*(be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/ src = "https://www.youtube.com/embed/" diff --git a/app/helpers/officing_helper.rb b/app/helpers/officing_helper.rb index f5bdb26ea..8ee97cf52 100644 --- a/app/helpers/officing_helper.rb +++ b/app/helpers/officing_helper.rb @@ -13,7 +13,7 @@ module OfficingHelper officer_assignments.each do |oa| options << [oa.booth_assignment.booth.name.to_s, oa.id] end - options.sort! {|x, y| x[0]<=>y[0]} + options.sort! {|x, y| x[0] <=> y[0]} options_for_select(options, params[:oa]) end diff --git a/app/helpers/poll_recounts_helper.rb b/app/helpers/poll_recounts_helper.rb index c47402163..60e3da6d7 100644 --- a/app/helpers/poll_recounts_helper.rb +++ b/app/helpers/poll_recounts_helper.rb @@ -9,7 +9,7 @@ module PollRecountsHelper end def booth_assignment_sum_final_recounts(ba) - ba.final_recounts.any? ? ba.final_recounts.to_a.sum(&:count) :nil + ba.final_recounts.any? ? ba.final_recounts.to_a.sum(&:count) : nil end end \ No newline at end of file diff --git a/app/helpers/proposals_helper.rb b/app/helpers/proposals_helper.rb index 578cd1d8e..37425d573 100644 --- a/app/helpers/proposals_helper.rb +++ b/app/helpers/proposals_helper.rb @@ -18,7 +18,7 @@ module ProposalsHelper end end - def namespaced_proposal_path(proposal, options={}) + def namespaced_proposal_path(proposal, options = {}) @namespace_proposal_path ||= namespace case @namespace_proposal_path when "management" diff --git a/app/helpers/spending_proposals_helper.rb b/app/helpers/spending_proposals_helper.rb index 26026952f..81d16e5fd 100644 --- a/app/helpers/spending_proposals_helper.rb +++ b/app/helpers/spending_proposals_helper.rb @@ -4,7 +4,7 @@ module SpendingProposalsHelper ActsAsTaggableOn::Tag.spending_proposal_tags.pluck(:name) end - def namespaced_spending_proposal_path(spending_proposal, options={}) + def namespaced_spending_proposal_path(spending_proposal, options = {}) @namespace_spending_proposal_path ||= namespace case @namespace_spending_proposal_path when "management" diff --git a/app/helpers/stats_helper.rb b/app/helpers/stats_helper.rb index d8eff0ac2..19b54a5a2 100644 --- a/app/helpers/stats_helper.rb +++ b/app/helpers/stats_helper.rb @@ -1,27 +1,27 @@ module StatsHelper - def events_chart_tag(events, opt={}) + def events_chart_tag(events, opt = {}) events = events.join(',') if events.is_a? Array opt[:data] ||= {} opt[:data][:graph] = admin_api_stats_path(events: events) content_tag :div, "", opt end - def visits_chart_tag(opt={}) + def visits_chart_tag(opt = {}) events = events.join(',') if events.is_a? Array opt[:data] ||= {} opt[:data][:graph] = admin_api_stats_path(visits: true) content_tag :div, "", opt end - def spending_proposals_chart_tag(opt={}) + def spending_proposals_chart_tag(opt = {}) events = events.join(',') if events.is_a? Array opt[:data] ||= {} opt[:data][:graph] = admin_api_stats_path(spending_proposals: true) content_tag :div, "", opt end - def budget_investments_chart_tag(opt={}) + def budget_investments_chart_tag(opt = {}) events = events.join(',') if events.is_a? Array opt[:data] ||= {} opt[:data][:graph] = admin_api_stats_path(budget_investments: true) diff --git a/app/helpers/tracks_helper.rb b/app/helpers/tracks_helper.rb index 557d71802..0d6793e08 100644 --- a/app/helpers/tracks_helper.rb +++ b/app/helpers/tracks_helper.rb @@ -1,6 +1,6 @@ module TracksHelper - def track_event(data={}) + def track_event(data = {}) track_data = "" prefix = " data-track-event-" data.each do |key, value| diff --git a/app/helpers/valuation_helper.rb b/app/helpers/valuation_helper.rb index ded5fa0ed..4913b3d00 100644 --- a/app/helpers/valuation_helper.rb +++ b/app/helpers/valuation_helper.rb @@ -1,6 +1,6 @@ module ValuationHelper - def valuator_select_options(valuator=nil) + def valuator_select_options(valuator = nil) if valuator.present? Valuator.where.not(id: valuator.id).order("description ASC").order("users.email ASC").includes(:user).collect { |v| [ v.description_or_email, v.id ] }.prepend([valuator.description_or_email, valuator.id]) else diff --git a/app/helpers/verification_helper.rb b/app/helpers/verification_helper.rb index 62be1a5a8..44f921264 100644 --- a/app/helpers/verification_helper.rb +++ b/app/helpers/verification_helper.rb @@ -18,7 +18,7 @@ module VerificationHelper data_to_mask = match[2] email_provider = match[3] - data_to_display + "*"*data_to_mask.size + "@" + email_provider + data_to_display + "*" * data_to_mask.size + "@" + email_provider end end diff --git a/app/mailers/devise_mailer.rb b/app/mailers/devise_mailer.rb index 6c053cb52..a914477fe 100644 --- a/app/mailers/devise_mailer.rb +++ b/app/mailers/devise_mailer.rb @@ -5,7 +5,7 @@ class DeviseMailer < Devise::Mailer protected - def devise_mail(record, action, opts={}) + def devise_mail(record, action, opts = {}) I18n.with_locale record.locale do super(record, action, opts) end diff --git a/app/models/abilities/administrator.rb b/app/models/abilities/administrator.rb index 1aba9dd7c..9d779299d 100644 --- a/app/models/abilities/administrator.rb +++ b/app/models/abilities/administrator.rb @@ -44,7 +44,7 @@ module Abilities can [:read, :update, :valuate, :destroy, :summary], SpendingProposal - can [:index, :read, :new, :create, :update, :destroy], Budget + can [:index, :read, :new, :create, :update, :destroy, :calculate_winners], Budget can [:read, :create, :update, :destroy], Budget::Group can [:read, :create, :update, :destroy], Budget::Heading can [:hide, :update, :toggle_selection], Budget::Investment diff --git a/app/models/activity.rb b/app/models/activity.rb index 0fc35ad11..58a91cd18 100644 --- a/app/models/activity.rb +++ b/app/models/activity.rb @@ -2,7 +2,7 @@ class Activity < ActiveRecord::Base belongs_to :actionable, -> { with_hidden }, polymorphic: true belongs_to :user, -> { with_hidden } - VALID_ACTIONS = %w( hide block restore valuate ) + VALID_ACTIONS = %w(hide block restore valuate) validates :action, inclusion: {in: VALID_ACTIONS} diff --git a/app/models/ahoy/data_source.rb b/app/models/ahoy/data_source.rb index 2d52063bb..5c69af755 100644 --- a/app/models/ahoy/data_source.rb +++ b/app/models/ahoy/data_source.rb @@ -10,7 +10,7 @@ module Ahoy # chart def add(name, collection) collections.push data: collection, name: name - collection.each{ |k,v| add_key k } + collection.each{ |k, v| add_key k } end def build diff --git a/app/models/banner.rb b/app/models/banner.rb index c4f2295e6..2764785d1 100644 --- a/app/models/banner.rb +++ b/app/models/banner.rb @@ -12,9 +12,8 @@ class Banner < ActiveRecord::Base validates :post_started_at, presence: true validates :post_ended_at, presence: true - scope :with_active, -> {where("post_started_at <= ?", Time.current). - where("post_ended_at >= ?", Time.current) } + scope :with_active, -> { where("post_started_at <= ?", Time.current).where("post_ended_at >= ?", Time.current) } - scope :with_inactive,-> {where("post_started_at > ? or post_ended_at < ?", Time.current, Time.current) } + scope :with_inactive, -> { where("post_started_at > ? or post_ended_at < ?", Time.current, Time.current) } end diff --git a/app/models/budget.rb b/app/models/budget.rb index a5932921c..bc7231f29 100644 --- a/app/models/budget.rb +++ b/app/models/budget.rb @@ -67,8 +67,12 @@ class Budget < ActiveRecord::Base phase == "finished" end + def balloting_process? + balloting? || reviewing_ballots? + end + def balloting_or_later? - balloting? || reviewing_ballots? || finished? + balloting_process? || finished? end def on_hold? diff --git a/app/models/budget/investment.rb b/app/models/budget/investment.rb index b3b51996c..7ba0548e2 100644 --- a/app/models/budget/investment.rb +++ b/app/models/budget/investment.rb @@ -20,13 +20,14 @@ class Budget has_many :valuator_assignments, dependent: :destroy has_many :valuators, through: :valuator_assignments has_many :comments, as: :commentable + has_many :milestones validates :title, presence: true validates :author, presence: true validates :description, presence: true validates :heading_id, presence: true - validates_presence_of :unfeasibility_explanation, if: :unfeasibility_explanation_required? - validates_presence_of :price, if: :price_required? + validates :unfeasibility_explanation, presence: { if: :unfeasibility_explanation_required? } + validates :price, presence: { if: :price_required? } validates :title, length: { in: 4..Budget::Investment.title_max_length } validates :description, length: { maximum: Budget::Investment.description_max_length } @@ -204,8 +205,8 @@ class Budget end def should_show_aside? - (budget.selecting? && !unfeasible?) || - (budget.balloting? && feasible?) || + (budget.selecting? && !unfeasible?) || + (budget.balloting? && feasible?) || (budget.valuating? && !unfeasible?) end diff --git a/app/models/budget/investment/milestone.rb b/app/models/budget/investment/milestone.rb new file mode 100644 index 000000000..9ecbe4dc3 --- /dev/null +++ b/app/models/budget/investment/milestone.rb @@ -0,0 +1,14 @@ +class Budget + class Investment + class Milestone < ActiveRecord::Base + belongs_to :investment + + validates :title, presence: true + validates :investment, presence: true + + def self.title_max_length + 80 + end + end + end +end diff --git a/app/models/budget/result.rb b/app/models/budget/result.rb index f29bc72cc..f835bce0c 100644 --- a/app/models/budget/result.rb +++ b/app/models/budget/result.rb @@ -12,11 +12,10 @@ class Budget reset_winners investments.each do |investment| @current_investment = investment - if inside_budget? - set_winner - end + set_winner if inside_budget? end end + handle_asynchronously :calculate_winners def investments heading.investments.selected.sort_by_ballots @@ -52,4 +51,4 @@ class Budget end end -end \ No newline at end of file +end diff --git a/app/models/comment.rb b/app/models/comment.rb index ffa02d09c..5c7f4dd4e 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -13,7 +13,7 @@ class Comment < ActiveRecord::Base validates :body, presence: true validates :user, presence: true - validates_inclusion_of :commentable_type, in: ["Debate", "Proposal", "Budget::Investment", "Poll::Question", "Legislation::Question", "Legislation::Annotation"] + validates :commentable_type, inclusion: { in: ["Debate", "Proposal", "Budget::Investment", "Poll::Question", "Legislation::Question", "Legislation::Annotation"] } validate :validate_body_length @@ -44,7 +44,7 @@ class Comment < ActiveRecord::Base after_create :call_after_commented - def self.build(commentable, user, body, p_id=nil) + def self.build(commentable, user, body, p_id = nil) new commentable: commentable, user_id: user.id, body: body, @@ -64,7 +64,7 @@ class Comment < ActiveRecord::Base end def author=(author) - self.user= author + self.user = author end def total_votes diff --git a/app/models/concerns/conflictable.rb b/app/models/concerns/conflictable.rb index a1926aa36..b362ef1d1 100644 --- a/app/models/concerns/conflictable.rb +++ b/app/models/concerns/conflictable.rb @@ -3,7 +3,7 @@ module Conflictable def conflictive? return false unless flags_count > 0 && cached_votes_up > 0 - cached_votes_up/flags_count.to_f < 5 + cached_votes_up / flags_count.to_f < 5 end end diff --git a/app/models/concerns/filterable.rb b/app/models/concerns/filterable.rb index 68e844782..c5402d9b2 100644 --- a/app/models/concerns/filterable.rb +++ b/app/models/concerns/filterable.rb @@ -2,8 +2,8 @@ module Filterable extend ActiveSupport::Concern included do - scope :by_official_level, -> (official_level) { where(users: { official_level: official_level }).joins(:author) } - scope :by_date_range, -> (date_range) { where(created_at: date_range) } + scope :by_official_level, ->(official_level) { where(users: { official_level: official_level }).joins(:author) } + scope :by_date_range, ->(date_range) { where(created_at: date_range) } end class_methods do diff --git a/app/models/concerns/search_cache.rb b/app/models/concerns/search_cache.rb index a5b7acb5f..cf4d04f16 100644 --- a/app/models/concerns/search_cache.rb +++ b/app/models/concerns/search_cache.rb @@ -14,7 +14,7 @@ module SearchCache def searchable_values_sql searchable_values - .select{ |k,_| k.present? } + .select{ |k, _| k.present? } .collect{ |value, weight| set_tsvector(value, weight) } .join(" || ") end diff --git a/app/models/concerns/taggable.rb b/app/models/concerns/taggable.rb index 9126e271a..57a30414d 100644 --- a/app/models/concerns/taggable.rb +++ b/app/models/concerns/taggable.rb @@ -9,7 +9,7 @@ module Taggable def tag_list_with_limit(limit = nil) return tags if limit.blank? - tags.sort{|a,b| b.taggings_count <=> a.taggings_count}[0, limit] + tags.sort{|a, b| b.taggings_count <=> a.taggings_count}[0, limit] end def tags_count_out_of_limit(limit = nil) diff --git a/app/models/concerns/verification.rb b/app/models/concerns/verification.rb index 4eb933204..88458a03d 100644 --- a/app/models/concerns/verification.rb +++ b/app/models/concerns/verification.rb @@ -47,7 +47,7 @@ module Verification end def failed_residence_verification? - !residence_verified? && failed_census_calls.size > 0 + !residence_verified? && !failed_census_calls.empty? end def no_phone_available? diff --git a/app/models/flag.rb b/app/models/flag.rb index 735ef89e9..824175b07 100644 --- a/app/models/flag.rb +++ b/app/models/flag.rb @@ -23,7 +23,7 @@ class Flag < ActiveRecord::Base def self.flagged?(user, flaggable) return false unless user - !! by_user_and_flaggable(user, flaggable).try(:first) + !!by_user_and_flaggable(user, flaggable).try(:first) end end diff --git a/app/models/geozone.rb b/app/models/geozone.rb index ad0fe9cd5..a52ab5d15 100644 --- a/app/models/geozone.rb +++ b/app/models/geozone.rb @@ -1,7 +1,7 @@ class Geozone < ActiveRecord::Base include Graphqlable - + has_many :proposals has_many :spending_proposals has_many :debates diff --git a/app/models/legislation/annotation.rb b/app/models/legislation/annotation.rb index 92fa9dd86..f2d419200 100644 --- a/app/models/legislation/annotation.rb +++ b/app/models/legislation/annotation.rb @@ -35,7 +35,7 @@ class Legislation::Annotation < ActiveRecord::Base selector_end = "/html/body/#{range_end}" el_end = doc.at_xpath(selector_end) - remainder_el_start = el_start.text[0 .. range_start_offset-1] unless range_start_offset.zero? + remainder_el_start = el_start.text[0 .. range_start_offset - 1] unless range_start_offset.zero? remainder_el_end = el_end.text[range_end_offset .. -1] self.context = "#{remainder_el_start}#{quote}#{remainder_el_end}" diff --git a/app/models/officing/residence.rb b/app/models/officing/residence.rb index 92333cc80..63250d041 100644 --- a/app/models/officing/residence.rb +++ b/app/models/officing/residence.rb @@ -6,14 +6,14 @@ class Officing::Residence before_validation :call_census_api - validates_presence_of :document_number - validates_presence_of :document_type - validates_presence_of :year_of_birth + validates :document_number, presence: true + validates :document_type, presence: true + validates :year_of_birth, presence: true validate :allowed_age validate :residence_in_madrid - def initialize(attrs={}) + def initialize(attrs = {}) super clean_document_number end diff --git a/app/models/organization.rb b/app/models/organization.rb index 94ef986a1..f3f8956d5 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -1,7 +1,7 @@ class Organization < ActiveRecord::Base include Graphqlable - + belongs_to :user, touch: true validates :name, presence: true diff --git a/app/models/proposal.rb b/app/models/proposal.rb index f37dff3d5..926cbe1ee 100644 --- a/app/models/proposal.rb +++ b/app/models/proposal.rb @@ -39,7 +39,7 @@ class Proposal < ActiveRecord::Base before_save :calculate_hot_score, :calculate_confidence_score scope :for_render, -> { includes(:tags) } - scope :sort_by_hot_score , -> { reorder(hot_score: :desc) } + scope :sort_by_hot_score, -> { reorder(hot_score: :desc) } scope :sort_by_confidence_score, -> { reorder(confidence_score: :desc) } scope :sort_by_created_at, -> { reorder(created_at: :desc) } scope :sort_by_most_commented, -> { reorder(comments_count: :desc) } @@ -128,7 +128,7 @@ class Proposal < ActiveRecord::Base end def code - "#{Setting["proposal_code_prefix"]}-#{created_at.strftime('%Y-%m')}-#{id}" + "#{Setting['proposal_code_prefix']}-#{created_at.strftime('%Y-%m')}-#{id}" end def after_commented diff --git a/app/models/spending_proposal.rb b/app/models/spending_proposal.rb index 223e9adfe..b08d7533a 100644 --- a/app/models/spending_proposal.rb +++ b/app/models/spending_proposal.rb @@ -15,7 +15,7 @@ class SpendingProposal < ActiveRecord::Base validates :title, presence: true validates :author, presence: true validates :description, presence: true - validates_presence_of :feasible_explanation, if: :feasible_explanation_required? + validates :feasible_explanation, presence: { if: :feasible_explanation_required? } validates :title, length: { in: 4..SpendingProposal.title_max_length } validates :description, length: { maximum: SpendingProposal.description_max_length } @@ -31,9 +31,9 @@ class SpendingProposal < ActiveRecord::Base scope :not_unfeasible, -> { where("feasible IS ? OR feasible = ?", nil, true) } scope :with_supports, -> { where('cached_votes_up > 0') } - scope :by_admin, -> (admin) { where(administrator_id: admin.presence) } - scope :by_tag, -> (tag_name) { tagged_with(tag_name) } - scope :by_valuator, -> (valuator) { where("valuation_assignments.valuator_id = ?", valuator.presence).joins(:valuation_assignments) } + scope :by_admin, ->(admin) { where(administrator_id: admin.presence) } + scope :by_tag, ->(tag_name) { tagged_with(tag_name) } + scope :by_valuator, ->(valuator) { where("valuation_assignments.valuator_id = ?", valuator.presence).joins(:valuation_assignments) } scope :for_render, -> { includes(:geozone) } @@ -44,7 +44,7 @@ class SpendingProposal < ActiveRecord::Base end def self.filter_params(params) - params.select{|x,_| %w{geozone_id administrator_id tag_name valuator_id}.include? x.to_s } + params.select{|x, _| %w{geozone_id administrator_id tag_name valuator_id}.include? x.to_s } end def self.scoped_filter(params, current_filter) diff --git a/app/models/tag_cloud.rb b/app/models/tag_cloud.rb index 107ecbf1a..b0882af82 100644 --- a/app/models/tag_cloud.rb +++ b/app/models/tag_cloud.rb @@ -2,7 +2,7 @@ class TagCloud attr_accessor :resource_model, :scope - def initialize(resource_model, scope=nil) + def initialize(resource_model, scope = nil) @resource_model = resource_model @scope = scope end diff --git a/app/models/user.rb b/app/models/user.rb index 219671349..9df08c014 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -56,7 +56,7 @@ class User < ActiveRecord::Base scope :officials, -> { where("official_level > 0") } scope :newsletter, -> { where(newsletter: true) } scope :for_render, -> { includes(:organization) } - scope :by_document, -> (document_type, document_number) { where(document_type: document_type, document_number: document_number) } + scope :by_document, ->(document_type, document_number) { where(document_type: document_type, document_number: document_number) } scope :email_digest, -> { where(email_digest: true) } scope :active, -> { where(erased_at: nil) } scope :erased, -> { where.not(erased_at: nil) } @@ -74,7 +74,7 @@ class User < ActiveRecord::Base username: auth.info.name || auth.uid, email: oauth_email, oauth_email: oauth_email, - password: Devise.friendly_token[0,20], + password: Devise.friendly_token[0, 20], terms_of_service: '1', confirmed_at: oauth_email_confirmed ? DateTime.current : nil ) @@ -156,7 +156,7 @@ class User < ActiveRecord::Base def has_official_email? domain = Setting['email_domain_for_officials'] - email.present? && ( (email.end_with? "@#{domain}") || (email.end_with? ".#{domain}") ) + email.present? && ((email.end_with? "@#{domain}") || (email.end_with? ".#{domain}")) end def display_official_position_badge? diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index bafff129b..00f729d2c 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -7,17 +7,17 @@ class Verification::Residence before_validation :call_census_api - validates_presence_of :document_number - validates_presence_of :document_type - validates_presence_of :date_of_birth - validates_presence_of :postal_code + validates :document_number, presence: true + validates :document_type, presence: true + validates :date_of_birth, presence: true + validates :postal_code, presence: true validates :terms_of_service, acceptance: { allow_nil: false } validates :postal_code, length: { is: 5 } validate :allowed_age validate :document_number_uniqueness - def initialize(attrs={}) + def initialize(attrs = {}) self.date_of_birth = parse_date('date_of_birth', attrs) attrs = remove_date('date_of_birth', attrs) super diff --git a/app/models/verification/sms.rb b/app/models/verification/sms.rb index 1a013f1d8..7c1a1bfa6 100644 --- a/app/models/verification/sms.rb +++ b/app/models/verification/sms.rb @@ -3,7 +3,7 @@ class Verification::Sms attr_accessor :user, :phone, :confirmation_code - validates_presence_of :phone + validates :phone, presence: true validates :phone, format: { with: /\A[\d \+]+\z/ } validate :uniqness_phone diff --git a/app/models/verified_user.rb b/app/models/verified_user.rb index b0c5afd0c..6b0ddb822 100644 --- a/app/models/verified_user.rb +++ b/app/models/verified_user.rb @@ -1,8 +1,8 @@ class VerifiedUser < ActiveRecord::Base - scope :by_user, -> (user) { where(document_number: user.document_number) } + scope :by_user, ->(user) { where(document_number: user.document_number) } - scope :by_email, -> (email) { where(email: email) } - scope :by_phone, -> (phone) { where(phone: phone) } + scope :by_email, ->(email) { where(email: email) } + scope :by_phone, ->(phone) { where(phone: phone) } def self.phone?(user) by_user(user).by_phone(user.unconfirmed_phone).first.present? diff --git a/app/views/admin/budget_investment_milestones/_form.html.erb b/app/views/admin/budget_investment_milestones/_form.html.erb new file mode 100644 index 000000000..95237c2ca --- /dev/null +++ b/app/views/admin/budget_investment_milestones/_form.html.erb @@ -0,0 +1,7 @@ +<%= form_for [:admin, @investment.budget, @investment, @milestone] do |f| %> + + <%= f.text_field :title, maxlength: Budget::Investment::Milestone.title_max_length %> + <%= f.text_area :description, rows: 5 %> + + <%= f.submit nil, class: "button success" %> +<% end %> diff --git a/app/views/admin/budget_investment_milestones/edit.html.erb b/app/views/admin/budget_investment_milestones/edit.html.erb new file mode 100644 index 000000000..c72cd840a --- /dev/null +++ b/app/views/admin/budget_investment_milestones/edit.html.erb @@ -0,0 +1,5 @@ +<%= back_link_to admin_budget_budget_investment_path(@investment.budget, @investment) %> + +

<%= t("admin.milestones.edit.title") %>

+ +<%= render '/admin/budget_investment_milestones/form' %> diff --git a/app/views/admin/budget_investment_milestones/new.html.erb b/app/views/admin/budget_investment_milestones/new.html.erb new file mode 100644 index 000000000..7e065a605 --- /dev/null +++ b/app/views/admin/budget_investment_milestones/new.html.erb @@ -0,0 +1,10 @@ +
+ +
+ <%= back_link_to admin_budget_budget_investment_path(@investment.budget, @investment) %> + +

<%= t("admin.milestones.new.creating") %>

+ + <%= render "form" %> +
+
diff --git a/app/views/admin/budget_investments/_milestones.html.erb b/app/views/admin/budget_investments/_milestones.html.erb new file mode 100644 index 000000000..4338dabfd --- /dev/null +++ b/app/views/admin/budget_investments/_milestones.html.erb @@ -0,0 +1,36 @@ +<% if @investment.milestones.any? %> + + + + + + + + + + + <% @investment.milestones.each do |milestone| %> + + + + + + + <% end %> + +
<%= t("admin.milestones.index.table_id") %><%= t("admin.milestones.index.table_title") %><%= t("admin.milestones.index.table_description") %><%= t("admin.milestones.index.table_actions") %>
+ <%= milestone.id %> + + <%= link_to milestone.title, edit_admin_budget_budget_investment_budget_investment_milestone_path(@investment.budget, @investment, milestone) %> + + <%= milestone.description %> + + <%= link_to t("admin.milestones.index.delete"), admin_budget_budget_investment_budget_investment_milestone_path(@investment.budget, @investment, milestone), + method: :delete, + class: 'button hollow alert expanded' %> +
+<% else %> +

+ <%= t('admin.milestones.index.no_milestones') %> +

+<% end %> diff --git a/app/views/admin/budget_investments/show.html.erb b/app/views/admin/budget_investments/show.html.erb index a58110c94..f220c0955 100644 --- a/app/views/admin/budget_investments/show.html.erb +++ b/app/views/admin/budget_investments/show.html.erb @@ -47,3 +47,12 @@ <%= link_to t("admin.budget_investments.show.edit_dossier"), edit_valuation_budget_budget_investment_path(@budget, @investment) %>

+
+ +

<%= t("admin.budget_investments.show.milestone") %>

+ +<%= render 'admin/budget_investments/milestones' %> + +

+ <%= link_to t("admin.budget_investments.show.new_milestone"), new_admin_budget_budget_investment_budget_investment_milestone_path(@budget, @investment) %> +

diff --git a/app/views/admin/budgets/_form.html.erb b/app/views/admin/budgets/_form.html.erb index 5d323b45c..58a56d564 100644 --- a/app/views/admin/budgets/_form.html.erb +++ b/app/views/admin/budgets/_form.html.erb @@ -16,5 +16,15 @@ <%= f.select :currency_symbol, budget_currency_symbol_select_options %> - <%= f.submit nil, class: "button success" %> +
+ <%= f.submit nil, class: "button success" %> + <% if @budget.balloting_process? %> +
+ <%= link_to t("admin.budgets.winners.calculate"), + calculate_winners_admin_budget_path(@budget), + method: :put, + class: "button hollow" %> +
+ <% end %> +
<% end %> diff --git a/app/views/admin/poll/questions/_form.html.erb b/app/views/admin/poll/questions/_form.html.erb index 0da36913a..959aa4ddf 100644 --- a/app/views/admin/poll/questions/_form.html.erb +++ b/app/views/admin/poll/questions/_form.html.erb @@ -17,8 +17,8 @@ <%= f.text_field :title, maxlength: Poll::Question.title_max_length %> <%= f.label :valid_answers %> -

<%= t("admin.questions.new.valid_answers_note") %>

- <%= f.text_field :valid_answers, label: false %> +

<%= t("admin.questions.new.valid_answers_note") %>

+ <%= f.text_field :valid_answers, label: false, aria: {describedby: "valid-answers-help-text"} %>
<%= f.cktext_area :description, diff --git a/app/views/admin/signature_sheets/new.html.erb b/app/views/admin/signature_sheets/new.html.erb index f471e1ea5..a1f2436bb 100644 --- a/app/views/admin/signature_sheets/new.html.erb +++ b/app/views/admin/signature_sheets/new.html.erb @@ -15,8 +15,8 @@
<%= f.label :document_numbers %> -

<%= t("admin.signature_sheets.new.document_numbers_note") %>

- <%= f.text_area :document_numbers, rows: "6", label: false %> +

<%= t("admin.signature_sheets.new.document_numbers_note") %>

+ <%= f.text_area :document_numbers, rows: "6", label: false, aria: {describedby: "document-numbers-help-text"} %> <%= f.submit(class: "button", value: t("admin.signature_sheets.new.submit")) %> <% end %> \ No newline at end of file diff --git a/app/views/budgets/investments/_filter_subnav.html.erb b/app/views/budgets/investments/_filter_subnav.html.erb new file mode 100644 index 000000000..a46c33b2d --- /dev/null +++ b/app/views/budgets/investments/_filter_subnav.html.erb @@ -0,0 +1,22 @@ +
+
+ +
+
diff --git a/app/views/budgets/investments/_form.html.erb b/app/views/budgets/investments/_form.html.erb index 28b47d726..94f6283e9 100644 --- a/app/views/budgets/investments/_form.html.erb +++ b/app/views/budgets/investments/_form.html.erb @@ -31,7 +31,7 @@
<%= f.label :tag_list, t("budgets.investments.form.tags_label") %> -

<%= t("budgets.investments.form.tags_instructions") %>

+

<%= t("budgets.investments.form.tags_instructions") %>

<%= f.label :category_tag_list, t("budgets.investments.form.tag_category_label") %> @@ -44,6 +44,7 @@ <%= f.text_field :tag_list, value: @investment.tag_list.to_s, label: false, placeholder: t("budgets.investments.form.tags_placeholder"), + aria: {describedby: "tags-list-help-text"}, class: 'js-tag-list' %>
diff --git a/app/views/budgets/investments/_milestones.html.erb b/app/views/budgets/investments/_milestones.html.erb new file mode 100644 index 000000000..87cd1cdd6 --- /dev/null +++ b/app/views/budgets/investments/_milestones.html.erb @@ -0,0 +1,26 @@ +
+
+
+ <% if @investment.milestones.blank? %> +
+ <%= t('budgets.investments.show.no_milestones') %> +
+ <% end %> +
+
    + <% @investment.milestones.each do |milestone| %> +
  • +
    +

    <%= milestone.title %>

    + + <%= t("budgets.investments.show.milestone_publish_date", publish_date: milestone.created_at.strftime("%d/%m/%Y")) %> + +

    <%= milestone.description %>

    +
    +
  • + <% end %> +
+
+
+
+
diff --git a/app/views/budgets/investments/show.html.erb b/app/views/budgets/investments/show.html.erb index 73861697e..264e7b102 100644 --- a/app/views/budgets/investments/show.html.erb +++ b/app/views/budgets/investments/show.html.erb @@ -10,4 +10,13 @@ ballot: @ballot } %> -<%= render partial: '/comments/comment_tree', locals: { comment_tree: @comment_tree, comment_flags: @comment_flags } %> +
+ <%= render "budgets/investments/filter_subnav" %> + <%= render "budgets/investments/milestones" %> + +
+ <%= render partial: '/comments/comment_tree', locals: { comment_tree: @comment_tree, + comment_flags: @comment_flags, + display_comments_count: false } %> +
+
diff --git a/app/views/comments/_comment_tree.html.erb b/app/views/comments/_comment_tree.html.erb index c72bd8bcf..45b4aea03 100644 --- a/app/views/comments/_comment_tree.html.erb +++ b/app/views/comments/_comment_tree.html.erb @@ -1,14 +1,15 @@ <% commentable = comment_tree.commentable %> -<% current_order = comment_tree.order %> -<% cache [locale_and_user_status, current_order, commentable_cache_key(commentable), comment_tree.comments, comment_tree.comment_authors, commentable.comments_count, comment_flags] do %> +<% cache [locale_and_user_status, comment_tree.order, commentable_cache_key(commentable), comment_tree.comments, comment_tree.comment_authors, commentable.comments_count, comment_flags] do %>
-

- <%= comment_tree_title_text(commentable) %> - (<%= commentable.comments_count %>) -

+ <% if display_comments_count %> +

+ <%= comment_tree_title_text(commentable) %> + (<%= commentable.comments_count %>) +

+ <% end %> <%= render 'shared/wide_order_selector', i18n_namespace: "comments" %> diff --git a/app/views/debates/_form.html.erb b/app/views/debates/_form.html.erb index c88045f26..96a5337ca 100644 --- a/app/views/debates/_form.html.erb +++ b/app/views/debates/_form.html.erb @@ -17,11 +17,12 @@
<%= f.label :tag_list, t("debates.form.tags_label") %> -

<%= t("debates.form.tags_instructions") %>

+

<%= t("debates.form.tags_instructions") %>

<%= f.text_field :tag_list, value: @debate.tag_list.to_s, label: false, - placeholder: t("debates.form.tags_placeholder") %> + placeholder: t("debates.form.tags_placeholder"), + aria: {describedby: "tag-list-help-text"} %>
<% if @debate.new_record? %> diff --git a/app/views/legislation/annotations/show.html.erb b/app/views/legislation/annotations/show.html.erb index 65ce8e947..1854addb5 100644 --- a/app/views/legislation/annotations/show.html.erb +++ b/app/views/legislation/annotations/show.html.erb @@ -40,7 +40,9 @@
- <%= render partial: '/comments/comment_tree', locals: { comment_tree: @comment_tree, comment_flags: @comment_flags } %> + <%= render partial: '/comments/comment_tree', locals: { comment_tree: @comment_tree, + comment_flags: @comment_flags, + display_comments_count: true } %>
diff --git a/app/views/legislation/questions/show.html.erb b/app/views/legislation/questions/show.html.erb index ab1443628..7361ea8f4 100644 --- a/app/views/legislation/questions/show.html.erb +++ b/app/views/legislation/questions/show.html.erb @@ -42,6 +42,7 @@ - <%= render partial: '/comments/comment_tree', locals: { comment_tree: @comment_tree, comment_flags: @comment_flags } %> - + <%= render partial: '/comments/comment_tree', locals: { comment_tree: @comment_tree, + comment_flags: @comment_flags, + display_comments_count: true } %> diff --git a/app/views/management/user_invites/new.html.erb b/app/views/management/user_invites/new.html.erb index a49a84538..969ca8fdf 100644 --- a/app/views/management/user_invites/new.html.erb +++ b/app/views/management/user_invites/new.html.erb @@ -3,8 +3,10 @@ <%= form_tag management_user_invites_path do %> -

<%= t('management.user_invites.new.info') %>

- <%= text_area_tag "emails", nil, rows: 5, placeholder: t('management.user_invites.new.info') %> +

<%= t('management.user_invites.new.info') %>

+ <%= text_area_tag "emails", nil, rows: 5, + placeholder: t('management.user_invites.new.info'), + aria: {describedby: "emails-help-text"} %>
diff --git a/app/views/organizations/registrations/new.html.erb b/app/views/organizations/registrations/new.html.erb index e85bb5408..40d8c5d05 100644 --- a/app/views/organizations/registrations/new.html.erb +++ b/app/views/organizations/registrations/new.html.erb @@ -9,8 +9,10 @@ <%= f.fields_for :organization do |fo| %> <%= fo.text_field :name, autofocus: true, maxlength: Organization.name_max_length, placeholder: t("devise_views.organizations.registrations.new.organization_name_label") %> <%= fo.label :responsible_name %> -

<%= t("devise_views.organizations.registrations.new.responsible_name_note") %>

- <%= fo.text_field :responsible_name, placeholder: t("devise_views.organizations.registrations.new.responsible_name_label"), maxlength: Organization.responsible_name_max_length, label: false %> +

<%= t("devise_views.organizations.registrations.new.responsible_name_note") %>

+ <%= fo.text_field :responsible_name, placeholder: t("devise_views.organizations.registrations.new.responsible_name_label"), + maxlength: Organization.responsible_name_max_length, label: false, + aria: {describedby: "responsible-name-help-text"} %> <% end %> <%= f.email_field :email, placeholder: t("devise_views.organizations.registrations.new.email_label") %> diff --git a/app/views/proposals/_form.html.erb b/app/views/proposals/_form.html.erb index 3eda38cd1..232f65ac1 100644 --- a/app/views/proposals/_form.html.erb +++ b/app/views/proposals/_form.html.erb @@ -12,17 +12,21 @@
<%= f.label :question, t("proposals.form.proposal_question") %> - +

<%= t("proposals.form.proposal_question_example_html") %> - - <%= f.text_field :question, maxlength: Proposal.question_max_length, placeholder: t("proposals.form.proposal_question"), label: false %> +

+ <%= f.text_field :question, maxlength: Proposal.question_max_length, + placeholder: t("proposals.form.proposal_question"), + label: false, + aria: {describedby: "question-help-text"} %>
<%= f.label :summary, t("proposals.form.proposal_summary") %> -

<%= t("proposals.form.proposal_summary_note") %>

+

<%= t("proposals.form.proposal_summary_note") %>

<%= f.text_area :summary, rows: 4, maxlength: 200, label: false, - placeholder: t('proposals.form.proposal_summary') %> + placeholder: t('proposals.form.proposal_summary'), + aria: {describedby: "summary-help-text"} %>
@@ -33,8 +37,9 @@
<%= f.label :video_url, t("proposals.form.proposal_video_url") %> -

<%= t("proposals.form.proposal_video_url_note") %>

- <%= f.text_field :video_url, placeholder: t("proposals.form.proposal_video_url"), label: false %> +

<%= t("proposals.form.proposal_video_url_note") %>

+ <%= f.text_field :video_url, placeholder: t("proposals.form.proposal_video_url"), label: false, + aria: {describedby: "video-url-help-text"} %>
@@ -49,7 +54,7 @@
<%= f.label :tag_list, t("proposals.form.tags_label") %> -

<%= t("proposals.form.tags_instructions") %>

+

<%= t("proposals.form.tags_instructions") %>

<%= f.label :category_tag_list, t("proposals.form.tag_category_label") %> @@ -62,14 +67,16 @@ <%= f.text_field :tag_list, value: @proposal.tag_list.to_s, label: false, placeholder: t("proposals.form.tags_placeholder"), - class: 'js-tag-list' %> + class: 'js-tag-list', + aria: {describedby: "tag-list-help-text"} %>
<% if current_user.unverified? %>
<%= f.label :responsible_name, t("proposals.form.proposal_responsible_name") %> -

<%= t("proposals.form.proposal_responsible_name_note") %>

- <%= f.text_field :responsible_name, placeholder: t("proposals.form.proposal_responsible_name"), label: false %> +

<%= t("proposals.form.proposal_responsible_name_note") %>

+ <%= f.text_field :responsible_name, placeholder: t("proposals.form.proposal_responsible_name"), label: false, + aria: {describedby: "responsible-name-help-text"} %>
<% end %> diff --git a/app/views/shared/_suggest.html.erb b/app/views/shared/_suggest.html.erb index d50f67056..3164594fc 100644 --- a/app/views/shared/_suggest.html.erb +++ b/app/views/shared/_suggest.html.erb @@ -1,10 +1,12 @@
<% if @search_terms && @resources.any? %> -
-

- <%= t("shared.suggest.#{resource_name}.found", - count: @resources.count, - query: @search_terms)%> +

+

+ + <%= t("shared.suggest.#{resource_name}.found", + count: @resources.count, + query: @search_terms)%> +

    @@ -14,11 +16,13 @@
<% if @resources.count > @limit %> -

- <%= t("shared.suggest.#{resource_name}.message", - count: @resources.count, - query: @search_terms, - limit: @limit) %> +

+ + <%= t("shared.suggest.#{resource_name}.message", + count: @resources.count, + query: @search_terms, + limit: @limit) %> + <%= link_to t("shared.suggest.#{resource_name}.see_all"), polymorphic_url(resource_model, search: @search_terms)%>

@@ -26,4 +30,4 @@
<% end %> -
\ No newline at end of file +
diff --git a/app/views/users/registrations/edit.html.erb b/app/views/users/registrations/edit.html.erb index bbf33ccfa..7d80efda3 100644 --- a/app/views/users/registrations/edit.html.erb +++ b/app/views/users/registrations/edit.html.erb @@ -18,8 +18,10 @@
<%= f.label :password, t("devise_views.users.registrations.edit.password_label") %> -

<%= t("devise_views.users.registrations.edit.leave_blank") %>

- <%= f.password_field :password, autocomplete: "off", label: false, placeholder: t("devise_views.users.registrations.edit.password_label") %> +

<%= t("devise_views.users.registrations.edit.leave_blank") %>

+ <%= f.password_field :password, autocomplete: "off", label: false, + placeholder: t("devise_views.users.registrations.edit.password_label"), + aria: {describedby: "password-help-text"} %>
@@ -29,8 +31,10 @@
<%= f.label :current_password, t("devise_views.users.registrations.edit.current_password_label") %> -

<%= t("devise_views.users.registrations.edit.need_current") %>

- <%= f.password_field :current_password, label: false, autocomplete: "off", placeholder: t("devise_views.users.registrations.edit.current_password_label") %> +

<%= t("devise_views.users.registrations.edit.need_current") %>

+ <%= f.password_field :current_password, label: false, autocomplete: "off", + placeholder: t("devise_views.users.registrations.edit.current_password_label"), + aria: {describedby: "current-password-help-text"} %>
diff --git a/app/views/users/registrations/new.html.erb b/app/views/users/registrations/new.html.erb index 3ae3156f7..8e702a5f1 100644 --- a/app/views/users/registrations/new.html.erb +++ b/app/views/users/registrations/new.html.erb @@ -18,8 +18,11 @@ <%= f.hidden_field :locale, value: I18n.locale %> <%= f.label :username %> -

<%= t("devise_views.users.registrations.new.username_note") %>

- <%= f.text_field :username, autofocus: true, maxlength: User.username_max_length, placeholder: t("devise_views.users.registrations.new.username_label"), label: false %> +

<%= t("devise_views.users.registrations.new.username_note") %>

+ <%= f.text_field :username, autofocus: true, maxlength: User.username_max_length, + placeholder: t("devise_views.users.registrations.new.username_label"), + label: false, + aria: {describedby: "username-help-text"} %> <%= f.invisible_captcha :family_name %> diff --git a/app/views/verification/residence/new.html.erb b/app/views/verification/residence/new.html.erb index 703e4b98f..2159d1a01 100644 --- a/app/views/verification/residence/new.html.erb +++ b/app/views/verification/residence/new.html.erb @@ -76,9 +76,9 @@
<%= f.label t("verification.residence.new.postal_code") %> -

<%= t("verification.residence.new.postal_code_note") %>

+

<%= t("verification.residence.new.postal_code_note") %>

- <%= f.text_field :postal_code, label: false %> + <%= f.text_field :postal_code, label: false, aria: {describedby: "postal-code-help-text"} %>
diff --git a/app/views/verification/sms/new.html.erb b/app/views/verification/sms/new.html.erb index 06f679e36..820ed01fa 100644 --- a/app/views/verification/sms/new.html.erb +++ b/app/views/verification/sms/new.html.erb @@ -31,8 +31,10 @@
<%= f.label :phone, t("verification.sms.new.phone"), class: "inline-block" %> <%= t("verification.sms.new.phone_format_html") %> -

<%= t("verification.sms.new.phone_note") %>

- <%= f.text_field :phone, label: false, placeholder: t("verification.sms.new.phone_placeholder") %> +

<%= t("verification.sms.new.phone_note") %>

+ <%= f.text_field :phone, label: false, + placeholder: t("verification.sms.new.phone_placeholder"), + aria: {describedby: "phone-help-text"} %>
<%= f.submit t("verification.sms.new.submit_button"), class: "button success" %> diff --git a/config/locales/activerecord.en.yml b/config/locales/activerecord.en.yml index 0af387a50..d45c569d4 100644 --- a/config/locales/activerecord.en.yml +++ b/config/locales/activerecord.en.yml @@ -10,6 +10,9 @@ en: budget/investment: one: "Investment" other: "Investments" + budget/investment/milestone: + one: "milestone" + other: "milestones" comment: one: "Comment" other: "Comments" @@ -98,6 +101,9 @@ en: title: "Title" location: "Location" organization_name: "If you are proposing in the name of a collective/organization, write its name" + budget/investment/milestone: + title: "Title" + description: "Description" comment: body: "Comment" user: "User" diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml index b2b5fc20e..678053f84 100644 --- a/config/locales/activerecord.es.yml +++ b/config/locales/activerecord.es.yml @@ -10,6 +10,9 @@ es: budget/investment: one: "Proyecto de inversión" other: "Proyectos de inversión" + budget/investment/milestone: + one: "hito" + other: "hitos" comment: one: "Comentario" other: "Comentarios" @@ -96,6 +99,9 @@ es: comment: body: "Comentario" user: "Usuario" + budget/investment/milestone: + title: "Título" + description: "Descripción" debate: author: "Autor" description: "Opinión" diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 5821fd99d..dd8ec1f85 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -103,6 +103,9 @@ en: table_heading: Heading table_amount: Amount table_population: Population + winners: + calculate: Calculate Winner Investments + calculated: Winners being calculated, it may take a minute. budget_investments: index: heading_filter_all: All headings @@ -153,6 +156,8 @@ en: edit_dossier: Edit dossier tags: Tags undefined: Undefined + milestone: Milestone + new_milestone: Create new milestone edit: classification: Clasification assigned_valuators: Valuators @@ -162,6 +167,24 @@ en: tags_placeholder: "Write the tags you want separated by commas (,)" undefined: Undefined search_unfeasible: Search unfeasible + milestones: + index: + table_id: "ID" + table_title: "Title" + table_description: "Description" + table_actions: "Actions" + delete: "Delete milestone" + no_milestones: "Don't have defined milestones" + new: + creating: Create milestone + edit: + title: Edit milestone + create: + notice: New milestone created successfully! + update: + notice: Milestone updated successfully + delete: + notice: Milestone successfully deleted comments: index: filter: Filter diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index 488935f06..21335d418 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -103,6 +103,9 @@ es: table_heading: Partida table_amount: Cantidad table_population: Población + winners: + calculate: Calcular propuestas ganadoras + calculated: Calculando ganadoras, puede tardar un minuto. budget_investments: index: heading_filter_all: Todas las partidas @@ -153,6 +156,8 @@ es: edit_dossier: Editar informe tags: Etiquetas undefined: Sin definir + milestone: Seguimiento + new_milestone: Crear nuevo hito edit: classification: Clasificación assigned_valuators: Evaluadores @@ -162,6 +167,24 @@ es: tags_placeholder: "Escribe las etiquetas que desees separadas por comas (,)" undefined: Sin definir search_unfeasible: Buscar inviables + milestones: + index: + table_id: "ID" + table_title: "Título" + table_description: "Descripción" + table_actions: "Acciones" + delete: "Eliminar hito" + no_milestones: "No hay hitos definidos" + new: + creating: Crear hito + edit: + title: Editar hito + create: + notice: Nuevo hito creado con éxito! + update: + notice: Hito actualizado + delete: + notice: Hito borrado correctamente comments: index: filter: Filtro diff --git a/config/locales/admin.fr.yml b/config/locales/admin.fr.yml index 4db6d1915..5830488bb 100644 --- a/config/locales/admin.fr.yml +++ b/config/locales/admin.fr.yml @@ -103,6 +103,9 @@ fr: table_heading: Rubrique table_amount: Montant table_population: Population + winners: + calculate: Calculate Winner Investments + calculated: Winners being calculated, it may take a minute. budget_investments: index: heading_filter_all: Toutes les rubriques diff --git a/config/locales/admin.nl.yml b/config/locales/admin.nl.yml index b97e0a9c2..a421169f0 100755 --- a/config/locales/admin.nl.yml +++ b/config/locales/admin.nl.yml @@ -104,6 +104,9 @@ nl: table_heading: Heading table_amount: Amount table_population: Population + winners: + calculate: Calculate Winner Investments + calculated: Winners being calculated, it may take a minute. budget_investments: index: heading_filter_all: All headings diff --git a/config/locales/budgets.en.yml b/config/locales/budgets.en.yml index 905ccce7e..75a56c919 100644 --- a/config/locales/budgets.en.yml +++ b/config/locales/budgets.en.yml @@ -93,6 +93,10 @@ en: supports: Supports votes: Votes price: Price + comments_tab: Comments + milestones_tab: Milestones + no_milestones: Don't have defined milestones + milestone_publish_date: "Published %{publish_date}" wrong_price_format: Only integer numbers investment: add: Vote @@ -131,4 +135,4 @@ en: price: Cost amount_available: Available budget accepted: "Accepted spending proposal: " - discarded: "Discarded spending proposal: " \ No newline at end of file + discarded: "Discarded spending proposal: " diff --git a/config/locales/budgets.es.yml b/config/locales/budgets.es.yml index 38f8601e8..4c35d8902 100644 --- a/config/locales/budgets.es.yml +++ b/config/locales/budgets.es.yml @@ -93,6 +93,10 @@ es: supports: Apoyos votes: Votos price: Coste + comments_tab: Comentarios + milestones_tab: Seguimiento + no_milestones: No hay hitos definidos + milestone_publish_date: "Publicado el %{publish_date}" wrong_price_format: Solo puede incluir caracteres numéricos investment: add: Votar diff --git a/config/locales/en.yml b/config/locales/en.yml index dac7bc3be..33b457e32 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -298,7 +298,7 @@ en: geozone: Scope of operation proposal_external_url: Link to additional documentation proposal_question: Proposal question - proposal_question_example_html: Must be summarised in one question with a Yes or No answer. E.g. 'Do you agree with the pedestrianisation of Calle Mayor?' + proposal_question_example_html: "Must be summarised in one question with a Yes or No answer.
E.g. 'Do you agree with the pedestrianisation of Calle Mayor?'" proposal_responsible_name: Full name of the person submitting the proposal proposal_responsible_name_note: "(individually or as representative of a collective; will not be displayed publically)" proposal_summary: Proposal summary diff --git a/config/locales/es.yml b/config/locales/es.yml index 5494ca497..d38184647 100755 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -298,7 +298,7 @@ es: geozone: "Ámbito de actuación" proposal_external_url: Enlace a documentación adicional proposal_question: Pregunta de la propuesta - proposal_question_example_html: Debe ser resumida en una pregunta cuya respuesta sea Sí o No. Ej. '¿Está usted de acuerdo en peatonalizar la calle Mayor?' + proposal_question_example_html: "Debe ser resumida en una pregunta cuya respuesta sea Sí o No.
Ej. '¿Está usted de acuerdo en peatonalizar la calle Mayor?'" 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_summary: Resumen de la propuesta diff --git a/config/locales/fr.yml b/config/locales/fr.yml index b978f70e2..e4d0f9a51 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1249,8 +1249,8 @@ fr: proposal_external_url: Lien vers de la documentation complémentaire proposal_question: Question proposée proposal_question_example_html: 'Doit être résumé par une question appelant - à une réponse par oui ou par non. Exemple : ''Êtes-vous d''accord avec - la piétonnisation de Calle Mayor?''' + à une réponse par oui ou par non.
Exemple : ''Êtes-vous d''accord avec + la piétonnisation de Calle Mayor?' proposal_responsible_name: Nom complet de la personne qui soumet la proposition proposal_responsible_name_note: "(individuellement ou comme représentant d'un collectif; ne sera pas public)" diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 48e1bcdc9..62221c280 100755 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -14,7 +14,7 @@ nl: phone_number_label: Telefoonnummer public_activity_label: Mijn activiteiten zijn publiek save_changes_submit: Sla veranderingen op - subscription_to_website_newsletter_label: Stuur me email met relevante informatie over de website + subscription_to_website_newsletter_label: Stuur me email met relevante informatie over de website email_on_direct_message_label: Stuur me email naar aanleiding van directe boodschappen email_digest_label: Stuur me een samenvatting van meldingen naar aanleiding van voorstellen official_position_badge_label: Show official position badge @@ -179,7 +179,7 @@ nl: conditions: Gebruiksvoorwaarden consul: Consul consul_url: https://github.com/consul/consul - contact_us: Voor tech support klik + contact_us: Voor tech support klik copyright: Consul, %{year} description: Deze site gebruikt %{consul}; een %{open_source} toepassing. faq: hier @@ -217,7 +217,7 @@ nl: other: U heeft %{count} nieuwe meldingen no_notifications: "U heeft geen nieuwe meldingen" open: open - open_city_slogan_html: Er zijn steden die rechtstreeks door hun bewoners worden bestuurd, welke discussiëren over de onderwerpen waarover ze zich zorgen maken, welke voorstellen doen om hun leven te verbeteren en zelf beslissen welke daarvan zullen worden uitgevoerd. + open_city_slogan_html: Er zijn steden die rechtstreeks door hun bewoners worden bestuurd, welke discussiëren over de onderwerpen waarover ze zich zorgen maken, welke voorstellen doen om hun leven te verbeteren en zelf beslissen welke daarvan zullen worden uitgevoerd. open_city_title: De gemeente waar u van houdt is de gemeente waarin u meedenkt. open_gov: Open bestuur proposals: Voorstellen @@ -297,10 +297,10 @@ nl: done: Is gebeurt other: Anders form: - geozone: Regio + geozone: Regio proposal_external_url: Link naar meet informatie proposal_question: Vraag - proposal_question_example_html: Moet samengevat worden in een vraag met een ja/nee antwoord. E.g. 'Ben je het eens met autovrije Geldersekade?' + proposal_question_example_html: Moet samengevat worden in een vraag met een ja/nee antwoord.
E.g. 'Ben je het eens met autovrije Geldersekade?' proposal_responsible_name: Volledige naam van persoon die het voorstel doet proposal_responsible_name_note: "(individueel of als vertegenwoordiger van een collectief; niet publiek zichtbaar)" proposal_summary: Samenvatting voorstel @@ -506,7 +506,7 @@ nl: suggest: debate: found: - + one: "Er is een debat met de term '%{query}'; u kunt daar deelnemen in plaats van een nieuwe discussie te openen." other: "Er zijn discussies met de term '%{query}'; u kunt daar deelnemen in plaats van een nieuwe discussie te openen." message: "Er worden %{limit} uit %{count} discussies met de term '%{query}' getoond" @@ -636,7 +636,7 @@ nl: other: "%{count} Begrotingsvoorstellen" no_activity: Deze deelnemer heeft geen publieke activiteit no_private_messages: "Deze deelnemer ontvangt geen privé berichten." - private_activity: Deze deelnemer heeft besloten activiteiten niet te delen + private_activity: Deze deelnemer heeft besloten activiteiten niet te delen send_private_message: "Stuur privé bericht" proposals: send_notification: "Stuur melding" diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 90e4f35d8..69ca72c02 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1267,8 +1267,8 @@ pt-BR: proposal_external_url: Link para documentação adicional proposal_question: Questão proposta proposal_question_example_html: 'Precisa ser sumarizado em uma questão com resposta - Sim ou Não. Ex.: ''Você concorda com a mudança da Calle Mayor como via - exclusiva de pedestres?''' + Sim ou Não.
Ex.: ''Você concorda com a mudança da Calle Mayor como via + exclusiva de pedestres?' proposal_responsible_name: Nome completo da pessoa que está submetendo a proposta proposal_responsible_name_note: "(indivudualmente ou como representante de um coletivo; não será mostrado publicamente)" diff --git a/config/routes.rb b/config/routes.rb index 5c5284a91..ef476cf28 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -193,16 +193,22 @@ Rails.application.routes.draw do end resources :budgets do + member do + put :calculate_winners + end + resources :budget_groups do resources :budget_headings do end end resources :budget_investments, only: [:index, :show, :edit, :update] do + resources :budget_investment_milestones member { patch :toggle_selection } end end + resources :signature_sheets, only: [:index, :new, :create, :show] resources :banners, only: [:index, :new, :create, :edit, :update, :destroy] do diff --git a/db/migrate/20170620132731_create_budget_investment_milestones.rb b/db/migrate/20170620132731_create_budget_investment_milestones.rb new file mode 100644 index 000000000..199d8e70e --- /dev/null +++ b/db/migrate/20170620132731_create_budget_investment_milestones.rb @@ -0,0 +1,11 @@ +class CreateBudgetInvestmentMilestones < ActiveRecord::Migration + def change + create_table :budget_investment_milestones do |t| + t.integer :investment_id + t.string "title", limit: 80 + t.text "description" + + t.timestamps null: false + end + end +end diff --git a/db/schema.rb b/db/schema.rb index dbdcc318d..bb73ba406 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -115,6 +115,14 @@ ActiveRecord::Schema.define(version: 20170621180611) do add_index "budget_headings", ["group_id"], name: "index_budget_headings_on_group_id", using: :btree + create_table "budget_investment_milestones", force: :cascade do |t| + t.integer "investment_id" + t.string "title", limit: 80 + t.text "description" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "budget_investments", force: :cascade do |t| t.integer "author_id" t.integer "administrator_id" @@ -414,8 +422,8 @@ ActiveRecord::Schema.define(version: 20170621180611) do t.date "allegations_end_date" t.date "result_publication_date" t.datetime "hidden_at" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.text "summary" t.boolean "debate_phase_enabled", default: false t.boolean "allegations_phase_enabled", default: false @@ -925,7 +933,7 @@ ActiveRecord::Schema.define(version: 20170621180611) do t.boolean "email_digest", default: true t.boolean "email_on_direct_message", default: true t.boolean "official_position_badge", default: false - t.datetime "password_changed_at", default: '2016-12-21 17:55:08', null: false + t.datetime "password_changed_at", default: '2017-06-22 11:21:30', null: false t.boolean "created_from_signature", default: false t.integer "failed_email_digests_count", default: 0 t.text "former_users_data_log", default: "" diff --git a/lib/acts_as_paranoid_aliases.rb b/lib/acts_as_paranoid_aliases.rb index cf0c0bac8..17587fca8 100644 --- a/lib/acts_as_paranoid_aliases.rb +++ b/lib/acts_as_paranoid_aliases.rb @@ -25,7 +25,7 @@ module ActsAsParanoidAliases update_attribute(:confirmed_hide_at, Time.current) end - def restore(opts={}) + def restore(opts = {}) return false unless hidden? super(opts) update_attribute(:confirmed_hide_at, nil) diff --git a/lib/graph_ql/api_types_creator.rb b/lib/graph_ql/api_types_creator.rb index f8f78355e..9f55be3cc 100644 --- a/lib/graph_ql/api_types_creator.rb +++ b/lib/graph_ql/api_types_creator.rb @@ -42,7 +42,7 @@ module GraphQL field(field_name, SCALAR_TYPES[field_type], model.human_attribute_name(field_name)) when :singular_association field(field_name, -> { created_types[field_type] }) do - resolve -> (object, arguments, context) do + resolve ->(object, arguments, context) do association_target = object.send(field_name) association_target.present? ? field_type.public_for_api.find_by(id: association_target.id) : nil end @@ -50,7 +50,7 @@ module GraphQL when :multiple_association field_type = field_type.first connection(field_name, -> { created_types[field_type].connection_type }, max_page_size: 50, complexity: 1000) do - resolve -> (object, arguments, context) { object.send(field_name).public_for_api } + resolve ->(object, arguments, context) { object.send(field_name).public_for_api } end end end diff --git a/lib/graph_ql/query_type_creator.rb b/lib/graph_ql/query_type_creator.rb index 71beb8033..8f4a497ef 100644 --- a/lib/graph_ql/query_type_creator.rb +++ b/lib/graph_ql/query_type_creator.rb @@ -14,13 +14,13 @@ module GraphQL type created_type description model.graphql_field_description argument :id, !types.ID - resolve -> (object, arguments, context) { model.public_for_api.find_by(id: arguments['id'])} + resolve ->(object, arguments, context) { model.public_for_api.find_by(id: arguments['id'])} end end connection(model.graphql_pluralized_field_name, created_type.connection_type, max_page_size: 50, complexity: 1000) do description model.graphql_pluralized_field_description - resolve -> (object, arguments, context) { model.public_for_api } + resolve ->(object, arguments, context) { model.public_for_api } end end diff --git a/lib/manager_authenticator.rb b/lib/manager_authenticator.rb index bd61d97a5..11928e737 100644 --- a/lib/manager_authenticator.rb +++ b/lib/manager_authenticator.rb @@ -1,6 +1,6 @@ class ManagerAuthenticator - def initialize(data={}) + def initialize(data = {}) @manager = {login: data[:login], user_key: data[:clave_usuario], date: data[:fecha_conexion]}.with_indifferent_access end @@ -25,7 +25,7 @@ class ManagerAuthenticator parsed_response = parser.parse((response[:get_applications_user_list_response][:get_applications_user_list_return])) aplication_value = parsed_response["APLICACIONES"]["APLICACION"] # aplication_value from UWEB can be an array of hashes or a hash - aplication_value.include?( {"CLAVE_APLICACION" => application_key}) || aplication_value["CLAVE_APLICACION"] == application_key + aplication_value.include?({"CLAVE_APLICACION" => application_key}) || aplication_value["CLAVE_APLICACION"] == application_key rescue false end diff --git a/lib/score_calculator.rb b/lib/score_calculator.rb index 32086392a..4f4e21e85 100644 --- a/lib/score_calculator.rb +++ b/lib/score_calculator.rb @@ -1,7 +1,7 @@ module ScoreCalculator - EPOC = Time.new(2015, 6, 15) - COMMENT_WEIGHT = 1.0/5 # 1 positive vote / x comments + EPOC = Time.new(2015, 6, 15).in_time_zone + COMMENT_WEIGHT = 1.0 / 5 # 1 positive vote / x comments TIME_UNIT = 24.hours.to_f def self.hot_score(date, votes_total, votes_up, comments_count) @@ -13,7 +13,7 @@ module ScoreCalculator sign = score <=> 0 seconds = ((date || Time.current) - EPOC).to_f - (((offset * sign) + (seconds/TIME_UNIT)) * 10000000).round + (((offset * sign) + (seconds / TIME_UNIT)) * 10000000).round end def self.confidence_score(votes_total, votes_up) diff --git a/lib/sms_api.rb b/lib/sms_api.rb index de0e2c312..9b866fc87 100644 --- a/lib/sms_api.rb +++ b/lib/sms_api.rb @@ -38,7 +38,7 @@ class SMSApi end def stubbed_response - {:respuesta_sms=>{:identificador_mensaje=>"1234567", :fecha_respuesta=>"Thu, 20 Aug 2015 16:28:05 +0200", :respuesta_pasarela=>{:codigo_pasarela=>"0000", :descripcion_pasarela=>"Operación ejecutada correctamente."}, :respuesta_servicio_externo=>{:codigo_respuesta=>"1000", :texto_respuesta=>"Success"}}} + {:respuesta_sms => {:identificador_mensaje => "1234567", :fecha_respuesta => "Thu, 20 Aug 2015 16:28:05 +0200", :respuesta_pasarela => {:codigo_pasarela => "0000", :descripcion_pasarela => "Operación ejecutada correctamente."}, :respuesta_servicio_externo => {:codigo_respuesta => "1000", :texto_respuesta => "Success"}}} end end diff --git a/spec/controllers/admin/api/stats_controller_spec.rb b/spec/controllers/admin/api/stats_controller_spec.rb index 7ba63ffb3..8dd948086 100644 --- a/spec/controllers/admin/api/stats_controller_spec.rb +++ b/spec/controllers/admin/api/stats_controller_spec.rb @@ -17,9 +17,9 @@ describe Admin::Api::StatsController do context 'events present' do before :each do - time_1 = DateTime.parse("2015-01-01") - time_2 = DateTime.parse("2015-01-02") - time_3 = DateTime.parse("2015-01-03") + time_1 = DateTime.parse("2015-01-01").in_time_zone + time_2 = DateTime.parse("2015-01-02").in_time_zone + time_3 = DateTime.parse("2015-01-03").in_time_zone create :ahoy_event, name: 'foo', time: time_1 create :ahoy_event, name: 'foo', time: time_1 @@ -36,7 +36,7 @@ describe Admin::Api::StatsController do expect(response).to be_ok data = JSON.parse(response.body) - expect(data).to eq "x"=>["2015-01-01", "2015-01-02"], "Foo"=>[2, 1] + expect(data).to eq "x" => ["2015-01-01", "2015-01-02"], "Foo" => [2, 1] end it 'should return combined comma separated events formated for working with c3.js' do @@ -46,14 +46,14 @@ describe Admin::Api::StatsController do expect(response).to be_ok data = JSON.parse(response.body) - expect(data).to eq "x"=>["2015-01-01", "2015-01-02", "2015-01-03"], "Foo"=>[2, 1, 0], "Bar"=>[1, 0, 2] + expect(data).to eq "x" => ["2015-01-01", "2015-01-02", "2015-01-03"], "Foo" => [2, 1, 0], "Bar" => [1, 0, 2] end end context 'visits present' do it 'should return visits formated for working with c3.js' do - time_1 = DateTime.parse("2015-01-01") - time_2 = DateTime.parse("2015-01-02") + time_1 = DateTime.parse("2015-01-01").in_time_zone + time_2 = DateTime.parse("2015-01-02").in_time_zone create :visit, started_at: time_1 create :visit, started_at: time_1 @@ -65,14 +65,14 @@ describe Admin::Api::StatsController do expect(response).to be_ok data = JSON.parse(response.body) - expect(data).to eq "x"=>["2015-01-01", "2015-01-02"], "Visits"=>[2, 1] + expect(data).to eq "x" => ["2015-01-01", "2015-01-02"], "Visits" => [2, 1] end end context 'visits and events present' do it 'should return combined events and visits formated for working with c3.js' do - time_1 = DateTime.parse("2015-01-01") - time_2 = DateTime.parse("2015-01-02") + time_1 = DateTime.parse("2015-01-01").in_time_zone + time_2 = DateTime.parse("2015-01-02").in_time_zone create :ahoy_event, name: 'foo', time: time_1 create :ahoy_event, name: 'foo', time: time_2 @@ -88,14 +88,14 @@ describe Admin::Api::StatsController do expect(response).to be_ok data = JSON.parse(response.body) - expect(data).to eq "x"=>["2015-01-01", "2015-01-02"], "Foo"=>[1, 2], "Visits"=>[2, 1] + expect(data).to eq "x" => ["2015-01-01", "2015-01-02"], "Foo" => [1, 2], "Visits" => [2, 1] end end context 'budget investments present' do it 'should return budget investments formated for working with c3.js' do - time_1 = DateTime.parse("2017-04-01") - time_2 = DateTime.parse("2017-04-02") + time_1 = DateTime.parse("2017-04-01").in_time_zone + time_2 = DateTime.parse("2017-04-02").in_time_zone budget_investment1 = create(:budget_investment, budget: @budget, created_at: time_1) budget_investment2 = create(:budget_investment, budget: @budget, created_at: time_2) @@ -107,7 +107,7 @@ describe Admin::Api::StatsController do expect(response).to be_ok data = JSON.parse(response.body) - expect(data).to eq "x"=>["2017-04-01", "2017-04-02"], "Budget Investments"=>[1, 2] + expect(data).to eq "x" => ["2017-04-01", "2017-04-02"], "Budget Investments" => [1, 2] end end end diff --git a/spec/controllers/comments_controller_spec.rb b/spec/controllers/comments_controller_spec.rb index abd2577c2..d06e1900f 100644 --- a/spec/controllers/comments_controller_spec.rb +++ b/spec/controllers/comments_controller_spec.rb @@ -4,7 +4,7 @@ describe CommentsController do describe 'POST create' do before(:each) do - @process = create(:legislation_process, debate_start_date: Date.current - 3.day, debate_end_date: Date.current + 2.days) + @process = create(:legislation_process, debate_start_date: Date.current - 3.days, debate_end_date: Date.current + 2.days) @question = create(:legislation_question, process: @process, title: "Question 1") @user = create(:user, :level_two) @unverified_user = create(:user) diff --git a/spec/controllers/concerns/has_orders_spec.rb b/spec/controllers/concerns/has_orders_spec.rb index 37d62fa84..fa2c49b07 100644 --- a/spec/controllers/concerns/has_orders_spec.rb +++ b/spec/controllers/concerns/has_orders_spec.rb @@ -7,7 +7,7 @@ describe 'HasOrders' do controller(FakeController) do include HasOrders has_orders ['created_at', 'votes_count', 'flags_count', 'relevance'], only: :index - has_orders -> (c) { ['votes_count', 'flags_count'] }, only: :new + has_orders ->(c) { ['votes_count', 'flags_count'] }, only: :new def index render text: "#{@current_order} (#{@valid_orders.join(' ')})" diff --git a/spec/controllers/legislation/annotations_controller_spec.rb b/spec/controllers/legislation/annotations_controller_spec.rb index 5b1fd3d39..834ec046f 100644 --- a/spec/controllers/legislation/annotations_controller_spec.rb +++ b/spec/controllers/legislation/annotations_controller_spec.rb @@ -4,7 +4,7 @@ describe Legislation::AnnotationsController do describe 'POST create' do before(:each) do - @process = create(:legislation_process, allegations_start_date: Date.current - 3.day, allegations_end_date: Date.current + 2.days) + @process = create(:legislation_process, allegations_start_date: Date.current - 3.days, allegations_end_date: Date.current + 2.days) @draft_version = create(:legislation_draft_version, :published, process: @process, title: "Version 1") @final_version = create(:legislation_draft_version, :published, :final_version, process: @process, title: "Final version") @user = create(:user, :level_two) @@ -16,8 +16,8 @@ describe Legislation::AnnotationsController do post :create, process_id: @process.id, draft_version_id: @draft_version.id, legislation_annotation: { - "quote"=>"ipsum", - "ranges"=>[{"start"=>"/p[1]", "startOffset"=>6, "end"=>"/p[1]", "endOffset"=>11}], + "quote" => "ipsum", + "ranges" => [{"start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11}], "text": "una anotacion" } expect(Ahoy::Event.where(name: :legislation_annotation_created).count).to eq 1 @@ -30,8 +30,8 @@ describe Legislation::AnnotationsController do post :create, process_id: @process.id, draft_version_id: @final_version.id, legislation_annotation: { - "quote"=>"ipsum", - "ranges"=>[{"start"=>"/p[1]", "startOffset"=>6, "end"=>"/p[1]", "endOffset"=>11}], + "quote" => "ipsum", + "ranges" => [{"start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11}], "text": "una anotacion" } @@ -45,8 +45,8 @@ describe Legislation::AnnotationsController do xhr :post, :create, process_id: @process.id, draft_version_id: @draft_version.id, legislation_annotation: { - "quote"=>"ipsum", - "ranges"=>[{"start"=>"/p[1]", "startOffset"=>6, "end"=>"/p[1]", "endOffset"=>11}], + "quote" => "ipsum", + "ranges" => [{"start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11}], "text": "una anotacion" } end.to change { @draft_version.annotations.count }.by(1) @@ -60,8 +60,8 @@ describe Legislation::AnnotationsController do xhr :post, :create, process_id: @process.id, draft_version_id: @draft_version.id, legislation_annotation: { - "quote"=>"ipsum", - "ranges"=>[{"start"=>"/p[1]", "startOffset"=>6, "end"=>"/p[1]", "endOffset"=>11}], + "quote" => "ipsum", + "ranges" => [{"start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11}], "text": "una anotacion" } end.to_not change { @draft_version.annotations.count } @@ -74,8 +74,8 @@ describe Legislation::AnnotationsController do xhr :post, :create, process_id: @process.id, draft_version_id: @draft_version.id, legislation_annotation: { - "quote"=>"ipsum", - "ranges"=>[{"start"=>"/p[1]", "startOffset"=>6, "end"=>"/p[1]", "endOffset"=>11}].to_json, + "quote" => "ipsum", + "ranges" => [{"start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11}].to_json, "text": "una anotacion" } end.to change { @draft_version.annotations.count }.by(1) @@ -83,7 +83,7 @@ describe Legislation::AnnotationsController do it 'should create a new comment on an existing annotation when range is the same' do annotation = create(:legislation_annotation, draft_version: @draft_version, text: "my annotation", - ranges: [{"start"=>"/p[1]", "startOffset"=>6, "end"=>"/p[1]", "endOffset"=>11}], + ranges: [{"start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11}], range_start: "/p[1]", range_start_offset: 6, range_end: "/p[1]", range_end_offset: 11) sign_in @user @@ -91,8 +91,8 @@ describe Legislation::AnnotationsController do xhr :post, :create, process_id: @process.id, draft_version_id: @draft_version.id, legislation_annotation: { - "quote"=>"ipsum", - "ranges"=>[{"start"=>"/p[1]", "startOffset"=>6, "end"=>"/p[1]", "endOffset"=>11}], + "quote" => "ipsum", + "ranges" => [{"start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11}], "text": "una anotacion" } end.to_not change { @draft_version.annotations.count } diff --git a/spec/controllers/legislation/answers_controller_spec.rb b/spec/controllers/legislation/answers_controller_spec.rb index 77d037478..569ea2879 100644 --- a/spec/controllers/legislation/answers_controller_spec.rb +++ b/spec/controllers/legislation/answers_controller_spec.rb @@ -4,7 +4,7 @@ describe Legislation::AnswersController do describe 'POST create' do before(:each) do - @process = create(:legislation_process, debate_start_date: Date.current - 3.day, debate_end_date: Date.current + 2.days) + @process = create(:legislation_process, debate_start_date: Date.current - 3.days, debate_end_date: Date.current + 2.days) @question = create(:legislation_question, process: @process, title: "Question 1") @question_option = create(:legislation_question_option, question: @question, value: "Yes") @user = create(:user, :level_two) diff --git a/spec/controllers/management/sessions_controller_spec.rb b/spec/controllers/management/sessions_controller_spec.rb index d2d6b5f8b..ec8f762d9 100644 --- a/spec/controllers/management/sessions_controller_spec.rb +++ b/spec/controllers/management/sessions_controller_spec.rb @@ -5,15 +5,15 @@ describe Management::SessionsController do describe 'Sign in' do it "should deny access if wrong manager credentials" do allow_any_instance_of(ManagerAuthenticator).to receive(:auth).and_return(false) - expect { get :create, login: "nonexistent" , clave_usuario: "wrong"}.to raise_error CanCan::AccessDenied + expect { get :create, login: "nonexistent", clave_usuario: "wrong"}.to raise_error CanCan::AccessDenied expect(session[:manager]).to be_nil end it "should redirect to management root path if authorized manager with right credentials" do - manager = {login: "JJB033", user_key: "31415926" , date: "20151031135905"} + manager = {login: "JJB033", user_key: "31415926", date: "20151031135905"} allow_any_instance_of(ManagerAuthenticator).to receive(:auth).and_return(manager) - get :create, login: "JJB033" , clave_usuario: "31415926", fecha_conexion: "20151031135905" + get :create, login: "JJB033", clave_usuario: "31415926", fecha_conexion: "20151031135905" expect(response).to be_redirect expect(session[:manager][:login]).to eq "JJB033" end diff --git a/spec/controllers/management/users_controller_spec.rb b/spec/controllers/management/users_controller_spec.rb index ed73aa053..e57ff7b15 100644 --- a/spec/controllers/management/users_controller_spec.rb +++ b/spec/controllers/management/users_controller_spec.rb @@ -4,13 +4,13 @@ describe Management::UsersController do describe 'logout' do it "should remove user data from the session" do - session[:manager] = {user_key: "31415926" , date: "20151031135905", login: "JJB033"} + session[:manager] = {user_key: "31415926", date: "20151031135905", login: "JJB033"} session[:document_type] = "1" session[:document_number] = "12345678Z" get :logout - expect(session[:manager]).to eq({user_key: "31415926" , date: "20151031135905", login: "JJB033"}) + expect(session[:manager]).to eq({user_key: "31415926", date: "20151031135905", login: "JJB033"}) expect(session[:document_type]).to be_nil expect(session[:document_number]).to be_nil expect(response).to be_redirect diff --git a/spec/factories.rb b/spec/factories.rb index 42c8dbfc5..a93d911ed 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -99,7 +99,7 @@ FactoryGirl.define do factory :verified_user do document_number - document_type 'dni' + document_type 'dni' end factory :debate do @@ -322,6 +322,12 @@ FactoryGirl.define do reason "unfeasible" end + factory :budget_investment_milestone, class: 'Budget::Investment::Milestone' do + association :investment, factory: :budget_investment + sequence(:title) { |n| "Budget investment milestone #{n} title" } + description 'Milestone description' + end + factory :vote do association :votable, factory: :debate association :voter, factory: :user @@ -372,7 +378,7 @@ FactoryGirl.define do factory :annotation do quote "ipsum" text "Loremp ipsum dolor" - ranges [{"start"=>"/div[1]", "startOffset"=>5, "end"=>"/div[1]", "endOffset"=>10}] + ranges [{"start" => "/div[1]", "startOffset" => 5, "end" => "/div[1]", "endOffset" => 10}] legacy_legislation user end @@ -632,7 +638,7 @@ FactoryGirl.define do end_date Date.current + 8.days debate_start_date Date.current + 2.days debate_end_date Date.current + 4.days - draft_publication_date Date.current + 5.day + draft_publication_date Date.current + 5.days allegations_start_date Date.current + 5.days allegations_end_date Date.current + 7.days result_publication_date Date.current + 8.days @@ -643,7 +649,7 @@ FactoryGirl.define do end_date Date.current - 2.days debate_start_date Date.current - 12.days debate_end_date Date.current - 9.days - draft_publication_date Date.current - 8.day + draft_publication_date Date.current - 8.days allegations_start_date Date.current - 8.days allegations_end_date Date.current - 4.days result_publication_date Date.current - 2.days @@ -653,7 +659,7 @@ FactoryGirl.define do start_date Date.current - 5.days end_date Date.current + 5.days debate_start_date Date.current - 5.days - debate_end_date Date.current + 1.days + debate_end_date Date.current + 1.day draft_publication_date Date.current + 1.day allegations_start_date Date.current + 2.days allegations_end_date Date.current + 3.days @@ -695,7 +701,7 @@ LOREM_IPSUM author factory: :user quote "ipsum" text "a comment" - ranges [{"start"=>"/p[1]", "startOffset"=>6, "end"=>"/p[1]", "endOffset"=>11}] + ranges [{"start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11}] range_start "/p[1]" range_start_offset 6 range_end "/p[1]" diff --git a/spec/features/admin/banners_spec.rb b/spec/features/admin/banners_spec.rb index 70d9f7621..28a105bed 100644 --- a/spec/features/admin/banners_spec.rb +++ b/spec/features/admin/banners_spec.rb @@ -29,7 +29,7 @@ feature 'Admin banners magement' do target_url: "http://www.url.com", style: "banner-style.banner-three", image: "banner-img.banner-three", - post_started_at: (Time.current - 1.days), + post_started_at: (Time.current - 1.day), post_ended_at: (Time.current + 10.days)) @banner4 = create(:banner, title: "Banner number four", diff --git a/spec/features/admin/budget_investment_milestones_spec.rb b/spec/features/admin/budget_investment_milestones_spec.rb new file mode 100644 index 000000000..9bcb78479 --- /dev/null +++ b/spec/features/admin/budget_investment_milestones_spec.rb @@ -0,0 +1,92 @@ +require 'rails_helper' + +feature 'Admin budget investment milestones' do + + background do + admin = create(:administrator) + login_as(admin.user) + + @investment = create(:budget_investment) + end + + context "Index" do + scenario 'Displaying milestones' do + milestone = create(:budget_investment_milestone, investment: @investment) + + visit admin_budget_budget_investment_path(@investment.budget, @investment) + + expect(page).to have_content("Milestone") + expect(page).to have_content(milestone.title) + expect(page).to have_content(milestone.id) + end + + scenario 'Displaying no_milestones text' do + visit admin_budget_budget_investment_path(@investment.budget, @investment) + + expect(page).to have_content("Milestone") + expect(page).to have_content("Don't have defined milestones") + end + end + + context "New" do + scenario "Add milestone" do + visit admin_budget_budget_investment_path(@investment.budget, @investment) + + click_link 'Create new milestone' + + fill_in 'budget_investment_milestone_title', with: 'New title milestone' + fill_in 'budget_investment_milestone_description', with: 'New description milestone' + + click_button 'Create milestone' + + expect(page).to have_content 'New title milestone' + expect(page).to have_content 'New description milestone' + end + + scenario "Show validation errors on milestone form" do + visit admin_budget_budget_investment_path(@investment.budget, @investment) + + click_link 'Create new milestone' + + fill_in 'budget_investment_milestone_description', with: 'New description milestone' + + click_button 'Create milestone' + + within "#new_budget_investment_milestone" do + expect(page).to have_content "can't be blank" + expect(page).to have_content 'New description milestone' + end + end + end + + context "Edit" do + scenario "Change title and description" do + milestone = create(:budget_investment_milestone, investment: @investment) + + visit admin_budget_budget_investment_path(@investment.budget, @investment) + + click_link milestone.title + + fill_in 'budget_investment_milestone_title', with: 'Changed title' + fill_in 'budget_investment_milestone_description', with: 'Changed description' + + click_button 'Update milestone' + + expect(page).to have_content 'Changed title' + expect(page).to have_content 'Changed description' + end + end + + context "Delete" do + scenario "Remove milestone" do + milestone = create(:budget_investment_milestone, investment: @investment, title: "Title will it remove") + + visit admin_budget_budget_investment_path(@investment.budget, @investment) + + click_link "Delete milestone" + + expect(page).to_not have_content 'Title will it remove' + end + end + +end diff --git a/spec/features/admin/budget_investments_spec.rb b/spec/features/admin/budget_investments_spec.rb index 52c008c18..c50a05f32 100644 --- a/spec/features/admin/budget_investments_spec.rb +++ b/spec/features/admin/budget_investments_spec.rb @@ -27,7 +27,7 @@ feature 'Admin budget investments' do context "Index" do - scenario 'Displaying investmentss' do + scenario 'Displaying investments' do budget_investment = create(:budget_investment, budget: @budget, cached_votes_up: 77) visit admin_budget_budget_investments_path(budget_id: @budget.id) expect(page).to have_content(budget_investment.title) diff --git a/spec/features/admin/budgets_spec.rb b/spec/features/admin/budgets_spec.rb index 57cf1ec16..d4ed2d2ac 100644 --- a/spec/features/admin/budgets_spec.rb +++ b/spec/features/admin/budgets_spec.rb @@ -109,6 +109,33 @@ feature 'Admin budgets' do end + context "Calculate Budget's Winner Investments" do + + scenario 'For a Budget in reviewing balloting' do + budget = create(:budget, phase: 'reviewing_ballots') + group = create(:budget_group, budget: budget) + heading = create(:budget_heading, group: group, price: 4) + unselected_investment = create(:budget_investment, :unselected, heading: heading, price: 1, ballot_lines_count: 3) + winner_investment = create(:budget_investment, :winner, heading: heading, price: 3, ballot_lines_count: 2) + selected_investment = create(:budget_investment, :selected, heading: heading, price: 2, ballot_lines_count: 1) + + visit edit_admin_budget_path(budget) + click_link 'Calculate Winner Investments' + expect(page).to have_content 'Winners being calculated, it may take a minute.' + expect(page).to have_content winner_investment.title + expect(page).not_to have_content unselected_investment.title + expect(page).not_to have_content selected_investment.title + end + + scenario 'For a finished Budget' do + budget = create(:budget, phase: 'finished') + + visit edit_admin_budget_path(budget) + expect(page).not_to have_content 'Calculate Winner Investments' + end + + end + context 'Manage groups and headings' do scenario 'Create group', :js do diff --git a/spec/features/admin/poll/polls_spec.rb b/spec/features/admin/poll/polls_spec.rb index d2041a583..4508e5bba 100644 --- a/spec/features/admin/poll/polls_spec.rb +++ b/spec/features/admin/poll/polls_spec.rb @@ -356,7 +356,7 @@ feature 'Admin polls' do question_2.valid_answers.each_with_index do |answer, i| within("#question_#{question_2.id}_#{i}_result") do expect(page).to have_content(answer) - expect(page).to have_content([0,15][i]) + expect(page).to have_content([0, 15][i]) end end diff --git a/spec/features/budgets/investments_spec.rb b/spec/features/budgets/investments_spec.rb index e131973da..f8110b614 100644 --- a/spec/features/budgets/investments_spec.rb +++ b/spec/features/budgets/investments_spec.rb @@ -389,6 +389,37 @@ feature 'Budget Investments' do expect(page).to have_content(investment.unfeasibility_explanation) end + scenario "Show milestones", :js do + user = create(:user) + investment = create(:budget_investment) + milestone = create(:budget_investment_milestone, investment: investment, title: "New text to show") + + login_as(user) + visit budget_investment_path(budget_id: investment.budget.id, id: investment.id) + + find("#tab-milestones-label").trigger('click') + + within("#tab-milestones") do + expect(page).to have_content(milestone.title) + expect(page).to have_content(milestone.description) + expect(page).to have_content("Published #{milestone.created_at.strftime("%d/%m/%Y")}") + end + end + + scenario "Show no_milestones text", :js do + user = create(:user) + investment = create(:budget_investment) + + login_as(user) + visit budget_investment_path(budget_id: investment.budget.id, id: investment.id) + + find("#tab-milestones-label").trigger('click') + + within("#tab-milestones") do + expect(page).to have_content("Don't have defined milestones") + end + end + context "Destroy" do scenario "Admin cannot destroy budget investments" do diff --git a/spec/features/comments/budget_investments_spec.rb b/spec/features/comments/budget_investments_spec.rb index b36f51b8f..73e1b0869 100644 --- a/spec/features/comments/budget_investments_spec.rb +++ b/spec/features/comments/budget_investments_spec.rb @@ -166,9 +166,12 @@ feature 'Commenting Budget::Investments' do fill_in "comment-body-budget_investment_#{investment.id}", with: 'Have you thought about...?' click_button 'Publish comment' + within "#tab-comments-label" do + expect(page).to have_content 'Comments (1)' + end + within "#comments" do expect(page).to have_content 'Have you thought about...?' - expect(page).to have_content 'Comments (1)' end end @@ -392,7 +395,7 @@ feature 'Commenting Budget::Investments' do end scenario "can not comment as a moderator" do - admin = create(:administrator) + admin = create(:administrator) login_as(admin.user) visit budget_investment_path(investment.budget, investment) @@ -489,4 +492,4 @@ feature 'Commenting Budget::Investments' do end end -end \ No newline at end of file +end diff --git a/spec/features/comments/debates_spec.rb b/spec/features/comments/debates_spec.rb index 577ba6fd0..2a4d46ec3 100644 --- a/spec/features/comments/debates_spec.rb +++ b/spec/features/comments/debates_spec.rb @@ -407,7 +407,7 @@ feature 'Commenting debates' do end scenario "can not comment as a moderator" do - admin = create(:administrator) + admin = create(:administrator) login_as(admin.user) visit debate_path(debate) diff --git a/spec/features/comments/legislation_annotations_spec.rb b/spec/features/comments/legislation_annotations_spec.rb index b7e57039d..d8c539201 100644 --- a/spec/features/comments/legislation_annotations_spec.rb +++ b/spec/features/comments/legislation_annotations_spec.rb @@ -409,7 +409,7 @@ feature 'Commenting legislation questions' do end scenario "can not comment as a moderator" do - admin = create(:administrator) + admin = create(:administrator) login_as(admin.user) visit legislation_process_draft_version_annotation_path(legislation_annotation.draft_version.process, legislation_annotation.draft_version, legislation_annotation) @@ -510,8 +510,8 @@ feature 'Commenting legislation questions' do feature "Merged comment threads", :js do let!(:draft_version) { create(:legislation_draft_version, :published) } - let!(:annotation1) { create(:legislation_annotation, draft_version: draft_version, text: "my annotation", ranges: [{"start"=>"/p[1]", "startOffset"=>1, "end"=>"/p[1]", "endOffset"=>5}]) } - let!(:annotation2) { create(:legislation_annotation, draft_version: draft_version, text: "my other annotation", ranges: [{"start"=>"/p[1]", "startOffset"=>1, "end"=>"/p[1]", "endOffset"=>10}]) } + let!(:annotation1) { create(:legislation_annotation, draft_version: draft_version, text: "my annotation", ranges: [{"start" => "/p[1]", "startOffset" => 1, "end" => "/p[1]", "endOffset" => 5}]) } + let!(:annotation2) { create(:legislation_annotation, draft_version: draft_version, text: "my other annotation", ranges: [{"start" => "/p[1]", "startOffset" => 1, "end" => "/p[1]", "endOffset" => 10}]) } background do login_as user diff --git a/spec/features/comments/legislation_questions_spec.rb b/spec/features/comments/legislation_questions_spec.rb index 35521e89b..4bdaed1ee 100644 --- a/spec/features/comments/legislation_questions_spec.rb +++ b/spec/features/comments/legislation_questions_spec.rb @@ -192,7 +192,7 @@ feature 'Commenting legislation questions' do end scenario "Can't create comments if debate phase is not open", :js do - process.update_attributes(debate_start_date: Date.current - 2.days, debate_end_date: Date.current - 1.days) + process.update_attributes(debate_start_date: Date.current - 2.days, debate_end_date: Date.current - 1.day) login_as(user) visit legislation_process_question_path(legislation_question.process, legislation_question) @@ -424,7 +424,7 @@ feature 'Commenting legislation questions' do end scenario "can not comment as a moderator" do - admin = create(:administrator) + admin = create(:administrator) login_as(admin.user) visit legislation_process_question_path(legislation_question.process, legislation_question) diff --git a/spec/features/comments/proposals_spec.rb b/spec/features/comments/proposals_spec.rb index 9f3d22966..ad088b79a 100644 --- a/spec/features/comments/proposals_spec.rb +++ b/spec/features/comments/proposals_spec.rb @@ -395,7 +395,7 @@ feature 'Commenting proposals' do end scenario "can not comment as a moderator" do - admin = create(:administrator) + admin = create(:administrator) login_as(admin.user) visit proposal_path(proposal) diff --git a/spec/features/debates_spec.rb b/spec/features/debates_spec.rb index 6914a55f7..4d48508f2 100644 --- a/spec/features/debates_spec.rb +++ b/spec/features/debates_spec.rb @@ -629,7 +629,7 @@ feature 'Debates' do click_link "Advanced search" select "Customized", from: "js-advanced-search-date-min" fill_in "advanced_search_date_min", with: 7.days.ago - fill_in "advanced_search_date_max", with: 1.days.ago + fill_in "advanced_search_date_max", with: 1.day.ago click_button "Filter" within("#debates") do @@ -709,7 +709,7 @@ feature 'Debates' do select "Customized", from: "js-advanced-search-date-min" fill_in "advanced_search_date_min", with: 7.days.ago - fill_in "advanced_search_date_max", with: 1.days.ago + fill_in "advanced_search_date_max", with: 1.day.ago click_button "Filter" within "#js-advanced-search" do diff --git a/spec/features/legacy_legislation_spec.rb b/spec/features/legacy_legislation_spec.rb index e2f1ba915..5df3b8f76 100644 --- a/spec/features/legacy_legislation_spec.rb +++ b/spec/features/legacy_legislation_spec.rb @@ -77,8 +77,8 @@ feature 'Legacy Legislation' do scenario 'Search' do legacy_legislation = create(:legacy_legislation) - annotation1 = create(:annotation, legacy_legislation: legacy_legislation, text: "my annotation", ranges: [{"start"=>"/div[1]", "startOffset"=>5, "end"=>"/div[1]", "endOffset"=>10}]) - annotation2 = create(:annotation, legacy_legislation: legacy_legislation, text: "my other annotation", ranges: [{"start"=>"/div[1]", "startOffset"=>12, "end"=>"/div[1]", "endOffset"=>19}]) + annotation1 = create(:annotation, legacy_legislation: legacy_legislation, text: "my annotation", ranges: [{"start" => "/div[1]", "startOffset" => 5, "end" => "/div[1]", "endOffset" => 10}]) + annotation2 = create(:annotation, legacy_legislation: legacy_legislation, text: "my other annotation", ranges: [{"start" => "/div[1]", "startOffset" => 12, "end" => "/div[1]", "endOffset" => 19}]) visit legacy_legislation_path(legacy_legislation) diff --git a/spec/features/legislation/draft_versions_spec.rb b/spec/features/legislation/draft_versions_spec.rb index 7288c0cf0..c70a8f1a3 100644 --- a/spec/features/legislation/draft_versions_spec.rb +++ b/spec/features/legislation/draft_versions_spec.rb @@ -173,8 +173,8 @@ feature 'Legislation Draft Versions' do scenario 'View annotations and comments' do draft_version = create(:legislation_draft_version, :published) - annotation1 = create(:legislation_annotation, draft_version: draft_version, text: "my annotation", ranges: [{"start"=>"/p[1]", "startOffset"=>5, "end"=>"/p[1]", "endOffset"=>10}]) - annotation2 = create(:legislation_annotation, draft_version: draft_version, text: "my other annotation", ranges: [{"start"=>"/p[1]", "startOffset"=>12, "end"=>"/p[1]", "endOffset"=>19}]) + annotation1 = create(:legislation_annotation, draft_version: draft_version, text: "my annotation", ranges: [{"start" => "/p[1]", "startOffset" => 5, "end" => "/p[1]", "endOffset" => 10}]) + annotation2 = create(:legislation_annotation, draft_version: draft_version, text: "my other annotation", ranges: [{"start" => "/p[1]", "startOffset" => 12, "end" => "/p[1]", "endOffset" => 19}]) comment = create(:comment, commentable: annotation1) visit legislation_process_draft_version_path(draft_version.process, draft_version) @@ -190,7 +190,7 @@ feature 'Legislation Draft Versions' do scenario "Publish new comment for an annotation from comments box" do draft_version = create(:legislation_draft_version, :published) - annotation = create(:legislation_annotation, draft_version: draft_version, text: "my annotation", ranges: [{"start"=>"/p[1]", "startOffset"=>6, "end"=>"/p[1]", "endOffset"=>11}]) + annotation = create(:legislation_annotation, draft_version: draft_version, text: "my annotation", ranges: [{"start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11}]) visit legislation_process_draft_version_path(draft_version.process, draft_version) @@ -212,8 +212,8 @@ feature 'Legislation Draft Versions' do scenario 'View annotations and comments in an included range' do draft_version = create(:legislation_draft_version, :published) - annotation1 = create(:legislation_annotation, draft_version: draft_version, text: "my annotation", ranges: [{"start"=>"/p[1]", "startOffset"=>1, "end"=>"/p[1]", "endOffset"=>5}]) - annotation2 = create(:legislation_annotation, draft_version: draft_version, text: "my other annotation", ranges: [{"start"=>"/p[1]", "startOffset"=>1, "end"=>"/p[1]", "endOffset"=>10}]) + annotation1 = create(:legislation_annotation, draft_version: draft_version, text: "my annotation", ranges: [{"start" => "/p[1]", "startOffset" => 1, "end" => "/p[1]", "endOffset" => 5}]) + annotation2 = create(:legislation_annotation, draft_version: draft_version, text: "my other annotation", ranges: [{"start" => "/p[1]", "startOffset" => 1, "end" => "/p[1]", "endOffset" => 10}]) visit legislation_process_draft_version_path(draft_version.process, draft_version) @@ -232,8 +232,8 @@ feature 'Legislation Draft Versions' do context "Annotations page" do background do @draft_version = create(:legislation_draft_version, :published) - @annotation_1 = create(:legislation_annotation, draft_version: @draft_version, text: "my annotation", quote: "ipsum", ranges: [{"start"=>"/p[1]", "startOffset"=>6, "end"=>"/p[1]", "endOffset"=>11}]) - @annotation_2 = create(:legislation_annotation, draft_version: @draft_version, text: "my other annotation", quote: "audiam", ranges: [{"start"=>"/p[3]", "startOffset"=>6, "end"=>"/p[3]", "endOffset"=>11}]) + @annotation_1 = create(:legislation_annotation, draft_version: @draft_version, text: "my annotation", quote: "ipsum", ranges: [{"start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11}]) + @annotation_2 = create(:legislation_annotation, draft_version: @draft_version, text: "my other annotation", quote: "audiam", ranges: [{"start" => "/p[3]", "startOffset" => 6, "end" => "/p[3]", "endOffset" => 11}]) end scenario "See all annotations for a draft version" do @@ -247,9 +247,9 @@ feature 'Legislation Draft Versions' do background do @process = create(:legislation_process) @draft_version_1 = create(:legislation_draft_version, :published, process: @process, title: "Version 1", body: "Text with quote for version 1") - @annotation_1 = create(:legislation_annotation, draft_version: @draft_version_1, text: "annotation for version 1", quote: "quote for version 1", ranges: [{"start"=>"/p[1]", "startOffset"=>11, "end"=>"/p[1]", "endOffset"=>30}]) + @annotation_1 = create(:legislation_annotation, draft_version: @draft_version_1, text: "annotation for version 1", quote: "quote for version 1", ranges: [{"start" => "/p[1]", "startOffset" => 11, "end" => "/p[1]", "endOffset" => 30}]) @draft_version_2 = create(:legislation_draft_version, :published, process: @process, title: "Version 2", body: "Text with quote for version 2") - @annotation_1 = create(:legislation_annotation, draft_version: @draft_version_2, text: "annotation for version 2", quote: "quote for version 2", ranges: [{"start"=>"/p[1]", "startOffset"=>11, "end"=>"/p[1]", "endOffset"=>30}]) + @annotation_1 = create(:legislation_annotation, draft_version: @draft_version_2, text: "annotation for version 2", quote: "quote for version 2", ranges: [{"start" => "/p[1]", "startOffset" => 11, "end" => "/p[1]", "endOffset" => 30}]) end scenario "without js" do @@ -278,8 +278,8 @@ feature 'Legislation Draft Versions' do context "Annotation comments page" do background do @draft_version = create(:legislation_draft_version, :published) - @annotation_1 = create(:legislation_annotation, draft_version: @draft_version, text: "my annotation", quote: "ipsum", ranges: [{"start"=>"/p[1]", "startOffset"=>6, "end"=>"/p[1]", "endOffset"=>11}]) - @annotation_2 = create(:legislation_annotation, draft_version: @draft_version, text: "my other annotation", quote: "audiam", ranges: [{"start"=>"/p[3]", "startOffset"=>6, "end"=>"/p[3]", "endOffset"=>11}]) + @annotation_1 = create(:legislation_annotation, draft_version: @draft_version, text: "my annotation", quote: "ipsum", ranges: [{"start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11}]) + @annotation_2 = create(:legislation_annotation, draft_version: @draft_version, text: "my other annotation", quote: "audiam", ranges: [{"start" => "/p[3]", "startOffset" => 6, "end" => "/p[3]", "endOffset" => 11}]) end scenario "See one annotation with replies for a draft version" do diff --git a/spec/features/legislation/questions_spec.rb b/spec/features/legislation/questions_spec.rb index 77503b5a9..17d55c16c 100644 --- a/spec/features/legislation/questions_spec.rb +++ b/spec/features/legislation/questions_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' feature 'Legislation' do context 'process debate page' do before(:each) do - @process = create(:legislation_process, debate_start_date: Date.current - 3.day, debate_end_date: Date.current + 2.days) + @process = create(:legislation_process, debate_start_date: Date.current - 3.days, debate_end_date: Date.current + 2.days) create(:legislation_question, process: @process, title: "Question 1") create(:legislation_question, process: @process, title: "Question 2") create(:legislation_question, process: @process, title: "Question 3") diff --git a/spec/features/management/users_spec.rb b/spec/features/management/users_spec.rb index e7c43f4a9..cdb0ec879 100644 --- a/spec/features/management/users_spec.rb +++ b/spec/features/management/users_spec.rb @@ -29,7 +29,7 @@ feature 'Users' do expect(user).to be_level_three_verified expect(user).to be_residence_verified expect(user).to_not be_confirmed - expect(user.date_of_birth).to have_content (Date.new(1980,12,31)) + expect(user.date_of_birth).to have_content (Date.new(1980, 12, 31)) sent_token = /.*confirmation_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1] visit user_confirmation_path(confirmation_token: sent_token) @@ -69,7 +69,7 @@ feature 'Users' do expect(user).to be_level_three_verified expect(user).to be_residence_verified expect(user).to be_confirmed - expect(user.date_of_birth).to have_content (Date.new(1980,12,31)) + expect(user.date_of_birth).to have_content (Date.new(1980, 12, 31)) end scenario 'Delete a level 2 user account from document verification page', :js do diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index 16d928f4e..cfe9cc918 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -99,7 +99,7 @@ feature 'Proposals' do end scenario "Show Vimeo video" do - proposal = create(:proposal, video_url: "https://vimeo.com/7232823" ) + proposal = create(:proposal, video_url: "https://vimeo.com/7232823") visit proposal_path(proposal) expect(page).to have_selector("div[id='js-embedded-video']") expect(page.html).to include 'https://player.vimeo.com/video/7232823' @@ -1025,7 +1025,7 @@ feature 'Proposals' do click_link "Advanced search" select "Customized", from: "js-advanced-search-date-min" fill_in "advanced_search_date_min", with: 7.days.ago - fill_in "advanced_search_date_max", with: 1.days.ago + fill_in "advanced_search_date_max", with: 1.day.ago click_button "Filter" expect(page).to have_content("There are 2 citizen proposals") @@ -1108,7 +1108,7 @@ feature 'Proposals' do select "Customized", from: "js-advanced-search-date-min" fill_in "advanced_search_date_min", with: 7.days.ago.to_date - fill_in "advanced_search_date_max", with: 1.days.ago.to_date + fill_in "advanced_search_date_max", with: 1.day.ago.to_date click_button "Filter" expect(page).to have_content("citizen proposals cannot be found") diff --git a/spec/features/tags/budget_investments_spec.rb b/spec/features/tags/budget_investments_spec.rb index 4c978c740..1269b0a21 100644 --- a/spec/features/tags/budget_investments_spec.rb +++ b/spec/features/tags/budget_investments_spec.rb @@ -87,7 +87,7 @@ feature 'Tags' do select 'Health: More hospitals', from: 'budget_investment_heading_id' fill_in 'budget_investment_title', with: 'Build a skyscraper' fill_in_ckeditor 'budget_investment_description', with: 'If I had a gym near my place I could go do Zumba' - check 'budget_investment_terms_of_service' + check 'budget_investment_terms_of_service' find('.js-add-tag-link', text: 'Education').click click_button 'Create Investment' diff --git a/spec/features/valuation/budget_investments_spec.rb b/spec/features/valuation/budget_investments_spec.rb index b74213d7e..7b1d48b8b 100644 --- a/spec/features/valuation/budget_investments_spec.rb +++ b/spec/features/valuation/budget_investments_spec.rb @@ -289,10 +289,10 @@ feature 'Valuation budget investments' do end scenario 'Feasibility selection makes proper fields visible', :js do - feasible_fields = ['Price (€)','Cost during the first year (€)','Price explanation','Time scope'] + feasible_fields = ['Price (€)', 'Cost during the first year (€)', 'Price explanation', 'Time scope'] unfeasible_fields = ['Feasibility explanation'] - any_feasibility_fields = ['Valuation finished','Internal comments'] - undecided_fields = feasible_fields + unfeasible_fields + any_feasibility_fields + any_feasibility_fields = ['Valuation finished', 'Internal comments'] + undecided_fields = feasible_fields + unfeasible_fields + any_feasibility_fields visit edit_valuation_budget_budget_investment_path(@budget, @investment) diff --git a/spec/features/valuation/spending_proposals_spec.rb b/spec/features/valuation/spending_proposals_spec.rb index e19c4fb41..2b2e06908 100644 --- a/spec/features/valuation/spending_proposals_spec.rb +++ b/spec/features/valuation/spending_proposals_spec.rb @@ -311,9 +311,9 @@ feature 'Valuation spending proposals' do end scenario 'Feasibility selection makes proper fields visible', :js do - feasible_true_fields = ['Price (€)','Cost during the first year (€)','Price explanation','Time scope'] + feasible_true_fields = ['Price (€)', 'Cost during the first year (€)', 'Price explanation', 'Time scope'] feasible_false_fields = ['Feasibility explanation'] - feasible_any_fields = ['Valuation finished','Internal comments'] + feasible_any_fields = ['Valuation finished', 'Internal comments'] feasible_nil_fields = feasible_true_fields + feasible_false_fields + feasible_any_fields visit edit_valuation_spending_proposal_path(@spending_proposal) @@ -403,7 +403,7 @@ feature 'Valuation spending proposals' do end scenario "Summary table" do - scarlett = create(:valuator) + scarlett = create(:valuator) john = create(:valuator) finished_and_feasible1 = create(:spending_proposal, valuation_finished: true, feasible: true, price: '3000000') @@ -452,7 +452,7 @@ feature 'Valuation spending proposals' do scenario "Order by investment project count" do isabel = create(:valuator) john = create(:valuator) - scarlett = create(:valuator) + scarlett = create(:valuator) 3.times { create(:spending_proposal, valuators: [scarlett])} 1.times { create(:spending_proposal, valuators: [john])} diff --git a/spec/helpers/proposals_helper_spec.rb b/spec/helpers/proposals_helper_spec.rb index cee1ec648..d71178d9d 100644 --- a/spec/helpers/proposals_helper_spec.rb +++ b/spec/helpers/proposals_helper_spec.rb @@ -9,12 +9,12 @@ describe ProposalsHelper do end it "should be a between 1 and 100 if there are votes but less than needed" do - proposal = create(:proposal, cached_votes_up: Proposal.votes_needed_for_success/2) + proposal = create(:proposal, cached_votes_up: Proposal.votes_needed_for_success / 2) expect(progress_bar_percentage(proposal)).to eq 50 end it "should be 100 if there are more votes than needed" do - proposal = create(:proposal, cached_votes_up: Proposal.votes_needed_for_success*2) + proposal = create(:proposal, cached_votes_up: Proposal.votes_needed_for_success * 2) expect(progress_bar_percentage(proposal)).to eq 100 end end @@ -31,12 +31,12 @@ describe ProposalsHelper do end it "should be a between 1 and 100 if there are votes but less than needed" do - proposal = create(:proposal, cached_votes_up: Proposal.votes_needed_for_success/2) + proposal = create(:proposal, cached_votes_up: Proposal.votes_needed_for_success / 2) expect(supports_percentage(proposal)).to eq "50%" end it "should be 100 if there are more votes than needed" do - proposal = create(:proposal, cached_votes_up: Proposal.votes_needed_for_success*2) + proposal = create(:proposal, cached_votes_up: Proposal.votes_needed_for_success * 2) expect(supports_percentage(proposal)).to eq "100%" end diff --git a/spec/lib/census_api_spec.rb b/spec/lib/census_api_spec.rb index fb14f39c5..274101f22 100644 --- a/spec/lib/census_api_spec.rb +++ b/spec/lib/census_api_spec.rb @@ -39,7 +39,7 @@ describe CensusApi do response = api.call(1, "123456") expect(response).to be_valid - expect(response.date_of_birth).to eq(Date.new(1980,1,1)) + expect(response.date_of_birth).to eq(Date.new(1980, 1, 1)) end it "returns the last failed response" do diff --git a/spec/lib/graphql_spec.rb b/spec/lib/graphql_spec.rb index 725cc109a..b3b8b377f 100644 --- a/spec/lib/graphql_spec.rb +++ b/spec/lib/graphql_spec.rb @@ -321,7 +321,7 @@ describe 'ConsulSchema' do it 'does not include hidden comments' do visible_comment = create(:comment) - hidden_comment = create(:comment, hidden_at: Time.now) + hidden_comment = create(:comment, hidden_at: Time.current) response = execute('{ comments { edges { node { body } } } }') received_comments = extract_fields(response, 'comments', 'body') @@ -331,7 +331,7 @@ describe 'ConsulSchema' do it 'does not include comments from hidden proposals' do visible_proposal = create(:proposal) - hidden_proposal = create(:proposal, hidden_at: Time.now) + hidden_proposal = create(:proposal, hidden_at: Time.current) visible_proposal_comment = create(:comment, commentable: visible_proposal) hidden_proposal_comment = create(:comment, commentable: hidden_proposal) @@ -344,7 +344,7 @@ describe 'ConsulSchema' do it 'does not include comments from hidden debates' do visible_debate = create(:debate) - hidden_debate = create(:debate, hidden_at: Time.now) + hidden_debate = create(:debate, hidden_at: Time.current) visible_debate_comment = create(:comment, commentable: visible_debate) hidden_debate_comment = create(:comment, commentable: hidden_debate) @@ -567,7 +567,7 @@ describe 'ConsulSchema' do it 'does not include votes of hidden proposals' do visible_proposal = create(:proposal) - hidden_proposal = create(:proposal, hidden_at: Time.now) + hidden_proposal = create(:proposal, hidden_at: Time.current) visible_proposal_vote = create(:vote, votable: visible_proposal) hidden_proposal_vote = create(:vote, votable: hidden_proposal) @@ -580,7 +580,7 @@ describe 'ConsulSchema' do it 'does not include votes of hidden comments' do visible_comment = create(:comment) - hidden_comment = create(:comment, hidden_at: Time.now) + hidden_comment = create(:comment, hidden_at: Time.current) visible_comment_vote = create(:vote, votable: visible_comment) hidden_comment_vote = create(:vote, votable: hidden_comment) diff --git a/spec/models/abilities/common_spec.rb b/spec/models/abilities/common_spec.rb index 7c02f50fd..f5e3a6599 100644 --- a/spec/models/abilities/common_spec.rb +++ b/spec/models/abilities/common_spec.rb @@ -197,7 +197,7 @@ describe "Abilities::Common" do it { should_not be_able_to(:vote, investment_in_accepting_budget) } it { should be_able_to(:vote, investment_in_selecting_budget) } it { should_not be_able_to(:vote, investment_in_balloting_budget) } - + it { should_not be_able_to(:destroy, investment_in_accepting_budget) } it { should_not be_able_to(:destroy, investment_in_reviewing_budget) } it { should_not be_able_to(:destroy, investment_in_selecting_budget) } diff --git a/spec/models/abilities/moderator_spec.rb b/spec/models/abilities/moderator_spec.rb index 332f69450..f3135c8d9 100644 --- a/spec/models/abilities/moderator_spec.rb +++ b/spec/models/abilities/moderator_spec.rb @@ -35,20 +35,20 @@ describe "Abilities::Moderator" do let(:rejected_organization) { create(:organization, :rejected) } let(:verified_organization) { create(:organization, :verified) } - it { should be_able_to( :verify, pending_organization) } - it { should be_able_to( :reject, pending_organization) } + it { should be_able_to(:verify, pending_organization) } + it { should be_able_to(:reject, pending_organization) } it { should_not be_able_to(:verify, verified_organization) } - it { should be_able_to( :reject, verified_organization) } + it { should be_able_to(:reject, verified_organization) } it { should_not be_able_to(:reject, rejected_organization) } - it { should be_able_to( :verify, rejected_organization) } + it { should be_able_to(:verify, rejected_organization) } end describe "hiding, reviewing and restoring" do let(:ignored_comment) { create(:comment, :with_ignored_flag) } let(:ignored_debate) { create(:debate, :with_ignored_flag) } - let(:ignored_proposal) { create(:proposal,:with_ignored_flag) } + let(:ignored_proposal) { create(:proposal, :with_ignored_flag) } it { should be_able_to(:hide, comment) } it { should be_able_to(:hide_in_moderation_screen, comment) } diff --git a/spec/models/ahoy/data_source_spec.rb b/spec/models/ahoy/data_source_spec.rb index deb1fd056..863820710 100644 --- a/spec/models/ahoy/data_source_spec.rb +++ b/spec/models/ahoy/data_source_spec.rb @@ -3,9 +3,9 @@ require 'rails_helper' describe Ahoy::DataSource do describe '#build' do before :each do - time_1 = DateTime.parse("2015-01-01") - time_2 = DateTime.parse("2015-01-02") - time_3 = DateTime.parse("2015-01-03") + time_1 = DateTime.parse("2015-01-01").in_time_zone + time_2 = DateTime.parse("2015-01-02").in_time_zone + time_3 = DateTime.parse("2015-01-03").in_time_zone create :ahoy_event, name: 'foo', time: time_1 create :ahoy_event, name: 'foo', time: time_1 @@ -23,14 +23,14 @@ describe Ahoy::DataSource do it 'should work with single data sources' do ds = Ahoy::DataSource.new ds.add 'foo', Ahoy::Event.where(name: 'foo').group_by_day(:time).count - expect(ds.build).to eq :x=>["2015-01-01", "2015-01-02"], "foo"=>[2, 1] + expect(ds.build).to eq :x => ["2015-01-01", "2015-01-02"], "foo" => [2, 1] end it 'should combine data sources' do ds = Ahoy::DataSource.new ds.add 'foo', Ahoy::Event.where(name: 'foo').group_by_day(:time).count ds.add 'bar', Ahoy::Event.where(name: 'bar').group_by_day(:time).count - expect(ds.build).to eq :x=>["2015-01-01", "2015-01-02", "2015-01-03"], "foo"=>[2, 1, 0], "bar"=>[1, 0, 2] + expect(ds.build).to eq :x => ["2015-01-01", "2015-01-02", "2015-01-03"], "foo" => [2, 1, 0], "bar" => [1, 0, 2] end end end diff --git a/spec/models/budget/investment/milestone_spec.rb b/spec/models/budget/investment/milestone_spec.rb new file mode 100644 index 000000000..32f040eaf --- /dev/null +++ b/spec/models/budget/investment/milestone_spec.rb @@ -0,0 +1,23 @@ +require 'rails_helper' + +describe "Budget::Investment::Milestone" do + + describe "Validations" do + let(:milestone) { build(:budget_investment_milestone) } + + it "Should be valid" do + expect(milestone).to be_valid + end + + it "Should not be valid without a title" do + milestone.title = nil + expect(milestone).to_not be_valid + end + + it "Should not be valid without an investment" do + milestone.investment_id = nil + expect(milestone).to_not be_valid + end + end + +end diff --git a/spec/models/budget/investment_spec.rb b/spec/models/budget/investment_spec.rb index 2290abba9..3b16bb033 100644 --- a/spec/models/budget/investment_spec.rb +++ b/spec/models/budget/investment_spec.rb @@ -249,7 +249,7 @@ describe Budget::Investment do by_valuator = Budget::Investment.by_valuator(valuator1.id) expect(by_valuator.size).to eq(2) - expect(by_valuator.sort).to eq([investment1,investment3].sort) + expect(by_valuator.sort).to eq([investment1, investment3].sort) end end @@ -486,7 +486,6 @@ describe Budget::Investment do end - describe 'Permissions' do let(:budget) { create(:budget) } let(:group) { create(:budget_group, budget: budget) } @@ -592,10 +591,10 @@ describe Budget::Investment do least_voted2 = create(:budget_investment, cached_votes_up: 1) - expect(Budget::Investment.sort_by_confidence_score.first).to eq most_voted2 - expect(Budget::Investment.sort_by_confidence_score.second).to eq most_voted - expect(Budget::Investment.sort_by_confidence_score.third).to eq least_voted2 - expect(Budget::Investment.sort_by_confidence_score.fourth).to eq least_voted + expect(Budget::Investment.sort_by_confidence_score.first).to eq most_voted2 + expect(Budget::Investment.sort_by_confidence_score.second).to eq most_voted + expect(Budget::Investment.sort_by_confidence_score.third).to eq least_voted2 + expect(Budget::Investment.sort_by_confidence_score.fourth).to eq least_voted end end end diff --git a/spec/models/debate_spec.rb b/spec/models/debate_spec.rb index 612775ee4..8d24f9945 100644 --- a/spec/models/debate_spec.rb +++ b/spec/models/debate_spec.rb @@ -545,7 +545,7 @@ describe Debate 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) + description_most_voted = create(:debate, description: 'stop corruption', cached_votes_up: 10) results = Debate.search('stop corruption') diff --git a/spec/models/legislation/annotation_spec.rb b/spec/models/legislation/annotation_spec.rb index 4cf5c6f59..0daca383a 100644 --- a/spec/models/legislation/annotation_spec.rb +++ b/spec/models/legislation/annotation_spec.rb @@ -17,7 +17,7 @@ RSpec.describe Legislation::Annotation, type: :model do Expetenda tincidunt in sed, ex partem placerat sea, porro commodo ex eam. His putant aeterno interesset at. Usu ea mundi tincidunt, omnium virtute aliquando ius ex. Ea aperiri sententiae duo. Usu nullam dolorum quaestio ei, sit vidit facilisis ea. Per ne impedit iracundia neglegentur. Consetetur neglegentur eum ut, vis animal legimus inimicus id. His audiam", - ranges: [{"start"=>"/p[1]", "startOffset"=>6, "end"=>"/p[3]", "endOffset"=>11}] + ranges: [{"start" => "/p[1]", "startOffset" => 6, "end" => "/p[3]", "endOffset" => 11}] ) expect(annotation.context).to eq("Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.\n\nExpetenda tincidunt in sed, ex partem placerat sea, porro commodo ex eam. His putant aeterno interesset at. Usu ea mundi tincidunt, omnium virtute aliquando ius ex. Ea aperiri sententiae duo. Usu nullam dolorum quaestio ei, sit vidit facilisis ea. Per ne impedit iracundia neglegentur. Consetetur neglegentur eum ut, vis animal legimus inimicus id.\n\nHis audiamdeserunt in, eum ubique voluptatibus te. In reque dicta usu. Ne rebum dissentiet eam, vim omnis deseruisse id. Ullum deleniti vituperata at quo, insolens complectitur te eos, ea pri dico munere propriae. Vel ferri facilis ut, qui paulo ridens praesent ad. Possim alterum qui cu. Accusamus consulatu ius te, cu decore soleat appareat usu.") @@ -27,7 +27,7 @@ His audiam", annotation = create(:legislation_annotation, draft_version: draft_version, quote: "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.\r\n\r\nExpetenda tincidunt in sed, ex partem placerat sea, porro commodo ex eam. His putant aeterno interesset at. Usu ea mundi tincidunt, omnium virtute aliquando ius ex. Ea aperiri sententiae duo", - ranges: [{"start"=>"/p[1]", "startOffset"=>273, "end"=>"/p[2]", "endOffset"=>190}] + ranges: [{"start" => "/p[1]", "startOffset" => 273, "end" => "/p[2]", "endOffset" => 190}] ) expect(annotation.context).to eq("Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.\r\n\r\nExpetenda tincidunt in sed, ex partem placerat sea, porro commodo ex eam. His putant aeterno interesset at. Usu ea mundi tincidunt, omnium virtute aliquando ius ex. Ea aperiri sententiae duo. Usu nullam dolorum quaestio ei, sit vidit facilisis ea. Per ne impedit iracundia neglegentur. Consetetur neglegentur eum ut, vis animal legimus inimicus id.") @@ -39,7 +39,7 @@ His audiam", annotation = create(:legislation_annotation, draft_version: draft_version, quote: "By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.\r\n\r\nWhen we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish)", - ranges: [{"start"=>"/p[2]", "startOffset"=>127, "end"=>"/p[3]", "endOffset"=>223}] + ranges: [{"start" => "/p[2]", "startOffset" => 127, "end" => "/p[3]", "endOffset" => 223}] ) expect(annotation.context).to eq("The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.\r\n\r\nWhen we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.") diff --git a/spec/models/legislation/process_spec.rb b/spec/models/legislation/process_spec.rb index f14e81c8e..33460832b 100644 --- a/spec/models/legislation/process_spec.rb +++ b/spec/models/legislation/process_spec.rb @@ -71,7 +71,7 @@ RSpec.describe Legislation::Process, type: :model do describe "filter scopes" do before(:each) do @process_1 = create(:legislation_process, start_date: Date.current - 2.days, end_date: Date.current + 1.day) - @process_2 = create(:legislation_process, start_date: Date.current + 1.days, end_date: Date.current + 3.days) + @process_2 = create(:legislation_process, start_date: Date.current + 1.day, end_date: Date.current + 3.days) @process_3 = create(:legislation_process, start_date: Date.current - 4.days, end_date: Date.current - 3.days) end diff --git a/spec/models/poll/officer_spec.rb b/spec/models/poll/officer_spec.rb index 83bdbecc2..b096aebc3 100644 --- a/spec/models/poll/officer_spec.rb +++ b/spec/models/poll/officer_spec.rb @@ -32,7 +32,7 @@ describe :officer do poll_2 = create(:poll) booth_assignment_1 = create(:poll_booth_assignment, poll: poll_1) - booth_assignment_2 = create(:poll_booth_assignment, poll: poll_2) + booth_assignment_2 = create(:poll_booth_assignment, poll: poll_2) create(:poll_officer_assignment, booth_assignment: booth_assignment_1, officer: officer, date: poll_1.starts_at) create(:poll_officer_assignment, booth_assignment: booth_assignment_2, officer: officer, final: true) @@ -48,7 +48,7 @@ describe :officer do poll_1 = create(:poll, ends_at: 1.day.ago) poll_2 = create(:poll, ends_at: 10.days.from_now) - poll_3 = create(:poll, ends_at: 10.day.ago) + poll_3 = create(:poll, ends_at: 10.days.ago) [poll_1, poll_2, poll_3].each do |p| create(:poll_officer_assignment, officer: officer, booth_assignment: create(:poll_booth_assignment, poll: p)) @@ -92,7 +92,7 @@ describe :officer do poll_2 = create(:poll) booth_assignment_1 = create(:poll_booth_assignment, poll: poll_1) - booth_assignment_2 = create(:poll_booth_assignment, poll: poll_2) + booth_assignment_2 = create(:poll_booth_assignment, poll: poll_2) create(:poll_officer_assignment, booth_assignment: booth_assignment_1, officer: officer, date: poll_1.starts_at) create(:poll_officer_assignment, booth_assignment: booth_assignment_2, officer: officer, final: true) @@ -108,7 +108,7 @@ describe :officer do poll_1 = create(:poll, ends_at: 1.day.ago) poll_2 = create(:poll, ends_at: 10.days.from_now) - poll_3 = create(:poll, ends_at: 10.day.ago) + poll_3 = create(:poll, ends_at: 10.days.ago) [poll_1, poll_2, poll_3].each do |p| create(:poll_officer_assignment, officer: officer, booth_assignment: create(:poll_booth_assignment, poll: p), final: true) diff --git a/spec/models/poll/voter_spec.rb b/spec/models/poll/voter_spec.rb index 752ac5bbc..c1c248550 100644 --- a/spec/models/poll/voter_spec.rb +++ b/spec/models/poll/voter_spec.rb @@ -33,7 +33,7 @@ describe :voter do user = create(:user, :level_two) voter1 = create(:poll_voter, user: user, poll: poll) - voter2 = build(:poll_voter, user: user, poll: poll) + voter2 = build(:poll_voter, user: user, poll: poll) expect(voter2).to_not be_valid expect(voter2.errors.messages[:document_number]).to eq(["User has already voted"]) @@ -43,7 +43,7 @@ describe :voter do user = create(:user, :level_two) voter1 = create(:poll_voter, user: user, poll: poll, booth_assignment: booth_assignment) - voter2 = build(:poll_voter, user: user, poll: poll, booth_assignment: booth_assignment) + voter2 = build(:poll_voter, user: user, poll: poll, booth_assignment: booth_assignment) expect(voter2).to_not be_valid expect(voter2.errors.messages[:document_number]).to eq(["User has already voted"]) @@ -56,7 +56,7 @@ describe :voter do user = create(:user, :level_two) voter1 = create(:poll_voter, user: user, poll: poll, booth_assignment: booth_assignment1) - voter2 = build(:poll_voter, user: user, poll: poll, booth_assignment: booth_assignment2) + voter2 = build(:poll_voter, user: user, poll: poll, booth_assignment: booth_assignment2) expect(voter2).to_not be_valid expect(voter2.errors.messages[:document_number]).to eq(["User has already voted"]) @@ -69,7 +69,7 @@ describe :voter do user = create(:user, :level_two) voter1 = create(:poll_voter, user: user, booth_assignment: booth_assignment1) - voter2 = build(:poll_voter, user: user, booth_assignment: booth_assignment2) + voter2 = build(:poll_voter, user: user, booth_assignment: booth_assignment2) expect(voter2).to be_valid end diff --git a/spec/models/residence_spec.rb b/spec/models/residence_spec.rb index 6841f636b..d518c41af 100644 --- a/spec/models/residence_spec.rb +++ b/spec/models/residence_spec.rb @@ -13,19 +13,19 @@ describe Verification::Residence do describe "dates" do it "should be valid with a valid date of birth" do - residence = Verification::Residence.new({"date_of_birth(3i)"=>"1", "date_of_birth(2i)"=>"1", "date_of_birth(1i)"=>"1980"}) + residence = Verification::Residence.new({"date_of_birth(3i)" => "1", "date_of_birth(2i)" => "1", "date_of_birth(1i)" => "1980"}) expect(residence.errors[:date_of_birth].size).to eq(0) end it "should not be valid without a date of birth" do - residence = Verification::Residence.new({"date_of_birth(3i)"=>"", "date_of_birth(2i)"=>"", "date_of_birth(1i)"=>""}) + residence = Verification::Residence.new({"date_of_birth(3i)" => "", "date_of_birth(2i)" => "", "date_of_birth(1i)" => ""}) expect(residence).to_not be_valid expect(residence.errors[:date_of_birth]).to include("can't be blank") end end 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.years.ago.year}"}) expect(residence).to_not be_valid expect(residence.errors[:date_of_birth]).to include("You don't have the required age to participate") end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 2bf09f378..0ea321423 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -220,7 +220,7 @@ describe User do subject.username = nil expect(subject).to be_valid - subject.organization.name= nil + subject.organization.name = nil expect(subject).to_not be_valid end end diff --git a/spec/models/verification/management/email_spec.rb b/spec/models/verification/management/email_spec.rb index 924f63501..652c094ba 100644 --- a/spec/models/verification/management/email_spec.rb +++ b/spec/models/verification/management/email_spec.rb @@ -39,7 +39,7 @@ describe Verification::Management::Email do allow(validation).to receive(:user).and_return user expect(mail).to receive(:deliver_later) - expect(Devise.token_generator).to receive(:generate).with(User, :email_verification_token).and_return(["1","2"]) + expect(Devise.token_generator).to receive(:generate).with(User, :email_verification_token).and_return(["1", "2"]) expect(Mailer).to receive(:email_verification).with(user, user.email, "2", "1", "1234").and_return(mail) validation.save diff --git a/spec/support/common_actions.rb b/spec/support/common_actions.rb index 327943931..209ddf800 100644 --- a/spec/support/common_actions.rb +++ b/spec/support/common_actions.rb @@ -1,6 +1,6 @@ module CommonActions - def sign_up(email='manuela@consul.dev', password='judgementday') + def sign_up(email = 'manuela@consul.dev', password = 'judgementday') visit '/' click_link 'Register' @@ -109,7 +109,7 @@ module CommonActions SCRIPT end - def error_message(resource_model=nil) + def error_message(resource_model = nil) resource_model ||= "(.*)" /\d errors? prevented this #{resource_model} from being saved:/ end