diff --git a/Gemfile b/Gemfile index a7e7f2810..8dc7f23af 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source 'https://rubygems.org' gem 'compass-rails', '3.0.2' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' -gem 'rails', '~> 5.0.7.2' +gem 'rails', '~> 5.1.7' # Use Puma as web server gem 'puma', '3.12.4' # Use SCSS for stylesheets @@ -30,6 +30,7 @@ group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console # comment over to use visual debugger (eg. RubyMine), uncomment to use manual debugging # gem 'byebug' + gem 'dotenv-rails' end group :development do @@ -54,7 +55,6 @@ end group :test do gem 'database_cleaner' - gem 'dotenv-rails' gem 'faker' gem 'minitest-reporters' gem 'pdf-reader' diff --git a/Gemfile.lock b/Gemfile.lock index b80d30bf6..58694a2ca 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -4,42 +4,42 @@ GEM Ascii85 (1.0.3) aasm (5.0.8) concurrent-ruby (~> 1.0) - actioncable (5.0.7.2) - actionpack (= 5.0.7.2) - nio4r (>= 1.2, < 3.0) + actioncable (5.1.7) + actionpack (= 5.1.7) + nio4r (~> 2.0) websocket-driver (~> 0.6.1) - actionmailer (5.0.7.2) - actionpack (= 5.0.7.2) - actionview (= 5.0.7.2) - activejob (= 5.0.7.2) + actionmailer (5.1.7) + actionpack (= 5.1.7) + actionview (= 5.1.7) + activejob (= 5.1.7) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (5.0.7.2) - actionview (= 5.0.7.2) - activesupport (= 5.0.7.2) + actionpack (5.1.7) + actionview (= 5.1.7) + activesupport (= 5.1.7) rack (~> 2.0) - rack-test (~> 0.6.3) + rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.2) actionpack-page_caching (1.1.0) actionpack (>= 4.0.0, < 6) - actionview (5.0.7.2) - activesupport (= 5.0.7.2) + actionview (5.1.7) + activesupport (= 5.1.7) builder (~> 3.1) - erubis (~> 2.7.0) + erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) active_record_query_trace (1.7) - activejob (5.0.7.2) - activesupport (= 5.0.7.2) + activejob (5.1.7) + activesupport (= 5.1.7) globalid (>= 0.3.6) - activemodel (5.0.7.2) - activesupport (= 5.0.7.2) - activerecord (5.0.7.2) - activemodel (= 5.0.7.2) - activesupport (= 5.0.7.2) - arel (~> 7.0) - activesupport (5.0.7.2) + activemodel (5.1.7) + activesupport (= 5.1.7) + activerecord (5.1.7) + activemodel (= 5.1.7) + activesupport (= 5.1.7) + arel (~> 8.0) + activesupport (5.1.7) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -51,7 +51,7 @@ GEM api-pagination (4.8.2) apipie-rails (0.5.17) rails (>= 4.1) - arel (7.1.4) + arel (8.0.0) ast (2.4.0) autoprefixer-rails (9.7.4) execjs @@ -147,7 +147,7 @@ GEM faraday multi_json equalizer (0.0.11) - erubis (2.7.0) + erubi (1.9.0) et-orbi (1.2.1) tzinfo execjs (2.7.0) @@ -286,20 +286,20 @@ GEM rack (2.2.2) rack-protection (2.0.8.1) rack - rack-test (0.6.3) - rack (>= 1.0) + rack-test (1.1.0) + rack (>= 1.0, < 3) railroady (1.5.3) - rails (5.0.7.2) - actioncable (= 5.0.7.2) - actionmailer (= 5.0.7.2) - actionpack (= 5.0.7.2) - actionview (= 5.0.7.2) - activejob (= 5.0.7.2) - activemodel (= 5.0.7.2) - activerecord (= 5.0.7.2) - activesupport (= 5.0.7.2) + rails (5.1.7) + actioncable (= 5.1.7) + actionmailer (= 5.1.7) + actionpack (= 5.1.7) + actionview (= 5.1.7) + activejob (= 5.1.7) + activemodel (= 5.1.7) + activerecord (= 5.1.7) + activesupport (= 5.1.7) bundler (>= 1.3.0) - railties (= 5.0.7.2) + railties (= 5.1.7) sprockets-rails (>= 2.0.0) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) @@ -313,9 +313,9 @@ GEM rails_stdout_logging rails_serve_static_assets (0.0.5) rails_stdout_logging (0.0.5) - railties (5.0.7.2) - actionpack (= 5.0.7.2) - activesupport (= 5.0.7.2) + railties (5.1.7) + actionpack (= 5.1.7) + activesupport (= 5.1.7) method_source rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) @@ -493,7 +493,7 @@ DEPENDENCIES puma (= 3.12.4) pundit railroady - rails (~> 5.0.7.2) + rails (~> 5.1.7) rails-observers rails_12factor rb-readline diff --git a/Procfile b/Procfile index 66b40ebd4..af88f2ea2 100644 --- a/Procfile +++ b/Procfile @@ -1,3 +1,3 @@ -web: bundle exec rails server puma -p $PORT -b0.0.0.0 +web: bundle exec rails server puma -p $PORT worker: bundle exec sidekiq -C ./config/sidekiq.yml mail: mailcatcher --foreground --http-ip=0.0.0.0 diff --git a/app/services/event_service.rb b/app/services/event_service.rb index ee2e263a4..d75b612bc 100644 --- a/app/services/event_service.rb +++ b/app/services/event_service.rb @@ -11,7 +11,7 @@ class EventService start_at: range[:start_at], end_at: range[:end_at], available_type: 'event' }) - .except!(:start_date, :end_date, :start_time, :end_time, :all_day) + .extract!(:start_date, :end_date, :start_time, :end_time, :all_day) # convert main price to centimes params[:amount] = (params[:amount].to_f * 100 if params[:amount].present?) # delete non-complete "other" prices and convert them to centimes diff --git a/app/services/members/members_service.rb b/app/services/members/members_service.rb index 2c15a3caf..a5f63ca8e 100644 --- a/app/services/members/members_service.rb +++ b/app/services/members/members_service.rb @@ -2,7 +2,6 @@ # Provides helper methods for User actions class Members::MembersService - attr_accessor :member def initialize(member) @@ -10,10 +9,9 @@ class Members::MembersService end def update(params) - if params[:group_id] && @member.group_id != params[:group_id].to_i && !@member.subscribed_plan.nil? # here a group change is requested but unprocessable, handle the exception - @member.errors[:group_id] = I18n.t('members.unable_to_change_the_group_while_a_subscription_is_running') + @member.errors.add(:group_id, I18n.t('members.unable_to_change_the_group_while_a_subscription_is_running')) return false end @@ -80,5 +78,4 @@ class Members::MembersService params[:password] end end - end diff --git a/bin/setup b/bin/setup index e620b4dad..78c4e861d 100755 --- a/bin/setup +++ b/bin/setup @@ -18,6 +18,10 @@ chdir APP_ROOT do system! 'gem install bundler --conservative' system('bundle check') || system!('bundle install') + # Install JavaScript dependencies if using Yarn + # system('bin/yarn') + + # puts "\n== Copying sample files ==" # unless File.exist?('config/database.yml') # cp 'config/database.yml.sample', 'config/database.yml' diff --git a/bin/yarn b/bin/yarn new file mode 100755 index 000000000..c2bacef83 --- /dev/null +++ b/bin/yarn @@ -0,0 +1,11 @@ +#!/usr/bin/env ruby +VENDOR_PATH = File.expand_path('..', __dir__) +Dir.chdir(VENDOR_PATH) do + begin + exec "yarnpkg #{ARGV.join(" ")}" + rescue Errno::ENOENT + $stderr.puts "Yarn executable was not detected in the system." + $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install" + exit 1 + end +end diff --git a/config/application.rb b/config/application.rb index d36275f44..d4b2d1b61 100644 --- a/config/application.rb +++ b/config/application.rb @@ -14,6 +14,10 @@ Bundler.require(*Rails.groups) module Fablab class Application < Rails::Application require 'fab_manager' + + # Initialize configuration defaults for originally generated Rails version. + # config.load_defaults 5.1 + # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. @@ -30,20 +34,10 @@ module Fablab config.i18n.default_locale = Rails.application.secrets.rails_locale config.i18n.fallbacks = [Rails.application.secrets.app_locale, :en] - config.assets.paths << Rails.root.join('node_modules').to_s - config.to_prepare do Devise::Mailer.layout 'notifications_mailer' end - # allow use rails helpers in angular templates - Rails.application.config.assets.configure do |env| - env.context_class.class_eval do - include ActionView::Helpers - include Rails.application.routes.url_helpers - end - end - config.active_job.queue_adapter = :sidekiq config.generators do |g| diff --git a/config/cable.yml b/config/cable.yml index 0bbde6f74..04aa64721 100644 --- a/config/cable.yml +++ b/config/cable.yml @@ -7,3 +7,4 @@ test: production: adapter: redis url: redis://localhost:6379/1 + channel_prefix: fablab_production diff --git a/config/environments/development.rb b/config/environments/development.rb index 49ecfb457..475302274 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -20,7 +20,7 @@ Rails.application.configure do config.cache_store = :memory_store config.public_file_server.headers = { - 'Cache-Control' => 'public, max-age=172800' + 'Cache-Control' => "public, max-age=#{2.days.seconds.to_i}" } else config.action_controller.perform_caching = false @@ -74,7 +74,7 @@ Rails.application.configure do # Use an evented file watcher to asynchronously detect changes in source code, # routes, locales, etc. This feature depends on the listen gem. - # config.file_watcher = ActiveSupport::EventedFileUpdateChecker + config.file_watcher = ActiveSupport::EventedFileUpdateChecker config.log_level = Rails.application.secrets.log_level || :debug end diff --git a/config/environments/test.rb b/config/environments/test.rb index 43183c679..37a4056d5 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -17,7 +17,7 @@ Rails.application.configure do # Configure public file server for tests with Cache-Control for performance. config.public_file_server.enabled = true config.public_file_server.headers = { - 'Cache-Control' => 'public, max-age=3600' + 'Cache-Control' => "public, max-age=#{1.hour.seconds.to_i}" } # Show full error reports and disable caching. diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index 90c5cb936..23ba0d052 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -1,14 +1,27 @@ +# frozen_string_literal: true + # Be sure to restart your server when you modify this file. # Version of your assets, change this if you want to expire all your assets. Rails.application.config.assets.version = '1.0' -# Add additional assets to the asset load path +# allow use rails helpers in angular templates +Rails.application.config.assets.configure do |env| + env.context_class.class_eval do + include ActionView::Helpers + include Rails.application.routes.url_helpers + end +end + +# Add additional assets to the asset load path. # Rails.application.config.assets.paths << Emoji.images_path +# Add Yarn node_modules folder to the asset load path. +Rails.application.config.assets.paths << Rails.root.join('node_modules') # Precompile additional assets. -# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. -# Rails.application.config.assets.precompile += %w( search.js ) +# application.js, application.css, and all non-JS/CSS in the app/assets +# folder are already added. +# Rails.application.config.assets.precompile += %w( admin.js admin.css ) Rails.application.config.assets.precompile += %w[ fontawesome-webfont.eot diff --git a/config/initializers/new_framework_defaults.rb b/config/initializers/new_framework_defaults.rb index cbf423a81..9fa84bbea 100644 --- a/config/initializers/new_framework_defaults.rb +++ b/config/initializers/new_framework_defaults.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Be sure to restart your server when you modify this file. # # This file contains migration options to ease your Rails 5.0 upgrade. @@ -6,6 +8,7 @@ # # Read the Guide for Upgrading Ruby on Rails for more info on each option. +# DEPRECATION WARNING: raise_on_unfiltered_parameters is deprecated and has no effect in Rails 5.1. Rails.application.config.action_controller.raise_on_unfiltered_parameters = true # Enable per-form CSRF tokens. Previous versions had false. @@ -21,5 +24,6 @@ ActiveSupport.to_time_preserves_timezone = false # Require `belongs_to` associations by default. Previous versions had false. Rails.application.config.active_record.belongs_to_required_by_default = false +# DEPRECATION WARNING: ActiveSupport.halt_callback_chains_on_return_false= is deprecated and will be removed in Rails 5.2. # Do not halt callback chains when a callback returns false. Previous versions had true. ActiveSupport.halt_callback_chains_on_return_false = true diff --git a/config/initializers/new_framework_defaults_5_1.rb b/config/initializers/new_framework_defaults_5_1.rb new file mode 100644 index 000000000..514117a6e --- /dev/null +++ b/config/initializers/new_framework_defaults_5_1.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +# Be sure to restart your server when you modify this file. +# +# This file contains migration options to ease your Rails 5.1 upgrade. +# +# Once upgraded flip defaults one by one to migrate to the new default. +# +# Read the Guide for Upgrading Ruby on Rails for more info on each option. + +# Make `form_with` generate non-remote forms. +Rails.application.config.action_view.form_with_generates_remote_forms = false + +# Unknown asset fallback will return the path passed in when the given +# asset is not present in the asset pipeline. +# Rails.application.config.assets.unknown_asset_fallback = false + +# ActiveSupport::Deprecation.silenced = true diff --git a/config/puma.rb b/config/puma.rb index c7f311f81..1e19380dc 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -1,13 +1,13 @@ # Puma can serve each request in a thread from an internal thread pool. -# The `threads` method setting takes two numbers a minimum and maximum. +# The `threads` method setting takes two numbers: a minimum and maximum. # Any libraries that use thread pools should be configured to match # the maximum value specified for Puma. Default is set to 5 threads for minimum -# and maximum, this matches the default thread size of Active Record. +# and maximum; this matches the default thread size of Active Record. # -threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i +threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } threads threads_count, threads_count -# Specifies the `port` that Puma will listen on to receive requests, default is 3000. +# Specifies the `port` that Puma will listen on to receive requests; default is 3000. # port ENV.fetch("PORT") { 3000 } @@ -32,16 +32,25 @@ environment ENV.fetch("RAILS_ENV") { "development" } # # preload_app! +# If you are preloading your application and using Active Record, it's +# recommended that you close any connections to the database before workers +# are forked to prevent connection leakage. +# +# before_fork do +# ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord) +# end + # The code in the `on_worker_boot` will be called if you are using # clustered mode by specifying a number of `workers`. After each worker -# process is booted this block will be run, if you are using `preload_app!` -# option you will want to use this block to reconnect to any threads -# or connections that may have been created at application boot, Ruby +# process is booted, this block will be run. If you are using the `preload_app!` +# option, you will want to use this block to reconnect to any threads +# or connections that may have been created at application boot, as Ruby # cannot share connections between processes. # # on_worker_boot do # ActiveRecord::Base.establish_connection if defined?(ActiveRecord) # end +# # Allow puma to be restarted by `rails restart` command. plugin :tmp_restart diff --git a/test/integration/abuses_test.rb b/test/integration/abuses_test.rb index 2a0b5bbfe..030145105 100644 --- a/test/integration/abuses_test.rb +++ b/test/integration/abuses_test.rb @@ -1,5 +1,6 @@ -class AbusesTest < ActionDispatch::IntegrationTest +# frozen_string_literal: true +class AbusesTest < ActionDispatch::IntegrationTest # Called before every test method runs. Can be used # to set up fixture information. def setup @@ -18,21 +19,21 @@ class AbusesTest < ActionDispatch::IntegrationTest project = Project.take post '/api/abuses', - { - abuse: { - signaled_type: 'Project', - signaled_id: project.id, - first_name: 'William', - last_name: 'Prindle', - email: 'wprindle@iastate.edu', - message: 'This project is in infringement with the patent US5014921 A.' - } + params: { + abuse: { + signaled_type: 'Project', + signaled_id: project.id, + first_name: 'William', + last_name: 'Prindle', + email: 'wprindle@iastate.edu', + message: 'This project is in infringement with the patent US5014921 A.' + } }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct object was signaled abuse = json_response(response.body) @@ -42,7 +43,7 @@ class AbusesTest < ActionDispatch::IntegrationTest # Check notifications were sent for every admins notifications = Notification.where(notification_type_id: NotificationType.find_by_name('notify_admin_abuse_reported'), attached_object_type: 'Abuse', attached_object_id: abuse[:reporting][:id]) assert_not_empty notifications, 'no notifications were created' - notified_users_ids = notifications.map {|n| n.receiver_id } + notified_users_ids = notifications.map(&:receiver_id) User.admins.each do |adm| assert_includes notified_users_ids, adm.id, "Admin #{adm.id} was not notified" end @@ -53,20 +54,19 @@ class AbusesTest < ActionDispatch::IntegrationTest project = Project.first post '/api/abuses', - { - abuse: { - signaled_type: 'Project', - signaled_id: project.id, - first_name: 'John', - last_name: 'Wrong', - email: '', - message: '' - } + params: { + abuse: { + signaled_type: 'Project', + signaled_id: project.id, + first_name: 'John', + last_name: 'Wrong', + email: '', + message: '' + } }.to_json, - default_headers + headers: default_headers assert_equal 422, response.status, response.body assert_match /can't be blank/, response.body end - end diff --git a/test/integration/accounting_period_test.rb b/test/integration/accounting_period_test.rb index 9a4162c07..3d6bdd394 100644 --- a/test/integration/accounting_period_test.rb +++ b/test/integration/accounting_period_test.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true class AccountingPeriodTest < ActionDispatch::IntegrationTest - def setup @admin = User.find_by(username: 'admin') login_as(@admin, scope: :user) @@ -12,16 +11,16 @@ class AccountingPeriodTest < ActionDispatch::IntegrationTest end_at = '2012-12-31T00:00:00.000Z' post '/api/accounting_periods', - { + params: { accounting_period: { start_at: start_at, end_at: end_at } - }.to_json, default_headers + }.to_json, headers: default_headers # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct period was closed successfully period = json_response(response.body) @@ -39,16 +38,16 @@ class AccountingPeriodTest < ActionDispatch::IntegrationTest diff = (end_at.to_date - start_at.to_date).to_i post '/api/accounting_periods', - { + params: { accounting_period: { start_at: start_at, end_at: end_at } - }.to_json, default_headers + }.to_json, headers: default_headers # Check response format & status assert_equal 422, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # check the error assert_match(/#{I18n.t('errors.messages.invalid_duration', DAYS: diff)}/, response.body) @@ -59,16 +58,16 @@ class AccountingPeriodTest < ActionDispatch::IntegrationTest end_at = '2015-02-27T00:00:00.000Z' post '/api/accounting_periods', - { + params: { accounting_period: { start_at: start_at, end_at: end_at } - }.to_json, default_headers + }.to_json, headers: default_headers # Check response format & status assert_equal 422, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # check the error assert_match(/#{I18n.t('errors.messages.cannot_overlap')}/, response.body) @@ -79,16 +78,16 @@ class AccountingPeriodTest < ActionDispatch::IntegrationTest end_at = Date.today.end_of_day.iso8601 post '/api/accounting_periods', - { + params: { accounting_period: { start_at: start_at, end_at: end_at } - }.to_json, default_headers + }.to_json, headers: default_headers # Check response format & status assert_equal 422, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # check the error assert_match(/#{I18n.t('errors.messages.must_be_in_the_past')}/, response.body) diff --git a/test/integration/admins_test.rb b/test/integration/admins_test.rb index 27896002a..bd4e314ca 100644 --- a/test/integration/admins_test.rb +++ b/test/integration/admins_test.rb @@ -1,5 +1,6 @@ -class AdminsTest < ActionDispatch::IntegrationTest +# frozen_string_literal: true +class AdminsTest < ActionDispatch::IntegrationTest # Called before every test method runs. Can be used # to set up fixture information. def setup @@ -16,7 +17,7 @@ class AdminsTest < ActionDispatch::IntegrationTest test 'create an admin' do post '/api/admins', - { + params: { admin: { username: 'glepower', email: 'gerard.lepower@admins.net', @@ -36,11 +37,11 @@ class AdminsTest < ActionDispatch::IntegrationTest } } }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct admin was created admin = json_response(response.body) @@ -54,10 +55,9 @@ class AdminsTest < ActionDispatch::IntegrationTest test 'list all admins' do get '/api/admins' - # Check response format & status assert_equal 200, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the list items are ok admins = json_response(response.body) diff --git a/test/integration/availabilities/as_admin_test.rb b/test/integration/availabilities/as_admin_test.rb index 0b2a1f6c2..524baf742 100644 --- a/test/integration/availabilities/as_admin_test.rb +++ b/test/integration/availabilities/as_admin_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Availabilities class AsAdminTest < ActionDispatch::IntegrationTest setup do @@ -12,7 +14,7 @@ module Availabilities # Check response format & status assert_equal 200, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct availability was returned availability = json_response(response.body) @@ -26,7 +28,7 @@ module Availabilities # Check response format & status assert_equal 200, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct availabilities was returned availabilities = json_response(response.body) @@ -50,7 +52,7 @@ module Availabilities # Check response format & status assert_equal 200, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct availabilities was returned availabilities = json_response(response.body) @@ -72,15 +74,14 @@ module Availabilities # Check response format & status assert_equal 200, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct availabilities was returned availabilities = json_response(response.body) assert_not_empty availabilities, 'no availabilities were found' assert_not_nil availabilities[0], 'first availability was unexpectedly nil' - assert availabilities.map {|a| a[:available_type] }.include?('space'), 'space availability not found instead that it was enabled' + assert availabilities.map { |a| a[:available_type] }.include?('space'), 'space availability not found instead that it was enabled' end end end - diff --git a/test/integration/availabilities/as_user_test.rb b/test/integration/availabilities/as_user_test.rb index bfb9007b1..6c2026fcc 100644 --- a/test/integration/availabilities/as_user_test.rb +++ b/test/integration/availabilities/as_user_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Availabilities::AsUserTest < ActionDispatch::IntegrationTest setup do user = User.find_by(username: 'kdumas') @@ -11,7 +13,7 @@ class Availabilities::AsUserTest < ActionDispatch::IntegrationTest # Check response format & status assert_equal 200, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct availabilities was returned availabilities = json_response(response.body) @@ -27,8 +29,7 @@ class Availabilities::AsUserTest < ActionDispatch::IntegrationTest # Check that we don't get availabilities in more than a month availabilities.each do |a| - assert_not a[:start] > 1.month.from_now , 'retrieved a slot in more than 1 month for user who has no yearly subscription' + assert_not a[:start] > 1.month.from_now, 'retrieved a slot in more than 1 month for user who has no yearly subscription' end end end - diff --git a/test/integration/credits/machine_test.rb b/test/integration/credits/machine_test.rb index dac006de3..f47fdc8f5 100644 --- a/test/integration/credits/machine_test.rb +++ b/test/integration/credits/machine_test.rb @@ -2,7 +2,6 @@ module Credits class TrainingTest < ActionDispatch::IntegrationTest - # Called before every test method runs. Can be used # to set up fixture information. def setup @@ -11,10 +10,9 @@ module Credits end test 'create machine credit' do - # First, we create a new credit post '/api/credits', - { + params: { credit: { creditable_id: 5, creditable_type: 'Machine', @@ -22,11 +20,11 @@ module Credits plan_id: 1 } }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the credit was created correctly credit = json_response(response.body) @@ -39,7 +37,7 @@ module Credits test 'update a credit' do put '/api/credits/13', - { + params: { credit: { creditable_id: 4, creditable_type: 'Machine', @@ -47,11 +45,11 @@ module Credits plan_id: 3 } }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 200, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the credit was correctly updated credit = json_response(response.body) @@ -62,4 +60,4 @@ module Credits assert_equal 5, c.hours end end -end \ No newline at end of file +end diff --git a/test/integration/credits/training_test.rb b/test/integration/credits/training_test.rb index 44631b6d2..9390611fb 100644 --- a/test/integration/credits/training_test.rb +++ b/test/integration/credits/training_test.rb @@ -1,6 +1,7 @@ +# frozen_string_literal: true + module Credits class TrainingTest < ActionDispatch::IntegrationTest - # Called before every test method runs. Can be used # to set up fixture information. def setup @@ -9,21 +10,20 @@ module Credits end test 'create training credit' do - # First, we create a new credit post '/api/credits', - { + params: { credit: { creditable_id: 4, creditable_type: 'Training', - plan_id: '1', + plan_id: '1' } }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the credit was created correctly credit = json_response(response.body) @@ -36,18 +36,18 @@ module Credits test 'create a existing credit' do post '/api/credits', - { + params: { credit: { creditable_id: 4, creditable_type: 'Training', plan_id: '2' } }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 422, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type end end -end \ No newline at end of file +end diff --git a/test/integration/events/as_admin_test.rb b/test/integration/events/as_admin_test.rb index ab4460e86..0228428d3 100644 --- a/test/integration/events/as_admin_test.rb +++ b/test/integration/events/as_admin_test.rb @@ -1,17 +1,16 @@ # frozen_string_literal: true + module Events class AsAdminTest < ActionDispatch::IntegrationTest - setup do admin = User.with_role(:admin).first login_as(admin, scope: :user) end test 'creation modification reservation and re-modification scenario' do - # First, we create a new event post '/api/events', - { + params: { event: { title: 'OpenLab discovery day', description: 'A day to discover the Fablab and try its machines and possibilities.', @@ -23,11 +22,11 @@ module Events amount: 0 } }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the event was created correctly event = json_response(response.body) @@ -39,21 +38,23 @@ module Events # Then, modify the event to set a nb of places put "/api/events/#{e.id}", - event: { - title: 'OpenLab discovery day', - description: 'A day to discover the Fablab and try its machines and possibilities.', - start_date: 1.week.from_now.utc, - start_time: 1.week.from_now.utc.change(hour: 16), - end_date: 1.week.from_now.utc, - end_time: 1.week.from_now.utc.change(hour: 20), - category_id: Category.first.id, - amount: 0, - nb_total_places: 10 + params: { + event: { + title: 'OpenLab discovery day', + description: 'A day to discover the Fablab and try its machines and possibilities.', + start_date: 1.week.from_now.utc, + start_time: 1.week.from_now.utc.change(hour: 16), + end_date: 1.week.from_now.utc, + end_time: 1.week.from_now.utc.change(hour: 20), + category_id: Category.first.id, + amount: 0, + nb_total_places: 10 + } } # Check response format & status assert_equal 200, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the places numbers were updated successfully e = Event.where(id: event[:id]).first @@ -62,7 +63,7 @@ module Events # Now, let's make a reservation on this event post '/api/reservations', - { + params: { reservation: { user_id: User.find_by(username: 'pdurand').id, reservable_id: e.id, @@ -78,11 +79,11 @@ module Events ] } }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the remaining places were updated successfully e = Event.where(id: event[:id]).first @@ -90,21 +91,23 @@ module Events # Finally, modify the event to add some places put "/api/events/#{e.id}", - event: { - title: 'OpenLab discovery day', - description: 'A day to discover the Fablab and try its machines and possibilities.', - start_date: 1.week.from_now.utc, - start_time: 1.week.from_now.utc.change(hour: 16), - end_date: 1.week.from_now.utc, - end_time: 1.week.from_now.utc.change(hour: 20), - category_id: Category.first.id, - amount: 0, - nb_total_places: 20 + params: { + event: { + title: 'OpenLab discovery day', + description: 'A day to discover the Fablab and try its machines and possibilities.', + start_date: 1.week.from_now.utc, + start_time: 1.week.from_now.utc.change(hour: 16), + end_date: 1.week.from_now.utc, + end_time: 1.week.from_now.utc.change(hour: 20), + category_id: Category.first.id, + amount: 0, + nb_total_places: 20 + } } # Check response format & status assert_equal 200, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the places numbers were updated successfully e = Event.where(id: event[:id]).first @@ -113,12 +116,11 @@ module Events end test 'create event with custom price and reserve it with success' do - price_category = PriceCategory.first # First, we create a new event post '/api/events', - { + params: { event: { title: 'Electronics initiation', description: 'A workshop about electronics and the abilities to create robots.', @@ -137,11 +139,11 @@ module Events ] } }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the event was created correctly event = json_response(response.body) @@ -155,7 +157,7 @@ module Events # Now, let's make a reservation on this event post '/api/reservations', - { + params: { reservation: { user_id: User.find_by(username: 'lseguin').id, reservable_id: e.id, @@ -177,11 +179,11 @@ module Events ] } }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the reservation match the required event reservation = json_response(response.body) @@ -197,7 +199,6 @@ module Events # Check the resulting invoice generation and it has right price assert_invoice_pdf r.invoice assert_equal (4 * 20) + (4 * 16), r.invoice.total / 100.0 - end end end diff --git a/test/integration/events/as_user_test.rb b/test/integration/events/as_user_test.rb index 491ac94b1..abb37d146 100644 --- a/test/integration/events/as_user_test.rb +++ b/test/integration/events/as_user_test.rb @@ -1,8 +1,8 @@ +# frozen_string_literal: true + module Events class AsUserTest < ActionDispatch::IntegrationTest - test 'reserve event with many prices and payment means and VAT' do - vlonchamp = User.find_by(username: 'vlonchamp') login_as(vlonchamp, scope: :user) @@ -27,7 +27,7 @@ module Events # Reserve the 'radio' event VCR.use_cassette('reserve_event_with_many_prices_and_payment_means') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method, cart_items: { reservation: { @@ -56,7 +56,7 @@ module Events }, coupon_code: 'SUNNYFABLAB' } - }.to_json, default_headers + }.to_json, headers: default_headers end vlonchamp.wallet.reload @@ -80,14 +80,14 @@ module Events refute invoice.stp_payment_intent_id.blank? refute invoice.total.blank? - assert_equal 43350, invoice.total # total minus coupon + assert_equal 43_350, invoice.total # total minus coupon # invoice_items assertions ## reservation reservation_item = invoice.invoice_items.first assert_not_nil reservation_item - assert_equal 51000, reservation_item.amount # full total + assert_equal 51_000, reservation_item.amount # full total # invoice assertions invoice = Invoice.find_by(invoiced: reservation) @@ -109,7 +109,6 @@ module Events # notifications assert_not_empty Notification.where(attached_object: reservation) assert_not_empty Notification.where(attached_object: invoice) - end end end diff --git a/test/integration/exports/accounting_export_test.rb b/test/integration/exports/accounting_export_test.rb index 7a969c3b6..8cf2e32af 100644 --- a/test/integration/exports/accounting_export_test.rb +++ b/test/integration/exports/accounting_export_test.rb @@ -3,17 +3,15 @@ module Exports; end class Exports::AccountingExportTest < ActionDispatch::IntegrationTest - setup do admin = User.with_role(:admin).first login_as(admin, scope: :user) end test 'creation modification reservation and re-modification scenario' do - # First, we create a new export post '/api/accounting/export', - { + params: { query: { columns: %w[journal_code date account_code account_label piece line_label debit_origin credit_origin debit_euro credit_euro lettering], encoding: 'ISO-8859-1', @@ -28,11 +26,11 @@ class Exports::AccountingExportTest < ActionDispatch::IntegrationTest type: 'acd', key: ';' }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 200, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the export was created correctly res = json_response(response.body) @@ -134,10 +132,8 @@ class Exports::AccountingExportTest < ActionDispatch::IntegrationTest STDERR.puts "WARNING: unable to test accurately accounting export: invoice #{last_invoice.id} is not a Machine reservation" end - # Clean CSV file require 'fileutils' FileUtils.rm(e.file) end end - diff --git a/test/integration/invoices/as_admin_test.rb b/test/integration/invoices/as_admin_test.rb index 15e9cb993..78342865b 100644 --- a/test/integration/invoices/as_admin_test.rb +++ b/test/integration/invoices/as_admin_test.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true class InvoicesTest < ActionDispatch::IntegrationTest - # Called before every test method runs. Can be used # to set up fixture information. def setup @@ -10,18 +9,18 @@ class InvoicesTest < ActionDispatch::IntegrationTest end test 'admin list invoices' do - post '/api/invoices/list', { query: { + post '/api/invoices/list', params: { query: { number: '', customer: '', date: nil, order_by: '-reference', page: 1, size: 20 # test db may have < 20 invoices - } }.to_json, default_headers + } }.to_json, headers: default_headers # Check response format & status assert_equal 200, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check that we have all invoices invoices = json_response(response.body) @@ -35,18 +34,18 @@ class InvoicesTest < ActionDispatch::IntegrationTest test 'admin generates a refund' do date = DateTime.current.iso8601 - post '/api/invoices', { avoir: { + post '/api/invoices', params: { avoir: { avoir_date: date, payment_method: 'cash', description: 'Lorem ipsum', invoice_id: 4, invoice_items_ids: [4], subscription_to_expire: false - } }.to_json, default_headers + } }.to_json, headers: default_headers # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check that the refund match refund = json_response(response.body) @@ -68,22 +67,20 @@ class InvoicesTest < ActionDispatch::IntegrationTest test 'admin fails generates a refund in closed period' do date = '2015-10-01T13:09:55+01:00'.to_datetime - post '/api/invoices', { avoir: { + post '/api/invoices', params: { avoir: { avoir_date: date, payment_method: 'cash', description: 'Unable to refund', invoice_id: 5, invoice_items_ids: [5], subscription_to_expire: false - } }.to_json, default_headers + } }.to_json, headers: default_headers # Check response format & status assert_equal 422, response.status, response.body - assert_equal Mime::JSON, response.content_type - + assert_equal Mime[:json], response.content_type # Check the error was handled assert_match(/#{I18n.t('errors.messages.in_closed_period')}/, response.body) end - end diff --git a/test/integration/members/as_admin_test.rb b/test/integration/members/as_admin_test.rb index 4c5dc536d..f00c85a75 100644 --- a/test/integration/members/as_admin_test.rb +++ b/test/integration/members/as_admin_test.rb @@ -13,7 +13,7 @@ class MembersTest < ActionDispatch::IntegrationTest email = 'robert.dubois@gmail.com' VCR.use_cassette('members_admin_create_success') do - post members_path, { user: { + post members_path, params: { user: { username: 'bob', email: email, group_id: group_id, @@ -31,12 +31,12 @@ class MembersTest < ActionDispatch::IntegrationTest gender: true, birthday: '2018-02-08' } - } }.to_json, default_headers + } }.to_json, headers: default_headers end # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check that the user's match user = json_response(response.body) @@ -48,13 +48,13 @@ class MembersTest < ActionDispatch::IntegrationTest user = User.friendly.find('kdumas') # we cannot update an kevin's group because he's got a running subscription - put "/api/members/#{user.id}", { user: { + put "/api/members/#{user.id}", params: { user: { group_id: 1 - } }.to_json, default_headers + } }.to_json, headers: default_headers # Check response format & status assert_equal 422, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check error message res = json_response(response.body) @@ -70,18 +70,18 @@ class MembersTest < ActionDispatch::IntegrationTest } instagram = 'https://www.instagram.com/vanessa/' - put "/api/members/#{user.id}", user_hash.deep_merge( + put "/api/members/#{user.id}", params: user_hash.deep_merge( user: { group_id: 2, profile_attributes: { instagram: instagram } } - ).to_json, default_headers + ).to_json, headers: default_headers # Check response format & status assert_equal 200, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check update result res = json_response(response.body) @@ -94,7 +94,7 @@ class MembersTest < ActionDispatch::IntegrationTest ## Check response format & status # assert_equal 200, response.status, response.body - # assert_equal Mime::JSON, response.content_type + # assert_equal Mime[:json], response.content_type ## Check search result # res = json_response(response.body) diff --git a/test/integration/members/import_test.rb b/test/integration/members/import_test.rb index 76c7d6855..d93cef82f 100644 --- a/test/integration/members/import_test.rb +++ b/test/integration/members/import_test.rb @@ -9,16 +9,15 @@ class ImportTest < ActionDispatch::IntegrationTest end test 'bulk import members through CSV' do - bulk_csv = fixture_file_upload('files/members.csv', 'text/csv') post '/api/imports/members', - { + params: { import_members: bulk_csv, update_field: 'id' - }, default_headers + }, headers: default_headers assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check that the returned import was created import = json_response(response.body) @@ -66,6 +65,5 @@ class ImportTest < ActionDispatch::IntegrationTest assert_equal 'update', res[10][:status], 'wrong operation: jean dupont should have been updated' assert res[10][:result], 'wrong result: operation should have succeeded' assert_equal res[9][:row]['email'], User.find(res[10][:user]).email, 'jean dupont email was not updated' - end end diff --git a/test/integration/prices/compute_test.rb b/test/integration/prices/compute_test.rb index a7944c159..ad64e44cd 100644 --- a/test/integration/prices/compute_test.rb +++ b/test/integration/prices/compute_test.rb @@ -1,6 +1,7 @@ +# frozen_string_literal: true + module Prices class AsAdminTest < ActionDispatch::IntegrationTest - setup do admin = User.with_role(:admin).first login_as(admin, scope: :user) @@ -12,7 +13,7 @@ module Prices printer_training = availability.trainings.first post '/api/prices/compute', - { + params: { reservation: { user_id: user.id, reservable_id: printer_training.id, @@ -27,11 +28,11 @@ module Prices ] } }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 200, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the price was computed correctly price = json_response(response.body) @@ -40,7 +41,6 @@ module Prices 'Computed price did not match training price' end - test 'compute price for a machine reservation with an offered slot and a subscription' do user = User.find_by(username: 'jdupond') availability = Availability.find(3) @@ -48,7 +48,7 @@ module Prices plan = Plan.where(group_id: user.group_id, interval: 'month').first post '/api/prices/compute', - { + params: { reservation: { user_id: user.id, reservable_id: laser.id, @@ -70,11 +70,11 @@ module Prices ] } }.to_json, - default_headers + headers: default_headers # Check response format & status assert_equal 200, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the event was created correctly price = json_response(response.body) diff --git a/test/integration/reservations/create_as_admin_test.rb b/test/integration/reservations/create_as_admin_test.rb index 9cca9f9cc..164cb06b9 100644 --- a/test/integration/reservations/create_as_admin_test.rb +++ b/test/integration/reservations/create_as_admin_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Reservations class CreateAsAdminTest < ActionDispatch::IntegrationTest setup do @@ -16,7 +18,7 @@ module Reservations invoice_items_count = InvoiceItem.count users_credit_count = UsersCredit.count - post reservations_path, { reservation: { + post reservations_path, params: { reservation: { user_id: @user_without_subscription.id, reservable_id: machine.id, reservable_type: machine.class.name, @@ -27,7 +29,7 @@ module Reservations availability_id: availability.id } ] - } }.to_json, default_headers + } }.to_json, headers: default_headers # general assertions assert_equal 201, response.status @@ -73,7 +75,7 @@ module Reservations invoice_count = Invoice.count invoice_items_count = InvoiceItem.count - post reservations_path, { reservation: { + post reservations_path, params: { reservation: { user_id: @user_without_subscription.id, reservable_id: training.id, reservable_type: training.class.name, @@ -84,7 +86,7 @@ module Reservations availability_id: availability.id } ] - } }.to_json, default_headers + } }.to_json, headers: default_headers # general assertions assert_equal 201, response.status @@ -130,7 +132,7 @@ module Reservations invoice_items_count = InvoiceItem.count users_credit_count = UsersCredit.count - post reservations_path, { reservation: { + post reservations_path, params: { reservation: { user_id: @user_with_subscription.id, reservable_id: machine.id, reservable_type: machine.class.name, @@ -146,7 +148,7 @@ module Reservations availability_id: availability.id } ] - } }.to_json, default_headers + } }.to_json, headers: default_headers # general assertions assert_equal 201, response.status @@ -203,7 +205,7 @@ module Reservations invoice_items_count = InvoiceItem.count users_credit_count = UsersCredit.count - post reservations_path, { reservation: { + post reservations_path, params: { reservation: { user_id: @vlonchamp.id, reservable_id: machine.id, reservable_type: machine.class.name, @@ -214,7 +216,7 @@ module Reservations availability_id: availability.id } ] - } }.to_json, default_headers + } }.to_json, headers: default_headers # general assertions assert_equal 201, response.status @@ -273,7 +275,7 @@ module Reservations users_credit_count = UsersCredit.count wallet_transactions_count = WalletTransaction.count - post reservations_path, { reservation: { + post reservations_path, params: { reservation: { user_id: @vlonchamp.id, reservable_id: machine.id, reservable_type: machine.class.name, @@ -285,7 +287,7 @@ module Reservations availability_id: availability.id } ] - } }.to_json, default_headers + } }.to_json, headers: default_headers # general assertions assert_equal 201, response.status @@ -340,7 +342,7 @@ module Reservations invoice_items_count = InvoiceItem.count users_credit_count = UsersCredit.count - post reservations_path, { reservation: { + post reservations_path, params: { reservation: { user_id: @vlonchamp.id, reservable_id: machine.id, reservable_type: machine.class.name, @@ -351,7 +353,7 @@ module Reservations availability_id: availability.id } ] - } }.to_json, default_headers + } }.to_json, headers: default_headers # general assertions assert_equal 201, response.status @@ -383,7 +385,7 @@ module Reservations invoice_items_count = InvoiceItem.count users_credit_count = UsersCredit.count - post reservations_path, { reservation: { + post reservations_path, params: { reservation: { user_id: @user_without_subscription.id, plan_id: plan.id, reservable_id: training.id, @@ -396,11 +398,11 @@ module Reservations availability_id: availability.id } ] - } }.to_json, default_headers + } }.to_json, headers: default_headers # general assertions assert_equal 201, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type result = json_response(response.body) # Check the DB objects have been created as they should diff --git a/test/integration/reservations/create_test.rb b/test/integration/reservations/create_test.rb index edcad213c..e9d17c1a3 100644 --- a/test/integration/reservations/create_test.rb +++ b/test/integration/reservations/create_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Reservations class CreateTest < ActionDispatch::IntegrationTest setup do @@ -19,7 +21,7 @@ module Reservations VCR.use_cassette('reservations_create_for_machine_without_subscription_success') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method, cart_items: { reservation: { @@ -34,7 +36,7 @@ module Reservations ] } } - }.to_json, default_headers + }.to_json, headers: default_headers end # general assertions @@ -89,7 +91,7 @@ module Reservations VCR.use_cassette('reservations_create_for_machine_without_subscription_error') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method(error: :card_declined), cart_items: { reservation: { @@ -104,12 +106,12 @@ module Reservations ] } } - }.to_json, default_headers + }.to_json, headers: default_headers end # Check response format & status assert_equal 200, response.status, "API does not return the expected status. #{response.body}" - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the error was handled assert_match /Your card was declined/, response.body @@ -137,7 +139,7 @@ module Reservations VCR.use_cassette('reservations_create_for_training_without_subscription_success') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method, cart_items: { reservation: { @@ -152,7 +154,7 @@ module Reservations ] } } - }.to_json, default_headers + }.to_json, headers: default_headers end # general assertions @@ -206,7 +208,7 @@ module Reservations VCR.use_cassette('reservations_create_for_machine_with_subscription_success') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method, cart_items: { reservation: { @@ -226,7 +228,7 @@ module Reservations ] } } - }.to_json, default_headers + }.to_json, headers: default_headers end # general assertions @@ -290,7 +292,7 @@ module Reservations VCR.use_cassette('reservations_create_for_training_with_subscription_success') do post '/api/reservations', - { + params: { reservation: { reservable_id: training.id, reservable_type: training.class.name, @@ -302,7 +304,7 @@ module Reservations } ] } - }.to_json, default_headers + }.to_json, headers: default_headers end # general assertions @@ -361,7 +363,7 @@ module Reservations VCR.use_cassette('reservations_create_for_machine_and_pay_wallet_success') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method, cart_items: { reservation: { @@ -378,7 +380,7 @@ module Reservations ] } } - }.to_json, default_headers + }.to_json, headers: default_headers end @vlonchamp.wallet.reload @@ -445,7 +447,7 @@ module Reservations VCR.use_cassette('reservations_create_for_training_and_plan_by_pay_wallet_success') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method, cart_items: { reservation: { @@ -461,7 +463,7 @@ module Reservations ] } } - }.to_json, default_headers + }.to_json, headers: default_headers end @vlonchamp.wallet.reload @@ -523,7 +525,7 @@ module Reservations VCR.use_cassette('reservations_machine_and_plan_using_coupon_success') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method, cart_items: { reservation: { @@ -540,7 +542,7 @@ module Reservations }, coupon_code: 'SUNNYFABLAB' } - }.to_json, default_headers + }.to_json, headers: default_headers end # general assertions @@ -614,7 +616,7 @@ module Reservations VCR.use_cassette('reservations_training_with_expired_coupon_error') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method, cart_items: { reservation: { @@ -624,15 +626,15 @@ module Reservations card_token: stripe_payment_method, slots_attributes: [ { - start_at: availability.start_at.to_s(:iso8601), - end_at: (availability.start_at + 1.hour).to_s(:iso8601), - availability_id: availability.id - } + start_at: availability.start_at.to_s(:iso8601), + end_at: (availability.start_at + 1.hour).to_s(:iso8601), + availability_id: availability.id + } ] }, coupon_code: 'XMAS10' } - }.to_json, default_headers + }.to_json, headers: default_headers end # general assertions diff --git a/test/integration/settings_test.rb b/test/integration/settings_test.rb index 6d7d6498d..c0b2c7deb 100644 --- a/test/integration/settings_test.rb +++ b/test/integration/settings_test.rb @@ -1,5 +1,6 @@ -class SettingsTest < ActionDispatch::IntegrationTest +# frozen_string_literal: true +class SettingsTest < ActionDispatch::IntegrationTest # Called before every test method runs. Can be used # to set up fixture information. def setup @@ -9,11 +10,13 @@ class SettingsTest < ActionDispatch::IntegrationTest test 'update setting value' do put '/api/settings/fablab_name', - setting: { - value: 'Test Fablab' + params: { + setting: { + value: 'Test Fablab' + } } assert_equal 200, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type resp = json_response(response.body) assert_equal 'fablab_name', resp[:setting][:name] assert_equal 'Test Fablab', resp[:setting][:value] @@ -26,11 +29,12 @@ class SettingsTest < ActionDispatch::IntegrationTest assert_includes setting.history_values.map(&:value), 'Test Fablab', 'current parameter was not saved' end - test 'update setting with wrong name' do put '/api/settings/does_not_exists', - setting: { - value: 'ERROR EXPECTED' + params: { + setting: { + value: 'ERROR EXPECTED' + } } assert_equal 422, response.status assert_match /Name is not included in the list/, response.body @@ -40,10 +44,9 @@ class SettingsTest < ActionDispatch::IntegrationTest get '/api/settings/fablab_name' assert_equal 200, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type resp = json_response(response.body) assert_equal 'fablab_name', resp[:setting][:name], 'wrong parameter name' assert_equal 'Fab Lab de La Casemate', resp[:setting][:value], 'wrong parameter value' end - end diff --git a/test/integration/subscriptions/create_as_admin_test.rb b/test/integration/subscriptions/create_as_admin_test.rb index fa7295e29..534ece8bf 100644 --- a/test/integration/subscriptions/create_as_admin_test.rb +++ b/test/integration/subscriptions/create_as_admin_test.rb @@ -2,8 +2,6 @@ module Subscriptions class CreateAsAdminTest < ActionDispatch::IntegrationTest - - setup do @admin = User.find_by(username: 'admin') login_as(@admin, scope: :user) @@ -15,18 +13,17 @@ module Subscriptions VCR.use_cassette('subscriptions_admin_create_success') do post '/api/subscriptions', - { + params: { subscription: { plan_id: plan.id, user_id: user.id } - }.to_json, default_headers + }.to_json, headers: default_headers end - # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct plan was subscribed subscription = json_response(response.body) @@ -58,6 +55,5 @@ module Subscriptions assert_invoice_pdf invoice assert_equal plan.amount, invoice.total, 'Invoice total price does not match the bought subscription' end - end end diff --git a/test/integration/subscriptions/create_as_user_test.rb b/test/integration/subscriptions/create_as_user_test.rb index 1f5376d41..74e83e6d6 100644 --- a/test/integration/subscriptions/create_as_user_test.rb +++ b/test/integration/subscriptions/create_as_user_test.rb @@ -1,6 +1,6 @@ +# frozen_string_literal: true + class Subscriptions::CreateAsUserTest < ActionDispatch::IntegrationTest - - setup do @user = User.find_by(username: 'jdupond') login_as(@user, scope: :user) @@ -11,19 +11,19 @@ class Subscriptions::CreateAsUserTest < ActionDispatch::IntegrationTest VCR.use_cassette('subscriptions_user_create_success') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method, cart_items: { subscription: { plan_id: plan.id } } - }.to_json, default_headers + }.to_json, headers: default_headers end # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct plan was subscribed subscription = json_response(response.body) @@ -65,27 +65,25 @@ class Subscriptions::CreateAsUserTest < ActionDispatch::IntegrationTest assert_equal plan.amount, invoice.total, 'Invoice total price does not match the bought subscription' end - - test 'user fails to take a subscription' do # get plan for wrong group plan = Plan.where.not(group_id: @user.group.id).first VCR.use_cassette('subscriptions_user_create_failed') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method, cart_items: { subscription: { plan_id: plan.id } } - }.to_json, default_headers + }.to_json, headers: default_headers end # Check response format & status assert_equal 422, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the error was handled assert_match /plan is not compatible/, response.body @@ -94,7 +92,6 @@ class Subscriptions::CreateAsUserTest < ActionDispatch::IntegrationTest assert_nil @user.subscription, "user's subscription was found" end - test 'user successfully takes a subscription with wallet' do @vlonchamp = User.find_by(username: 'vlonchamp') login_as(@vlonchamp, scope: :user) @@ -102,21 +99,21 @@ class Subscriptions::CreateAsUserTest < ActionDispatch::IntegrationTest VCR.use_cassette('subscriptions_user_create_success_with_wallet') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method, cart_items: { subscription: { plan_id: plan.id } } - }.to_json, default_headers + }.to_json, headers: default_headers end @vlonchamp.wallet.reload # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct plan was subscribed subscription = json_response(response.body) @@ -138,7 +135,8 @@ class Subscriptions::CreateAsUserTest < ActionDispatch::IntegrationTest assert_equal 10, (printer.prices.find_by( group_id: @vlonchamp.group_id, - plan_id: @vlonchamp.subscription.plan_id).amount / 100.00 + plan_id: @vlonchamp.subscription.plan_id + ).amount / 100.00 ), 'machine hourly price does not match' diff --git a/test/integration/subscriptions/renew_as_admin_test.rb b/test/integration/subscriptions/renew_as_admin_test.rb index b2ba7883b..92adf17fd 100644 --- a/test/integration/subscriptions/renew_as_admin_test.rb +++ b/test/integration/subscriptions/renew_as_admin_test.rb @@ -1,28 +1,28 @@ -class Subscriptions::RenewAsAdminTest < ActionDispatch::IntegrationTest +# frozen_string_literal: true +class Subscriptions::RenewAsAdminTest < ActionDispatch::IntegrationTest setup do @admin = User.find_by(username: 'admin') login_as(@admin, scope: :user) end test 'admin successfully renew a subscription before it has ended' do - user = User.find_by(username: 'kdumas') plan = Plan.find_by(base_name: 'Mensuel tarif réduit') VCR.use_cassette('subscriptions_admin_renew_success') do post '/api/subscriptions', - { + params: { subscription: { plan_id: plan.id, user_id: user.id } - }.to_json, default_headers + }.to_json, headers: default_headers end # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct plan was subscribed subscription = json_response(response.body) @@ -74,17 +74,17 @@ class Subscriptions::RenewAsAdminTest < ActionDispatch::IntegrationTest VCR.use_cassette('subscriptions_admin_offer_free_days') do put "/api/subscriptions/#{subscription.id}", - { + params: { subscription: { expired_at: new_date.strftime('%Y-%m-%d %H:%M:%S.%9N Z'), free: true } - }.to_json, default_headers + }.to_json, headers: default_headers end # Check response format & status assert_equal 200, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check that the subscribed plan was not altered res_subscription = json_response(response.body) @@ -114,16 +114,16 @@ class Subscriptions::RenewAsAdminTest < ActionDispatch::IntegrationTest VCR.use_cassette('subscriptions_admin_extends_subscription') do put "/api/subscriptions/#{subscription.id}", - { + params: { subscription: { expired_at: new_date.strftime('%Y-%m-%d %H:%M:%S.%9N Z') } - }.to_json, default_headers + }.to_json, headers: default_headers end # Check response format & status assert_equal 201, response.status, response.body - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check that the subscribed plan is still the same res_subscription = json_response(response.body) @@ -145,5 +145,4 @@ class Subscriptions::RenewAsAdminTest < ActionDispatch::IntegrationTest assert_not_nil notification, 'user notification was not created' assert_equal user.id, notification.receiver_id, 'wrong user notified' end - end diff --git a/test/integration/subscriptions/renew_as_user_test.rb b/test/integration/subscriptions/renew_as_user_test.rb index 117efac12..8f694626a 100644 --- a/test/integration/subscriptions/renew_as_user_test.rb +++ b/test/integration/subscriptions/renew_as_user_test.rb @@ -1,6 +1,6 @@ +# frozen_string_literal: true + class Subscriptions::RenewAsUserTest < ActionDispatch::IntegrationTest - - setup do @user = User.find_by(username: 'lseguin') login_as(@user, scope: :user) @@ -12,19 +12,19 @@ class Subscriptions::RenewAsUserTest < ActionDispatch::IntegrationTest VCR.use_cassette('subscriptions_user_renew_success', erb: true) do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method, cart_items: { subscription: { plan_id: plan.id } } - }.to_json, default_headers + }.to_json, headers: default_headers end # Check response format & status assert_equal 201, response.status, "API does not return the expected status. #{response.body}" - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the correct plan was subscribed subscription = json_response(response.body) @@ -69,8 +69,6 @@ class Subscriptions::RenewAsUserTest < ActionDispatch::IntegrationTest assert_equal plan.amount, invoice.total, 'Invoice total price does not match the bought subscription' end - - test 'user fails to renew a subscription' do plan = Plan.find_by(group_id: @user.group.id, type: 'Plan', base_name: 'Mensuel') @@ -78,19 +76,19 @@ class Subscriptions::RenewAsUserTest < ActionDispatch::IntegrationTest VCR.use_cassette('subscriptions_user_renew_failed') do post '/api/payments/confirm_payment', - { + params: { payment_method_id: stripe_payment_method(error: :card_declined), cart_items: { subscription: { plan_id: plan.id } } - }.to_json, default_headers + }.to_json, headers: default_headers end # Check response format & status assert_equal 200, response.status, "API does not return the expected status. #{response.body}" - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type # Check the error was handled assert_match /Your card was declined/, response.body @@ -100,7 +98,5 @@ class Subscriptions::RenewAsUserTest < ActionDispatch::IntegrationTest # Check the subscription was not saved assert_equal 1, @user.subscriptions.count - end - end diff --git a/test/integration/wallets_test.rb b/test/integration/wallets_test.rb index fa3f6f47a..b0c711a26 100644 --- a/test/integration/wallets_test.rb +++ b/test/integration/wallets_test.rb @@ -1,5 +1,6 @@ -class WalletsTest < ActionDispatch::IntegrationTest +# frozen_string_literal: true +class WalletsTest < ActionDispatch::IntegrationTest # Called before every test method runs. Can be used # to set up fixture information. def setup @@ -17,7 +18,7 @@ class WalletsTest < ActionDispatch::IntegrationTest test 'get my wallet' do get "/api/wallet/by_user/#{@vlonchamp.id}" assert_equal 200, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type wallet = json_response(response.body) assert_equal @vlonchamp.wallet.invoicing_profile_id, wallet[:invoicing_profile_id] assert_equal @vlonchamp.wallet.amount, wallet[:amount] @@ -29,7 +30,7 @@ class WalletsTest < ActionDispatch::IntegrationTest @user1 = User.first get "/api/wallet/by_user/#{@user1.id}" assert_equal 200, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type wallet = json_response(response.body) assert_equal @user1.wallet.invoicing_profile_id, wallet[:invoicing_profile_id] assert_equal @user1.wallet.amount, wallet[:amount] @@ -45,7 +46,7 @@ class WalletsTest < ActionDispatch::IntegrationTest w = @vlonchamp.wallet get "/api/wallet/#{w.id}/transactions" assert_equal 200, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type transactions = json_response(response.body) assert_equal w.wallet_transactions.count, transactions.size assert_equal wallet_transactions(:transaction1).id, transactions.first[:id] @@ -64,10 +65,10 @@ class WalletsTest < ActionDispatch::IntegrationTest amount = 10.5 expected_amount = w.amount + amount put "/api/wallet/#{w.id}/credit", - amount: amount + params: { amount: amount } assert_equal 200, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type wallet = json_response(response.body) w.reload assert_equal w.amount, expected_amount @@ -77,7 +78,6 @@ class WalletsTest < ActionDispatch::IntegrationTest assert_empty Invoice.where(invoiced: w.wallet_transactions.last) end - test 'admin credit wallet with refund invoice generation' do admin = users(:user_1) login_as(admin, scope: :user) @@ -86,13 +86,15 @@ class WalletsTest < ActionDispatch::IntegrationTest avoir_date = DateTime.current.end_of_day expected_amount = w.amount + amount put "/api/wallet/#{w.id}/credit", - amount: amount, - avoir: true, - avoir_date: avoir_date, - avoir_description: 'Some text' + params: { + amount: amount, + avoir: true, + avoir_date: avoir_date, + avoir_description: 'Some text' + } assert_equal 200, response.status - assert_equal Mime::JSON, response.content_type + assert_equal Mime[:json], response.content_type wallet = json_response(response.body) w.reload assert_equal w.amount, expected_amount