From 922c3ab81abb47fe2656e446ae952d0f1930c765 Mon Sep 17 00:00:00 2001 From: Dennis Schubert Date: Sun, 6 Nov 2016 07:37:56 +0100 Subject: [PATCH 01/52] Update gems --- Gemfile | 8 ++-- Gemfile.lock | 123 ++++++++++++++++++++++++++------------------------- 2 files changed, 67 insertions(+), 64 deletions(-) diff --git a/Gemfile b/Gemfile index fc47ba744..e210eca7c 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source "https://rubygems.org" -gem "rails", "4.2.9" +gem "rails", "5.1.3" # Legacy Rails features, remove me! # responders (class level) @@ -90,7 +90,7 @@ gem "entypo-rails", "3.0.0" gem "handlebars_assets", "0.23.2" gem "jquery-rails", "4.3.1" gem "js-routes", "1.3.3" -gem "js_image_paths", "0.1.0" +gem "js_image_paths", "0.1.1" source "https://rails-assets.org" do gem "rails-assets-jquery", "3.2.1" # Should be kept in sync with jquery-rails @@ -124,7 +124,7 @@ end gem "http_accept_language", "2.1.1" gem "i18n-inflector-rails", "1.0.7" -gem "rails-i18n", "4.0.9" +gem "rails-i18n", "5.0.4" # Mail @@ -185,7 +185,7 @@ gem "typhoeus", "1.1.2" gem "gon", "6.1.0" gem "hamlit", "2.8.4" -gem "mobile-fu", "1.3.1" +gem "mobile_fu", "1.4.0" gem "rails-timeago", "2.16.0" gem "will_paginate", "3.1.6" diff --git a/Gemfile.lock b/Gemfile.lock index 85a208bf6..5f3c30c9b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,44 +2,47 @@ GEM remote: https://rubygems.org/ remote: https://rails-assets.org/ specs: - actionmailer (4.2.9) - actionpack (= 4.2.9) - actionview (= 4.2.9) - activejob (= 4.2.9) + actioncable (5.1.3) + actionpack (= 5.1.3) + nio4r (~> 2.0) + websocket-driver (~> 0.6.1) + actionmailer (5.1.3) + actionpack (= 5.1.3) + actionview (= 5.1.3) + activejob (= 5.1.3) mail (~> 2.5, >= 2.5.4) - rails-dom-testing (~> 1.0, >= 1.0.5) - 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-dom-testing (~> 2.0) + actionpack (5.1.3) + actionview (= 5.1.3) + activesupport (= 5.1.3) + rack (~> 2.0) + rack-test (~> 0.6.3) + rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (4.2.9) - activesupport (= 4.2.9) + actionview (5.1.3) + activesupport (= 5.1.3) builder (~> 3.1) - erubis (~> 2.7.0) - rails-dom-testing (~> 1.0, >= 1.0.5) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) active_model_serializers (0.9.7) activemodel (>= 3.2) concurrent-ruby (~> 1.0) - activejob (4.2.9) - activesupport (= 4.2.9) - globalid (>= 0.3.0) - activemodel (4.2.9) - activesupport (= 4.2.9) - builder (~> 3.1) - activerecord (4.2.9) - activemodel (= 4.2.9) - activesupport (= 4.2.9) - arel (~> 6.0) + activejob (5.1.3) + activesupport (= 5.1.3) + globalid (>= 0.3.6) + activemodel (5.1.3) + activesupport (= 5.1.3) + activerecord (5.1.3) + activemodel (= 5.1.3) + activesupport (= 5.1.3) + arel (~> 8.0) activerecord-import (0.19.1) activerecord (>= 3.2) - activesupport (4.2.9) + activesupport (5.1.3) + concurrent-ruby (~> 1.0, >= 1.0.2) i18n (~> 0.7) minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) acts-as-taggable-on (5.0.0) activerecord (>= 4.2.8) @@ -49,7 +52,7 @@ GEM rack (>= 1.1.0) addressable (2.5.1) public_suffix (~> 2.0, >= 2.0.2) - arel (6.0.4) + arel (8.0.0) asset_sync (2.2.0) activemodel (>= 4.1.0) fog-core @@ -183,7 +186,7 @@ GEM entypo-rails (3.0.0) railties (>= 4.1, < 6) equalizer (0.0.11) - erubis (2.7.0) + erubi (1.6.1) eslintrb (2.1.0) execjs multi_json (>= 1.3) @@ -324,8 +327,9 @@ GEM js-routes (1.3.3) railties (>= 3.2) sprockets-rails - js_image_paths (0.1.0) - rails (~> 4.0) + js_image_paths (0.1.1) + rails (>= 4.0, < 6.0) + sprockets (>= 3.0.0) json (2.1.0) json-jwt (1.7.2) activesupport @@ -371,7 +375,7 @@ GEM mini_magick (4.8.0) mini_portile2 (2.2.0) minitest (5.10.3) - mobile-fu (1.3.1) + mobile_fu (1.4.0) rack-mobile-detect rails multi_json (1.12.1) @@ -430,7 +434,7 @@ GEM validate_url webfinger (>= 1.0.1) orm_adapter (0.5.0) - parallel (1.11.2) + parallel (1.12.0) parser (2.4.0.0) ast (~> 2.2) pg (0.21.0) @@ -467,7 +471,7 @@ GEM byebug (~> 9.0) pry (~> 0.10) public_suffix (2.0.5) - rack (1.6.8) + rack (2.0.3) rack-cors (1.0.1) rack-google-analytics (1.2.0) actionpack @@ -488,17 +492,18 @@ GEM rack rack-test (0.6.3) rack (>= 1.0) - 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.9) - sprockets-rails + rails (5.1.3) + actioncable (= 5.1.3) + actionmailer (= 5.1.3) + actionpack (= 5.1.3) + actionview (= 5.1.3) + activejob (= 5.1.3) + activemodel (= 5.1.3) + activerecord (= 5.1.3) + activesupport (= 5.1.3) + bundler (>= 1.3.0) + railties (= 5.1.3) + sprockets-rails (>= 2.0.0) rails-assets-autosize (4.0.0) rails-assets-backbone (1.3.3) rails-assets-underscore (>= 1.8.3) @@ -545,23 +550,21 @@ GEM rails-assets-markdown-it-sup (1.0.0) rails-assets-perfect-scrollbar (0.6.16) rails-assets-underscore (1.8.3) - rails-deprecated_sanitizer (1.0.3) - activesupport (>= 4.2.0.alpha) - rails-dom-testing (1.0.8) - activesupport (>= 4.2.0.beta, < 5.0) - nokogiri (~> 1.6) - rails-deprecated_sanitizer (>= 1.0.1) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) rails-html-sanitizer (1.0.3) loofah (~> 2.0) - rails-i18n (4.0.9) + rails-i18n (5.0.4) i18n (~> 0.7) - railties (~> 4.0) + railties (~> 5.0) rails-timeago (2.16.0) actionpack (>= 3.1) activesupport (>= 3.1) - railties (4.2.9) - actionpack (= 4.2.9) - activesupport (= 4.2.9) + railties (5.1.3) + actionpack (= 5.1.3) + activesupport (= 5.1.3) + method_source rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rainbow (2.2.2) @@ -803,7 +806,7 @@ DEPENDENCIES jasmine-jquery-rails (= 2.0.3) jquery-rails (= 4.3.1) js-routes (= 1.3.3) - js_image_paths (= 0.1.0) + js_image_paths (= 0.1.1) json (= 2.1.0) json-schema (= 2.8.0) json-schema-rspec (= 0.0.4) @@ -812,7 +815,7 @@ DEPENDENCIES markerb (= 1.1.0) mini_magick (= 4.8.0) minitest - mobile-fu (= 1.3.1) + mobile_fu (= 1.4.0) mysql2 (= 0.4.8) nokogiri (= 1.8.0) omniauth (= 1.6.1) @@ -836,7 +839,7 @@ DEPENDENCIES rack-piwik (= 0.3.0) rack-rewrite (= 1.5.1) rack-ssl (= 1.4.1) - rails (= 4.2.9) + rails (= 5.1.3) rails-assets-autosize (= 4.0.0)! rails-assets-backbone (= 1.3.3)! rails-assets-blueimp-gallery (= 2.25.2)! @@ -859,7 +862,7 @@ DEPENDENCIES rails-assets-markdown-it-sub (= 1.0.0)! rails-assets-markdown-it-sup (= 1.0.0)! rails-assets-perfect-scrollbar (= 0.6.16)! - rails-i18n (= 4.0.9) + rails-i18n (= 5.0.4) rails-timeago (= 2.16.0) rb-fsevent (= 0.10.2) rb-inotify (= 0.9.10) From 45de17e1dec846a0073b99f91915f68ee91ce337 Mon Sep 17 00:00:00 2001 From: Dennis Schubert Date: Sun, 6 Nov 2016 19:14:06 +0100 Subject: [PATCH 02/52] Remove test_after_commit --- Gemfile | 1 - Gemfile.lock | 3 --- 2 files changed, 4 deletions(-) diff --git a/Gemfile b/Gemfile index e210eca7c..1c0be7266 100644 --- a/Gemfile +++ b/Gemfile @@ -280,7 +280,6 @@ group :test do gem "fuubar", "2.2.0" gem "json-schema-rspec", "0.0.4" gem "rspec-json_expectations", "~> 2.1" - gem "test_after_commit", "1.1.0" # Cucumber (integration tests) diff --git a/Gemfile.lock b/Gemfile.lock index 5f3c30c9b..193edc8f7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -685,8 +685,6 @@ GEM tins (~> 1.0) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) - test_after_commit (1.1.0) - activerecord (>= 3.2) thor (0.19.1) thread_safe (0.3.6) tilt (2.0.8) @@ -886,7 +884,6 @@ DEPENDENCIES spring-commands-rspec (= 1.0.4) sprockets-rails (= 3.2.0) string-direction (= 1.2.0) - test_after_commit (= 1.1.0) thor (= 0.19.1) timecop (= 0.9.1) turbo_dev_assets (= 0.0.2) From b711a8d4a1baefd9af0961e9be38bffb688f37a3 Mon Sep 17 00:00:00 2001 From: Dennis Schubert Date: Sun, 6 Nov 2016 19:36:50 +0100 Subject: [PATCH 03/52] Update binstubs --- bin/rails | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/bin/rails b/bin/rails index 0af1c3baf..5badb2fde 100755 --- a/bin/rails +++ b/bin/rails @@ -4,8 +4,6 @@ begin rescue LoadError => e raise unless e.message.include?('spring') end -# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. - -APP_PATH = File.expand_path('../../config/application', __FILE__) -require File.expand_path('../../config/boot', __FILE__) +APP_PATH = File.expand_path('../config/application', __dir__) +require_relative '../config/boot' require 'rails/commands' From 3d7061b240d210278507bf3fdde66db0c8b60bd6 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 30 Jul 2017 02:07:15 +0200 Subject: [PATCH 04/52] Update configs for rails 5 Used `rails app:update` --- config/application.rb | 21 ++--- config/boot.rb | 9 +- config/environment.rb | 6 +- config/environments/development.rb | 51 +++++++---- config/environments/production.rb | 86 +++++++++++-------- config/environments/test.rb | 30 ++++--- .../application_controller_renderer.rb | 6 ++ config/initializers/assets.rb | 17 ++-- config/initializers/backtrace_silencers.rb | 7 ++ config/initializers/cookies_serializer.rb | 5 ++ config/initializers/cors.rb | 10 ++- .../initializers/filter_parameter_logging.rb | 2 +- config/initializers/inflections.rb | 16 ++++ config/initializers/mime_types.rb | 4 + config/initializers/wrap_parameters.rb | 4 +- config/routes.rb | 3 +- config/spring.rb | 6 ++ 17 files changed, 187 insertions(+), 96 deletions(-) create mode 100644 config/initializers/application_controller_renderer.rb create mode 100644 config/initializers/backtrace_silencers.rb create mode 100644 config/initializers/cookies_serializer.rb create mode 100644 config/initializers/inflections.rb create mode 100644 config/initializers/mime_types.rb create mode 100644 config/spring.rb diff --git a/config/application.rb b/config/application.rb index 619b66070..6410e0bc1 100644 --- a/config/application.rb +++ b/config/application.rb @@ -1,7 +1,10 @@ require_relative 'boot' require 'rails/all' -Bundler.require(:default, *Bundler.settings.with, Rails.env) + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups(*Bundler.settings.with)) # Do not dump the limit of boolean fields on MySQL, # since that generates a db/schema.rb that's incompatible @@ -24,6 +27,9 @@ require_relative 'asset_sync' module Diaspora class Application < Rails::Application + # 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. @@ -64,8 +70,9 @@ module Diaspora # Speed up precompile by not loading the environment config.assets.initialize_on_precompile = false - # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) - config.assets.precompile += %w( + # Precompile additional assets. + # (application.js, application.css, and all non-JS/CSS in the app/assets are already added) + config.assets.precompile += %w[ contact-list.js ie.js jquery3.js @@ -82,10 +89,7 @@ module Diaspora rtl.css color_themes/*/desktop.css color_themes/*/mobile.css - ) - - # Version of your assets, change this if you want to expire all your assets - config.assets.version = '1.0' + ] # See lib/tasks/assets.rake: non_digest_assets config.assets.non_digest_assets = %w(branding/logos/asterisk.png) @@ -96,9 +100,6 @@ module Diaspora g.test_framework :rspec end - # Will be default with Rails 5 - config.active_record.raise_in_transactional_callbacks = true - # Setup action mailer early config.action_mailer.default_url_options = { protocol: AppConfig.pod_uri.scheme, diff --git a/config/boot.rb b/config/boot.rb index 6e3d23427..e9f0721fe 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -1,9 +1,6 @@ -# Set up gems listed in the Gemfile. -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) -require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) -# Ensure Builder is loaded -require 'active_support/builder' unless defined?(Builder) +require "bundler/setup" # Set up gems listed in the Gemfile. # Load configuration early -require_relative 'load_config' +require_relative "load_config" diff --git a/config/environment.rb b/config/environment.rb index c9482d0ee..426333bb4 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -1,5 +1,5 @@ -# Load the rails application +# Load the Rails application. require_relative 'application' -# Initialize the rails application -Diaspora::Application.initialize! +# Initialize the Rails application. +Rails.application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb index c32bb8287..f422f016e 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -1,5 +1,5 @@ -Diaspora::Application.configure do - # Settings specified here will take precedence over those in config/application.rb +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. # In the development environment your application's code is reloaded on # every request. This slows down response time but is perfect for development @@ -9,30 +9,40 @@ Diaspora::Application.configure do # Do not eager load code on boot. config.eager_load = false - # Show full error reports and disable caching - config.consider_all_requests_local = true - config.action_controller.perform_caching = false + # Show full error reports. + config.consider_all_requests_local = true - # Don't care if the mailer can't send + # Enable/disable caching. By default caching is disabled. + if Rails.root.join("tmp", "caching-dev.txt").exist? + config.action_controller.perform_caching = true + + config.cache_store = :memory_store + config.public_file_server.headers = { + "Cache-Control" => "public, max-age=#{2.days.seconds.to_i}" + } + else + config.action_controller.perform_caching = false + + config.cache_store = :null_store + end + + # Don't care if the mailer can't send. config.action_mailer.raise_delivery_errors = false - # Raise an error on page load if there are pending migrations - config.active_record.migration_error = :page_load + config.action_mailer.perform_caching = false - # Print deprecation notices to the Rails logger + # Print deprecation notices to the Rails logger. config.active_support.deprecation = :log - # Only use best-standards-support built into browsers - config.action_dispatch.best_standards_support = :builtin + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load - - # Do not compress assets - config.assets.compress = false - - # Expands the lines which load the assets + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. config.assets.debug = true - # No assets request logging + # Suppress logger output for asset requests. config.assets.quiet = true # Set the logging destination(s) @@ -41,6 +51,13 @@ Diaspora::Application.configure do # Show the logging configuration on STDOUT config.show_log_configuration = true + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true + + # 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 + # Speed up asset serving config.middleware.insert 0, TurboDevAssets end diff --git a/config/environments/production.rb b/config/environments/production.rb index a624236ab..b6cdb8cab 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -1,35 +1,51 @@ -Diaspora::Application.configure do - # Settings specified here will take precedence over those in config/application.rb +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. - # Code is not reloaded between requests + # Code is not reloaded between requests. config.cache_classes = true # Eager load code on boot. This eager loads most of Rails and - # your application in memory, allowing both thread web servers + # your application in memory, allowing both threaded web servers # and those relying on copy on write to perform better. # Rake tasks automatically ignore this option for performance. config.eager_load = true - # Full error reports are disabled and caching is turned on + # Full error reports are disabled and caching is turned on. config.consider_all_requests_local = false config.action_controller.perform_caching = true - # Disable Rails's static asset server (Apache or nginx will already do this) - config.serve_static_files = false + # Attempt to read encrypted secrets from `config/secrets.yml.enc`. + # Requires an encryption key in `ENV["RAILS_MASTER_KEY"]` or + # `config/secrets.yml.key`. + config.read_encrypted_secrets = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present? # Compress JavaScripts and CSS. config.assets.js_compressor = :uglifier # config.assets.css_compressor = :sass - # Don't fallback to assets pipeline if a precompiled asset is missed + # Do not fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = false - # Generate digests for assets URLs + # Generate digests for assets URLs. config.assets.digest = true - # Specifies the header that your server uses for sending files - # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache - # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + if AppConfig.environment.assets.host.present? + config.action_controller.asset_host = AppConfig.environment.assets.host.get + end + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + + # Mount Action Cable outside main process or domain + # config.action_cable.mount_path = nil + # config.action_cable.url = 'wss://example.com/cable' + # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. # config.force_ssl = true @@ -37,44 +53,44 @@ Diaspora::Application.configure do # Log level config.log_level = :info + # Prepend all log lines with the following tags. + # config.log_tags = [ :request_id ] + # Set the logging destination(s) config.log_to = %w[file] # Show the logging configuration on STDOUT config.show_log_configuration = false - # Prepend all log lines with the following tags - # config.log_tags = [ :subdomain, :uuid ] - - # Use a different logger for distributed setups - # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) - - # Use a different cache store in production + # Use a different cache store in production. # config.cache_store = :mem_cache_store - # Enable serving of images, stylesheets, and JavaScripts from an asset server - # config.action_controller.asset_host = "http://assets.example.com" + config.action_mailer.perform_caching = false - # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) - # config.assets.precompile += %w( search.js ) - - # Disable delivery errors, bad email addresses will be ignored + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. # config.action_mailer.raise_delivery_errors = false - # Enable autoload for rake tasks - config.dependency_loading = true if $rails_rake_task - # Enable locale fallbacks for I18n (makes lookups for any locale fall back to - # the I18n.default_locale when a translation can not be found) + # the I18n.default_locale when a translation cannot be found). config.i18n.fallbacks = true - # Send deprecation notices to registered listeners + # Send deprecation notices to registered listeners. config.active_support.deprecation = :notify - # For nginx: - config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" + # Use default logging formatter so that PID and timestamp are not suppressed. + # config.log_formatter = ::Logger::Formatter.new - if AppConfig.environment.assets.host.present? - config.action_controller.asset_host = AppConfig.environment.assets.host.get - end + # Use a different logger for distributed setups. + # require 'syslog/logger' + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') + + # if ENV["RAILS_LOG_TO_STDOUT"].present? + # logger = ActiveSupport::Logger.new(STDOUT) + # logger.formatter = config.log_formatter + # config.logger = ActiveSupport::TaggedLogging.new(logger) + # end + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false end diff --git a/config/environments/test.rb b/config/environments/test.rb index 7df9c1b93..d9d87dbd0 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -1,5 +1,5 @@ -Diaspora::Application.configure do - # Settings specified here will take precedence over those in config/application.rb +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. # The test environment is used exclusively to run your application's # test suite. You never need to work with it otherwise. Remember that @@ -12,11 +12,13 @@ Diaspora::Application.configure do # preloads Rails for running tests, you may have to set it to true. config.eager_load = false - # Configure static asset server for tests with Cache-Control for performance - config.serve_static_files = true - config.static_cache_control = "public, max-age=3600" + # 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=#{1.hour.seconds.to_i}" + } - # No assets request logging + # Suppress logger output for asset requests. config.assets.quiet = true # Precompile poltergeist_disable_transition.css for tests @@ -30,24 +32,28 @@ Diaspora::Application.configure do color_themes/original/mobile.css ] - # Show full error reports and disable caching + # Show full error reports and disable caching. config.consider_all_requests_local = true config.action_controller.perform_caching = false - # Raise exceptions instead of rendering exception templates - config.action_dispatch.show_exceptions = true + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false - # Disable request forgery protection in test environment - config.action_controller.allow_forgery_protection = false + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + config.action_mailer.perform_caching = false # Tell Action Mailer not to deliver emails to the real world. # The :test delivery method accumulates sent emails in the # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test - # Print deprecation notices to the stderr + # Print deprecation notices to the stderr. config.active_support.deprecation = :stderr # Set the logging destination(s) config.log_to = %w[file] + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true end diff --git a/config/initializers/application_controller_renderer.rb b/config/initializers/application_controller_renderer.rb new file mode 100644 index 000000000..51639b67a --- /dev/null +++ b/config/initializers/application_controller_renderer.rb @@ -0,0 +1,6 @@ +# Be sure to restart your server when you modify this file. + +# ApplicationController.renderer.defaults.merge!( +# http_host: 'example.org', +# https: false +# ) diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index 686871f66..b8d5fb65f 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -1,6 +1,4 @@ -# Copyright (c) 2010-2011, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. +# Be sure to restart your server when you modify this file. # bootstrap-markdown plugin relies on rails-assets-bootstrap gem but we use # bootstrap-sass this line makes sure we exclude every asset comming @@ -9,7 +7,12 @@ Rails.configuration.assets.paths.reject! do |path| path.include?("rails-assets-bootstrap") && !path.include?("rails-assets-bootstrap-markdown") end -Diaspora::Application.configure do - config.serve_static_files = AppConfig.environment.assets.serve? - # config.static_cache_control = "public, max-age=3600" if AppConfig[:serve_static_assets].to_s == 'true' -end +# 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. +# 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") + +Rails.application.config.public_file_server.enabled = AppConfig.environment.assets.serve? diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb new file mode 100644 index 000000000..59385cdf3 --- /dev/null +++ b/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb new file mode 100644 index 000000000..1389e86a3 --- /dev/null +++ b/config/initializers/cookies_serializer.rb @@ -0,0 +1,5 @@ +# Be sure to restart your server when you modify this file. + +# Specify a serializer for the signed and encrypted cookie jars. +# Valid options are :json, :marshal, and :hybrid. +Rails.application.config.action_dispatch.cookies_serializer = :marshal diff --git a/config/initializers/cors.rb b/config/initializers/cors.rb index a50aead3e..0fccba3fe 100644 --- a/config/initializers/cors.rb +++ b/config/initializers/cors.rb @@ -1,4 +1,11 @@ -Rails.application.config.middleware.insert 0, Rack::Cors do +# Be sure to restart your server when you modify this file. + +# Avoid CORS issues when API is called from the frontend app. +# Handle Cross-Origin Resource Sharing (CORS) in order to accept cross-origin AJAX requests. + +# Read more: https://github.com/cyu/rack-cors + +Rails.application.config.middleware.insert_before 0, Rack::Cors do allow do origins "*" resource "/api/openid_connect/user_info", methods: %i(get post) @@ -6,6 +13,5 @@ Rails.application.config.middleware.insert 0, Rack::Cors do resource "/.well-known/host-meta" resource "/.well-known/webfinger" resource "/.well-known/openid-configuration" - resource "/webfinger" end end diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb index d08250390..9d07a384f 100644 --- a/config/initializers/filter_parameter_logging.rb +++ b/config/initializers/filter_parameter_logging.rb @@ -1,4 +1,4 @@ # Be sure to restart your server when you modify this file. # Configure sensitive parameters which will be filtered from the log file. -Rails.application.config.filter_parameters += %i(password message text bio) +Rails.application.config.filter_parameters += %i[password message text bio] diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb new file mode 100644 index 000000000..ac033bf9d --- /dev/null +++ b/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb new file mode 100644 index 000000000..dc1899682 --- /dev/null +++ b/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb index ddd9dd5ab..c72a96765 100644 --- a/config/initializers/wrap_parameters.rb +++ b/config/initializers/wrap_parameters.rb @@ -5,10 +5,10 @@ # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. ActiveSupport.on_load(:action_controller) do - wrap_parameters format: [:json] if respond_to?(:wrap_parameters) + wrap_parameters format: [:json] end # To enable root element in JSON for ActiveRecord objects. ActiveSupport.on_load(:active_record) do - self.include_root_in_json = true + self.include_root_in_json = true end diff --git a/config/routes.rb b/config/routes.rb index 355154a6f..b7d4c69ab 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -6,7 +6,8 @@ require "sidekiq/web" require "sidekiq/cron/web" Sidekiq::Web.set :sessions, false # disable rack session cookie -Diaspora::Application.routes.draw do +Rails.application.routes.draw do + # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html resources :report, except: %i(edit new show) diff --git a/config/spring.rb b/config/spring.rb new file mode 100644 index 000000000..0598e88c3 --- /dev/null +++ b/config/spring.rb @@ -0,0 +1,6 @@ +%w[ + .ruby-version + .rbenv-vars + tmp/restart.txt + tmp/caching-dev.txt +].each {|path| Spring.watch(path) } From 4a9548ec1bc7c9f47324caf3a16f9323ca78dfd4 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Wed, 2 Aug 2017 03:02:13 +0200 Subject: [PATCH 05/52] Use skip_pipeline: true for asset_url --- app/helpers/meta_data_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/meta_data_helper.rb b/app/helpers/meta_data_helper.rb index 6b3dcfc7f..7fbe86ab8 100644 --- a/app/helpers/meta_data_helper.rb +++ b/app/helpers/meta_data_helper.rb @@ -11,7 +11,7 @@ module MetaDataHelper end def default_image_url - asset_url "assets/branding/logos/asterisk.png" + asset_url("assets/branding/logos/asterisk.png", skip_pipeline: true) end def default_author_name From fe57bd88e85531b02d595a522dd12d3803483d9e Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sat, 5 Aug 2017 06:03:02 +0200 Subject: [PATCH 06/52] Add ApplicationMailer --- app/mailers/application_mailer.rb | 3 +++ app/mailers/diaspora_devise_mailer.rb | 2 +- app/mailers/export_mailer.rb | 4 +--- app/mailers/maintenance.rb | 4 +--- app/mailers/notifier.rb | 2 +- app/mailers/report_mailer.rb | 4 +--- 6 files changed, 8 insertions(+), 11 deletions(-) create mode 100644 app/mailers/application_mailer.rb diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb new file mode 100644 index 000000000..e5ed1ffd0 --- /dev/null +++ b/app/mailers/application_mailer.rb @@ -0,0 +1,3 @@ +class ApplicationMailer < ActionMailer::Base + default from: "\"#{AppConfig.settings.pod_name}\" <#{AppConfig.mail.sender_address}>" +end diff --git a/app/mailers/diaspora_devise_mailer.rb b/app/mailers/diaspora_devise_mailer.rb index 9a18ffb38..069b488b5 100644 --- a/app/mailers/diaspora_devise_mailer.rb +++ b/app/mailers/diaspora_devise_mailer.rb @@ -1,5 +1,5 @@ class DiasporaDeviseMailer < Devise::Mailer - default :from => AppConfig.mail.sender_address + default from: "\"#{AppConfig.settings.pod_name}\" <#{AppConfig.mail.sender_address}>" def self.mailer_name "devise/mailer" diff --git a/app/mailers/export_mailer.rb b/app/mailers/export_mailer.rb index a0bc8b5e5..5139be734 100644 --- a/app/mailers/export_mailer.rb +++ b/app/mailers/export_mailer.rb @@ -1,6 +1,4 @@ -class ExportMailer < ActionMailer::Base - default from: AppConfig.mail.sender_address - +class ExportMailer < ApplicationMailer def export_complete_for(user) @user = user diff --git a/app/mailers/maintenance.rb b/app/mailers/maintenance.rb index 6b0f2e07b..185b4f949 100644 --- a/app/mailers/maintenance.rb +++ b/app/mailers/maintenance.rb @@ -1,6 +1,4 @@ -class Maintenance < ActionMailer::Base - default :from => AppConfig.mail.sender_address - +class Maintenance < ApplicationMailer def account_removal_warning(user) @user = user @login_url = new_user_session_url diff --git a/app/mailers/notifier.rb b/app/mailers/notifier.rb index d58a58761..187c7b0ed 100644 --- a/app/mailers/notifier.rb +++ b/app/mailers/notifier.rb @@ -1,4 +1,4 @@ -class Notifier < ActionMailer::Base +class Notifier < ApplicationMailer helper :application helper :notifier helper :people diff --git a/app/mailers/report_mailer.rb b/app/mailers/report_mailer.rb index 498413367..0ac76892f 100644 --- a/app/mailers/report_mailer.rb +++ b/app/mailers/report_mailer.rb @@ -1,6 +1,4 @@ -class ReportMailer < ActionMailer::Base - default from: "\"#{AppConfig.settings.pod_name}\" <#{AppConfig.mail.sender_address}>" - +class ReportMailer < ApplicationMailer def self.new_report(report_id) report = Report.find_by_id(report_id) Role.moderators.map {|role| super(report.item_type, report.item_id, report.text, role) } From eb19c327e27aefcc3afd4714f405631c49f56aeb Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sat, 5 Aug 2017 06:05:22 +0200 Subject: [PATCH 07/52] Add ApplicationRecord --- app/models/account_deletion.rb | 2 +- app/models/api/openid_connect/authorization.rb | 2 +- app/models/api/openid_connect/o_auth_access_token.rb | 2 +- app/models/api/openid_connect/o_auth_application.rb | 2 +- .../pairwise_pseudonymous_identifier.rb | 2 +- app/models/application_record.rb | 3 +++ app/models/aspect.rb | 2 +- app/models/aspect_membership.rb | 2 +- app/models/aspect_visibility.rb | 2 +- app/models/block.rb | 2 +- app/models/comment.rb | 2 +- app/models/comment_signature.rb | 2 +- app/models/contact.rb | 2 +- app/models/conversation.rb | 2 +- app/models/conversation_visibility.rb | 4 ++-- app/models/invitation_code.rb | 2 +- app/models/like.rb | 2 +- app/models/like_signature.rb | 2 +- app/models/location.rb | 2 +- app/models/mention.rb | 2 +- app/models/message.rb | 2 +- app/models/notification.rb | 2 +- app/models/notification_actor.rb | 2 +- app/models/o_embed_cache.rb | 2 +- app/models/open_graph_cache.rb | 2 +- app/models/participation.rb | 2 +- app/models/person.rb | 2 +- app/models/photo.rb | 2 +- app/models/pod.rb | 2 +- app/models/poll.rb | 2 +- app/models/poll_answer.rb | 2 +- app/models/poll_participation.rb | 2 +- app/models/poll_participation_signature.rb | 2 +- app/models/post.rb | 2 +- app/models/profile.rb | 2 +- app/models/report.rb | 2 +- app/models/role.rb | 2 +- app/models/service.rb | 2 +- app/models/share_visibility.rb | 2 +- app/models/signature_order.rb | 2 +- app/models/tag_following.rb | 2 +- app/models/user.rb | 2 +- app/models/user_preference.rb | 2 +- ...4359_migrate_activity_stream_to_status_message.rb | 2 +- db/migrate/20160124234712_extend_pods.rb | 6 +++--- ...160225232049_link_share_visibilities_with_user.rb | 2 +- .../20160302025129_cleanup_aspect_visibility.rb | 2 +- db/migrate/20160618033455_cleanup_participations.rb | 2 +- db/migrate/20160720212620_create_signature_tables.rb | 2 +- db/migrate/20160807212443_participation_counter.rb | 10 +++++----- ...10230114_cleanup_invitation_columns_from_users.rb | 4 ++-- ..._started_sharing_notifications_without_contact.rb | 2 +- ...160902180630_remove_invalid_unconfirmed_emails.rb | 2 +- .../20160906225138_fix_photos_share_visibilities.rb | 4 ++-- db/migrate/20161107100840_polymorphic_mentions.rb | 4 ++-- lib/share_visibility_converter.rb | 12 ++++++------ 56 files changed, 73 insertions(+), 70 deletions(-) create mode 100644 app/models/application_record.rb diff --git a/app/models/account_deletion.rb b/app/models/account_deletion.rb index bab962dca..cc9445310 100644 --- a/app/models/account_deletion.rb +++ b/app/models/account_deletion.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class AccountDeletion < ActiveRecord::Base +class AccountDeletion < ApplicationRecord include Diaspora::Federated::Base scope :uncompleted, -> { where('completed_at is null') } diff --git a/app/models/api/openid_connect/authorization.rb b/app/models/api/openid_connect/authorization.rb index 41c6c0e6f..00a373cad 100644 --- a/app/models/api/openid_connect/authorization.rb +++ b/app/models/api/openid_connect/authorization.rb @@ -2,7 +2,7 @@ module Api module OpenidConnect - class Authorization < ActiveRecord::Base + class Authorization < ApplicationRecord belongs_to :user belongs_to :o_auth_application diff --git a/app/models/api/openid_connect/o_auth_access_token.rb b/app/models/api/openid_connect/o_auth_access_token.rb index 053bc86df..176b4d04e 100644 --- a/app/models/api/openid_connect/o_auth_access_token.rb +++ b/app/models/api/openid_connect/o_auth_access_token.rb @@ -23,7 +23,7 @@ module Api module OpenidConnect - class OAuthAccessToken < ActiveRecord::Base + class OAuthAccessToken < ApplicationRecord belongs_to :authorization before_validation :setup, on: :create diff --git a/app/models/api/openid_connect/o_auth_application.rb b/app/models/api/openid_connect/o_auth_application.rb index ccceadfea..acf2817e4 100644 --- a/app/models/api/openid_connect/o_auth_application.rb +++ b/app/models/api/openid_connect/o_auth_application.rb @@ -25,7 +25,7 @@ require "digest" module Api module OpenidConnect - class OAuthApplication < ActiveRecord::Base + class OAuthApplication < ApplicationRecord has_many :authorizations, dependent: :destroy has_many :user, through: :authorizations diff --git a/app/models/api/openid_connect/pairwise_pseudonymous_identifier.rb b/app/models/api/openid_connect/pairwise_pseudonymous_identifier.rb index 7aeccc9fa..0b5643125 100644 --- a/app/models/api/openid_connect/pairwise_pseudonymous_identifier.rb +++ b/app/models/api/openid_connect/pairwise_pseudonymous_identifier.rb @@ -23,7 +23,7 @@ module Api module OpenidConnect - class PairwisePseudonymousIdentifier < ActiveRecord::Base + class PairwisePseudonymousIdentifier < ApplicationRecord self.table_name = "ppid" belongs_to :o_auth_application diff --git a/app/models/application_record.rb b/app/models/application_record.rb new file mode 100644 index 000000000..10a4cba84 --- /dev/null +++ b/app/models/application_record.rb @@ -0,0 +1,3 @@ +class ApplicationRecord < ActiveRecord::Base + self.abstract_class = true +end diff --git a/app/models/aspect.rb b/app/models/aspect.rb index dfacdc811..4f6054dce 100644 --- a/app/models/aspect.rb +++ b/app/models/aspect.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class Aspect < ActiveRecord::Base +class Aspect < ApplicationRecord belongs_to :user has_many :aspect_memberships, :dependent => :destroy diff --git a/app/models/aspect_membership.rb b/app/models/aspect_membership.rb index 8155c241f..8901f16a2 100644 --- a/app/models/aspect_membership.rb +++ b/app/models/aspect_membership.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class AspectMembership < ActiveRecord::Base +class AspectMembership < ApplicationRecord belongs_to :aspect belongs_to :contact diff --git a/app/models/aspect_visibility.rb b/app/models/aspect_visibility.rb index 88e645727..7a0eeba63 100644 --- a/app/models/aspect_visibility.rb +++ b/app/models/aspect_visibility.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class AspectVisibility < ActiveRecord::Base +class AspectVisibility < ApplicationRecord belongs_to :aspect validates :aspect, :presence => true diff --git a/app/models/block.rb b/app/models/block.rb index 1eba8f4c8..18f3109c4 100644 --- a/app/models/block.rb +++ b/app/models/block.rb @@ -1,4 +1,4 @@ -class Block < ActiveRecord::Base +class Block < ApplicationRecord belongs_to :person belongs_to :user diff --git a/app/models/comment.rb b/app/models/comment.rb index fb5446173..84fc383c7 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class Comment < ActiveRecord::Base +class Comment < ApplicationRecord include Diaspora::Federated::Base include Diaspora::Fields::Guid diff --git a/app/models/comment_signature.rb b/app/models/comment_signature.rb index 357bcb3b8..a4ef374ab 100644 --- a/app/models/comment_signature.rb +++ b/app/models/comment_signature.rb @@ -1,4 +1,4 @@ -class CommentSignature < ActiveRecord::Base +class CommentSignature < ApplicationRecord include Diaspora::Signature self.primary_key = :comment_id diff --git a/app/models/contact.rb b/app/models/contact.rb index c7970a2f9..440596736 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class Contact < ActiveRecord::Base +class Contact < ApplicationRecord include Diaspora::Federated::Base belongs_to :user diff --git a/app/models/conversation.rb b/app/models/conversation.rb index 4802d247e..f597af001 100644 --- a/app/models/conversation.rb +++ b/app/models/conversation.rb @@ -1,4 +1,4 @@ -class Conversation < ActiveRecord::Base +class Conversation < ApplicationRecord include Diaspora::Federated::Base include Diaspora::Fields::Guid include Diaspora::Fields::Author diff --git a/app/models/conversation_visibility.rb b/app/models/conversation_visibility.rb index 9c0afb2bd..39e7e66cd 100644 --- a/app/models/conversation_visibility.rb +++ b/app/models/conversation_visibility.rb @@ -1,4 +1,4 @@ -class ConversationVisibility < ActiveRecord::Base +class ConversationVisibility < ApplicationRecord belongs_to :conversation belongs_to :person @@ -6,7 +6,7 @@ class ConversationVisibility < ActiveRecord::Base after_destroy :check_orphan_conversation private - + def check_orphan_conversation conversation = Conversation.find_by_id(self.conversation.id) if conversation diff --git a/app/models/invitation_code.rb b/app/models/invitation_code.rb index 7b732359d..c88434b85 100644 --- a/app/models/invitation_code.rb +++ b/app/models/invitation_code.rb @@ -1,4 +1,4 @@ -class InvitationCode < ActiveRecord::Base +class InvitationCode < ApplicationRecord belongs_to :user validates_presence_of :user diff --git a/app/models/like.rb b/app/models/like.rb index 78eb9c3da..828d5b8aa 100644 --- a/app/models/like.rb +++ b/app/models/like.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class Like < ActiveRecord::Base +class Like < ApplicationRecord include Diaspora::Federated::Base include Diaspora::Fields::Guid include Diaspora::Fields::Author diff --git a/app/models/like_signature.rb b/app/models/like_signature.rb index 6978704a9..1024a5608 100644 --- a/app/models/like_signature.rb +++ b/app/models/like_signature.rb @@ -1,4 +1,4 @@ -class LikeSignature < ActiveRecord::Base +class LikeSignature < ApplicationRecord include Diaspora::Signature self.primary_key = :like_id diff --git a/app/models/location.rb b/app/models/location.rb index 0620104ad..37132f147 100644 --- a/app/models/location.rb +++ b/app/models/location.rb @@ -1,4 +1,4 @@ -class Location < ActiveRecord::Base +class Location < ApplicationRecord before_validation :split_coords, on: :create validates_presence_of :lat, :lng diff --git a/app/models/mention.rb b/app/models/mention.rb index 597cebe94..9fab1d195 100644 --- a/app/models/mention.rb +++ b/app/models/mention.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class Mention < ActiveRecord::Base +class Mention < ApplicationRecord belongs_to :mentions_container, polymorphic: true belongs_to :person validates :mentions_container, presence: true diff --git a/app/models/message.rb b/app/models/message.rb index 2a56ea47a..51ad27867 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -1,4 +1,4 @@ -class Message < ActiveRecord::Base +class Message < ApplicationRecord include Diaspora::Federated::Base include Diaspora::Fields::Guid include Diaspora::Fields::Author diff --git a/app/models/notification.rb b/app/models/notification.rb index c4b557045..f1adf5325 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. # -class Notification < ActiveRecord::Base +class Notification < ApplicationRecord belongs_to :recipient, class_name: "User" has_many :notification_actors, dependent: :destroy has_many :actors, class_name: "Person", through: :notification_actors, source: :person diff --git a/app/models/notification_actor.rb b/app/models/notification_actor.rb index 2b47a5cff..beaeefbb6 100644 --- a/app/models/notification_actor.rb +++ b/app/models/notification_actor.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class NotificationActor < ActiveRecord::Base +class NotificationActor < ApplicationRecord belongs_to :notification belongs_to :person diff --git a/app/models/o_embed_cache.rb b/app/models/o_embed_cache.rb index 17e6f073f..30967d1bd 100644 --- a/app/models/o_embed_cache.rb +++ b/app/models/o_embed_cache.rb @@ -1,4 +1,4 @@ -class OEmbedCache < ActiveRecord::Base +class OEmbedCache < ApplicationRecord serialize :data validates :data, :presence => true diff --git a/app/models/open_graph_cache.rb b/app/models/open_graph_cache.rb index ffae81c94..0aa0a2fe6 100644 --- a/app/models/open_graph_cache.rb +++ b/app/models/open_graph_cache.rb @@ -1,4 +1,4 @@ -class OpenGraphCache < ActiveRecord::Base +class OpenGraphCache < ApplicationRecord validates :title, :presence => true validates :ob_type, :presence => true validates :image, :presence => true diff --git a/app/models/participation.rb b/app/models/participation.rb index 94d82fb95..4bdda1a92 100644 --- a/app/models/participation.rb +++ b/app/models/participation.rb @@ -1,4 +1,4 @@ -class Participation < ActiveRecord::Base +class Participation < ApplicationRecord include Diaspora::Federated::Base include Diaspora::Fields::Guid include Diaspora::Fields::Author diff --git a/app/models/person.rb b/app/models/person.rb index 169a84c18..53eb8ed4d 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class Person < ActiveRecord::Base +class Person < ApplicationRecord include Diaspora::Fields::Guid # NOTE API V1 to be extracted diff --git a/app/models/photo.rb b/app/models/photo.rb index 17e9b9ff8..43ab064a3 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class Photo < ActiveRecord::Base +class Photo < ApplicationRecord include Diaspora::Federated::Base include Diaspora::Commentable include Diaspora::Shareable diff --git a/app/models/pod.rb b/app/models/pod.rb index dde1e28f1..b88c76cde 100644 --- a/app/models/pod.rb +++ b/app/models/pod.rb @@ -1,4 +1,4 @@ -class Pod < ActiveRecord::Base +class Pod < ApplicationRecord enum status: %i( unchecked no_errors diff --git a/app/models/poll.rb b/app/models/poll.rb index fa9033577..15589d601 100644 --- a/app/models/poll.rb +++ b/app/models/poll.rb @@ -1,4 +1,4 @@ -class Poll < ActiveRecord::Base +class Poll < ApplicationRecord include Diaspora::Federated::Base include Diaspora::Fields::Guid diff --git a/app/models/poll_answer.rb b/app/models/poll_answer.rb index 3387efe09..d91c4e13a 100644 --- a/app/models/poll_answer.rb +++ b/app/models/poll_answer.rb @@ -1,4 +1,4 @@ -class PollAnswer < ActiveRecord::Base +class PollAnswer < ApplicationRecord include Diaspora::Federated::Base include Diaspora::Fields::Guid diff --git a/app/models/poll_participation.rb b/app/models/poll_participation.rb index 7e653bb65..c5bb5395e 100644 --- a/app/models/poll_participation.rb +++ b/app/models/poll_participation.rb @@ -1,4 +1,4 @@ -class PollParticipation < ActiveRecord::Base +class PollParticipation < ApplicationRecord include Diaspora::Federated::Base include Diaspora::Fields::Guid include Diaspora::Fields::Author diff --git a/app/models/poll_participation_signature.rb b/app/models/poll_participation_signature.rb index 90701f286..001d83f7a 100644 --- a/app/models/poll_participation_signature.rb +++ b/app/models/poll_participation_signature.rb @@ -1,4 +1,4 @@ -class PollParticipationSignature < ActiveRecord::Base +class PollParticipationSignature < ApplicationRecord include Diaspora::Signature self.primary_key = :poll_participation_id diff --git a/app/models/post.rb b/app/models/post.rb index 58dbf12cf..fecaaf1bb 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class Post < ActiveRecord::Base +class Post < ApplicationRecord self.include_root_in_json = false include ApplicationHelper diff --git a/app/models/profile.rb b/app/models/profile.rb index 82413ccd2..3b903c1be 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class Profile < ActiveRecord::Base +class Profile < ApplicationRecord self.include_root_in_json = false include Diaspora::Federated::Base diff --git a/app/models/report.rb b/app/models/report.rb index a116e9083..171681977 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -1,4 +1,4 @@ -class Report < ActiveRecord::Base +class Report < ApplicationRecord validates :user_id, presence: true validates :item_id, presence: true validates :item_type, presence: true, inclusion: { diff --git a/app/models/role.rb b/app/models/role.rb index cbe5644ef..33711ebcf 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -1,6 +1,6 @@ # NOTE add the person object you want to attach role to... -class Role < ActiveRecord::Base +class Role < ApplicationRecord belongs_to :person validates :person, presence: true diff --git a/app/models/service.rb b/app/models/service.rb index 57322ce8c..890fc02bc 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class Service < ActiveRecord::Base +class Service < ApplicationRecord attr_accessor :provider, :info, :access_level belongs_to :user diff --git a/app/models/share_visibility.rb b/app/models/share_visibility.rb index bffdf91cc..25384bc37 100644 --- a/app/models/share_visibility.rb +++ b/app/models/share_visibility.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class ShareVisibility < ActiveRecord::Base +class ShareVisibility < ApplicationRecord belongs_to :user belongs_to :shareable, polymorphic: :true diff --git a/app/models/signature_order.rb b/app/models/signature_order.rb index 83cbfb51a..e65d0fae3 100644 --- a/app/models/signature_order.rb +++ b/app/models/signature_order.rb @@ -1,3 +1,3 @@ -class SignatureOrder < ActiveRecord::Base +class SignatureOrder < ApplicationRecord validates :order, presence: true, uniqueness: true end diff --git a/app/models/tag_following.rb b/app/models/tag_following.rb index 915221856..bd1cb62d2 100644 --- a/app/models/tag_following.rb +++ b/app/models/tag_following.rb @@ -1,4 +1,4 @@ -class TagFollowing < ActiveRecord::Base +class TagFollowing < ApplicationRecord belongs_to :user belongs_to :tag, :class_name => "ActsAsTaggableOn::Tag" diff --git a/app/models/user.rb b/app/models/user.rb index 2061efc9b..cd8d8e59c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -class User < ActiveRecord::Base +class User < ApplicationRecord include AuthenticationToken include Connecting include Querying diff --git a/app/models/user_preference.rb b/app/models/user_preference.rb index ea4f92425..11ba7038d 100644 --- a/app/models/user_preference.rb +++ b/app/models/user_preference.rb @@ -1,4 +1,4 @@ -class UserPreference < ActiveRecord::Base +class UserPreference < ApplicationRecord belongs_to :user validate :must_be_valid_email_type diff --git a/db/migrate/20130717104359_migrate_activity_stream_to_status_message.rb b/db/migrate/20130717104359_migrate_activity_stream_to_status_message.rb index c02282f81..678cc8410 100644 --- a/db/migrate/20130717104359_migrate_activity_stream_to_status_message.rb +++ b/db/migrate/20130717104359_migrate_activity_stream_to_status_message.rb @@ -1,5 +1,5 @@ class MigrateActivityStreamToStatusMessage < ActiveRecord::Migration - class Post < ActiveRecord::Base; self.inheritance_column = false; end + class Post < ApplicationRecord; self.inheritance_column = false; end def up posts_stream_photos = Post.where(type: 'ActivityStreams::Photo') posts_stream_photos.each do |p| diff --git a/db/migrate/20160124234712_extend_pods.rb b/db/migrate/20160124234712_extend_pods.rb index 17fb6c215..d86769091 100644 --- a/db/migrate/20160124234712_extend_pods.rb +++ b/db/migrate/20160124234712_extend_pods.rb @@ -1,5 +1,5 @@ class ExtendPods < ActiveRecord::Migration - class Pod < ActiveRecord::Base + class Pod < ApplicationRecord has_many :people DEFAULT_PORTS = [URI::HTTP::DEFAULT_PORT, URI::HTTPS::DEFAULT_PORT] @@ -18,7 +18,7 @@ class ExtendPods < ActiveRecord::Migration end end - class Person < ActiveRecord::Base + class Person < ApplicationRecord belongs_to :owner, class_name: "User" belongs_to :pod @@ -27,7 +27,7 @@ class ExtendPods < ActiveRecord::Migration end end - class User < ActiveRecord::Base + class User < ApplicationRecord has_one :person, inverse_of: :owner, foreign_key: :owner_id end diff --git a/db/migrate/20160225232049_link_share_visibilities_with_user.rb b/db/migrate/20160225232049_link_share_visibilities_with_user.rb index 3292b0503..a31a2b0ef 100644 --- a/db/migrate/20160225232049_link_share_visibilities_with_user.rb +++ b/db/migrate/20160225232049_link_share_visibilities_with_user.rb @@ -1,5 +1,5 @@ class LinkShareVisibilitiesWithUser < ActiveRecord::Migration - class ShareVisibility < ActiveRecord::Base + class ShareVisibility < ApplicationRecord end def up diff --git a/db/migrate/20160302025129_cleanup_aspect_visibility.rb b/db/migrate/20160302025129_cleanup_aspect_visibility.rb index c937ac4df..18be29f05 100644 --- a/db/migrate/20160302025129_cleanup_aspect_visibility.rb +++ b/db/migrate/20160302025129_cleanup_aspect_visibility.rb @@ -1,5 +1,5 @@ class CleanupAspectVisibility < ActiveRecord::Migration - class AspectVisibility < ActiveRecord::Base + class AspectVisibility < ApplicationRecord end def up diff --git a/db/migrate/20160618033455_cleanup_participations.rb b/db/migrate/20160618033455_cleanup_participations.rb index ffe857885..42d4fdd3c 100644 --- a/db/migrate/20160618033455_cleanup_participations.rb +++ b/db/migrate/20160618033455_cleanup_participations.rb @@ -1,5 +1,5 @@ class CleanupParticipations < ActiveRecord::Migration - class Participation < ActiveRecord::Base + class Participation < ApplicationRecord end def up diff --git a/db/migrate/20160720212620_create_signature_tables.rb b/db/migrate/20160720212620_create_signature_tables.rb index f9e2d6c05..8bc82befc 100644 --- a/db/migrate/20160720212620_create_signature_tables.rb +++ b/db/migrate/20160720212620_create_signature_tables.rb @@ -1,5 +1,5 @@ class CreateSignatureTables < ActiveRecord::Migration - class SignatureOrder < ActiveRecord::Base + class SignatureOrder < ApplicationRecord end RELAYABLES = %i(comment like poll_participation).freeze diff --git a/db/migrate/20160807212443_participation_counter.rb b/db/migrate/20160807212443_participation_counter.rb index 871a1197f..fae1d9b03 100644 --- a/db/migrate/20160807212443_participation_counter.rb +++ b/db/migrate/20160807212443_participation_counter.rb @@ -1,18 +1,18 @@ class ParticipationCounter < ActiveRecord::Migration - class Comment < ActiveRecord::Base + class Comment < ApplicationRecord end - class Like < ActiveRecord::Base + class Like < ApplicationRecord end - class Participation < ActiveRecord::Base + class Participation < ApplicationRecord belongs_to :author, class_name: "Person" end - class Poll < ActiveRecord::Base + class Poll < ApplicationRecord end - class PollParticipation < ActiveRecord::Base + class PollParticipation < ApplicationRecord belongs_to :poll end diff --git a/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb b/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb index f51312b2f..895b75471 100644 --- a/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb +++ b/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb @@ -1,8 +1,8 @@ class CleanupInvitationColumnsFromUsers < ActiveRecord::Migration - class InvitationCode < ActiveRecord::Base + class InvitationCode < ApplicationRecord end - class User < ActiveRecord::Base + class User < ApplicationRecord end def change diff --git a/db/migrate/20160822212739_remove_started_sharing_notifications_without_contact.rb b/db/migrate/20160822212739_remove_started_sharing_notifications_without_contact.rb index 70a62f68f..f41f1d202 100644 --- a/db/migrate/20160822212739_remove_started_sharing_notifications_without_contact.rb +++ b/db/migrate/20160822212739_remove_started_sharing_notifications_without_contact.rb @@ -1,5 +1,5 @@ class RemoveStartedSharingNotificationsWithoutContact < ActiveRecord::Migration - class Notification < ActiveRecord::Base + class Notification < ApplicationRecord end def up diff --git a/db/migrate/20160902180630_remove_invalid_unconfirmed_emails.rb b/db/migrate/20160902180630_remove_invalid_unconfirmed_emails.rb index 086531c16..0e98b4499 100644 --- a/db/migrate/20160902180630_remove_invalid_unconfirmed_emails.rb +++ b/db/migrate/20160902180630_remove_invalid_unconfirmed_emails.rb @@ -1,5 +1,5 @@ class RemoveInvalidUnconfirmedEmails < ActiveRecord::Migration - class User < ActiveRecord::Base + class User < ApplicationRecord end def up diff --git a/db/migrate/20160906225138_fix_photos_share_visibilities.rb b/db/migrate/20160906225138_fix_photos_share_visibilities.rb index 3621fe28b..cd2627c8b 100644 --- a/db/migrate/20160906225138_fix_photos_share_visibilities.rb +++ b/db/migrate/20160906225138_fix_photos_share_visibilities.rb @@ -1,8 +1,8 @@ class FixPhotosShareVisibilities < ActiveRecord::Migration - class Photo < ActiveRecord::Base + class Photo < ApplicationRecord end - class ShareVisibility < ActiveRecord::Base + class ShareVisibility < ApplicationRecord end def up diff --git a/db/migrate/20161107100840_polymorphic_mentions.rb b/db/migrate/20161107100840_polymorphic_mentions.rb index 2f00e65fe..69bd3017a 100644 --- a/db/migrate/20161107100840_polymorphic_mentions.rb +++ b/db/migrate/20161107100840_polymorphic_mentions.rb @@ -17,10 +17,10 @@ class PolymorphicMentions < ActiveRecord::Migration reversible(&method(:up_down)) end - class Mention < ActiveRecord::Base + class Mention < ApplicationRecord end - class Notification < ActiveRecord::Base + class Notification < ApplicationRecord end def up_down(change) diff --git a/lib/share_visibility_converter.rb b/lib/share_visibility_converter.rb index c044570d3..82b9e2d23 100644 --- a/lib/share_visibility_converter.rb +++ b/lib/share_visibility_converter.rb @@ -1,24 +1,24 @@ #we dont have the environment, and it is not carring over from the migration unless defined?(Person) - class Person < ActiveRecord::Base + class Person < ApplicationRecord belongs_to :owner, :class_name => 'User' end end unless defined?(User) - class User < ActiveRecord::Base + class User < ApplicationRecord serialize :hidden_shareables, Hash end end unless defined?(Contact) - class Contact < ActiveRecord::Base + class Contact < ApplicationRecord belongs_to :user end end unless defined?(ShareVisibility) - class ShareVisibility < ActiveRecord::Base + class ShareVisibility < ApplicationRecord belongs_to :contact end end @@ -28,14 +28,14 @@ class ShareVisibilityConverter def self.copy_hidden_share_visibilities_to_users(only_recent = false) query = ShareVisibility.where(:hidden => true).includes(:contact => :user) query = query.where('share_visibilities.updated_at > ?', RECENT.weeks.ago) if only_recent - count = query.count + count = query.count puts "Updating #{count} records in batches of 1000..." batch_count = 1 query.find_in_batches do |visibilities| puts "Updating batch ##{batch_count} of #{(count/1000)+1}..." batch_count += 1 - visibilities.each do |visibility| + visibilities.each do |visibility| begin type = visibility.shareable_type id = visibility.shareable_id.to_s From d0b634852b440a8c3deac9734270d8577ef5a06b Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sat, 5 Aug 2017 21:29:51 +0200 Subject: [PATCH 08/52] Fix belongs_to, it is now `required` by default --- .../api/openid_connect/authorization.rb | 3 +- .../api/openid_connect/o_auth_access_token.rb | 1 - .../pairwise_pseudonymous_identifier.rb | 3 +- app/models/aspect_visibility.rb | 2 -- app/models/block.rb | 3 +- app/models/comment.rb | 1 - app/models/comment_signature.rb | 1 - app/models/contact.rb | 3 -- app/models/invitation_code.rb | 2 -- app/models/like_signature.rb | 1 - app/models/mention.rb | 2 -- app/models/message.rb | 1 - app/models/person.rb | 4 +-- app/models/photo.rb | 2 +- app/models/poll_participation.rb | 1 - app/models/poll_participation_signature.rb | 1 - app/models/post.rb | 4 +-- app/models/report.rb | 4 +-- app/models/reshare.rb | 2 +- app/models/role.rb | 1 - app/models/user.rb | 4 +-- lib/diaspora/federation/receive.rb | 3 +- lib/diaspora/fields/target.rb | 1 - lib/diaspora/relayable.rb | 1 + spec/models/contact_spec.rb | 4 +-- spec/models/location_spec.rb | 14 +++++---- spec/models/poll_participation_spec.rb | 18 +++++------ spec/models/poll_spec.rb | 31 +++++++++---------- spec/models/role_spec.rb | 7 ++++- 29 files changed, 56 insertions(+), 69 deletions(-) diff --git a/app/models/api/openid_connect/authorization.rb b/app/models/api/openid_connect/authorization.rb index 00a373cad..a57231552 100644 --- a/app/models/api/openid_connect/authorization.rb +++ b/app/models/api/openid_connect/authorization.rb @@ -6,8 +6,7 @@ module Api belongs_to :user belongs_to :o_auth_application - validates :user, presence: true, uniqueness: {scope: :o_auth_application} - validates :o_auth_application, presence: true + validates :user, uniqueness: {scope: :o_auth_application} validate :validate_scope_names serialize :scopes, JSON diff --git a/app/models/api/openid_connect/o_auth_access_token.rb b/app/models/api/openid_connect/o_auth_access_token.rb index 176b4d04e..e2089fff8 100644 --- a/app/models/api/openid_connect/o_auth_access_token.rb +++ b/app/models/api/openid_connect/o_auth_access_token.rb @@ -29,7 +29,6 @@ module Api before_validation :setup, on: :create validates :token, presence: true, uniqueness: true - validates :authorization, presence: true scope :valid, ->(time) { where("expires_at >= ?", time) } diff --git a/app/models/api/openid_connect/pairwise_pseudonymous_identifier.rb b/app/models/api/openid_connect/pairwise_pseudonymous_identifier.rb index 0b5643125..520bc782c 100644 --- a/app/models/api/openid_connect/pairwise_pseudonymous_identifier.rb +++ b/app/models/api/openid_connect/pairwise_pseudonymous_identifier.rb @@ -26,10 +26,9 @@ module Api class PairwisePseudonymousIdentifier < ApplicationRecord self.table_name = "ppid" - belongs_to :o_auth_application + belongs_to :o_auth_application, optional: true belongs_to :user - validates :user, presence: true validates :identifier, presence: true, uniqueness: {scope: :user} validates :guid, presence: true, uniqueness: true diff --git a/app/models/aspect_visibility.rb b/app/models/aspect_visibility.rb index 7a0eeba63..be36323cb 100644 --- a/app/models/aspect_visibility.rb +++ b/app/models/aspect_visibility.rb @@ -5,10 +5,8 @@ class AspectVisibility < ApplicationRecord belongs_to :aspect - validates :aspect, :presence => true belongs_to :shareable, :polymorphic => true - validates :shareable, :presence => true validates :aspect, uniqueness: {scope: %i(shareable_id shareable_type)} end diff --git a/app/models/block.rb b/app/models/block.rb index 18f3109c4..57b470e58 100644 --- a/app/models/block.rb +++ b/app/models/block.rb @@ -4,8 +4,7 @@ class Block < ApplicationRecord delegate :name, to: :person, prefix: true - validates :user_id, :presence => true - validates :person_id, :presence => true, :uniqueness => { :scope => :user_id } + validates :person_id, uniqueness: {scope: :user_id} validate :not_blocking_yourself diff --git a/app/models/comment.rb b/app/models/comment.rb index 84fc383c7..4b6baa250 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -26,7 +26,6 @@ class Comment < ApplicationRecord delegate :author_name, to: :parent, prefix: true validates :text, :presence => true, :length => {:maximum => 65535} - validates :parent, :presence => true #should be in relayable (pending on fixing Message) has_many :reports, as: :item diff --git a/app/models/comment_signature.rb b/app/models/comment_signature.rb index a4ef374ab..9e7aa9270 100644 --- a/app/models/comment_signature.rb +++ b/app/models/comment_signature.rb @@ -3,5 +3,4 @@ class CommentSignature < ApplicationRecord self.primary_key = :comment_id belongs_to :comment - validates :comment, presence: true end diff --git a/app/models/contact.rb b/app/models/contact.rb index 440596736..666815d47 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -6,10 +6,7 @@ class Contact < ApplicationRecord include Diaspora::Federated::Base belongs_to :user - validates :user, presence: true - belongs_to :person - validates :person, presence: true validates :person_id, uniqueness: {scope: :user_id} diff --git a/app/models/invitation_code.rb b/app/models/invitation_code.rb index c88434b85..1dd565871 100644 --- a/app/models/invitation_code.rb +++ b/app/models/invitation_code.rb @@ -1,8 +1,6 @@ class InvitationCode < ApplicationRecord belongs_to :user - validates_presence_of :user - before_create :generate_token, :set_default_invite_count delegate :name, to: :user, prefix: true diff --git a/app/models/like_signature.rb b/app/models/like_signature.rb index 1024a5608..bc21533d4 100644 --- a/app/models/like_signature.rb +++ b/app/models/like_signature.rb @@ -3,5 +3,4 @@ class LikeSignature < ApplicationRecord self.primary_key = :like_id belongs_to :like - validates :like, presence: true end diff --git a/app/models/mention.rb b/app/models/mention.rb index 9fab1d195..c5bb859e5 100644 --- a/app/models/mention.rb +++ b/app/models/mention.rb @@ -5,8 +5,6 @@ class Mention < ApplicationRecord belongs_to :mentions_container, polymorphic: true belongs_to :person - validates :mentions_container, presence: true - validates :person, presence: true scope :local, -> { joins(:person).where.not(people: {owner_id: nil}) diff --git a/app/models/message.rb b/app/models/message.rb index 51ad27867..95992e689 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -7,7 +7,6 @@ class Message < ApplicationRecord delegate :name, to: :author, prefix: true - validates :conversation, presence: true validates :text, presence: true validate :participant_of_parent_conversation diff --git a/app/models/person.rb b/app/models/person.rb index 53eb8ed4d..0fa77b3d7 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -44,8 +44,8 @@ class Person < ApplicationRecord has_many :roles - belongs_to :owner, :class_name => 'User' - belongs_to :pod + belongs_to :owner, class_name: "User", optional: true + belongs_to :pod, optional: true has_many :notification_actors has_many :notifications, :through => :notification_actors diff --git a/app/models/photo.rb b/app/models/photo.rb index 43ab064a3..7fa0c3871 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -37,7 +37,7 @@ class Photo < ApplicationRecord mount_uploader :processed_image, ProcessedImage mount_uploader :unprocessed_image, UnprocessedImage - belongs_to :status_message, :foreign_key => :status_message_guid, :primary_key => :guid + belongs_to :status_message, foreign_key: :status_message_guid, primary_key: :guid, optional: true validates_associated :status_message delegate :author_name, to: :status_message, prefix: true diff --git a/app/models/poll_participation.rb b/app/models/poll_participation.rb index c5bb5395e..24f99f9ef 100644 --- a/app/models/poll_participation.rb +++ b/app/models/poll_participation.rb @@ -12,7 +12,6 @@ class PollParticipation < ApplicationRecord alias_attribute :parent, :poll - validates :poll_answer, presence: true validate :not_already_participated def poll_answer_guid=(new_poll_answer_guid) diff --git a/app/models/poll_participation_signature.rb b/app/models/poll_participation_signature.rb index 001d83f7a..a32b8653e 100644 --- a/app/models/poll_participation_signature.rb +++ b/app/models/poll_participation_signature.rb @@ -3,5 +3,4 @@ class PollParticipationSignature < ApplicationRecord self.primary_key = :poll_participation_id belongs_to :poll_participation - validates :poll_participation, presence: true end diff --git a/app/models/post.rb b/app/models/post.rb index fecaaf1bb..4a6c51744 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -24,8 +24,8 @@ class Post < ApplicationRecord has_many :reshares, class_name: "Reshare", foreign_key: :root_guid, primary_key: :guid has_many :resharers, class_name: "Person", through: :reshares, source: :author - belongs_to :o_embed_cache - belongs_to :open_graph_cache + belongs_to :o_embed_cache, optional: true + belongs_to :open_graph_cache, optional: true validates_uniqueness_of :id diff --git a/app/models/report.rb b/app/models/report.rb index 171681977..2f28cfc4c 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -9,8 +9,8 @@ class Report < ApplicationRecord validate :post_or_comment_does_exist, :on => :create belongs_to :user - belongs_to :post - belongs_to :comment + belongs_to :post, optional: true + belongs_to :comment, optional: true belongs_to :item, polymorphic: true after_commit :send_report_notification, :on => :create diff --git a/app/models/reshare.rb b/app/models/reshare.rb index a88208248..bc6d8bfa1 100644 --- a/app/models/reshare.rb +++ b/app/models/reshare.rb @@ -3,7 +3,7 @@ # the COPYRIGHT file. class Reshare < Post - belongs_to :root, :class_name => 'Post', :foreign_key => :root_guid, :primary_key => :guid + belongs_to :root, class_name: "Post", foreign_key: :root_guid, primary_key: :guid, optional: true validate :root_must_be_public validates_presence_of :root, :on => :create validates_uniqueness_of :root_guid, :scope => :author_id diff --git a/app/models/role.rb b/app/models/role.rb index 33711ebcf..98601bb7b 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -3,7 +3,6 @@ class Role < ApplicationRecord belongs_to :person - validates :person, presence: true validates :name, uniqueness: {scope: :person_id} validates :name, inclusion: {in: %w(admin moderator spotlight)} diff --git a/app/models/user.rb b/app/models/user.rb index cd8d8e59c..3be7770d3 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -51,8 +51,8 @@ class User < ApplicationRecord has_many :aspects, -> { order('order_id ASC') } - belongs_to :auto_follow_back_aspect, :class_name => 'Aspect' - belongs_to :invited_by, :class_name => 'User' + belongs_to :auto_follow_back_aspect, class_name: "Aspect", optional: true + belongs_to :invited_by, class_name: "User", optional: true has_many :aspect_memberships, :through => :aspects diff --git a/lib/diaspora/federation/receive.rb b/lib/diaspora/federation/receive.rb index 65e3dfa99..d4dee7648 100644 --- a/lib/diaspora/federation/receive.rb +++ b/lib/diaspora/federation/receive.rb @@ -212,7 +212,8 @@ module Diaspora poll.poll_answers = entity.poll_answers.map do |answer| PollAnswer.new( guid: answer.guid, - answer: answer.answer + answer: answer.answer, + poll: poll ) end end diff --git a/lib/diaspora/fields/target.rb b/lib/diaspora/fields/target.rb index 1fbbf9796..7120c2a84 100644 --- a/lib/diaspora/fields/target.rb +++ b/lib/diaspora/fields/target.rb @@ -6,7 +6,6 @@ module Diaspora belongs_to :target, polymorphic: true validates :target_id, uniqueness: {scope: %i(target_type author_id)} - validates :target, presence: true end end end diff --git a/lib/diaspora/relayable.rb b/lib/diaspora/relayable.rb index f7c023291..5753674d4 100644 --- a/lib/diaspora/relayable.rb +++ b/lib/diaspora/relayable.rb @@ -6,6 +6,7 @@ module Diaspora module Relayable def self.included(model) model.class_eval do + validates :parent, presence: true validates_associated :parent validate :author_is_not_ignored diff --git a/spec/models/contact_spec.rb b/spec/models/contact_spec.rb index 1f9318519..08a1b00d8 100644 --- a/spec/models/contact_spec.rb +++ b/spec/models/contact_spec.rb @@ -20,12 +20,12 @@ describe Contact, type: :model do it "requires a user" do contact.valid? - expect(contact.errors.full_messages).to include "User can't be blank" + expect(contact.errors.full_messages).to include "User must exist" end it "requires a person" do contact.valid? - expect(contact.errors.full_messages).to include "Person can't be blank" + expect(contact.errors.full_messages).to include "Person must exist" end it "validates uniqueness" do diff --git a/spec/models/location_spec.rb b/spec/models/location_spec.rb index fe3eadfe3..0742ffa50 100644 --- a/spec/models/location_spec.rb +++ b/spec/models/location_spec.rb @@ -1,12 +1,14 @@ -describe Location, :type => :model do - describe 'before validation' do - it 'should create new location when it has coordinates' do - location = Location.new(coordinates:'1,2') +describe Location, type: :model do + describe "before validation" do + let(:status) { FactoryGirl.create(:status_message) } + + it "should create new location when it has coordinates" do + location = Location.new(coordinates: "1,2", status_message: status) expect(location.save).to be true end - it 'should not create new location when it does not have coordinates' do - location = Location.new() + it "should not create new location when it does not have coordinates" do + location = Location.new(status_message: status) expect(location.save).to be false end end diff --git a/spec/models/poll_participation_spec.rb b/spec/models/poll_participation_spec.rb index 65730481b..677da69f0 100644 --- a/spec/models/poll_participation_spec.rb +++ b/spec/models/poll_participation_spec.rb @@ -1,25 +1,25 @@ describe PollParticipation, type: :model do + let(:status) { bob.post(:status_message, text: "hello", to: bob.aspects.first.id) } + let(:poll) { Poll.new(question: "Who is in charge?") } + before do - @alices_aspect = alice.aspects.first - @status = bob.post(:status_message, :text => "hello", :to => bob.aspects.first.id) - @poll = Poll.new(:question => 'Who is in charge?') - @poll.poll_answers.build(:answer => "a") - @poll.poll_answers.build(:answer => "b") - @status.poll = @poll + poll.poll_answers.build(answer: "a").poll = poll + poll.poll_answers.build(answer: "b").poll = poll + status.poll = poll end describe 'validation' do it 'forbids multiple participations in the same poll' do expect { 2.times do |run| - bob.participate_in_poll!(@status, @poll.poll_answers.first) + bob.participate_in_poll!(status, poll.poll_answers.first) end }.to raise_error ActiveRecord::RecordInvalid end it 'allows a one time participation in a poll' do expect { - bob.participate_in_poll!(@status, @poll.poll_answers.first) + bob.participate_in_poll!(status, poll.poll_answers.first) }.to_not raise_error end end @@ -38,6 +38,6 @@ describe PollParticipation, type: :model do let(:remote_object_on_local_parent) { FactoryGirl.create(:poll_participation, poll_answer: local_parent.poll.poll_answers.first, author: remote_raphael) } - let(:relayable) { PollParticipation::Generator.new(alice, @status, @poll.poll_answers.first).build } + let(:relayable) { PollParticipation::Generator.new(alice, status, poll.poll_answers.first).build } end end diff --git a/spec/models/poll_spec.rb b/spec/models/poll_spec.rb index 30fd872bb..f18eb4fab 100644 --- a/spec/models/poll_spec.rb +++ b/spec/models/poll_spec.rb @@ -1,24 +1,23 @@ -describe Poll, :type => :model do - before do - @poll = Poll.new(:question => "What do you think about apples?") - end +describe Poll, type: :model do + let(:status) { FactoryGirl.create(:status_message) } + let(:poll) { Poll.new(question: "What do you think about apples?", status_message: status) } - describe 'validation' do - it 'should not create a poll when it has less than two answers' do - @poll.poll_answers.build(:answer => '1') - expect(@poll).not_to be_valid + describe "validation" do + it "should not create a poll when it has less than two answers" do + poll.poll_answers.build(answer: "1").poll = poll + expect(poll).not_to be_valid end - it 'should create a poll when it has more than two answers' do - @poll.poll_answers.build(:answer => '1') - @poll.poll_answers.build(:answer => '2') - expect(@poll).to be_valid + it "should create a poll when it has more than two answers" do + poll.poll_answers.build(answer: "1").poll = poll + poll.poll_answers.build(answer: "2").poll = poll + expect(poll).to be_valid end - it 'should not create a poll when question in blank' do - @poll.question = ' ' - @poll.valid? - expect(@poll.errors).to have_key(:question) + it "should not create a poll when question in blank" do + poll.question = " " + poll.valid? + expect(poll.errors).to have_key(:question) end end end diff --git a/spec/models/role_spec.rb b/spec/models/role_spec.rb index 97b4424d1..dad31a04d 100644 --- a/spec/models/role_spec.rb +++ b/spec/models/role_spec.rb @@ -6,7 +6,12 @@ describe Role do let!(:moderator_role) { moderator.roles.create(name: "moderator") } describe "validations" do - it { should validate_presence_of(:person) } + it "validates the presence of the person" do + role = Role.new(name: "admin") + role.valid? + expect(role.errors.full_messages).to include "Person must exist" + end + it { should validate_uniqueness_of(:name).scoped_to(:person_id) } it { should validate_inclusion_of(:name).in_array(%w(admin spotlight moderator)) } end From ee9a299df6c31226c03e07b8ea2ab950d00d174b Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sat, 5 Aug 2017 22:09:44 +0200 Subject: [PATCH 09/52] Replace HashWithIndifferentAccess, it is now deprecated --- app/workers/deferred_dispatch.rb | 2 +- app/workers/deferred_retraction.rb | 2 +- app/workers/delete_post_from_service.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/workers/deferred_dispatch.rb b/app/workers/deferred_dispatch.rb index 49d0aa365..3c60ade93 100644 --- a/app/workers/deferred_dispatch.rb +++ b/app/workers/deferred_dispatch.rb @@ -9,7 +9,7 @@ module Workers def perform(user_id, object_class_name, object_id, opts) user = User.find(user_id) object = object_class_name.constantize.find(object_id) - opts = HashWithIndifferentAccess.new(opts) + opts = ActiveSupport::HashWithIndifferentAccess.new(opts) Diaspora::Federation::Dispatcher.build(user, object, opts).dispatch rescue ActiveRecord::RecordNotFound # The target got deleted before the job was run diff --git a/app/workers/deferred_retraction.rb b/app/workers/deferred_retraction.rb index f55e9c405..85ee2c1ab 100644 --- a/app/workers/deferred_retraction.rb +++ b/app/workers/deferred_retraction.rb @@ -10,7 +10,7 @@ module Workers user = User.find(user_id) subscribers = Person.where(id: recipient_ids) object = retraction_class.constantize.new(retraction_data.deep_symbolize_keys, subscribers) - opts = HashWithIndifferentAccess.new(opts) + opts = ActiveSupport::HashWithIndifferentAccess.new(opts) Diaspora::Federation::Dispatcher.build(user, object, opts).dispatch end diff --git a/app/workers/delete_post_from_service.rb b/app/workers/delete_post_from_service.rb index 7d0bfe1fd..33b841f6a 100644 --- a/app/workers/delete_post_from_service.rb +++ b/app/workers/delete_post_from_service.rb @@ -8,7 +8,7 @@ module Workers def perform(service_id, opts) service = Service.find_by_id(service_id) - opts = HashWithIndifferentAccess.new(opts) + opts = ActiveSupport::HashWithIndifferentAccess.new(opts) service.delete_from_service(opts) end end From b9d9a637396679d400b25f0bfebbee1d297ba623 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sat, 5 Aug 2017 22:17:45 +0200 Subject: [PATCH 10/52] Add rails-controller-testing dependency Needed for `assigns` in controller specs --- Gemfile | 3 +++ Gemfile.lock | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/Gemfile b/Gemfile index 1c0be7266..8fcd22e75 100644 --- a/Gemfile +++ b/Gemfile @@ -314,4 +314,7 @@ group :development, :test do gem "jasmine-jquery-rails", "2.0.3" gem "rails-assets-jasmine-ajax", "3.3.1", source: "https://rails-assets.org" gem "sinon-rails", "1.15.0" + + # For `assigns` in controller specs + gem "rails-controller-testing", "1.0.2" end diff --git a/Gemfile.lock b/Gemfile.lock index 193edc8f7..5ed511fe9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -550,6 +550,10 @@ GEM rails-assets-markdown-it-sup (1.0.0) rails-assets-perfect-scrollbar (0.6.16) rails-assets-underscore (1.8.3) + rails-controller-testing (1.0.2) + actionpack (~> 5.x, >= 5.0.1) + actionview (~> 5.x, >= 5.0.1) + activesupport (~> 5.x) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) @@ -860,6 +864,7 @@ DEPENDENCIES rails-assets-markdown-it-sub (= 1.0.0)! rails-assets-markdown-it-sup (= 1.0.0)! rails-assets-perfect-scrollbar (= 0.6.16)! + rails-controller-testing (= 1.0.2) rails-i18n (= 5.0.4) rails-timeago (= 2.16.0) rb-fsevent (= 0.10.2) From e076910b74eeae20912dc662519b42932a7e50ae Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sat, 5 Aug 2017 22:24:25 +0200 Subject: [PATCH 11/52] Prepend protect_from_forgery because this defaults to false now --- app/controllers/application_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 50484821e..27e793c1b 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -5,7 +5,7 @@ class ApplicationController < ActionController::Base before_action :force_tablet_html has_mobile_fu - protect_from_forgery except: :receive, with: :exception + protect_from_forgery except: :receive, with: :exception, prepend: true rescue_from ActionController::InvalidAuthenticityToken do if user_signed_in? From 6e4c5bae29abb73355d24f44c0219c402c137e11 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sat, 5 Aug 2017 22:45:11 +0200 Subject: [PATCH 12/52] Replace `attribute_changed?` with new methods --- app/models/user.rb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 3be7770d3..629649d4e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -473,14 +473,17 @@ class User < ApplicationRecord def guard_unconfirmed_email self.unconfirmed_email = nil if unconfirmed_email.blank? || unconfirmed_email == email - if unconfirmed_email_changed? - self.confirm_email_token = unconfirmed_email ? SecureRandom.hex(15) : nil - end + return unless will_save_change_to_unconfirmed_email? + + self.confirm_email_token = unconfirmed_email ? SecureRandom.hex(15) : nil end # Whenever email is set, clear all unconfirmed emails which match def remove_invalid_unconfirmed_emails - User.where(unconfirmed_email: email).update_all(unconfirmed_email: nil, confirm_email_token: nil) if email_changed? + return unless saved_change_to_email? + # rubocop:disable Rails/SkipsModelValidations + User.where(unconfirmed_email: email).update_all(unconfirmed_email: nil, confirm_email_token: nil) + # rubocop:enable Rails/SkipsModelValidations end # Generate public/private keys for User and associated Person From c38232193435711e7df919bc96e51ef10aceda8b Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sat, 5 Aug 2017 23:03:22 +0200 Subject: [PATCH 13/52] Replace old `..._filter` with new `..._action` --- app/controllers/admin/admin_controller.rb | 6 ++---- app/controllers/poll_participations_controller.rb | 4 ++-- app/controllers/sessions_controller.rb | 4 ++-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/app/controllers/admin/admin_controller.rb b/app/controllers/admin/admin_controller.rb index 8e22795ef..24f08cdf0 100644 --- a/app/controllers/admin/admin_controller.rb +++ b/app/controllers/admin/admin_controller.rb @@ -1,8 +1,6 @@ module Admin class AdminController < ApplicationController - - before_filter :authenticate_user! - before_filter :redirect_unless_admin - + before_action :authenticate_user! + before_action :redirect_unless_admin end end diff --git a/app/controllers/poll_participations_controller.rb b/app/controllers/poll_participations_controller.rb index 2fd07c76e..205f9c2b3 100644 --- a/app/controllers/poll_participations_controller.rb +++ b/app/controllers/poll_participations_controller.rb @@ -1,6 +1,6 @@ class PollParticipationsController < ApplicationController include ApplicationHelper - before_filter :authenticate_user! + before_action :authenticate_user! def create answer = PollAnswer.find(params[:poll_answer_id]) @@ -25,4 +25,4 @@ class PollParticipationsController < ApplicationController current_user.find_visible_shareable_by_id(Post, params[:post_id]) || raise(ActiveRecord::RecordNotFound.new) end end -end \ No newline at end of file +end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 61f464209..74fd1f818 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -3,8 +3,8 @@ # the COPYRIGHT file. class SessionsController < Devise::SessionsController - after_filter :reset_authentication_token, :only => [:create] - before_filter :reset_authentication_token, :only => [:destroy] + after_action :reset_authentication_token, only: [:create] + before_action :reset_authentication_token, only: [:destroy] def reset_authentication_token current_user.reset_authentication_token! unless current_user.nil? From 8a5752dd6cffb34cff0e75e6e0e25cace12941f9 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 00:37:18 +0200 Subject: [PATCH 14/52] Fix creating a post with poll There were validation errors because `answer.poll` wasn't set. --- app/services/status_message_creation_service.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/services/status_message_creation_service.rb b/app/services/status_message_creation_service.rb index 94a16d795..a262d2e54 100644 --- a/app/services/status_message_creation_service.rb +++ b/app/services/status_message_creation_service.rb @@ -36,7 +36,8 @@ class StatusMessageCreationService if params[:poll_question].present? status_message.build_poll(question: params[:poll_question]) [*params[:poll_answers]].each do |poll_answer| - status_message.poll.poll_answers.build(answer: poll_answer) + answer = status_message.poll.poll_answers.build(answer: poll_answer) + answer.poll = status_message.poll end end end From 2b911b0131a47ce5c44105256661c8506eedff4b Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 00:57:41 +0200 Subject: [PATCH 15/52] Permit parameters before using them ActionController::Parameters no longer inherits from HashWithIndifferentAccess --- .../authorizations_controller.rb | 2 +- app/controllers/invitations_controller.rb | 2 +- app/controllers/photos_controller.rb | 19 +++++++------- app/controllers/profiles_controller.rb | 2 +- app/controllers/status_messages_controller.rb | 26 ++++++++++--------- 5 files changed, 27 insertions(+), 24 deletions(-) diff --git a/app/controllers/api/openid_connect/authorizations_controller.rb b/app/controllers/api/openid_connect/authorizations_controller.rb index cc2e6a0a6..94f268010 100644 --- a/app/controllers/api/openid_connect/authorizations_controller.rb +++ b/app/controllers/api/openid_connect/authorizations_controller.rb @@ -205,7 +205,7 @@ module Api if prompt && prompt.include?("none") handle_prompt_none elsif prompt && prompt.include?("login") - new_params = params.except("controller", "action").merge(prompt: prompt.remove("login")) + new_params = params.except("controller", "action").permit!.to_h.merge(prompt: prompt.remove("login")) reauthenticate(new_params) else authenticate_user! diff --git a/app/controllers/invitations_controller.rb b/app/controllers/invitations_controller.rb index 66653e83e..402ce7e4d 100644 --- a/app/controllers/invitations_controller.rb +++ b/app/controllers/invitations_controller.rb @@ -71,6 +71,6 @@ class InvitationsController < ApplicationController end def inviter_params - params.require(:email_inviter).permit(:message, :locale, :emails) + params.require(:email_inviter).permit(:message, :locale, :emails).to_h end end diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb index d8b59fb4a..d4da48654 100644 --- a/app/controllers/photos_controller.rb +++ b/app/controllers/photos_controller.rb @@ -125,27 +125,28 @@ class PhotosController < ApplicationController end def legacy_create - if params[:photo][:aspect_ids] == "all" - params[:photo][:aspect_ids] = current_user.aspects.collect { |x| x.id } - elsif params[:photo][:aspect_ids].is_a?(Hash) - params[:photo][:aspect_ids] = params[:photo][:aspect_ids].values + photo_params = params.require(:photo).permit(:pending, :set_profile_photo, aspect_ids: []) + if photo_params[:aspect_ids] == "all" + photo_params[:aspect_ids] = current_user.aspects.map(&:id) + elsif photo_params[:aspect_ids].is_a?(Hash) + photo_params[:aspect_ids] = params[:photo][:aspect_ids].values end - params[:photo][:user_file] = file_handler(params) + photo_params[:user_file] = file_handler(params) - @photo = current_user.build_post(:photo, params[:photo]) + @photo = current_user.build_post(:photo, photo_params) if @photo.save unless @photo.pending unless @photo.public? - aspects = current_user.aspects_from_ids(params[:photo][:aspect_ids]) + aspects = current_user.aspects_from_ids(photo_params[:aspect_ids]) current_user.add_to_streams(@photo, aspects) end - current_user.dispatch_post(@photo, :to => params[:photo][:aspect_ids]) + current_user.dispatch_post(@photo, to: photo_params[:aspect_ids]) end - if params[:photo][:set_profile_photo] + if photo_params[:set_profile_photo] profile_params = {:image_url => @photo.url(:thumb_large), :image_url_medium => @photo.url(:thumb_medium), :image_url_small => @photo.url(:thumb_small)} diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb index bb4d9b070..2ff157c49 100644 --- a/app/controllers/profiles_controller.rb +++ b/app/controllers/profiles_controller.rb @@ -77,6 +77,6 @@ class ProfilesController < ApplicationController def profile_params params.require(:profile).permit(:first_name, :last_name, :gender, :bio, :location, :searchable, :tag_string, :nsfw, - :public_details, date: %i(year month day)) || {} + :public_details, date: %i[year month day]).to_h || {} end end diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb index e65e4b54a..5033f5a66 100644 --- a/app/controllers/status_messages_controller.rb +++ b/app/controllers/status_messages_controller.rb @@ -47,12 +47,7 @@ class StatusMessagesController < ApplicationController end def create - normalized_params = params.merge( - services: normalize_services, - aspect_ids: normalize_aspect_ids, - public: normalize_public_flag - ) - status_message = StatusMessageCreationService.new(current_user).create(normalized_params) + status_message = StatusMessageCreationService.new(current_user).create(normalize_params) respond_to do |format| format.html { redirect_to :back } format.mobile { redirect_to stream_path } @@ -89,8 +84,19 @@ class StatusMessagesController < ApplicationController request.env["HTTP_REFERER"].include?("/people/" + current_user.guid) end - def normalize_services - [*params[:services]].compact + def normalize_params + params.permit( + :location_address, + :location_coords, + :poll_question, + status_message: %i[text provider_display_name], + poll_answers: [] + ).to_h.merge( + services: [*params[:services]].compact, + aspect_ids: normalize_aspect_ids, + public: [*params[:aspect_ids]].first == "public", + photos: [*params[:photos]].compact + ) end def normalize_aspect_ids @@ -102,10 +108,6 @@ class StatusMessagesController < ApplicationController end end - def normalize_public_flag - [*params[:aspect_ids]].first == "public" - end - def remove_getting_started current_user.disable_getting_started end From b8ebb778bf03152ad27ec7bbe561e38ab318cafd Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 02:19:21 +0200 Subject: [PATCH 16/52] Refactor federation mappings The hashes don't work properly with rails 5, there are different classes loaded when called from the rails engine with missing inheritance. Also the hashes never worked well with spring. --- lib/diaspora/federation/entities.rb | 2 +- lib/diaspora/federation/mappings.rb | 124 ++++++++++++++-------------- lib/diaspora/federation/receive.rb | 2 +- 3 files changed, 63 insertions(+), 65 deletions(-) diff --git a/lib/diaspora/federation/entities.rb b/lib/diaspora/federation/entities.rb index 48b07c43b..0165724fe 100644 --- a/lib/diaspora/federation/entities.rb +++ b/lib/diaspora/federation/entities.rb @@ -2,7 +2,7 @@ module Diaspora module Federation module Entities def self.build(entity) - public_send(Mappings.builder_for(entity.class), entity) + public_send(Mappings.builder_for(entity), entity) end def self.post(post) diff --git a/lib/diaspora/federation/mappings.rb b/lib/diaspora/federation/mappings.rb index 0d19af545..086df4685 100644 --- a/lib/diaspora/federation/mappings.rb +++ b/lib/diaspora/federation/mappings.rb @@ -1,82 +1,80 @@ module Diaspora module Federation module Mappings + # rubocop:disable Metrics/CyclomaticComplexity + # used in Diaspora::Federation::Receive - def self.receiver_for(federation_class) - fetch_from(ENTITY_RECEIVERS, federation_class) + def self.receiver_for(federation_entity) + case federation_entity + when DiasporaFederation::Entities::Comment then :comment + when DiasporaFederation::Entities::Contact then :contact + when DiasporaFederation::Entities::Conversation then :conversation + when DiasporaFederation::Entities::Like then :like + when DiasporaFederation::Entities::Message then :message + when DiasporaFederation::Entities::Participation then :participation + when DiasporaFederation::Entities::Photo then :photo + when DiasporaFederation::Entities::PollParticipation then :poll_participation + when DiasporaFederation::Entities::Profile then :profile + when DiasporaFederation::Entities::Reshare then :reshare + when DiasporaFederation::Entities::StatusMessage then :status_message + else not_found(federation_entity.class) + end end # used in Diaspora::Federation::Entities - def self.builder_for(diaspora_class) - fetch_from(ENTITY_BUILDERS, diaspora_class) + def self.builder_for(diaspora_entity) + case diaspora_entity + when AccountDeletion then :account_deletion + when Comment then :comment + when Contact then :contact + when Conversation then :conversation + when Like then :like + when Message then :message + when Participation then :participation + when Photo then :photo + when PollParticipation then :poll_participation + when Profile then :profile + when Reshare then :reshare + when Retraction then :retraction + when ContactRetraction then :retraction + when StatusMessage then :status_message + else not_found(diaspora_entity.class) + end end def self.model_class_for(entity_name) - fetch_from(ENTITY_MODELS, entity_name) + case entity_name + when "Comment" then Comment + when "Conversation" then Conversation + when "Like" then Like + when "Participation" then Participation + when "PollParticipation" then PollParticipation + when "Photo" then Photo + when "Poll" then Poll + when "Post" then Post + when "Person" then Person # TODO: deprecated + when "Reshare" then Post + when "StatusMessage" then Post + else not_found(entity_name) + end end def self.entity_name_for(model) - fetch_from(ENTITY_NAMES, model.class.base_class) + case model + when Comment then "Comment" + when Like then "Like" + when Participation then "Participation" + when PollParticipation then "PollParticipation" + when Photo then "Photo" + when Post then "Post" + else not_found(model.class) + end end + # rubocop:enable Metrics/CyclomaticComplexity - private_class_method def self.fetch_from(mapping, key) - mapping.fetch(key) { raise DiasporaFederation::Entity::UnknownEntity, "unknown entity: #{key}" } + private_class_method def self.not_found(key) + raise DiasporaFederation::Entity::UnknownEntity, "unknown entity: #{key}" end - - ENTITY_RECEIVERS = { - DiasporaFederation::Entities::Comment => :comment, - DiasporaFederation::Entities::Contact => :contact, - DiasporaFederation::Entities::Conversation => :conversation, - DiasporaFederation::Entities::Like => :like, - DiasporaFederation::Entities::Message => :message, - DiasporaFederation::Entities::Participation => :participation, - DiasporaFederation::Entities::Photo => :photo, - DiasporaFederation::Entities::PollParticipation => :poll_participation, - DiasporaFederation::Entities::Profile => :profile, - DiasporaFederation::Entities::Reshare => :reshare, - DiasporaFederation::Entities::StatusMessage => :status_message - }.freeze - - ENTITY_BUILDERS = { - AccountDeletion => :account_deletion, - Comment => :comment, - Contact => :contact, - Conversation => :conversation, - Like => :like, - Message => :message, - Participation => :participation, - Photo => :photo, - PollParticipation => :poll_participation, - Profile => :profile, - Reshare => :reshare, - Retraction => :retraction, - ContactRetraction => :retraction, - StatusMessage => :status_message - }.freeze - - ENTITY_MODELS = { - "Comment" => Comment, - "Conversation" => Conversation, - "Like" => Like, - "Participation" => Participation, - "PollParticipation" => PollParticipation, - "Photo" => Photo, - "Poll" => Poll, - "Post" => Post, - # TODO: deprecated - "Person" => Person, - "Reshare" => Post, - "StatusMessage" => Post - }.freeze - - ENTITY_NAMES = { - Comment => "Comment", - Like => "Like", - Participation => "Participation", - PollParticipation => "PollParticipation", - Photo => "Photo", - Post => "Post" - }.freeze end end end diff --git a/lib/diaspora/federation/receive.rb b/lib/diaspora/federation/receive.rb index d4dee7648..a3e8cadd4 100644 --- a/lib/diaspora/federation/receive.rb +++ b/lib/diaspora/federation/receive.rb @@ -4,7 +4,7 @@ module Diaspora extend Diaspora::Logging def self.perform(entity) - public_send(Mappings.receiver_for(entity.class), entity) + public_send(Mappings.receiver_for(entity), entity) end def self.account_deletion(entity) From 80c241bc7a6b93279b0488ae623f93b381b2e714 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 03:45:57 +0200 Subject: [PATCH 17/52] Replace `redirect_to :back` with `redirect_back` Also remove some unused html responses --- .../aspect_memberships_controller.rb | 21 +--------------- app/controllers/blocks_controller.rb | 17 +++---------- app/controllers/comments_controller.rb | 4 +-- app/controllers/home_controller.rb | 2 +- app/controllers/invitations_controller.rb | 4 +-- app/controllers/people_controller.rb | 2 +- .../poll_participations_controller.rb | 3 --- app/controllers/search_controller.rb | 12 ++++----- app/controllers/status_messages_controller.rb | 2 -- app/controllers/users_controller.rb | 4 +-- .../aspect_memberships_controller_spec.rb | 14 ----------- spec/controllers/blocks_controller_spec.rb | 25 +++++++------------ .../status_messages_controller_spec.rb | 12 --------- 13 files changed, 27 insertions(+), 95 deletions(-) diff --git a/app/controllers/aspect_memberships_controller.rb b/app/controllers/aspect_memberships_controller.rb index 68215bc37..77df0fe15 100644 --- a/app/controllers/aspect_memberships_controller.rb +++ b/app/controllers/aspect_memberships_controller.rb @@ -6,7 +6,7 @@ class AspectMembershipsController < ApplicationController before_action :authenticate_user! - respond_to :html, :json + respond_to :json def destroy aspect = current_user.aspects.joins(:aspect_memberships).where(aspect_memberships: {id: params[:id]}).first @@ -33,15 +33,6 @@ class AspectMembershipsController < ApplicationController render text: membership.errors.full_messages, status: 403 end end - - format.all do - if success - flash.now[:notice] = I18n.t "aspect_memberships.destroy.success" - else - flash.now[:error] = I18n.t "aspect_memberships.destroy.failure" - end - redirect_to :back - end end end @@ -58,22 +49,12 @@ class AspectMembershipsController < ApplicationController AspectMembership.where(contact_id: @contact.id, aspect_id: @aspect.id).first) .base_hash end - - format.all do - flash.now[:notice] = I18n.t("aspects.add_to_aspect.success") - redirect_to :back - end end else respond_to do |format| format.json do render text: I18n.t("aspects.add_to_aspect.failure"), status: 409 end - - format.all do - flash.now[:error] = I18n.t("aspects.add_to_aspect.failure") - render nothing: true, status: 409 - end end end end diff --git a/app/controllers/blocks_controller.rb b/app/controllers/blocks_controller.rb index dd5cb4ae9..d53ee579b 100644 --- a/app/controllers/blocks_controller.rb +++ b/app/controllers/blocks_controller.rb @@ -1,33 +1,22 @@ class BlocksController < ApplicationController before_action :authenticate_user! - respond_to :html, :json + respond_to :json def create block = current_user.blocks.new(block_params) - if block.save - disconnect_if_contact(block.person) - notice = {:notice => t('blocks.create.success')} - else - notice = {:error => t('blocks.create.failure')} - end + disconnect_if_contact(block.person) if block.save respond_with do |format| - format.html{ redirect_to :back, notice } format.json{ render :nothing => true, :status => 204 } end end def destroy - if current_user.blocks.find(params[:id]).delete - notice = {:notice => t('blocks.destroy.success')} - else - notice = {:error => t('blocks.destroy.failure')} - end + current_user.blocks.find(params[:id]).delete respond_with do |format| - format.html{ redirect_to :back, notice } format.json{ render :nothing => true, :status => 204 } end end diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index bde3e2fbb..2e94ffd10 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -64,7 +64,7 @@ class CommentsController < ApplicationController def respond_destroy_success respond_to do |format| - format.mobile { redirect_to :back } + format.mobile { redirect_back fallback_location: stream_path } format.js { render nothing: true, status: 204 } format.json { render nothing: true, status: 204 } end @@ -72,7 +72,7 @@ class CommentsController < ApplicationController def respond_destroy_error respond_to do |format| - format.mobile { redirect_to :back } + format.mobile { redirect_back fallback_location: stream_path } format.js { render nothing: true, status: 403 } format.json { render nothing: true, status: 403 } end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 3c4a6b5ee..74c2b6532 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -33,7 +33,7 @@ class HomeController < ApplicationController def toggle_mobile session[:mobile_view] = session[:mobile_view].nil? ? true : !session[:mobile_view] - redirect_to :back + redirect_back fallback_location: root_path end def force_mobile diff --git a/app/controllers/invitations_controller.rb b/app/controllers/invitations_controller.rb index 402ce7e4d..04927022c 100644 --- a/app/controllers/invitations_controller.rb +++ b/app/controllers/invitations_controller.rb @@ -42,7 +42,7 @@ class InvitationsController < ApplicationController t("invitations.create.rejected", emails: invalid_emails.join(", ")) end - redirect_to :back + redirect_back fallback_location: stream_path end private @@ -55,7 +55,7 @@ class InvitationsController < ApplicationController else t("invitations.create.closed") end - redirect_to :back + redirect_back fallback_location: stream_path end def valid_email?(email) diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb index 930ed0b7c..7c3d5a2e7 100644 --- a/app/controllers/people_controller.rb +++ b/app/controllers/people_controller.rb @@ -19,7 +19,7 @@ class PeopleController < ApplicationController rescue_from Diaspora::AccountClosed do respond_to do |format| - format.any { redirect_to :back, :notice => t("people.show.closed_account") } + format.any { redirect_back fallback_location: root_path, notice: t("people.show.closed_account") } format.json { render :nothing => true, :status => 410 } # 410 GONE end end diff --git a/app/controllers/poll_participations_controller.rb b/app/controllers/poll_participations_controller.rb index 205f9c2b3..ae8eea835 100644 --- a/app/controllers/poll_participations_controller.rb +++ b/app/controllers/poll_participations_controller.rb @@ -1,18 +1,15 @@ class PollParticipationsController < ApplicationController - include ApplicationHelper before_action :authenticate_user! def create answer = PollAnswer.find(params[:poll_answer_id]) poll_participation = current_user.participate_in_poll!(target, answer) if target respond_to do |format| - format.html { redirect_to :back } format.mobile { redirect_to stream_path } format.json { render json: poll_participation, :status => 201 } end rescue ActiveRecord::RecordInvalid respond_to do |format| - format.html { redirect_to :back } format.mobile { redirect_to stream_path } format.json { render :nothing => true, :status => 403 } end diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index f3a320615..e1f754a43 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -1,24 +1,24 @@ class SearchController < ApplicationController before_action :authenticate_user! - + def search if search_query.starts_with?('#') if search_query.length > 1 - respond_to do |format| + respond_to do |format| format.json {redirect_to tags_path(:q => search_query.delete("#."))} format.any {redirect_to tag_path(:name => search_query.delete("#."))} end else flash[:error] = I18n.t('tags.show.none', :name => search_query) - redirect_to :back + redirect_back fallback_location: stream_path end else redirect_to people_path(:q => search_query) - end + end end - + private - + def search_query @search_query ||= (params[:q] || params[:term] || '').strip end diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb index 5033f5a66..5127cea84 100644 --- a/app/controllers/status_messages_controller.rb +++ b/app/controllers/status_messages_controller.rb @@ -49,7 +49,6 @@ class StatusMessagesController < ApplicationController def create status_message = StatusMessageCreationService.new(current_user).create(normalize_params) respond_to do |format| - format.html { redirect_to :back } format.mobile { redirect_to stream_path } format.json { render json: PostPresenter.new(status_message, current_user), status: 201 } end @@ -66,7 +65,6 @@ class StatusMessagesController < ApplicationController def handle_create_error(error) logger.debug error respond_to do |format| - format.html { redirect_to :back } format.mobile { redirect_to stream_path } format.json { render text: error.message, status: 403 } end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 6b7502828..e6dbb3449 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -46,7 +46,7 @@ class UsersController < ApplicationController flash[:error] = t("users.update.settings_not_updated") end - redirect_to :back + redirect_back fallback_location: privacy_settings_path end def destroy @@ -60,7 +60,7 @@ class UsersController < ApplicationController else flash[:error] = t "users.destroy.no_password" end - redirect_to :back + redirect_back fallback_location: edit_user_path end end diff --git a/spec/controllers/aspect_memberships_controller_spec.rb b/spec/controllers/aspect_memberships_controller_spec.rb index 90e706e29..2ff406631 100644 --- a/spec/controllers/aspect_memberships_controller_spec.rb +++ b/spec/controllers/aspect_memberships_controller_spec.rb @@ -44,12 +44,6 @@ describe AspectMembershipsController, type: :controller do }.by(1) end - it "failure flashes error" do - expect(alice).to receive(:share_with).and_return(nil) - post :create, format: :mobile, person_id: @person.id, aspect_id: @aspect0.id - expect(flash[:error]).not_to be_blank - end - it "does not 500 on a duplicate key error" do params = {format: :json, person_id: @person.id, aspect_id: @aspect0.id} post :create, params @@ -84,14 +78,6 @@ describe AspectMembershipsController, type: :controller do expect(@aspect1.contacts.to_a).not_to include @contact end - it "does not 500 on an html request" do - membership = alice.add_contact_to_aspect(@contact, @aspect1) - delete :destroy, id: membership.id - expect(response).to redirect_to :back - @aspect1.reload - expect(@aspect1.contacts.to_a).not_to include @contact - end - it "aspect membership does not exist" do delete :destroy, format: :json, id: 123 expect(response).not_to be_success diff --git a/spec/controllers/blocks_controller_spec.rb b/spec/controllers/blocks_controller_spec.rb index de16662ea..3bf98930c 100644 --- a/spec/controllers/blocks_controller_spec.rb +++ b/spec/controllers/blocks_controller_spec.rb @@ -6,25 +6,18 @@ describe BlocksController, :type => :controller do describe "#create" do it "creates a block" do expect { - post :create, :block => {:person_id => eve.person.id} + post :create, format: :json, block: {person_id: eve.person.id} }.to change { alice.blocks.count }.by(1) end - it "redirects back" do - post :create, :block => { :person_id => 2 } - - expect(response).to be_redirect - end - - it "notifies the user" do - post :create, :block => { :person_id => 2 } - - expect(flash).not_to be_empty + it "responds with 204" do + post :create, format: :json, block: {person_id: eve.person.id} + expect(response.status).to eq(204) end it "calls #disconnect_if_contact" do expect(@controller).to receive(:disconnect_if_contact).with(bob.person) - post :create, :block => {:person_id => bob.person.id} + post :create, format: :json, block: {person_id: bob.person.id} end end @@ -33,14 +26,14 @@ describe BlocksController, :type => :controller do @block = alice.blocks.create(:person => eve.person) end - it "redirects back" do - delete :destroy, :id => @block.id - expect(response).to be_redirect + it "responds with 204" do + delete :destroy, format: :json, id: @block.id + expect(response.status).to eq(204) end it "removes a block" do expect { - delete :destroy, :id => @block.id + delete :destroy, format: :json, id: @block.id }.to change { alice.blocks.count }.by(-1) end end diff --git a/spec/controllers/status_messages_controller_spec.rb b/spec/controllers/status_messages_controller_spec.rb index 62fba474c..5d2dcd9ae 100644 --- a/spec/controllers/status_messages_controller_spec.rb +++ b/spec/controllers/status_messages_controller_spec.rb @@ -55,18 +55,6 @@ describe StatusMessagesController, :type => :controller do } } - it 'creates with valid html' do - post :create, status_message_hash - expect(response.status).to eq(302) - expect(response).to be_redirect - end - - it 'creates with invalid html' do - post :create, status_message_hash.merge(:status_message => { :text => "0123456789" * 7000 }) - expect(response.status).to eq(302) - expect(response).to be_redirect - end - it 'creates with valid json' do post :create, status_message_hash.merge(:format => 'json') expect(response.status).to eq(201) From 150fea6edb73f06d96013b1538f6f71e8152b6bd Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 04:03:50 +0200 Subject: [PATCH 18/52] Replace `render nothing: true` with `head` --- app/controllers/aspects_controller.rb | 8 ++++---- app/controllers/blocks_controller.rb | 4 ++-- app/controllers/comments_controller.rb | 12 ++++++------ app/controllers/conversations_controller.rb | 2 +- app/controllers/likes_controller.rb | 4 ++-- app/controllers/participations_controller.rb | 8 ++++---- app/controllers/people_controller.rb | 8 ++++---- app/controllers/photos_controller.rb | 6 +++--- app/controllers/poll_participations_controller.rb | 2 +- app/controllers/posts_controller.rb | 12 ++++++------ app/controllers/profiles_controller.rb | 2 +- app/controllers/report_controller.rb | 2 +- app/controllers/tag_followings_controller.rb | 8 ++++---- app/controllers/tags_controller.rb | 4 ++-- 14 files changed, 41 insertions(+), 41 deletions(-) diff --git a/app/controllers/aspects_controller.rb b/app/controllers/aspects_controller.rb index ce21bd95d..73bdf8cd2 100644 --- a/app/controllers/aspects_controller.rb +++ b/app/controllers/aspects_controller.rb @@ -22,7 +22,7 @@ class AspectsController < ApplicationController render json: result else - render nothing: true, status: 422 + head :unprocessable_entity end end @@ -71,7 +71,7 @@ class AspectsController < ApplicationController params[:ordered_aspect_ids].each_with_index do |id, i| current_user.aspects.find(id).update_attributes(order_id: i) end - render nothing: true + head :no_content end def toggle_chat_privilege @@ -79,7 +79,7 @@ class AspectsController < ApplicationController @aspect.chat_enabled = !@aspect.chat_enabled @aspect.save - render :nothing => true + head :no_content end def toggle_contact_visibility @@ -91,7 +91,7 @@ class AspectsController < ApplicationController @aspect.contacts_visible = true end @aspect.save - render :nothing => true + head :no_content end private diff --git a/app/controllers/blocks_controller.rb b/app/controllers/blocks_controller.rb index d53ee579b..aa8f43cbb 100644 --- a/app/controllers/blocks_controller.rb +++ b/app/controllers/blocks_controller.rb @@ -9,7 +9,7 @@ class BlocksController < ApplicationController disconnect_if_contact(block.person) if block.save respond_with do |format| - format.json{ render :nothing => true, :status => 204 } + format.json { head :no_content } end end @@ -17,7 +17,7 @@ class BlocksController < ApplicationController current_user.blocks.find(params[:id]).delete respond_with do |format| - format.json{ render :nothing => true, :status => 204 } + format.json { head :no_content } end end diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 2e94ffd10..214f484bb 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -8,7 +8,7 @@ class CommentsController < ApplicationController respond_to :html, :mobile, :json rescue_from ActiveRecord::RecordNotFound do - render nothing: true, status: 404 + head :not_found end def create @@ -57,7 +57,7 @@ class CommentsController < ApplicationController def respond_create_success(comment) respond_to do |format| format.json { render json: CommentPresenter.new(comment), status: 201 } - format.html { render nothing: true, status: 201 } + format.html { head :created } format.mobile { render partial: "comment", locals: {comment: comment} } end end @@ -65,16 +65,16 @@ class CommentsController < ApplicationController def respond_destroy_success respond_to do |format| format.mobile { redirect_back fallback_location: stream_path } - format.js { render nothing: true, status: 204 } - format.json { render nothing: true, status: 204 } + format.js { head :no_content } + format.json { head :no_content } end end def respond_destroy_error respond_to do |format| format.mobile { redirect_back fallback_location: stream_path } - format.js { render nothing: true, status: 403 } - format.json { render nothing: true, status: 403 } + format.js { head :forbidden } + format.json { head :forbidden } end end end diff --git a/app/controllers/conversations_controller.rb b/app/controllers/conversations_controller.rb index c69b6d7d8..164512839 100644 --- a/app/controllers/conversations_controller.rb +++ b/app/controllers/conversations_controller.rb @@ -82,7 +82,7 @@ class ConversationsController < ApplicationController @conversation.set_read(current_user) render partial: "conversations/show", locals: {conversation: @conversation} else - render nothing: true, status: 404 + head :not_found end end diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb index 20fe1dd69..de508f351 100644 --- a/app/controllers/likes_controller.rb +++ b/app/controllers/likes_controller.rb @@ -16,7 +16,7 @@ class LikesController < ApplicationController render text: I18n.t("likes.create.error"), status: 422 else respond_to do |format| - format.html { render nothing: true, status: 201 } + format.html { head :created } format.mobile { redirect_to post_path(like.post_id) } format.json { render json: like.as_api_response(:backbone), status: 201 } end @@ -24,7 +24,7 @@ class LikesController < ApplicationController def destroy if like_service.destroy(params[:id]) - render nothing: true, status: 204 + head :no_content else render text: I18n.t("likes.destroy.error"), status: 404 end diff --git a/app/controllers/participations_controller.rb b/app/controllers/participations_controller.rb index 95e8a2c03..1cb9b7b40 100644 --- a/app/controllers/participations_controller.rb +++ b/app/controllers/participations_controller.rb @@ -5,9 +5,9 @@ class ParticipationsController < ApplicationController post = current_user.find_visible_shareable_by_id(Post, params[:post_id]) if post current_user.participate! post - render nothing: true, status: :created + head :created else - render nothing: true, status: :forbidden + head :forbidden end end @@ -15,9 +15,9 @@ class ParticipationsController < ApplicationController participation = current_user.participations.find_by target_id: params[:post_id] if participation participation.destroy - render nothing: true, status: :ok + head :ok else - render nothing: true, status: :unprocessable_entity + head :unprocessable_entity end end end diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb index 7c3d5a2e7..f42a4d908 100644 --- a/app/controllers/people_controller.rb +++ b/app/controllers/people_controller.rb @@ -20,7 +20,7 @@ class PeopleController < ApplicationController rescue_from Diaspora::AccountClosed do respond_to do |format| format.any { redirect_back fallback_location: root_path, notice: t("people.show.closed_account") } - format.json { render :nothing => true, :status => 410 } # 410 GONE + format.json { head :gone } end end @@ -115,15 +115,15 @@ class PeopleController < ApplicationController def retrieve_remote if params[:diaspora_handle] Workers::FetchWebfinger.perform_async(params[:diaspora_handle]) - render :nothing => true + head :ok else - render :nothing => true, :status => 422 + head :unprocessable_entity end end def contacts respond_to do |format| - format.json { render nothing: true, status: 406 } + format.json { head :not_acceptable } format.any do @person = Person.find_by_guid(params[:person_id]) diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb index d4da48654..a95fdb420 100644 --- a/app/controllers/photos_controller.rb +++ b/app/controllers/photos_controller.rb @@ -66,10 +66,10 @@ class PhotosController < ApplicationController :status => 201} end else - render :nothing => true, :status => 422 + head :unprocessable_entity end else - render :nothing => true, :status => 422 + head :unprocessable_entity end end @@ -80,7 +80,7 @@ class PhotosController < ApplicationController current_user.retract(photo) respond_to do |format| - format.json{ render :nothing => true, :status => 204 } + format.json { head :no_content } format.html do flash[:notice] = I18n.t 'photos.destroy.notice' if StatusMessage.find_by_guid(photo.status_message_guid) diff --git a/app/controllers/poll_participations_controller.rb b/app/controllers/poll_participations_controller.rb index ae8eea835..a8b874fca 100644 --- a/app/controllers/poll_participations_controller.rb +++ b/app/controllers/poll_participations_controller.rb @@ -11,7 +11,7 @@ class PollParticipationsController < ApplicationController rescue ActiveRecord::RecordInvalid respond_to do |format| format.mobile { redirect_to stream_path } - format.json { render :nothing => true, :status => 403 } + format.json { head :forbidden } end end diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 6435ed3ad..1629fb765 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -36,7 +36,7 @@ class PostsController < ApplicationController oembed = params.slice(:format, :maxheight, :minheight) render json: OEmbedPresenter.new(post, oembed) rescue - render nothing: true, status: 404 + head :not_found end def interactions @@ -45,7 +45,7 @@ class PostsController < ApplicationController post = post_service.find!(params[:id]) render json: PostInteractionPresenter.new(post, current_user) } - format.any { render nothing: true, status: 406 } + format.any { head :not_acceptable } end end @@ -55,19 +55,19 @@ class PostsController < ApplicationController if params[:id].present? && params[:q].present? render json: post_service.mentionable_in_comment(params[:id], params[:q]) else - render nothing: true, status: 204 + head :no_content end } - format.any { render nothing: true, status: 406 } + format.any { head :not_acceptable } end rescue ActiveRecord::RecordNotFound - render nothing: true, status: 404 + head :not_found end def destroy post_service.destroy(params[:id]) respond_to do |format| - format.json { render nothing: true, status: 204 } + format.json { head :no_content } format.any { redirect_to stream_path } end end diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb index 2ff157c49..9daa4640d 100644 --- a/app/controllers/profiles_controller.rb +++ b/app/controllers/profiles_controller.rb @@ -48,7 +48,7 @@ class ProfilesController < ApplicationController end respond_to do |format| - format.js { render :nothing => true, :status => 200 } + format.js { head :ok } format.any { if current_user.getting_started? redirect_to getting_started_path diff --git a/app/controllers/report_controller.rb b/app/controllers/report_controller.rb index 8e0826c1f..f51d2d043 100644 --- a/app/controllers/report_controller.rb +++ b/app/controllers/report_controller.rb @@ -31,7 +31,7 @@ class ReportController < ApplicationController if report.save render json: true, status: 200 else - render nothing: true, status: 409 + head :conflict end end diff --git a/app/controllers/tag_followings_controller.rb b/app/controllers/tag_followings_controller.rb index 72ca6fd24..a82d16dd9 100644 --- a/app/controllers/tag_followings_controller.rb +++ b/app/controllers/tag_followings_controller.rb @@ -15,7 +15,7 @@ class TagFollowingsController < ApplicationController name_normalized = ActsAsTaggableOn::Tag.normalize(params['name']) if name_normalized.nil? || name_normalized.empty? - render :nothing => true, :status => 403 + head :forbidden else @tag = ActsAsTaggableOn::Tag.find_or_create_by(name: name_normalized) @tag_following = current_user.tag_followings.new(:tag_id => @tag.id) @@ -23,7 +23,7 @@ class TagFollowingsController < ApplicationController if @tag_following.save render :json => @tag.to_json, :status => 201 else - render :nothing => true, :status => 403 + head :forbidden end end end @@ -35,11 +35,11 @@ class TagFollowingsController < ApplicationController if tag_following && tag_following.destroy respond_to do |format| - format.any(:js, :json) { render :nothing => true, :status => 204 } + format.any(:js, :json) { head :no_content } end else respond_to do |format| - format.any(:js, :json) {render :nothing => true, :status => 403} + format.any(:js, :json) { head :forbidden } end end end diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index 30ddfec00..d201fd905 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -24,8 +24,8 @@ class TagsController < ApplicationController end else respond_to do |format| - format.json{ render :nothing => true, :status => 422 } - format.html{ redirect_to tag_path('partytimeexcellent') } + format.json { head :unprocessable_entity } + format.html { redirect_to tag_path("partytimeexcellent") } end end end From 4bbc51bfb93c6e4b181f3bc216b65236ad102455 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 05:05:10 +0200 Subject: [PATCH 19/52] Remove return in scope block Return in scope fails with `LocalJumpError: unexpected return` --- app/models/person.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/models/person.rb b/app/models/person.rb index 0fa77b3d7..f8add5a52 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -100,10 +100,12 @@ class Person < ApplicationRecord # @return [Person::ActiveRecord_Relation] scope :find_by_substring, ->(search_str) { search_str.strip! - return none if search_str.blank? || search_str.size < 2 - - sql, tokens = search_query_string(search_str) - joins(:profile).where(sql, *tokens) + if search_str.blank? || search_str.size < 2 + none + else + sql, tokens = search_query_string(search_str) + joins(:profile).where(sql, *tokens) + end } # Left joins likes and comments to a specific post where people are authors of these comments and likes From d5f24021a7ccf503f6defb67750aeec4a12a0c94 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 05:07:39 +0200 Subject: [PATCH 20/52] Replace `render text: ...` with `render plain: ...` --- app/controllers/aspect_memberships_controller.rb | 10 +++++----- app/controllers/comments_controller.rb | 4 ++-- app/controllers/conversations_controller.rb | 4 ++-- app/controllers/likes_controller.rb | 4 ++-- app/controllers/posts_controller.rb | 2 +- app/controllers/reshares_controller.rb | 2 +- app/controllers/status_messages_controller.rb | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/controllers/aspect_memberships_controller.rb b/app/controllers/aspect_memberships_controller.rb index 77df0fe15..2bfd0c933 100644 --- a/app/controllers/aspect_memberships_controller.rb +++ b/app/controllers/aspect_memberships_controller.rb @@ -30,7 +30,7 @@ class AspectMembershipsController < ApplicationController if success render json: AspectMembershipPresenter.new(membership).base_hash else - render text: membership.errors.full_messages, status: 403 + render plain: membership.errors.full_messages, status: 403 end end end @@ -53,21 +53,21 @@ class AspectMembershipsController < ApplicationController else respond_to do |format| format.json do - render text: I18n.t("aspects.add_to_aspect.failure"), status: 409 + render plain: I18n.t("aspects.add_to_aspect.failure"), status: 409 end end end end rescue_from ActiveRecord::StatementInvalid do - render text: I18n.t("aspect_memberships.destroy.invalid_statement"), status: 400 + render plain: I18n.t("aspect_memberships.destroy.invalid_statement"), status: 400 end rescue_from ActiveRecord::RecordNotFound do - render text: I18n.t("aspect_memberships.destroy.no_membership"), status: 404 + render plain: I18n.t("aspect_memberships.destroy.no_membership"), status: 404 end rescue_from Diaspora::NotMine do - render text: I18n.t("aspect_memberships.destroy.forbidden"), status: 403 + render plain: I18n.t("aspect_memberships.destroy.forbidden"), status: 403 end end diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 214f484bb..f9d4ad47d 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -15,14 +15,14 @@ class CommentsController < ApplicationController begin comment = comment_service.create(params[:post_id], params[:text]) rescue ActiveRecord::RecordNotFound - render text: I18n.t("comments.create.error"), status: 404 + render plain: I18n.t("comments.create.error"), status: 404 return end if comment respond_create_success(comment) else - render text: I18n.t("comments.create.error"), status: 422 + render plain: I18n.t("comments.create.error"), status: 422 end end diff --git a/app/controllers/conversations_controller.rb b/app/controllers/conversations_controller.rb index 164512839..3f1977655 100644 --- a/app/controllers/conversations_controller.rb +++ b/app/controllers/conversations_controller.rb @@ -39,7 +39,7 @@ class ConversationsController < ApplicationController end unless person_ids.present? - render text: I18n.t("javascripts.conversation.create.no_recipient"), status: 422 + render plain: I18n.t("javascripts.conversation.create.no_recipient"), status: 422 return end @@ -53,7 +53,7 @@ class ConversationsController < ApplicationController flash[:notice] = I18n.t("conversations.create.sent") render json: {id: @conversation.id} else - render text: I18n.t("conversations.create.fail"), status: 422 + render plain: I18n.t("conversations.create.fail"), status: 422 end end diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb index de508f351..182760951 100644 --- a/app/controllers/likes_controller.rb +++ b/app/controllers/likes_controller.rb @@ -13,7 +13,7 @@ class LikesController < ApplicationController def create like = like_service.create(params[:post_id]) rescue ActiveRecord::RecordNotFound, ActiveRecord::RecordInvalid - render text: I18n.t("likes.create.error"), status: 422 + render plain: I18n.t("likes.create.error"), status: 422 else respond_to do |format| format.html { head :created } @@ -26,7 +26,7 @@ class LikesController < ApplicationController if like_service.destroy(params[:id]) head :no_content else - render text: I18n.t("likes.destroy.error"), status: 404 + render plain: I18n.t("likes.destroy.error"), status: 404 end end diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 1629fb765..8b5386d2b 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -13,7 +13,7 @@ class PostsController < ApplicationController end rescue_from Diaspora::NotMine do - render text: I18n.t("posts.show.forbidden"), status: 403 + render plain: I18n.t("posts.show.forbidden"), status: 403 end def show diff --git a/app/controllers/reshares_controller.rb b/app/controllers/reshares_controller.rb index 4add93174..846091398 100644 --- a/app/controllers/reshares_controller.rb +++ b/app/controllers/reshares_controller.rb @@ -5,7 +5,7 @@ class ResharesController < ApplicationController def create reshare = reshare_service.create(params[:root_guid]) rescue ActiveRecord::RecordNotFound, ActiveRecord::RecordInvalid - render text: I18n.t("reshares.create.error"), status: 422 + render plain: I18n.t("reshares.create.error"), status: 422 else render json: ExtremePostPresenter.new(reshare, current_user), status: 201 end diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb index 5127cea84..58ae46536 100644 --- a/app/controllers/status_messages_controller.rb +++ b/app/controllers/status_messages_controller.rb @@ -66,7 +66,7 @@ class StatusMessagesController < ApplicationController logger.debug error respond_to do |format| format.mobile { redirect_to stream_path } - format.json { render text: error.message, status: 403 } + format.json { render plain: error.message, status: 403 } end end From 4f5b1dd845273d2276cde530e8a7874501faa15a Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 05:59:38 +0200 Subject: [PATCH 21/52] Fix creating share visibilities Validation fails because there is no user set. --- app/models/share_visibility.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/share_visibility.rb b/app/models/share_visibility.rb index 25384bc37..18c920a53 100644 --- a/app/models/share_visibility.rb +++ b/app/models/share_visibility.rb @@ -22,7 +22,7 @@ class ShareVisibility < ApplicationRecord # @param share [Shareable] # @return [void] def self.batch_import(user_ids, share) - return false unless ShareVisibility.new(shareable_id: share.id, shareable_type: share.class.base_class.to_s).valid? + return false if share.public? user_ids -= ShareVisibility.for_shareable(share).where(user_id: user_ids).pluck(:user_id) return false if user_ids.empty? From 5335ee86d61134ddc661a3b971b2658c60e85ca3 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 07:16:58 +0200 Subject: [PATCH 22/52] Mobile fails now with ActionController::UnknownFormat --- spec/controllers/help_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/controllers/help_controller_spec.rb b/spec/controllers/help_controller_spec.rb index b40bcbbaa..a9c3b0a1a 100644 --- a/spec/controllers/help_controller_spec.rb +++ b/spec/controllers/help_controller_spec.rb @@ -8,7 +8,7 @@ describe HelpController, type: :controller do it "fails on mobile" do expect { get :faq, format: :mobile - }.to raise_error ActionView::MissingTemplate + }.to raise_error ActionController::UnknownFormat end end end From 955ef43a0e8e7cad249826d5bfd83117ea0f6684 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 07:59:06 +0200 Subject: [PATCH 23/52] Replace `use_transactional_fixtures` with `use_transactional_tests` --- features/support/env.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/support/env.rb b/features/support/env.rb index 37b6afe95..cf95b37ef 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -52,7 +52,7 @@ Capybara.default_max_wait_time = 30 ActionController::Base.allow_rescue = false Cucumber::Rails::Database.autorun_database_cleaner = true -Cucumber::Rails::World.use_transactional_fixtures = false +Cucumber::Rails::World.use_transactional_tests = false require File.join(File.dirname(__FILE__), "integration_sessions_controller") require File.join(File.dirname(__FILE__), "poor_mans_webmock") From 2a6515fab911febca372af9d24164cbce2c1852a Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 18:31:01 +0200 Subject: [PATCH 24/52] Add `params` keyword to controller specs --- .../controllers/admin/pods_controller_spec.rb | 4 +- .../admin/users_controller_spec.rb | 2 +- spec/controllers/admins_controller_spec.rb | 16 +- .../authorizations_controller_spec.rb | 123 +++++---- .../openid_connect/clients_controller_spec.rb | 20 +- .../token_endpoint_controller_spec.rb | 15 +- .../aspect_memberships_controller_spec.rb | 20 +- spec/controllers/aspects_controller_spec.rb | 38 +-- spec/controllers/blocks_controller_spec.rb | 10 +- spec/controllers/comments_controller_spec.rb | 30 +-- spec/controllers/contacts_controller_spec.rb | 28 +-- ...nversation_visibilities_controller_spec.rb | 10 +- .../conversations_controller_spec.rb | 237 +++++++++--------- spec/controllers/home_controller_spec.rb | 2 +- .../invitation_codes_controller_spec.rb | 6 +- .../invitations_controller_spec.rb | 30 +-- .../jasmine_fixtures/aspects_spec.rb | 6 +- .../jasmine_fixtures/contacts_spec.rb | 4 +- .../jasmine_fixtures/conversations_spec.rb | 4 +- .../jasmine_fixtures/people_spec.rb | 2 +- .../jasmine_fixtures/photos_spec.rb | 2 +- .../jasmine_fixtures/status_messages_spec.rb | 2 +- spec/controllers/likes_controller_spec.rb | 23 +- spec/controllers/messages_controller_spec.rb | 16 +- spec/controllers/node_info_controller_spec.rb | 8 +- .../notifications_controller_spec.rb | 94 +++---- .../participations_controller_spec.rb | 8 +- spec/controllers/passwords_controller_spec.rb | 8 +- spec/controllers/people_controller_spec.rb | 146 +++++------ spec/controllers/photos_controller_spec.rb | 67 +++-- spec/controllers/posts_controller_spec.rb | 50 ++-- spec/controllers/profiles_controller_spec.rb | 32 +-- .../registrations_controller_spec.rb | 40 +-- spec/controllers/report_controller_spec.rb | 28 +-- spec/controllers/reshares_controller_spec.rb | 10 +- spec/controllers/search_controller_spec.rb | 8 +- spec/controllers/services_controller_spec.rb | 22 +- spec/controllers/sessions_controller_spec.rb | 4 +- .../share_visibilities_controller_spec.rb | 8 +- .../status_messages_controller_spec.rb | 68 ++--- spec/controllers/tags_controller_spec.rb | 28 +-- spec/controllers/users_controller_spec.rb | 72 +++--- .../api/user_info_controller_spec.rb | 2 +- 43 files changed, 673 insertions(+), 680 deletions(-) diff --git a/spec/controllers/admin/pods_controller_spec.rb b/spec/controllers/admin/pods_controller_spec.rb index 9244351ee..784e29c6e 100644 --- a/spec/controllers/admin/pods_controller_spec.rb +++ b/spec/controllers/admin/pods_controller_spec.rb @@ -38,12 +38,12 @@ describe Admin::PodsController, type: :controller do end it "performs a connection test" do - post :recheck, pod_id: 1 + post :recheck, params: {pod_id: 1} expect(response).to be_redirect end it "performs a connection test (format: json)" do - post :recheck, pod_id: 1, format: :json + post :recheck, params: {pod_id: 1}, format: :json expect(response.body).to eql(PodPresenter.new(@pod).to_json) end end diff --git a/spec/controllers/admin/users_controller_spec.rb b/spec/controllers/admin/users_controller_spec.rb index e96fa750e..7293ffab2 100644 --- a/spec/controllers/admin/users_controller_spec.rb +++ b/spec/controllers/admin/users_controller_spec.rb @@ -12,7 +12,7 @@ describe Admin::UsersController, :type => :controller do expect(other_user).to receive(:close_account!) allow(User).to receive(:find).and_return(other_user) - post :close_account, id: other_user.id + post :close_account, params: {id: other_user.id} end end diff --git a/spec/controllers/admins_controller_spec.rb b/spec/controllers/admins_controller_spec.rb index 4dfdd0ef5..e9580a5d2 100644 --- a/spec/controllers/admins_controller_spec.rb +++ b/spec/controllers/admins_controller_spec.rb @@ -70,12 +70,12 @@ describe AdminsController, :type => :controller do end it 'searches on username' do - get :user_search, admins_controller_user_search: { username: @user.username } + get :user_search, params: {admins_controller_user_search: {username: @user.username}} expect(assigns[:users]).to eq([@user]) end it 'searches on email' do - get :user_search, admins_controller_user_search: { email: @user.email } + get :user_search, params: {admins_controller_user_search: {email: @user.email}} expect(assigns[:users]).to eq([@user]) end @@ -88,7 +88,7 @@ describe AdminsController, :type => :controller do o_13.profile.birthday = 20.years.ago.to_date o_13.profile.save! - get :user_search, admins_controller_user_search: { under13: '1' } + get :user_search, params: {admins_controller_user_search: {under13: "1"}} expect(assigns[:users]).to include(u_13) expect(assigns[:users]).not_to include(o_13) @@ -110,20 +110,20 @@ describe AdminsController, :type => :controller do end it 'does not die if you do it twice' do - get :admin_inviter, :identifier => 'bob@moms.com' - get :admin_inviter, :identifier => 'bob@moms.com' + get :admin_inviter, params: {identifier: "bob@moms.com"} + get :admin_inviter, params: {identifier: "bob@moms.com"} expect(response).to be_redirect end it 'invites a new user' do expect(EmailInviter).to receive(:new).and_return(double.as_null_object) - get :admin_inviter, :identifier => 'bob@moms.com' + get :admin_inviter, params: {identifier: "bob@moms.com"} expect(response).to redirect_to user_search_path expect(flash.notice).to include("invitation sent") end it "doesn't invite an existing user" do - get :admin_inviter, identifier: bob.email + get :admin_inviter, params: {identifier: bob.email} expect(response).to redirect_to user_search_path expect(flash.notice).to include("error sending invite") end @@ -148,7 +148,7 @@ describe AdminsController, :type => :controller do it "succeeds and renders stats for different ranges" do %w(week 2weeks month).each do |range| - get :stats, range: range + get :stats, params: {range: range} expect(response).to be_success expect(response).to render_template(:stats) expect(response.body).not_to include( diff --git a/spec/controllers/api/openid_connect/authorizations_controller_spec.rb b/spec/controllers/api/openid_connect/authorizations_controller_spec.rb index f32ae0957..51d6e40ca 100644 --- a/spec/controllers/api/openid_connect/authorizations_controller_spec.rb +++ b/spec/controllers/api/openid_connect/authorizations_controller_spec.rb @@ -12,19 +12,19 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when valid parameters are passed" do context "as GET request" do it "should return a form page" do - get new_api_openid_connect_authorization_path, client_id: client.client_id, + get new_api_openid_connect_authorization_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token", - scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16) + scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16)} expect(response.body).to match("Diaspora Test Client") end end context "using claims" do it "should return a form page" do - get new_api_openid_connect_authorization_path, client_id: client.client_id, + get new_api_openid_connect_authorization_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token", scope: "openid", claims: "{\"userinfo\": {\"name\": {\"essential\": true}}}", - nonce: SecureRandom.hex(16), state: SecureRandom.hex(16) + nonce: SecureRandom.hex(16), state: SecureRandom.hex(16)} expect(response.body).to match("Diaspora Test Client") end end @@ -37,9 +37,9 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do claims: {userinfo: {name: {essential: true}}}} payload = JWT.encoded_payload(JSON.parse(payload_hash.to_json)) request_object = header + "." + payload + "." - get new_api_openid_connect_authorization_path, client_id: client.client_id, + get new_api_openid_connect_authorization_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token", - scope: "openid", nonce: "hello", state: "hello", request: request_object + scope: "openid", nonce: "hello", state: "hello", request: request_object} expect(response.body).to match("Diaspora Test Client") end end @@ -51,18 +51,18 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do response_type: "id_token", scope: "openid", nonce: "hello", state: "hello"} payload = JWT.encoded_payload(JSON.parse(payload_hash.to_json)) request_object = header + "." + payload + "." - get new_api_openid_connect_authorization_path, client_id: client.client_id, + get new_api_openid_connect_authorization_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token", - scope: "openid", nonce: "hello", state: "hello", request: request_object + scope: "openid", nonce: "hello", state: "hello", request: request_object} expect(response.body).to match("Diaspora Test Client") end end context "as POST request" do it "should return a form page" do - post api_openid_connect_authorizations_new_path, client_id: client.client_id, + post api_openid_connect_authorizations_new_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token", - scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16) + scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16)} expect(response.body).to match("Diaspora Test Client") end end @@ -70,9 +70,8 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when client id is missing" do it "should return an bad request error" do - post api_openid_connect_authorizations_new_path, - redirect_uri: "http://localhost:3000/", response_type: "id_token", - scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16) + post api_openid_connect_authorizations_new_path, params: {redirect_uri: "http://localhost:3000/", + response_type: "id_token", scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16)} expect(response.body).to include("The request was malformed") end end @@ -84,8 +83,8 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do # When client has only one redirect uri registered, only that redirect uri can be used. Hence, # we should implicitly assume the client wants to use that registered URI. # See https://github.com/nov/rack-oauth2/blob/master/lib/rack/oauth2/server/authorize.rb#L63 - post api_openid_connect_authorizations_new_path, client_id: client.client_id, response_type: "id_token", - scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16) + post api_openid_connect_authorizations_new_path, params: {client_id: client.client_id, + response_type: "id_token", scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16)} expect(response.body).to match("Diaspora Test Client") end end @@ -93,45 +92,44 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when multiple redirect URLs are pre-registered" do it "should return an invalid request error" do - post api_openid_connect_authorizations_new_path, client_id: client_with_multiple_redirects.client_id, - response_type: "id_token", - scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16) + post api_openid_connect_authorizations_new_path, params: {client_id: client_with_multiple_redirects.client_id, + response_type: "id_token", scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16)} expect(response.body).to include("The request was malformed") end end context "when redirect URI does not match pre-registered URIs" do it "should return an invalid request error" do - post api_openid_connect_authorizations_new_path, client_id: client.client_id, + post api_openid_connect_authorizations_new_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:2000/", - response_type: "id_token", scope: "openid", nonce: SecureRandom.hex(16) + response_type: "id_token", scope: "openid", nonce: SecureRandom.hex(16)} expect(response.body).to include("Invalid client id or redirect uri") end end context "when an unsupported scope is passed in" do it "should return an invalid scope error" do - post api_openid_connect_authorizations_new_path, client_id: client.client_id, + post api_openid_connect_authorizations_new_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token", - scope: "random", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16) + scope: "random", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16)} expect(response.body).to match("error=invalid_scope") end end context "when nonce is missing" do it "should return an invalid request error" do - post api_openid_connect_authorizations_new_path, client_id: client.client_id, + post api_openid_connect_authorizations_new_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", - response_type: "id_token", scope: "openid", state: SecureRandom.hex(16) + response_type: "id_token", scope: "openid", state: SecureRandom.hex(16)} expect(response.location).to match("error=invalid_request") end end context "when prompt is none" do it "should return an interaction required error" do - post api_openid_connect_authorizations_new_path, client_id: client.client_id, + post api_openid_connect_authorizations_new_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", - response_type: "id_token", scope: "openid", state: 1234, display: "page", prompt: "none" + response_type: "id_token", scope: "openid", state: 1234, display: "page", prompt: "none"} expect(response.body).to include("User must already be authorized when `prompt` is `none`") end end @@ -142,27 +140,27 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do end it "should return an interaction required error" do - post api_openid_connect_authorizations_new_path, client_id: client.client_id, + post api_openid_connect_authorizations_new_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", - response_type: "id_token", scope: "openid", state: 1234, display: "page", prompt: "none" + response_type: "id_token", scope: "openid", state: 1234, display: "page", prompt: "none"} expect(response.body).to include("User must already be logged in when `prompt` is `none`") end end context "when prompt is none and consent" do it "should return an interaction required error" do - post api_openid_connect_authorizations_new_path, client_id: client.client_id, + post api_openid_connect_authorizations_new_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", - response_type: "id_token", scope: "openid", state: 1234, display: "page", prompt: "none consent" + response_type: "id_token", scope: "openid", state: 1234, display: "page", prompt: "none consent"} expect(response.location).to match("error=invalid_request") end end context "when prompt is select_account" do it "should return an account_selection_required error" do - post api_openid_connect_authorizations_new_path, client_id: client.client_id, + post api_openid_connect_authorizations_new_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", - response_type: "id_token", scope: "openid", state: 1234, display: "page", prompt: "select_account" + response_type: "id_token", scope: "openid", state: 1234, display: "page", prompt: "select_account"} expect(response.location).to match("error=account_selection_required") expect(response.location).to match("state=1234") end @@ -170,26 +168,27 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when prompt is none and client ID is invalid" do it "should return an account_selection_required error" do - post api_openid_connect_authorizations_new_path, client_id: "random", redirect_uri: "http://localhost:3000/", - response_type: "id_token", scope: "openid", state: 1234, display: "page", prompt: "none" + post api_openid_connect_authorizations_new_path, params: {client_id: "random", + redirect_uri: "http://localhost:3000/", response_type: "id_token", scope: "openid", state: 1234, + display: "page", prompt: "none"} expect(response.body).to include("Invalid client id or redirect uri") end end context "when prompt is none and redirect URI does not match pre-registered URIs" do it "should return an account_selection_required error" do - post api_openid_connect_authorizations_new_path, client_id: client.client_id, + post api_openid_connect_authorizations_new_path, params: {client_id: client.client_id, redirect_uri: "http://randomuri:3000/", - response_type: "id_token", scope: "openid", state: 1234, display: "page", prompt: "none" + response_type: "id_token", scope: "openid", state: 1234, display: "page", prompt: "none"} expect(response.body).to include("Invalid client id or redirect uri") end end context "when XSS script is passed as name" do it "should escape html" do - post api_openid_connect_authorizations_new_path, client_id: client_with_xss.client_id, + post api_openid_connect_authorizations_new_path, params: {client_id: client_with_xss.client_id, redirect_uri: "http://localhost:3000/", - response_type: "id_token", scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16) + response_type: "id_token", scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16)} expect(response.body).to_not include("") end end @@ -203,9 +202,9 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when valid parameters are passed" do before do - get new_api_openid_connect_authorization_path, client_id: client.client_id, + get new_api_openid_connect_authorization_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token", - scope: "openid", nonce: 413_093_098_3, state: 413_093_098_3 + scope: "openid", nonce: 413_093_098_3, state: 413_093_098_3} end it "should return the id token in a fragment" do @@ -224,10 +223,10 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when prompt is none" do it "should return the id token in a fragment" do - post api_openid_connect_authorizations_new_path, client_id: client.client_id, + post api_openid_connect_authorizations_new_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token", scope: "openid", nonce: 413_093_098_3, state: 413_093_098_3, - display: "page", prompt: "none" + display: "page", prompt: "none"} expect(response.location).to include("id_token=") encoded_id_token = response.location[/(?<=id_token=)[^&]+/] decoded_token = OpenIDConnect::ResponseObject::IdToken.decode encoded_id_token, @@ -239,19 +238,19 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when prompt contains consent" do it "should return a consent form page" do - get new_api_openid_connect_authorization_path, client_id: client.client_id, + get new_api_openid_connect_authorization_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token", scope: "openid", nonce: 413_093_098_3, state: 413_093_098_3, - display: "page", prompt: "consent" + display: "page", prompt: "consent"} expect(response.body).to match("Diaspora Test Client") end end context "when scopes are escalated" do before do - get new_api_openid_connect_authorization_path, client_id: client.client_id, + get new_api_openid_connect_authorization_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token", - scope: "openid read", nonce: 413_093_098_3, state: 413_093_098_3 + scope: "openid read", nonce: 413_093_098_3, state: 413_093_098_3} end it "should receive another authorization request" do @@ -259,7 +258,7 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do end it "should overwrite old authorization scope after approval" do - post api_openid_connect_authorizations_path, approve: "true" + post api_openid_connect_authorizations_path, params: {approve: "true"} authorization_with_old_scope = Api::OpenidConnect::Authorization.find_by_client_id_user_and_scopes(client.client_id, alice, ["openid"]) expect(authorization_with_old_scope).to be_nil @@ -271,14 +270,14 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do describe "#create" do context "when id_token token" do before do - get new_api_openid_connect_authorization_path, client_id: client.client_id, + get new_api_openid_connect_authorization_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token token", - scope: "openid", nonce: 418_093_098_3, state: 418_093_098_3 + scope: "openid", nonce: 418_093_098_3, state: 418_093_098_3} end context "when authorization is approved" do before do - post api_openid_connect_authorizations_path, approve: "true" + post api_openid_connect_authorizations_path, params: {approve: "true"} end it "should return the id token in a fragment" do @@ -302,14 +301,14 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when id_token" do before do - get new_api_openid_connect_authorization_path, client_id: client.client_id, + get new_api_openid_connect_authorization_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token", - scope: "openid", nonce: 418_093_098_3, state: 418_093_098_3 + scope: "openid", nonce: 418_093_098_3, state: 418_093_098_3} end context "when authorization is approved" do before do - post api_openid_connect_authorizations_path, approve: "true" + post api_openid_connect_authorizations_path, params: {approve: "true"} end it "should return the id token in a fragment" do @@ -328,7 +327,7 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when authorization is denied" do before do - post api_openid_connect_authorizations_path, approve: "false" + post api_openid_connect_authorizations_path, params: {approve: "false"} end it "should return an error in the fragment" do @@ -343,14 +342,14 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when code" do before do - get new_api_openid_connect_authorization_path, client_id: client.client_id, + get new_api_openid_connect_authorization_path, params: {client_id: client.client_id, redirect_uri: "http://localhost:3000/", response_type: "code", - scope: "openid", nonce: 418_093_098_3, state: 418_093_098_3 + scope: "openid", nonce: 418_093_098_3, state: 418_093_098_3} end context "when authorization is approved" do before do - post api_openid_connect_authorizations_path, approve: "true" + post api_openid_connect_authorizations_path, params: {approve: "true"} end it "should return the code" do @@ -364,7 +363,7 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when authorization is denied" do before do - post api_openid_connect_authorizations_path, approve: "false" + post api_openid_connect_authorizations_path, params: {approve: "false"} end it "should return an error" do @@ -379,14 +378,10 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do end describe "#destroy" do - let!(:auth_with_read) { FactoryGirl.create(:auth_with_read) } - context "with existent authorization" do - before do - delete api_openid_connect_authorization_path(auth_with_read.id) - end - it "removes the authorization" do + auth_with_read = FactoryGirl.create(:auth_with_read, o_auth_application: client) + delete api_openid_connect_authorization_path(auth_with_read.id) expect(Api::OpenidConnect::Authorization.find_by(id: auth_with_read.id)).to be_nil end end diff --git a/spec/controllers/api/openid_connect/clients_controller_spec.rb b/spec/controllers/api/openid_connect/clients_controller_spec.rb index a12ad43b8..33776fdfb 100644 --- a/spec/controllers/api/openid_connect/clients_controller_spec.rb +++ b/spec/controllers/api/openid_connect/clients_controller_spec.rb @@ -9,11 +9,11 @@ describe Api::OpenidConnect::ClientsController, type: :controller, suppress_csrf "User-Agent" => "Faraday v0.11.0" }) .to_return(status: 200, body: "[\"http://localhost\"]", headers: {}) - post :create, redirect_uris: ["http://localhost"], client_name: "diaspora client", + post :create, params: {redirect_uris: ["http://localhost"], client_name: "diaspora client", response_types: [], grant_types: [], application_type: "web", contacts: [], logo_uri: "http://example.com/logo.png", client_uri: "http://example.com/client", policy_uri: "http://example.com/policy", tos_uri: "http://example.com/tos", - sector_identifier_uri: "http://example.com/uris", subject_type: "pairwise" + sector_identifier_uri: "http://example.com/uris", subject_type: "pairwise"} client_json = JSON.parse(response.body) expect(client_json["client_id"].length).to eq(32) expect(client_json["ppid"]).to eq(true) @@ -29,7 +29,7 @@ describe Api::OpenidConnect::ClientsController, type: :controller, suppress_csrf "User-Agent" => "Faraday v0.11.0" }) .to_return(status: 200, body: "[\"http://localhost\"]", headers: {}) - post :create, redirect_uris: ["http://localhost"], client_name: "diaspora client", + post :create, params: {redirect_uris: ["http://localhost"], client_name: "diaspora client", response_types: [], grant_types: [], application_type: "web", contacts: [], logo_uri: "http://example.com/logo.png", client_uri: "http://example.com/client", policy_uri: "http://example.com/policy", tos_uri: "http://example.com/tos", @@ -74,7 +74,7 @@ describe Api::OpenidConnect::ClientsController, type: :controller, suppress_csrf kid: "a3" } ] - } + }} client_json = JSON.parse(response.body) expect(client_json["client_id"].length).to eq(32) expect(client_json["ppid"]).to eq(true) @@ -98,13 +98,13 @@ describe Api::OpenidConnect::ClientsController, type: :controller, suppress_csrf }) .to_return(status: 200, body: "{\"keys\":[{\"kty\":\"RSA\",\"e\":\"AQAB\",\"n\":\"qpW\",\"use\":\"sig\"}]}", headers: {}) - post :create, redirect_uris: ["http://localhost"], client_name: "diaspora client", + post :create, params: {redirect_uris: ["http://localhost"], client_name: "diaspora client", response_types: [], grant_types: [], application_type: "web", contacts: [], logo_uri: "http://example.com/logo.png", client_uri: "http://example.com/client", policy_uri: "http://example.com/policy", tos_uri: "http://example.com/tos", sector_identifier_uri: "http://example.com/uris", subject_type: "pairwise", token_endpoint_auth_method: "private_key_jwt", - jwks_uri: "https://kentshikama.com/api/openid_connect/jwks.json" + jwks_uri: "https://kentshikama.com/api/openid_connect/jwks.json"} client_json = JSON.parse(response.body) expect(client_json["client_id"].length).to eq(32) expect(client_json["ppid"]).to eq(true) @@ -113,9 +113,9 @@ describe Api::OpenidConnect::ClientsController, type: :controller, suppress_csrf context "when redirect uri is missing" do it "should return a invalid_client_metadata error" do - post :create, response_types: [], grant_types: [], application_type: "web", contacts: [], + post :create, params: {response_types: [], grant_types: [], application_type: "web", contacts: [], logo_uri: "http://example.com/logo.png", client_uri: "http://example.com/client", - policy_uri: "http://example.com/policy", tos_uri: "http://example.com/tos" + policy_uri: "http://example.com/policy", tos_uri: "http://example.com/tos"} client_json = JSON.parse(response.body) expect(client_json["error"]).to have_content("invalid_client_metadata") end @@ -127,7 +127,7 @@ describe Api::OpenidConnect::ClientsController, type: :controller, suppress_csrf context "when an OIDC client already exists" do it "should return a client id" do - get :find, client_name: client.client_name + get :find, params: {client_name: client.client_name} client_id_json = JSON.parse(response.body) expect(client_id_json["client_id"]).to eq(client.client_id) end @@ -135,7 +135,7 @@ describe Api::OpenidConnect::ClientsController, type: :controller, suppress_csrf context "when an OIDC client doesn't already exist" do it "should return the appropriate error" do - get :find, client_name: "random_name" + get :find, params: {client_name: "random_name"} client_id_json = JSON.parse(response.body) expect(client_id_json["error"]).to eq("Client with name random_name does not exist") end diff --git a/spec/controllers/api/openid_connect/token_endpoint_controller_spec.rb b/spec/controllers/api/openid_connect/token_endpoint_controller_spec.rb index c3a484085..766a3c806 100644 --- a/spec/controllers/api/openid_connect/token_endpoint_controller_spec.rb +++ b/spec/controllers/api/openid_connect/token_endpoint_controller_spec.rb @@ -3,13 +3,14 @@ describe Api::OpenidConnect::TokenEndpointController, type: :controller, suppres describe "#create" do it "returns 200 on success" do - post :create, - grant_type: "authorization_code", - code: auth.create_code, - redirect_uri: auth.redirect_uri, - scope: auth.scopes.join(" "), - client_id: auth.o_auth_application.client_id, - client_secret: auth.o_auth_application.client_secret + post :create, params: { + grant_type: "authorization_code", + code: auth.create_code, + redirect_uri: auth.redirect_uri, + scope: auth.scopes.join(" "), + client_id: auth.o_auth_application.client_id, + client_secret: auth.o_auth_application.client_secret + } expect(response.code).to eq("200") end end diff --git a/spec/controllers/aspect_memberships_controller_spec.rb b/spec/controllers/aspect_memberships_controller_spec.rb index 2ff406631..a577a613a 100644 --- a/spec/controllers/aspect_memberships_controller_spec.rb +++ b/spec/controllers/aspect_memberships_controller_spec.rb @@ -22,13 +22,13 @@ describe AspectMembershipsController, type: :controller do end it "succeeds" do - post :create, format: :json, person_id: bob.person.id, aspect_id: @aspect1.id + post :create, params: {person_id: bob.person.id, aspect_id: @aspect1.id}, format: :json expect(response).to be_success end it "creates an aspect membership" do expect { - post :create, format: :json, person_id: bob.person.id, aspect_id: @aspect1.id + post :create, params: {person_id: bob.person.id, aspect_id: @aspect1.id}, format: :json }.to change { alice.contact_for(bob.person).aspect_memberships.count }.by(1) @@ -38,23 +38,23 @@ describe AspectMembershipsController, type: :controller do # argggg why? alice.contacts.reload expect { - post :create, format: :json, person_id: @person.id, aspect_id: @aspect0.id + post :create, params: {person_id: @person.id, aspect_id: @aspect0.id}, format: :json }.to change { alice.contacts.size }.by(1) end it "does not 500 on a duplicate key error" do - params = {format: :json, person_id: @person.id, aspect_id: @aspect0.id} - post :create, params - post :create, params + params = {person_id: @person.id, aspect_id: @aspect0.id} + post :create, params: params, format: :json + post :create, params: params, format: :json expect(response.status).to eq(400) expect(response.body).to eq(I18n.t("aspect_memberships.destroy.invalid_statement")) end context "json" do it "returns the aspect membership" do - post :create, format: :json, person_id: @person.id, aspect_id: @aspect0.id + post :create, params: {person_id: @person.id, aspect_id: @aspect0.id}, format: :json contact = @controller.current_user.contact_for(@person) expect(response.body).to eq(AspectMembershipPresenter.new(contact.aspect_memberships.first).base_hash.to_json) @@ -62,7 +62,7 @@ describe AspectMembershipsController, type: :controller do it "responds with an error message when the request failed" do expect(alice).to receive(:share_with).and_return(nil) - post :create, format: :json, person_id: @person.id, aspect_id: @aspect0.id + post :create, params: {person_id: @person.id, aspect_id: @aspect0.id}, format: :json expect(response.status).to eq(409) expect(response.body).to eq(I18n.t("aspects.add_to_aspect.failure")) end @@ -72,14 +72,14 @@ describe AspectMembershipsController, type: :controller do describe "#destroy" do it "removes contacts from an aspect" do membership = alice.add_contact_to_aspect(@contact, @aspect1) - delete :destroy, format: :json, id: membership.id + delete :destroy, params: {id: membership.id}, format: :json expect(response).to be_success @aspect1.reload expect(@aspect1.contacts.to_a).not_to include @contact end it "aspect membership does not exist" do - delete :destroy, format: :json, id: 123 + delete :destroy, params: {id: 123}, format: :json expect(response).not_to be_success expect(response.body).to eq(I18n.t("aspect_memberships.destroy.no_membership")) end diff --git a/spec/controllers/aspects_controller_spec.rb b/spec/controllers/aspects_controller_spec.rb index 4278b078d..1f39d7312 100644 --- a/spec/controllers/aspects_controller_spec.rb +++ b/spec/controllers/aspects_controller_spec.rb @@ -16,11 +16,11 @@ describe AspectsController, :type => :controller do describe "#show" do it "succeeds" do - get :show, 'id' => @alices_aspect_1.id.to_s + get :show, params: {id: @alices_aspect_1.id.to_s} expect(response).to be_redirect end it 'redirects on an invalid id' do - get :show, 'id' => 0 + get :show, params: {id: 0} expect(response).to be_redirect end end @@ -29,12 +29,12 @@ describe AspectsController, :type => :controller do context "with valid params" do it "creates an aspect" do expect(alice.aspects.count).to eq(2) - post :create, aspect: {name: "new aspect"} + post :create, params: {aspect: {name: "new aspect"}} expect(alice.reload.aspects.count).to eq(3) end it "returns the created aspect as json" do - post :create, aspect: {name: "new aspect"} + post :create, params: {aspect: {name: "new aspect"}} expect(JSON.parse(response.body)["id"]).to eq Aspect.find_by_name("new aspect").id expect(JSON.parse(response.body)["name"]).to eq "new aspect" end @@ -42,19 +42,19 @@ describe AspectsController, :type => :controller do context "with person_id param" do it "creates a contact if one does not already exist" do expect { - post :create, format: "js", person_id: eve.person.id, aspect: {name: "new"} + post :create, params: {person_id: eve.person.id, aspect: {name: "new"}}, format: :js }.to change { alice.contacts.count }.by(1) end it "adds a new contact to the new aspect" do - post :create, format: "js", person_id: eve.person.id, aspect: {name: "new"} + post :create, params: {person_id: eve.person.id, aspect: {name: "new"}}, format: :js expect(alice.aspects.find_by_name("new").contacts.count).to eq(1) end it "adds an existing contact to the new aspect" do - post :create, format: "js", person_id: bob.person.id, aspect: {name: "new"} + post :create, params: {person_id: bob.person.id, aspect: {name: "new"}}, format: :js expect(alice.aspects.find_by_name("new").contacts.count).to eq(1) end end @@ -63,12 +63,12 @@ describe AspectsController, :type => :controller do context "with invalid params" do it "does not create an aspect" do expect(alice.aspects.count).to eq(2) - post :create, aspect: {name: ""} + post :create, params: {aspect: {name: ""}} expect(alice.reload.aspects.count).to eq(2) end it "responds with 422" do - post :create, aspect: {name: ""} + post :create, params: {aspect: {name: ""}} expect(response.status).to eq(422) end end @@ -83,13 +83,13 @@ describe AspectsController, :type => :controller do new_user = FactoryGirl.create :user params = {"name" => "Bruisers"} params[:user_id] = new_user.id - put('update', :id => @alices_aspect_1.id, "aspect" => params) + put :update, params: {id: @alices_aspect_1.id, aspect: params} expect(Aspect.find(@alices_aspect_1.id).user_id).to eq(alice.id) end it "should return the name and id of the updated item" do params = {"name" => "Bruisers"} - put('update', :id => @alices_aspect_1.id, "aspect" => params) + put :update, params: {id: @alices_aspect_1.id, aspect: params} expect(response.body).to eq({ :id => @alices_aspect_1.id, :name => "Bruisers" }.to_json) end end @@ -100,7 +100,7 @@ describe AspectsController, :type => :controller do @alices_aspect_2.update_attributes(order_id: 20) ordered_aspect_ids = [@alices_aspect_2.id, @alices_aspect_1.id] - put(:update_order, ordered_aspect_ids: ordered_aspect_ids) + put :update_order, params: {ordered_aspect_ids: ordered_aspect_ids} expect(Aspect.find(@alices_aspect_1.id).order_id).to eq(1) expect(Aspect.find(@alices_aspect_2.id).order_id).to eq(0) @@ -115,12 +115,12 @@ describe AspectsController, :type => :controller do context "with no auto follow back aspect" do it "destoys the aspect" do expect(alice.aspects.to_a).to include @alices_aspect_1 - post :destroy, id: @alices_aspect_1.id + post :destroy, params: {id: @alices_aspect_1.id} expect(alice.reload.aspects.to_a).not_to include @alices_aspect_1 end it "renders a flash message on success" do - post :destroy, id: @alices_aspect_1.id + post :destroy, params: {id: @alices_aspect_1.id} expect(flash[:notice]).to eq(I18n.t("aspects.destroy.success", name: @alices_aspect_1.name)) expect(flash[:error]).to be_blank end @@ -135,20 +135,20 @@ describe AspectsController, :type => :controller do it "destoys the aspect" do expect(alice.aspects.to_a).to include @alices_aspect_1 - post :destroy, id: @alices_aspect_1.id + post :destroy, params: {id: @alices_aspect_1.id} expect(alice.reload.aspects.to_a).not_to include @alices_aspect_1 end it "disables auto follow back" do expect(alice.auto_follow_back).to be(true) expect(alice.auto_follow_back_aspect).to eq(@alices_aspect_1) - post :destroy, id: @alices_aspect_1.id + post :destroy, params: {id: @alices_aspect_1.id} expect(alice.auto_follow_back).to be(false) expect(alice.auto_follow_back_aspect).to eq(nil) end it "renders a flash message telling you to set a new auto follow back aspect" do - post :destroy, id: @alices_aspect_1.id + post :destroy, params: {id: @alices_aspect_1.id} expect(flash[:notice]).to eq(I18n.t("aspects.destroy.success_auto_follow_back", name: @alices_aspect_1.name)) expect(flash[:error]).to be_blank end @@ -160,7 +160,7 @@ describe AspectsController, :type => :controller do @alices_aspect_1.contacts_visible = false @alices_aspect_1.save - xhr :get, :toggle_contact_visibility, :aspect_id => @alices_aspect_1.id + get :toggle_contact_visibility, xhr: true, params: {aspect_id: @alices_aspect_1.id} expect(@alices_aspect_1.reload.contacts_visible).to be true end @@ -168,7 +168,7 @@ describe AspectsController, :type => :controller do @alices_aspect_1.contacts_visible = true @alices_aspect_1.save - xhr :get, :toggle_contact_visibility, :aspect_id => @alices_aspect_1.id + get :toggle_contact_visibility, xhr: true, params: {aspect_id: @alices_aspect_1.id} expect(@alices_aspect_1.reload.contacts_visible).to be false end end diff --git a/spec/controllers/blocks_controller_spec.rb b/spec/controllers/blocks_controller_spec.rb index 3bf98930c..93970e892 100644 --- a/spec/controllers/blocks_controller_spec.rb +++ b/spec/controllers/blocks_controller_spec.rb @@ -6,18 +6,18 @@ describe BlocksController, :type => :controller do describe "#create" do it "creates a block" do expect { - post :create, format: :json, block: {person_id: eve.person.id} + post :create, params: {block: {person_id: eve.person.id}}, format: :json }.to change { alice.blocks.count }.by(1) end it "responds with 204" do - post :create, format: :json, block: {person_id: eve.person.id} + post :create, params: {block: {person_id: eve.person.id}}, format: :json expect(response.status).to eq(204) end it "calls #disconnect_if_contact" do expect(@controller).to receive(:disconnect_if_contact).with(bob.person) - post :create, format: :json, block: {person_id: bob.person.id} + post :create, params: {block: {person_id: bob.person.id}}, format: :json end end @@ -27,13 +27,13 @@ describe BlocksController, :type => :controller do end it "responds with 204" do - delete :destroy, format: :json, id: @block.id + delete :destroy, params: {id: @block.id}, format: :json expect(response.status).to eq(204) end it "removes a block" do expect { - delete :destroy, format: :json, id: @block.id + delete :destroy, params: {id: @block.id}, format: :json }.to change { alice.blocks.count }.by(-1) end end diff --git a/spec/controllers/comments_controller_spec.rb b/spec/controllers/comments_controller_spec.rb index a155cf531..4b9e22ce5 100644 --- a/spec/controllers/comments_controller_spec.rb +++ b/spec/controllers/comments_controller_spec.rb @@ -21,13 +21,13 @@ describe CommentsController, :type => :controller do end it 'responds to format json' do - post :create, comment_hash.merge(:format => 'json') + post :create, params: comment_hash, format: :json expect(response.code).to eq('201') expect(response.body).to match comment_hash[:text] end it 'responds to format mobile' do - post :create, comment_hash.merge(:format => 'mobile') + post :create, params: comment_hash, format: :mobile expect(response).to be_success end end @@ -39,21 +39,21 @@ describe CommentsController, :type => :controller do end it 'comments' do - post :create, comment_hash + post :create, params: comment_hash expect(response.code).to eq('201') end it "doesn't overwrite author_id" do new_user = FactoryGirl.create(:user) comment_hash[:author_id] = new_user.person.id.to_s - post :create, comment_hash + post :create, params: comment_hash expect(Comment.find_by_text(comment_hash[:text]).author_id).to eq(alice.person.id) end it "doesn't overwrite id" do old_comment = alice.comment!(@post, "hello") comment_hash[:id] = old_comment.id - post :create, comment_hash + post :create, params: comment_hash expect(old_comment.reload.text).to eq('hello') end end @@ -63,7 +63,7 @@ describe CommentsController, :type => :controller do @post = eve.post :status_message, :text => 'GIANTS', :to => aspect_to_post expect(alice).not_to receive(:comment) - post :create, comment_hash + post :create, params: comment_hash expect(response.code).to eq("404") expect(response.body).to eq(I18n.t("comments.create.error")) end @@ -85,7 +85,7 @@ describe CommentsController, :type => :controller do comment = bob.comment!(@message, "hey") expect(bob).to receive(:retract).with(comment) - delete :destroy, :format => "js", :post_id => 1, :id => comment.id + delete :destroy, params: {post_id: 1, id: comment.id}, format: :js expect(response.status).to eq(204) end @@ -93,7 +93,7 @@ describe CommentsController, :type => :controller do comment = alice.comment!(@message, "hey") expect(bob).to receive(:retract).with(comment) - delete :destroy, :format => "js", :post_id => 1, :id => comment.id + delete :destroy, params: {post_id: 1, id: comment.id}, format: :js expect(response.status).to eq(204) end end @@ -103,7 +103,7 @@ describe CommentsController, :type => :controller do comment = alice.comment!(@message, "hey") expect(alice).to receive(:retract).with(comment) - delete :destroy, :format => "js", :post_id => 1, :id => comment.id + delete :destroy, params: {post_id: 1, id: comment.id}, format: :js expect(response.status).to eq(204) end @@ -112,13 +112,13 @@ describe CommentsController, :type => :controller do comment2 = eve.comment!(@message, "hey") expect(alice).not_to receive(:retract).with(comment1) - delete :destroy, :format => "js", :post_id => 1, :id => comment2.id + delete :destroy, params: {post_id: 1, id: comment2.id}, format: :js expect(response.status).to eq(403) end end it 'renders nothing and 404 on a nonexistent comment' do - delete :destroy, :post_id => 1, :id => 343415 + delete :destroy, params: {post_id: 1, id: 343_415} expect(response.status).to eq(404) expect(response.body.strip).to be_empty end @@ -131,19 +131,19 @@ describe CommentsController, :type => :controller do end it 'works for mobile' do - get :index, :post_id => @message.id, :format => 'mobile' + get :index, params: {post_id: @message.id}, format: :mobile expect(response).to be_success end it 'returns all the comments for a post' do comments = [alice, bob, eve].map{ |u| u.comment!(@message, "hey") } - get :index, :post_id => @message.id, :format => :json + get :index, params: {post_id: @message.id}, format: :json expect(JSON.parse(response.body).map {|comment| comment["id"] }).to match_array(comments.map(&:id)) end it 'returns a 404 on a nonexistent post' do - get :index, :post_id => 235236, :format => :json + get :index, params: {post_id: 235_236}, format: :json expect(response.status).to eq(404) end @@ -151,7 +151,7 @@ describe CommentsController, :type => :controller do aspect_to_post = eve.aspects.where(:name => "generic").first message = eve.post(:status_message, :text => "hey", :to => aspect_to_post.id) bob.comment!(@message, "hey") - get :index, :post_id => message.id, :format => :json + get :index, params: {post_id: message.id}, format: :json expect(response.status).to eq(404) end end diff --git a/spec/controllers/contacts_controller_spec.rb b/spec/controllers/contacts_controller_spec.rb index e12a97c3f..c50243264 100644 --- a/spec/controllers/contacts_controller_spec.rb +++ b/spec/controllers/contacts_controller_spec.rb @@ -11,7 +11,7 @@ describe ContactsController, :type => :controller do describe '#index' do context 'format mobile' do it "succeeds" do - get :index, :format => 'mobile' + get :index, format: :mobile expect(response).to be_success end end @@ -40,26 +40,26 @@ describe ContactsController, :type => :controller do end it "succeeds" do - get :index, q: @person1.first_name, format: "json" + get :index, params: {q: @person1.first_name}, format: :json expect(response).to be_success end it "responds with json" do - get :index, q: @person1.first_name, format: "json" + get :index, params: {q: @person1.first_name}, format: :json expect(response.body).to eq([@person1].to_json) end it "only returns contacts" do - get :index, q: @person2.first_name, format: "json" + get :index, params: {q: @person2.first_name}, format: :json expect(response.body).to eq([].to_json) end it "only returns mutual contacts when mutual parameter is true" do - get :index, q: @person1.first_name, mutual: true, format: "json" + get :index, params: {q: @person1.first_name, mutual: true}, format: :json expect(response.body).to eq([].to_json) - get :index, q: @person2.first_name, mutual: true, format: "json" + get :index, params: {q: @person2.first_name, mutual: true}, format: :json expect(response.body).to eq([].to_json) - get :index, q: @person3.first_name, mutual: true, format: "json" + get :index, params: {q: @person3.first_name, mutual: true}, format: :json expect(response.body).to eq([@person3].to_json) end end @@ -67,7 +67,7 @@ describe ContactsController, :type => :controller do context "for pagination on the contacts page" do context "without parameters" do it "returns contacts" do - get :index, format: "json", page: "1" + get :index, params: {page: "1"}, format: :json contact_ids = JSON.parse(response.body).map {|c| c["id"] } expect(contact_ids.to_set).to eq(bob.contacts.map(&:id).to_set) end @@ -76,7 +76,7 @@ describe ContactsController, :type => :controller do contact = bob.contacts.first contact.update_attributes(receiving: false) - get :index, format: "json", page: "1" + get :index, params: {params: {page: "1"}}, format: :json contact_ids = JSON.parse(response.body).map {|c| c["id"] } expect(contact_ids.to_set).to eq(bob.contacts.receiving.map(&:id).to_set) expect(contact_ids).not_to include(contact.id) @@ -90,13 +90,13 @@ describe ContactsController, :type => :controller do end it "returns all contacts (sharing and receiving)" do - get :index, format: "json", page: "1", set: "all" + get :index, params: {page: "1", set: "all"}, format: :json contact_ids = JSON.parse(response.body).map {|c| c["id"] } expect(contact_ids.to_set).to eq(bob.contacts.map(&:id).to_set) end it "sorts contacts by receiving status" do - get :index, format: "json", page: "1", set: "all" + get :index, params: {page: "1", set: "all"}, format: :json contact_ids = JSON.parse(response.body).map {|c| c["id"] } expect(contact_ids).to eq(bob.contacts.order("receiving DESC").map(&:id)) expect(contact_ids.last).to eq(bob.contacts.first.id) @@ -111,16 +111,16 @@ describe ContactsController, :type => :controller do end it "returns all contacts" do - get :index, format: "json", a_id: @aspect.id, page: "1" + get :index, params: {a_id: @aspect.id, page: "1"}, format: :json contact_ids = JSON.parse(response.body).map {|c| c["id"] } expect(contact_ids.to_set).to eq(bob.contacts.map(&:id).to_set) end it "sorts contacts by aspect memberships" do - get :index, format: "json", a_id: @aspect.id, page: "1" + get :index, params: {a_id: @aspect.id, page: "1"}, format: :json expect(JSON.parse(response.body).first["person"]["id"]).to eq(@person.id) - get :index, format: "json", a_id: bob.aspects.first.id, page: "1" + get :index, params: {a_id: bob.aspects.first.id, page: "1"}, format: :json expect(JSON.parse(response.body).first["person"]["id"]).not_to eq(@person.id) end end diff --git a/spec/controllers/conversation_visibilities_controller_spec.rb b/spec/controllers/conversation_visibilities_controller_spec.rb index 5b8893c1e..973873e48 100644 --- a/spec/controllers/conversation_visibilities_controller_spec.rb +++ b/spec/controllers/conversation_visibilities_controller_spec.rb @@ -19,7 +19,7 @@ describe ConversationVisibilitiesController, :type => :controller do describe '#destroy' do it 'deletes the visibility' do expect { - delete :destroy, :conversation_id => @conversation.id + delete :destroy, params: {conversation_id: @conversation.id} }.to change(ConversationVisibility, :count).by(-1) end @@ -28,20 +28,20 @@ describe ConversationVisibilitiesController, :type => :controller do sign_in user2, scope: :user expect { - delete :destroy, :conversation_id => @conversation.id + delete :destroy, params: {conversation_id: @conversation.id} }.not_to change(ConversationVisibility, :count) end it 'returns "hidden"' do - get :destroy, :conversation_id => @conversation.id + get :destroy, params: {conversation_id: @conversation.id} expect(flash.notice).to include("hidden") end it 'returns "deleted" when last participant' do - get :destroy, :conversation_id => @conversation.id + get :destroy, params: {conversation_id: @conversation.id} sign_out :user sign_in bob, scope: :user - get :destroy, :conversation_id => @conversation.id + get :destroy, params: {conversation_id: @conversation.id} expect(flash.notice).to include("deleted") end end diff --git a/spec/controllers/conversations_controller_spec.rb b/spec/controllers/conversations_controller_spec.rb index 9bf0c6cc1..dd6b64677 100644 --- a/spec/controllers/conversations_controller_spec.rb +++ b/spec/controllers/conversations_controller_spec.rb @@ -17,17 +17,17 @@ describe ConversationsController, :type => :controller do describe "#new modal" do context "desktop" do it "succeeds" do - get :new, modal: true + get :new, params: {modal: true} expect(response).to be_success end it "assigns a contact if passed a contact id" do - get :new, contact_id: alice.contacts.first.id, modal: true + get :new, params: {contact_id: alice.contacts.first.id, modal: true} expect(controller.gon.conversation_prefill).to eq([alice.contacts.first.person.as_json]) end it "assigns a set of contacts if passed an aspect id" do - get :new, aspect_id: alice.aspects.first.id, modal: true + get :new, params: {aspect_id: alice.aspects.first.id, modal: true} expect(controller.gon.conversation_prefill).to eq(alice.aspects.first.contacts.map {|c| c.person.as_json }) end end @@ -40,7 +40,7 @@ describe ConversationsController, :type => :controller do it "assigns a json list of contacts that are sharing with the person" do sharing_user = FactoryGirl.create(:user_with_aspect) sharing_user.share_with(alice.person, sharing_user.aspects.first) - get :new, modal: true + get :new, params: {modal: true} expect(assigns(:contacts_json)) .to include(alice.contacts.where(sharing: true, receiving: true).first.person.name) alice.contacts << Contact.new(person_id: eve.person.id, user_id: alice.id, sharing: false, receiving: true) @@ -51,7 +51,7 @@ describe ConversationsController, :type => :controller do it "does not allow XSS via the name parameter" do ["", '"}]});alert(1);(function f() {var foo = [{b:"'].each do |xss| - get :new, modal: true, name: xss + get :new, params: {modal: true, name: xss} expect(response.body).not_to include xss end end @@ -60,7 +60,7 @@ describe ConversationsController, :type => :controller do xss = "" contact = alice.contacts.first contact.person.profile.update_attribute(:first_name, xss) - get :new, modal: true + get :new, params: {modal: true} json = JSON.parse(assigns(:contacts_json)).first expect(json["value"].to_s).to eq(contact.id.to_s) expect(json["name"]).to_not include(xss) @@ -101,7 +101,7 @@ describe ConversationsController, :type => :controller do end it "retrieves a conversation" do - get :index, conversation_id: @conversations.first.id + get :index, params: {conversation_id: @conversations.first.id} expect(response).to be_success expect(assigns[:visibilities]).to match_array(@visibilities) expect(assigns[:conversation]).to eq(@conversations.first) @@ -109,7 +109,7 @@ describe ConversationsController, :type => :controller do it "does not let you access conversations where you are not a recipient" do sign_in eve, scope: :user - get :index, conversation_id: @conversations.first.id + get :index, params: {conversation_id: @conversations.first.id} expect(assigns[:conversation]).to be_nil end @@ -125,31 +125,30 @@ describe ConversationsController, :type => :controller do describe "#create" do context "desktop" do context "with a valid conversation" do - before do - @hash = { - format: :js, + let(:params) { + { conversation: {subject: "secret stuff", text: "text debug"}, person_ids: alice.contacts.first.person.id.to_s } - end + } it "creates a conversation" do - expect { post :create, @hash }.to change(Conversation, :count).by(1) + expect { post :create, params: params, format: :js }.to change(Conversation, :count).by(1) end it "creates a message" do - expect { post :create, @hash }.to change(Message, :count).by(1) + expect { post :create, params: params, format: :js }.to change(Message, :count).by(1) end it "responds with the conversation id as JSON" do - post :create, @hash + post :create, params: params, format: :js expect(response).to be_success expect(JSON.parse(response.body)["id"]).to eq(Conversation.first.id) end it "sets the author to the current_user" do - @hash[:author] = FactoryGirl.create(:user) - post :create, @hash + params[:author] = FactoryGirl.create(:user) + post :create, params: params, format: :js expect(Message.first.author).to eq(alice.person) expect(Conversation.first.author).to eq(alice.person) end @@ -159,130 +158,128 @@ describe ConversationsController, :type => :controller do subject: "not spam", messages_attributes: [{author: alice.person, text: "cool stuff"}]) expect(Diaspora::Federation::Dispatcher).to receive(:defer_dispatch) - post :create, @hash + post :create, params: params, format: :js end end context "with empty subject" do - before do - @hash = { - format: :js, + let(:params) { + { conversation: {subject: " ", text: "text debug"}, person_ids: alice.contacts.first.person.id.to_s } - end + } it "creates a conversation" do - expect { post :create, @hash }.to change(Conversation, :count).by(1) + expect { post :create, params: params, format: :js }.to change(Conversation, :count).by(1) end it "creates a message" do - expect { post :create, @hash }.to change(Message, :count).by(1) + expect { post :create, params: params, format: :js }.to change(Message, :count).by(1) end it "responds with the conversation id as JSON" do - post :create, @hash + post :create, params: params, format: :js expect(response).to be_success expect(JSON.parse(response.body)["id"]).to eq(Conversation.first.id) end end context "with empty text" do - before do - @hash = { - format: :js, + let(:params) { + { conversation: {subject: "secret stuff", text: " "}, person_ids: alice.contacts.first.person.id.to_s } - end + } it "does not create a conversation" do - expect { post :create, @hash }.not_to change(Conversation, :count) + expect { post :create, params: params, format: :js }.not_to change(Conversation, :count) end it "does not create a message" do - expect { post :create, @hash }.not_to change(Message, :count) + expect { post :create, params: params, format: :js }.not_to change(Message, :count) end it "responds with an error message" do - post :create, @hash + post :create, params: params, format: :js expect(response).not_to be_success expect(response.body).to eq(I18n.t("conversations.create.fail")) end end context "with empty contact" do - before do - @hash = { - format: :js, + let(:params) { + { conversation: {subject: "secret stuff", text: "text debug"}, person_ids: " " } - end + } it "does not create a conversation" do - expect { post :create, @hash }.not_to change(Conversation, :count) + expect { post :create, params: params, format: :js }.not_to change(Conversation, :count) end it "does not create a message" do - expect { post :create, @hash }.not_to change(Message, :count) + expect { post :create, params: params, format: :js }.not_to change(Message, :count) end it "responds with an error message" do - post :create, @hash + post :create, params: params, format: :js expect(response).not_to be_success expect(response.body).to eq(I18n.t("javascripts.conversation.create.no_recipient")) end end context "with nil contact" do - before do - @hash = { - format: :js, + let(:params) { + { conversation: {subject: "secret stuff", text: "text debug"}, person_ids: nil } - end + } it "does not create a conversation" do - expect { post :create, @hash }.not_to change(Conversation, :count) + expect { post :create, params: params, format: :js }.not_to change(Conversation, :count) end it "does not create a message" do - expect { post :create, @hash }.not_to change(Message, :count) + expect { post :create, params: params, format: :js }.not_to change(Message, :count) end it "responds with an error message" do - post :create, @hash + post :create, params: params, format: :js expect(response).not_to be_success expect(response.body).to eq(I18n.t("javascripts.conversation.create.no_recipient")) end end context "with non-mutual contact" do - before do - @person1 = FactoryGirl.create(:person) - @person2 = FactoryGirl.create(:person) - alice.contacts.create!(receiving: false, sharing: true, person: @person2) - @person3 = FactoryGirl.create(:person) - alice.contacts.create!(receiving: true, sharing: false, person: @person3) - @hash = { - format: :js, + let(:person1) { FactoryGirl.create(:person) } + let(:person2) { FactoryGirl.create(:person) } + let(:person3) { FactoryGirl.create(:person) } + let(:params) { + { conversation: {subject: "secret stuff", text: "text debug"}, - person_ids: [@person1.id, @person2.id, @person3.id].join(",") + person_ids: [person1.id, person2.id, person3.id].join(",") } + } + + before do + alice.contacts.create!(receiving: false, sharing: true, person: person2) + alice.contacts.create!(receiving: true, sharing: false, person: person3) end it "does not create a conversation" do - expect { post :create, @hash }.not_to change(Conversation, :count) + expect { post :create, params: params, format: :js }.not_to change(Conversation, :count) end it "does not create a message" do - expect { post :create, @hash }.not_to change(Message, :count) + expect { post :create, params: params, format: :js }.not_to change(Message, :count) end it "responds with an error message" do - post :create, @hash + post :create, params: params, format: :js expect(response).not_to be_success expect(response.body).to eq(I18n.t("javascripts.conversation.create.no_recipient")) end @@ -295,31 +292,30 @@ describe ConversationsController, :type => :controller do end context "with a valid conversation" do - before do - @hash = { - format: :js, + let(:params) { + { conversation: {subject: "secret stuff", text: "text debug"}, contact_ids: alice.contacts.first.id.to_s } - end + } it "creates a conversation" do - expect { post :create, @hash }.to change(Conversation, :count).by(1) + expect { post :create, params: params, format: :js }.to change(Conversation, :count).by(1) end it "creates a message" do - expect { post :create, @hash }.to change(Message, :count).by(1) + expect { post :create, params: params, format: :js }.to change(Message, :count).by(1) end it "responds with the conversation id as JSON" do - post :create, @hash + post :create, params: params, format: :js expect(response).to be_success expect(JSON.parse(response.body)["id"]).to eq(Conversation.first.id) end it "sets the author to the current_user" do - @hash[:author] = FactoryGirl.create(:user) - post :create, @hash + params[:author] = FactoryGirl.create(:user) + post :create, params: params, format: :js expect(Message.first.author).to eq(alice.person) expect(Conversation.first.author).to eq(alice.person) end @@ -329,127 +325,122 @@ describe ConversationsController, :type => :controller do subject: "not spam", messages_attributes: [{author: alice.person, text: "cool stuff"}]) expect(Diaspora::Federation::Dispatcher).to receive(:defer_dispatch) - post :create, @hash + post :create, params: params, format: :js end end context "with empty subject" do - before do - @hash = { - format: :js, + let(:params) { + { conversation: {subject: " ", text: "text debug"}, contact_ids: alice.contacts.first.id.to_s } - end + } it "creates a conversation" do - expect { post :create, @hash }.to change(Conversation, :count).by(1) + expect { post :create, params: params, format: :js }.to change(Conversation, :count).by(1) end it "creates a message" do - expect { post :create, @hash }.to change(Message, :count).by(1) + expect { post :create, params: params, format: :js }.to change(Message, :count).by(1) end it "responds with the conversation id as JSON" do - post :create, @hash + post :create, params: params, format: :js expect(response).to be_success expect(JSON.parse(response.body)["id"]).to eq(Conversation.first.id) end end context "with empty text" do - before do - @hash = { - format: :js, + let(:params) { + { conversation: {subject: "secret stuff", text: " "}, contact_ids: alice.contacts.first.id.to_s } - end + } it "does not create a conversation" do - expect { post :create, @hash }.not_to change(Conversation, :count) + expect { post :create, params: params, format: :js }.not_to change(Conversation, :count) end it "does not create a message" do - expect { post :create, @hash }.not_to change(Message, :count) + expect { post :create, params: params, format: :js }.not_to change(Message, :count) end it "responds with an error message" do - post :create, @hash + post :create, params: params, format: :js expect(response).not_to be_success expect(response.body).to eq(I18n.t("conversations.create.fail")) end end context "with empty contact" do - before do - @hash = { - format: :js, + let(:params) { + { conversation: {subject: "secret stuff", text: "text debug"}, contact_ids: " " } - end + } it "does not create a conversation" do - expect { post :create, @hash }.not_to change(Conversation, :count) + expect { post :create, params: params, format: :js }.not_to change(Conversation, :count) end it "does not create a message" do - expect { post :create, @hash }.not_to change(Message, :count) + expect { post :create, params: params, format: :js }.not_to change(Message, :count) end it "responds with an error message" do - post :create, @hash + post :create, params: params, format: :js expect(response).not_to be_success expect(response.body).to eq(I18n.t("javascripts.conversation.create.no_recipient")) end end context "with nil contact" do - before do - @hash = { - format: :js, + let(:params) { + { conversation: {subject: "secret stuff", text: "text debug"}, contact_ids: nil } - end + } it "does not create a conversation" do - expect { post :create, @hash }.not_to change(Conversation, :count) + expect { post :create, params: params, format: :js }.not_to change(Conversation, :count) end it "does not create a message" do - expect { post :create, @hash }.not_to change(Message, :count) + expect { post :create, params: params, format: :js }.not_to change(Message, :count) end it "responds with an error message" do - post :create, @hash + post :create, params: params, format: :js expect(response).not_to be_success expect(response.body).to eq(I18n.t("javascripts.conversation.create.no_recipient")) end end context "with non-mutual contact" do - before do - @contact1 = alice.contacts.create(receiving: false, sharing: true, person: FactoryGirl.create(:person)) - @contact2 = alice.contacts.create(receiving: true, sharing: false, person: FactoryGirl.create(:person)) - @hash = { - format: :js, + let(:contact1) { alice.contacts.create(receiving: false, sharing: true, person: FactoryGirl.create(:person)) } + let(:contact2) { alice.contacts.create(receiving: true, sharing: false, person: FactoryGirl.create(:person)) } + let(:params) { + { conversation: {subject: "secret stuff", text: "text debug"}, - person_ids: [@contact1.id, @contact2.id].join(",") + contact_ids: [contact1.id, contact2.id].join(",") } - end + } it "does not create a conversation" do - expect { post :create, @hash }.not_to change(Conversation, :count) + expect { post :create, params: params, format: :js }.not_to change(Conversation, :count) end it "does not create a message" do - expect { post :create, @hash }.not_to change(Message, :count) + expect { post :create, params: params, format: :js }.not_to change(Message, :count) end it "responds with an error message" do - post :create, @hash + post :create, params: params, format: :js expect(response).not_to be_success expect(response.body).to eq(I18n.t("javascripts.conversation.create.no_recipient")) end @@ -458,47 +449,45 @@ describe ConversationsController, :type => :controller do end describe "#show" do - before do - hash = { + let(:conversation) { + Conversation.create( author: alice.person, participant_ids: [alice.contacts.first.person.id, alice.person.id], subject: "not spam", messages_attributes: [{author: alice.person, text: "cool stuff"}] - } - @conversation = Conversation.create(hash) - end + ) + } it "succeeds with json" do - get :show, :id => @conversation.id, :format => :json + get :show, params: {id: conversation.id}, format: :json expect(response).to be_success - expect(assigns[:conversation]).to eq(@conversation) - expect(response.body).to include @conversation.guid + expect(assigns[:conversation]).to eq(conversation) + expect(response.body).to include conversation.guid end it "redirects to index" do - get :show, :id => @conversation.id - expect(response).to redirect_to(conversations_path(:conversation_id => @conversation.id)) + get :show, params: {id: conversation.id} + expect(response).to redirect_to(conversations_path(conversation_id: conversation.id)) end end describe "#raw" do - before do - hash = { + let(:conversation) { + Conversation.create( author: alice.person, participant_ids: [alice.contacts.first.person.id, alice.person.id], subject: "not spam", messages_attributes: [{author: alice.person, text: "cool stuff"}] - } - @conversation = Conversation.create(hash) - end + ) + } it "returns html of conversation" do - get :raw, conversation_id: @conversation.id - expect(response).to render_template(partial: "show", locals: {conversation: @conversation}) + get :raw, params: {conversation_id: conversation.id} + expect(response).to render_template(partial: "show", locals: {conversation: conversation}) end it "returns 404 when requesting non-existant conversation" do - get :raw, conversation_id: -1 + get :raw, params: {conversation_id: -1} expect(response).to have_http_status(404) end end diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb index 80b9bc023..2e5a9b3a8 100644 --- a/spec/controllers/home_controller_spec.rb +++ b/spec/controllers/home_controller_spec.rb @@ -40,7 +40,7 @@ describe HomeController, type: :controller do it "redirects to the stream if the user is signed in" do sign_in alice - get :show, home: true + get :show expect(response).to redirect_to(stream_path) end end diff --git a/spec/controllers/invitation_codes_controller_spec.rb b/spec/controllers/invitation_codes_controller_spec.rb index 90864fefc..afc317f99 100644 --- a/spec/controllers/invitation_codes_controller_spec.rb +++ b/spec/controllers/invitation_codes_controller_spec.rb @@ -1,7 +1,7 @@ describe InvitationCodesController, type: :controller do describe "#show" do it "redirects to the root page if the invitation code is invalid" do - get :show, id: "InvalidInvitationCode" + get :show, params: {id: "InvalidInvitationCode"} expect(response).to redirect_to root_path expect(flash[:notice]).to eq(I18n.t("invitation_codes.not_valid")) end @@ -10,13 +10,13 @@ describe InvitationCodesController, type: :controller do let(:invitation_token) { alice.invitation_code.token } it "redirects logged out users to the sign in page" do - post :show, id: invitation_token + post :show, params: {id: invitation_token} expect(response).to redirect_to new_user_registration_path(invite: {token: invitation_token}) end it "redirects logged in users the the inviters page" do sign_in bob - post :show, id: invitation_token + post :show, params: {id: invitation_token} expect(response).to redirect_to person_path(alice.person) expect(flash[:notice]).to eq(I18n.t("invitation_codes.already_logged_in", inviter: alice.name)) end diff --git a/spec/controllers/invitations_controller_spec.rb b/spec/controllers/invitations_controller_spec.rb index 7fb2b03fb..9ca17c125 100644 --- a/spec/controllers/invitations_controller_spec.rb +++ b/spec/controllers/invitations_controller_spec.rb @@ -17,16 +17,16 @@ describe InvitationsController, type: :controller do it "does not create an EmailInviter" do expect(Workers::Mail::InviteEmail).not_to receive(:perform_async) - post :create, invite_params + post :create, params: invite_params end it "returns to the previous page" do - post :create, invite_params + post :create, params: invite_params expect(response).to redirect_to referer end it "flashes an error" do - post :create, invite_params + post :create, params: invite_params expect(flash[:error]).to eq(I18n.t("invitations.create.empty")) end end @@ -39,16 +39,16 @@ describe InvitationsController, type: :controller do expect(Workers::Mail::InviteEmail).to receive(:perform_async).with( emails, alice.id, invite_params[:email_inviter] ) - post :create, invite_params + post :create, params: invite_params end it "returns to the previous page on success" do - post :create, invite_params + post :create, params: invite_params expect(response).to redirect_to referer end it "flashes a notice" do - post :create, invite_params + post :create, params: invite_params expected = I18n.t("invitations.create.sent", emails: emails) expect(flash[:notice]).to eq(expected) end @@ -60,16 +60,16 @@ describe InvitationsController, type: :controller do it "does not create an InviteEmail worker" do expect(Workers::Mail::InviteEmail).not_to receive(:perform_async) - post :create, invite_params + post :create, params: invite_params end it "returns to the previous page" do - post :create, invite_params + post :create, params: invite_params expect(response).to redirect_to referer end it "flashes an error" do - post :create, invite_params + post :create, params: invite_params expected = I18n.t("invitations.create.rejected", emails: emails) expect(flash[:error]).to eq(expected) @@ -85,16 +85,16 @@ describe InvitationsController, type: :controller do expect(Workers::Mail::InviteEmail).to receive(:perform_async).with( valid_emails, alice.id, invite_params[:email_inviter] ) - post :create, invite_params + post :create, params: invite_params end it "returns to the previous page" do - post :create, invite_params + post :create, params: invite_params expect(response).to redirect_to referer end it "flashes a notice" do - post :create, invite_params + post :create, params: invite_params expected = I18n.t("invitations.create.sent", emails: valid_emails.split(",").join(", ")) + ". " + I18n.t("invitations.create.rejected", emails: invalid_emails) expect(flash[:error]).to eq(expected) @@ -109,7 +109,7 @@ describe InvitationsController, type: :controller do it "displays an error if invitations are closed" do AppConfig.settings.invitations.open = false - post :create, invite_params + post :create, params: invite_params expect(flash[:error]).to eq(I18n.t("invitations.create.closed")) end @@ -117,7 +117,7 @@ describe InvitationsController, type: :controller do it "displays an error when no invitations are left" do alice.invitation_code.update_attributes(count: 0) - post :create, invite_params + post :create, params: invite_params expect(flash[:error]).to eq(I18n.t("invitations.create.no_more")) end @@ -127,7 +127,7 @@ describe InvitationsController, type: :controller do AppConfig.settings.invitations.open = false alice.invitation_code.update_attributes(count: 0) - post :create, invite_params + post :create, params: invite_params expect(flash[:error]).to be_nil end diff --git a/spec/controllers/jasmine_fixtures/aspects_spec.rb b/spec/controllers/jasmine_fixtures/aspects_spec.rb index e2adf493d..b82fbc2de 100644 --- a/spec/controllers/jasmine_fixtures/aspects_spec.rb +++ b/spec/controllers/jasmine_fixtures/aspects_spec.rb @@ -22,14 +22,14 @@ describe StreamsController, :type => :controller do end it "generates a jasmine fixture with a prefill", :fixture => true do - get :aspects, :prefill => "reshare things" + get :aspects, params: {prefill: "reshare things"} save_fixture(html_for("body"), "aspects_index_prefill") end it 'generates a jasmine fixture with services', :fixture => true do alice.services << Services::Facebook.create(:user_id => alice.id) alice.services << Services::Twitter.create(:user_id => alice.id) - get :aspects, :prefill => "reshare things" + get :aspects, params: {prefill: "reshare things"} save_fixture(html_for("body"), "aspects_index_services") end @@ -44,7 +44,7 @@ describe StreamsController, :type => :controller do it 'generates a jasmine fixture with only posts', :fixture => true do 2.times { bob.post(:status_message, :text => "Is anyone out there?", :to => @bob.aspects.where(:name => "generic").first.id) } - get :aspects, :only_posts => true + get :aspects, params: {only_posts: true} save_fixture(response.body, "aspects_index_only_posts") end diff --git a/spec/controllers/jasmine_fixtures/contacts_spec.rb b/spec/controllers/jasmine_fixtures/contacts_spec.rb index 127f9be2a..06262aed2 100644 --- a/spec/controllers/jasmine_fixtures/contacts_spec.rb +++ b/spec/controllers/jasmine_fixtures/contacts_spec.rb @@ -13,12 +13,12 @@ describe ContactsController, :type => :controller do end it "generates the aspects_manage fixture", :fixture => true do - get :index, :a_id => @aspect.id + get :index, params: {a_id: @aspect.id} save_fixture(html_for("body"), "aspects_manage") end it "generates the aspects_manage_contacts_json fixture", fixture: true do - get :index, format: :json, a_id: @aspect.id, page: "1" + get :index, params: {a_id: @aspect.id, page: "1"}, format: :json save_fixture(response.body, "aspects_manage_contacts_json") end diff --git a/spec/controllers/jasmine_fixtures/conversations_spec.rb b/spec/controllers/jasmine_fixtures/conversations_spec.rb index cfba3708b..a35993c0b 100644 --- a/spec/controllers/jasmine_fixtures/conversations_spec.rb +++ b/spec/controllers/jasmine_fixtures/conversations_spec.rb @@ -22,10 +22,10 @@ describe ConversationsController, :type => :controller do end it "generates a jasmine fixture", :fixture => true do - get :index, :conversation_id => @conv1.id + get :index, params: {conversation_id: @conv1.id} save_fixture(html_for("body"), "conversations_unread") - get :index, :conversation_id => @conv1.id + get :index, params: {conversation_id: @conv1.id} save_fixture(html_for("body"), "conversations_read") end end diff --git a/spec/controllers/jasmine_fixtures/people_spec.rb b/spec/controllers/jasmine_fixtures/people_spec.rb index 432ff5d5c..77ec78424 100644 --- a/spec/controllers/jasmine_fixtures/people_spec.rb +++ b/spec/controllers/jasmine_fixtures/people_spec.rb @@ -14,7 +14,7 @@ describe PeopleController, :type => :controller do end it "generates a jasmine fixture trying an external search", :fixture => true do - get :index, :q => "sample@diaspor.us" + get :index, params: {q: "sample@diaspor.us"} save_fixture(html_for("body"), "pending_external_people_search") end end diff --git a/spec/controllers/jasmine_fixtures/photos_spec.rb b/spec/controllers/jasmine_fixtures/photos_spec.rb index fd62b21a6..3dabe5e53 100644 --- a/spec/controllers/jasmine_fixtures/photos_spec.rb +++ b/spec/controllers/jasmine_fixtures/photos_spec.rb @@ -11,7 +11,7 @@ describe PhotosController, :type => :controller do describe '#index' do it "generates a jasmine fixture", :fixture => true do request.env['HTTP_ACCEPT'] = 'application/json' - get :index, :person_id => alice.person.guid.to_s + get :index, params: {person_id: alice.person.guid.to_s} save_fixture(response.body, "photos_json") end end diff --git a/spec/controllers/jasmine_fixtures/status_messages_spec.rb b/spec/controllers/jasmine_fixtures/status_messages_spec.rb index 905a5137c..6964f1d5b 100644 --- a/spec/controllers/jasmine_fixtures/status_messages_spec.rb +++ b/spec/controllers/jasmine_fixtures/status_messages_spec.rb @@ -25,7 +25,7 @@ describe StatusMessagesController, :type => :controller do aspect = alice.aspects.create(:name => 'people') contact.aspects << aspect contact.save - get :new, :person_id => bob.person.id + get :new, params: {person_id: bob.person.id} save_fixture(html_for("body"), "status_message_new") end end diff --git a/spec/controllers/likes_controller_spec.rb b/spec/controllers/likes_controller_spec.rb index b9935a70f..b29fdeae9 100644 --- a/spec/controllers/likes_controller_spec.rb +++ b/spec/controllers/likes_controller_spec.rb @@ -18,7 +18,7 @@ describe LikesController, type: :controller do context "on my own post" do it "succeeds" do @target = alice.post :status_message, text: "AWESOME", to: @alices_aspect.id - post :create, like_hash.merge(format: :json) + post :create, params: like_hash, format: :json expect(response.code).to eq("201") end end @@ -29,13 +29,13 @@ describe LikesController, type: :controller do end it "likes" do - post :create, like_hash + post :create, params: like_hash expect(response.code).to eq("201") end it "doesn't post multiple times" do alice.like!(@target) - post :create, like_hash + post :create, params: like_hash expect(response.code).to eq("422") end end @@ -47,7 +47,7 @@ describe LikesController, type: :controller do it "doesn't post" do expect(alice).not_to receive(:like!) - post :create, like_hash + post :create, params: like_hash expect(response.code).to eq("422") end end @@ -58,8 +58,7 @@ describe LikesController, type: :controller do end it "should be catched when it means that the target is not found" do - params = like_hash.merge(format: :json, post_id: -1) - post :create, params + post :create, params: {post_id: -1}, format: :json expect(response.code).to eq("422") end @@ -67,7 +66,7 @@ describe LikesController, type: :controller do @target = alice.post :status_message, text: "AWESOME", to: @alices_aspect.id allow(alice).to receive(:like!).and_raise("something") allow(@controller).to receive(:current_user).and_return(alice) - expect { post :create, like_hash.merge(format: :json) }.to raise_error("something") + expect { post :create, params: like_hash, format: :json }.to raise_error("something") end end end @@ -80,18 +79,18 @@ describe LikesController, type: :controller do it "returns a 404 for a post not visible to the user" do sign_in eve expect { - get :index, post_id: @message.id + get :index, params: {post_id: @message.id} }.to raise_error(ActiveRecord::RecordNotFound) end it "returns an array of likes for a post" do bob.like!(@message) - get :index, post_id: @message.id + get :index, params: {post_id: @message.id} expect(JSON.parse(response.body).map {|h| h["id"] }).to match_array(@message.likes.map(&:id)) end it "returns an empty array for a post with no likes" do - get :index, post_id: @message.id + get :index, params: {post_id: @message.id} expect(JSON.parse(response.body).map(&:id)).to eq([]) end end @@ -106,7 +105,7 @@ describe LikesController, type: :controller do current_user = controller.send(:current_user) expect(current_user).to receive(:retract).with(@like) - delete :destroy, format: :json, post_id: @message.id, id: @like.id + delete :destroy, params: {post_id: @message.id, id: @like.id}, format: :json expect(response.status).to eq(204) end @@ -114,7 +113,7 @@ describe LikesController, type: :controller do like2 = eve.like!(@message) like_count = Like.count - delete :destroy, format: :json, post_id: @message.id, id: like2.id + delete :destroy, params: {post_id: @message.id, id: like2.id}, format: :json expect(response.status).to eq(404) expect(response.body).to eq(I18n.t("likes.destroy.error")) expect(Like.count).to eq(like_count) diff --git a/spec/controllers/messages_controller_spec.rb b/spec/controllers/messages_controller_spec.rb index 6e7bea228..596ca084e 100644 --- a/spec/controllers/messages_controller_spec.rb +++ b/spec/controllers/messages_controller_spec.rb @@ -32,7 +32,7 @@ describe MessagesController, :type => :controller do it 'redirects to conversation' do expect { - post :create, @message_params + post :create, params: @message_params }.to change(Message, :count).by(1) expect(response.status).to eq(302) expect(response).to redirect_to(conversations_path(:conversation_id => @conversation)) @@ -40,7 +40,7 @@ describe MessagesController, :type => :controller do it "dispatches the message" do expect(Diaspora::Federation::Dispatcher).to receive(:defer_dispatch).with(alice, instance_of(Message)) - post :create, @message_params + post :create, params: @message_params end end @@ -54,7 +54,7 @@ describe MessagesController, :type => :controller do it 'does not create the message' do expect { - post :create, @message_params + post :create, params: @message_params }.not_to change(Message, :count) expect(flash[:error]).to be_present end @@ -72,7 +72,7 @@ describe MessagesController, :type => :controller do end it 'comments' do - post :create, @message_params + post :create, params: @message_params expect(response.status).to eq(302) expect(response).to redirect_to(conversations_path(:conversation_id => @conversation)) end @@ -81,7 +81,7 @@ describe MessagesController, :type => :controller do new_user = FactoryGirl.create(:user) @message_params[:author_id] = new_user.person.id.to_s - post :create, @message_params + post :create, params: @message_params created_message = Message.find_by_text(@message_params[:message][:text]) expect(created_message.author).to eq(alice.person) end @@ -94,13 +94,13 @@ describe MessagesController, :type => :controller do ) @message_params[:id] = old_message.id - post :create, @message_params + post :create, params: @message_params expect(old_message.reload.text).to eq('hello') end it "dispatches the message" do expect(Diaspora::Federation::Dispatcher).to receive(:defer_dispatch).with(alice, instance_of(Message)) - post :create, @message_params + post :create, params: @message_params end end @@ -118,7 +118,7 @@ describe MessagesController, :type => :controller do it 'does not create the message' do expect { - post :create, @message_params + post :create, params: @message_params }.not_to change(Message, :count) expect(flash[:error]).to be_present end diff --git a/spec/controllers/node_info_controller_spec.rb b/spec/controllers/node_info_controller_spec.rb index 907f1183a..3108ca4cf 100644 --- a/spec/controllers/node_info_controller_spec.rb +++ b/spec/controllers/node_info_controller_spec.rb @@ -25,7 +25,7 @@ describe NodeInfoController do describe "#document" do context "invalid version" do it "responds with not found" do - get :document, version: "0.0", format: :json + get :document, params: {version: "0.0"}, format: :json expect(response.code).to eq "404" end @@ -34,7 +34,7 @@ describe NodeInfoController do %w(1.0 2.0).each do |version| context "version #{version}" do it "responds to JSON" do - get :document, version: version, format: :json + get :document, params: {version: version}, format: :json expect(response).to be_success end @@ -43,11 +43,11 @@ describe NodeInfoController do expect(NodeInfoPresenter).to receive(:new).with(version) .and_return(double(as_json: {}, content_type: "application/json")) - get :document, version: version, format: :json + get :document, params: {version: version}, format: :json end it "notes the schema in the content type" do - get :document, version: version, format: :json + get :document, params: {version: version}, format: :json expect(response.content_type) .to eq("application/json; profile=http://nodeinfo.diaspora.software/ns/schema/#{version}#") diff --git a/spec/controllers/notifications_controller_spec.rb b/spec/controllers/notifications_controller_spec.rb index d1f969e7a..58a078bcb 100644 --- a/spec/controllers/notifications_controller_spec.rb +++ b/spec/controllers/notifications_controller_spec.rb @@ -10,23 +10,23 @@ describe NotificationsController, :type => :controller do describe '#update' do it 'marks a notification as read if it gets no other information' do note = FactoryGirl.create(:notification) - expect(Notification).to receive( :where ).and_return( [note] ) - expect(note).to receive( :set_read_state ).with( true ) - get :update, "id" => note.id, :format => :json + expect(Notification).to receive(:where).and_return([note]) + expect(note).to receive(:set_read_state).with(true) + get :update, params: {id: note.id}, format: :json end it 'marks a notification as read if it is told to' do note = FactoryGirl.create(:notification) - expect(Notification).to receive( :where ).and_return( [note] ) - expect(note).to receive( :set_read_state ).with( true ) - get :update, "id" => note.id, :set_unread => "false", :format => :json + expect(Notification).to receive(:where).and_return([note]) + expect(note).to receive(:set_read_state).with(true) + get :update, params: {id: note.id, set_unread: "false"}, format: :json end it 'marks a notification as unread if it is told to' do note = FactoryGirl.create(:notification) - expect(Notification).to receive( :where ).and_return( [note] ) - expect(note).to receive( :set_read_state ).with( false ) - get :update, "id" => note.id, :set_unread => "true", :format => :json + expect(Notification).to receive(:where).and_return([note]) + expect(note).to receive(:set_read_state).with(false) + get :update, params: {id: note.id, set_unread: "true"}, format: :json end it "marks a notification as unread without timestamping" do @@ -34,7 +34,7 @@ describe NotificationsController, :type => :controller do FactoryGirl.create(:notification, recipient: alice, unread: false) end - get :update, "id" => note.id, :set_unread => "true", :format => :json + get :update, params: {id: note.id, set_unread: "true"}, format: :json expect(response).to be_success updated_note = Notification.find(note.id) @@ -48,7 +48,7 @@ describe NotificationsController, :type => :controller do FactoryGirl.create(:notification, :recipient => alice) note = FactoryGirl.create(:notification, :recipient => user2) - get :update, "id" => note.id, :set_unread => "false", :format => :json + get :update, params: {id: note.id, set_unread: "false"}, format: :json expect(Notification.find(note.id).unread).to eq(true) end @@ -90,7 +90,7 @@ describe NotificationsController, :type => :controller do end it 'succeeds on mobile' do - get :index, :format => :mobile + get :index, format: :mobile expect(response).to be_success end @@ -98,33 +98,33 @@ describe NotificationsController, :type => :controller do 25.times { FactoryGirl.create(:notification, :recipient => alice, :target => @post) } get :index expect(assigns[:notifications].count).to eq(25) - get :index, "page" => 2 + get :index, params: {page: 2} expect(assigns[:notifications].count).to eq(1) end it "supports a limit per_page parameter" do 2.times { FactoryGirl.create(:notification, :recipient => alice, :target => @post) } - get :index, "per_page" => 2 + get :index, params: {per_page: 2} expect(assigns[:notifications].count).to eq(2) end describe "special case for start sharing notifications" do it "should not provide a contacts menu for standard notifications" do FactoryGirl.create(:notification, :recipient => alice, :target => @post) - get :index, "per_page" => 5 + get :index, params: {per_page: 5} expect(Nokogiri(response.body).css('.aspect_membership')).to be_empty end it "should provide a contacts menu for start sharing notifications" do eve.share_with(alice.person, eve.aspects.first) - get :index, "per_page" => 5 + get :index, params: {per_page: 5} expect(Nokogiri(response.body).css(".aspect_membership_dropdown")).not_to be_empty end it 'succeeds on mobile' do eve.share_with(alice.person, eve.aspects.first) - get :index, :format => :mobile + get :index, format: :mobile expect(response).to be_success end end @@ -132,7 +132,7 @@ describe NotificationsController, :type => :controller do describe "filter notifications" do it "supports filtering by notification type" do FactoryGirl.create(:notification, :recipient => alice, :type => "Notifications::StartedSharing") - get :index, "type" => "started_sharing" + get :index, params: {type: "started_sharing"} expect(assigns[:notifications].count).to eq(1) end @@ -140,7 +140,7 @@ describe NotificationsController, :type => :controller do FactoryGirl.create(:notification, :recipient => alice, :target => @post) get :read_all FactoryGirl.create(:notification, :recipient => alice, :target => @post) - get :index, "show" => "unread" + get :index, params: {show: "unread"} expect(assigns[:notifications].count).to eq(1) end end @@ -165,46 +165,54 @@ describe NotificationsController, :type => :controller do end describe "#read_all" do - it 'marks all notifications as read' do - request.env["HTTP_REFERER"] = "I wish I were spelled right" - FactoryGirl.create(:notification, :recipient => alice, :target => @post) - FactoryGirl.create(:notification, :recipient => alice, :target => @post) + let(:post) { FactoryGirl.create(:status_message) } - expect(Notification.where(:unread => true).count).to eq(2) - get :read_all - expect(Notification.where(:unread => true).count).to eq(0) - end - it 'marks all notifications in the current filter as read' do + it "marks all notifications as read" do request.env["HTTP_REFERER"] = "I wish I were spelled right" - FactoryGirl.create(:notification, :recipient => alice, :target => @post) - FactoryGirl.create(:notification, :recipient => alice, :type => "Notifications::StartedSharing") - expect(Notification.where(:unread => true).count).to eq(2) - get :read_all, "type" => "started_sharing" - expect(Notification.where(:unread => true).count).to eq(1) + FactoryGirl.create(:notification, recipient: alice, target: post) + FactoryGirl.create(:notification, recipient: alice, target: post) + + expect(Notification.where(unread: true).count).to eq(2) + get :read_all + expect(Notification.where(unread: true).count).to eq(0) end + + it "marks all notifications in the current filter as read" do + request.env["HTTP_REFERER"] = "I wish I were spelled right" + FactoryGirl.create(:notification, recipient: alice, target: post) + FactoryGirl.create(:notification, recipient: alice, type: "Notifications::StartedSharing") + expect(Notification.where(unread: true).count).to eq(2) + get :read_all, params: {type: "started_sharing"} + expect(Notification.where(unread: true).count).to eq(1) + end + it "should redirect back in the html version if it has > 0 notifications" do - FactoryGirl.create(:notification, :recipient => alice, :type => "Notifications::StartedSharing") - get :read_all, :format => :html, "type" => "liked" + FactoryGirl.create(:notification, recipient: alice, type: "Notifications::StartedSharing") + get :read_all, params: {type: "liked"}, format: :html expect(response).to redirect_to(notifications_path) end + it "should redirect back in the mobile version if it has > 0 notifications" do - FactoryGirl.create(:notification, :recipient => alice, :type => "Notifications::StartedSharing") - get :read_all, :format => :mobile, "type" => "liked" + FactoryGirl.create(:notification, recipient: alice, type: "Notifications::StartedSharing") + get :read_all, params: {type: "liked"}, format: :mobile expect(response).to redirect_to(notifications_path) end + it "should redirect to stream in the html version if it has 0 notifications" do - FactoryGirl.create(:notification, :recipient => alice, :type => "Notifications::StartedSharing") - get :read_all, :format => :html, "type" => "started_sharing" + FactoryGirl.create(:notification, recipient: alice, type: "Notifications::StartedSharing") + get :read_all, params: {type: "started_sharing"}, format: :html expect(response).to redirect_to(stream_path) end + it "should redirect back in the mobile version if it has 0 notifications" do - FactoryGirl.create(:notification, :recipient => alice, :type => "Notifications::StartedSharing") - get :read_all, :format => :mobile, "type" => "started_sharing" + FactoryGirl.create(:notification, recipient: alice, type: "Notifications::StartedSharing") + get :read_all, params: {type: "started_sharing"}, format: :mobile expect(response).to redirect_to(stream_path) end + it "should return a dummy value in the json version" do - FactoryGirl.create(:notification, :recipient => alice, :target => @post) - get :read_all, :format => :json + FactoryGirl.create(:notification, recipient: alice, target: post) + get :read_all, format: :json expect(response).not_to be_redirect end end diff --git a/spec/controllers/participations_controller_spec.rb b/spec/controllers/participations_controller_spec.rb index f557188f1..9c2fc1e2c 100644 --- a/spec/controllers/participations_controller_spec.rb +++ b/spec/controllers/participations_controller_spec.rb @@ -9,7 +9,7 @@ describe ParticipationsController, :type => :controller do shared_examples 'on a visible post' do it 'creates the participation' do - post :create, post_id: @post.id + post :create, params: {post_id: @post.id} expect(alice.participations.where(:target_id => @post.id)).to exist expect(response.code).to eq('201') end @@ -47,7 +47,7 @@ describe ParticipationsController, :type => :controller do end it 'should not create the participation' do - post :create, post_id: @post.id + post :create, params: {post_id: @post.id} expect(alice.participations.where(:target_id => @post.id)).not_to exist expect(response.code).to eq('403') end @@ -61,7 +61,7 @@ describe ParticipationsController, :type => :controller do before { alice.participate! post } it 'should remove participation' do - delete :destroy, post_id: post.id + delete :destroy, params: {post_id: post.id} expect(alice.participations.where(:target_id => post.id)).not_to exist expect(response.code).to eq('200') end @@ -69,7 +69,7 @@ describe ParticipationsController, :type => :controller do context 'on a post you do not partecipate to' do it 'says it is an unprocessable request' do - delete :destroy, post_id: post.id + delete :destroy, params: {post_id: post.id} expect(response.code).to eq('422') end end diff --git a/spec/controllers/passwords_controller_spec.rb b/spec/controllers/passwords_controller_spec.rb index 31c3d3e73..378e3a111 100644 --- a/spec/controllers/passwords_controller_spec.rb +++ b/spec/controllers/passwords_controller_spec.rb @@ -10,23 +10,23 @@ describe Devise::PasswordsController, type: :controller do describe "#create" do context "when there is no such user" do it "succeeds" do - post :create, "user" => {"email" => "foo@example.com"} + post :create, params: {user: {email: "foo@example.com"}} expect(response).to be_success end it "doesn't send email" do expect(Workers::ResetPassword).not_to receive(:perform_async) - post :create, "user" => {"email" => "foo@example.com"} + post :create, params: {user: {email: "foo@example.com"}} end end context "when there is a user with that email" do it "redirects to the login page" do - post :create, "user" => {"email" => alice.email} + post :create, params: {user: {email: alice.email}} expect(response).to redirect_to(new_user_session_path) end it "sends email (enqueued to Sidekiq)" do expect(Workers::ResetPassword).to receive(:perform_async).with(alice.id) - post :create, "user" => {"email" => alice.email} + post :create, params: {user: {email: alice.email}} end end end diff --git a/spec/controllers/people_controller_spec.rb b/spec/controllers/people_controller_spec.rb index 846244927..bb450b88c 100644 --- a/spec/controllers/people_controller_spec.rb +++ b/spec/controllers/people_controller_spec.rb @@ -30,24 +30,24 @@ describe PeopleController, :type => :controller do describe 'via json' do it 'succeeds' do - get :index, :q => "Korth", :format => 'json' + get :index, params: {q: "Korth"}, format: :json expect(response).to be_success end it 'responds with json' do - get :index, :q => "Korth", :format => 'json' + get :index, params: {q: "Korth"}, format: :json expect(response.body).to eq([@korth].to_json) end it 'does not assign hashes' do - get :index, :q => "Korth", :format => 'json' + get :index, params: {q: "Korth"}, format: :json expect(assigns[:hashes]).to be_nil end it "doesn't include closed accounts" do - get :index, q: "Closed", format: "json" + get :index, params: {q: "Closed"}, format: :json expect(JSON.parse(response.body).size).to eq(0) - get :index, q: @closed.diaspora_handle, format: "json" + get :index, params: {q: @closed.diaspora_handle}, format: :json expect(JSON.parse(response.body).size).to eq(0) end end @@ -60,39 +60,39 @@ describe PeopleController, :type => :controller do :last_name => "w", :searchable => false)) end it 'finds people even if they have searchable off' do - get :index, :q => "eugene@example.org" + get :index, params: {q: "eugene@example.org"} expect(assigns[:people][0].id).to eq(@unsearchable_eugene.id) end it 'downcases the query term' do - get :index, :q => "Eugene@Example.ORG" + get :index, params: {q: "Eugene@Example.ORG"} expect(assigns[:people][0].id).to eq(@unsearchable_eugene.id) end it 'does not the background query task if the user is found' do - get :index, :q => "Eugene@Example.ORG" + get :index, params: {q: "Eugene@Example.ORG"} expect(assigns[:background_query]).to eq(nil) end it 'sets background query task if the user is not found' do - get :index, :q => "Eugene@Example1.ORG" + get :index, params: {q: "Eugene@Example1.ORG"} expect(assigns[:background_query]).to eq("eugene@example1.org") end it "doesn't include closed accounts" do - get :index, q: @closed.diaspora_handle + get :index, params: {q: @closed.diaspora_handle} expect(assigns[:people].size).to eq(0) end end context 'query is not a tag or a diaspora ID' do it 'assigns hashes' do - get :index, :q => "Korth" + get :index, params: {q: "Korth"} expect(assigns[:hashes]).not_to be_nil end it 'does not set the background query task' do - get :index, :q => "Korth" + get :index, params: {q: "Korth"} expect(assigns[:background_query]).not_to be_present end @@ -100,29 +100,29 @@ describe PeopleController, :type => :controller do eugene2 = FactoryGirl.create(:person, :profile => FactoryGirl.build(:profile, :first_name => "Eugene", :last_name => "w")) - get :index, :q => "Eug" + get :index, params: {q: "Eug"} expect(assigns[:people].map { |x| x.id }).to match_array([@eugene.id, eugene2.id]) end it "succeeds if there is exactly one match" do - get :index, :q => "Korth" + get :index, params: {q: "Korth"} expect(assigns[:people].length).to eq(1) expect(response).to be_success end it "succeeds if there are no matches" do - get :index, :q => "Korthsauce" + get :index, params: {q: "Korthsauce"} expect(assigns[:people].length).to eq(0) expect(response).to be_success end it 'succeeds if you search for the empty term' do - get :index, :q => '' + get :index, params: {q: ""} expect(response).to be_success end it 'succeeds if you search for punctuation' do - get :index, :q => '+' + get :index, params: {q: "+"} expect(response).to be_success end @@ -130,12 +130,12 @@ describe PeopleController, :type => :controller do eugene2 = FactoryGirl.create(:person, :profile => FactoryGirl.build(:profile, :first_name => "Eugene", :last_name => "w", :searchable => false)) - get :index, :q => "Eug" + get :index, params: {q: "Eug"} expect(assigns[:people]).not_to match_array([eugene2]) end it "doesn't include closed accounts" do - get :index, q: "Closed" + get :index, params: {q: "Closed"} expect(assigns[:people].size).to eq(0) end end @@ -164,7 +164,7 @@ describe PeopleController, :type => :controller do it 'takes time' do expect(Benchmark.realtime { - get :show, :id => @user.person.to_param + get :show, params: {id: @user.person.to_param} }).to be < 1.0 end end @@ -176,44 +176,44 @@ describe PeopleController, :type => :controller do end it "404s if the id is invalid" do - get :show, :id => 'delicious' + get :show, params: {id: "delicious"} expect(response.code).to eq("404") end it "404s if no person is found via id" do - get :show, :id => "3d920397846" + get :show, params: {id: "3d920397846"} expect(response.code).to eq("404") end it "404s if no person is found via username" do - get :show, :username => 'delicious' + get :show, params: {username: "delicious"} expect(response.code).to eq("404") end it "returns a person presenter" do expect(PersonPresenter).to receive(:new).with(@person, @user).and_return(@presenter) - get :show, username: @person.username + get :show, params: {username: @person.username} expect(assigns(:presenter).to_json).to eq(@presenter.to_json) end it 'finds a person via username' do - get :show, username: @person.username + get :show, params: {username: @person.username} expect(assigns(:presenter).to_json).to eq(@presenter.to_json) end it "404s if no person is found via diaspora handle" do - get :show, :username => 'delicious@pod.net' + get :show, params: {username: "delicious@pod.net"} expect(response.code).to eq("404") end it 'finds a person via diaspora handle' do - get :show, username: @person.diaspora_handle + get :show, params: {username: @person.diaspora_handle} expect(assigns(:presenter).to_json).to eq(@presenter.to_json) end it 'redirects home for closed account' do @person = FactoryGirl.create(:person, :closed_account => true) - get :show, :id => @person.to_param + get :show, params: {id: @person.to_param} expect(response).to be_redirect expect(flash[:notice]).not_to be_blank end @@ -222,7 +222,7 @@ describe PeopleController, :type => :controller do user2 = bob profile = user2.profile profile.update_attribute(:first_name, "") - get :show, :id => user2.person.to_param + get :show, params: {id: user2.person.to_param} expect(response).to be_success expect(response.body).not_to include(profile.first_name) end @@ -231,27 +231,27 @@ describe PeopleController, :type => :controller do 16.times do |i| eve.post(:photo, :user_file => uploaded_photo, :to => eve.aspects.first.id, :public => true) end - get :show, :id => eve.person.to_param + get :show, params: {id: eve.person.to_param} expect(response.body).to include ',"photos_count":16' eve.post(:photo, :user_file => uploaded_photo, :to => eve.aspects.first.id, :public => false) - get :show, :id => eve.person.to_param + get :show, params: {id: eve.person.to_param} expect(response.body).to include ',"photos_count":16' # eve is not sharing with alice end context "when the person is the current user" do it "succeeds" do - get :show, :id => @user.person.to_param + get :show, params: {id: @user.person.to_param} expect(response).to be_success end it 'succeeds on the mobile site' do - get :show, :id => @user.person.to_param, :format => :mobile + get :show, params: {id: @user.person.to_param}, format: :mobile expect(response).to be_success end it "assigns the right person" do - get :show, id: @person.to_param + get :show, params: {id: @person.to_param} expect(assigns(:presenter).id).to eq(@presenter.id) end end @@ -263,25 +263,25 @@ describe PeopleController, :type => :controller do end it "succeeds" do - get :show, :id => @person.to_param + get :show, params: {id: @person.to_param} expect(response.status).to eq(200) end it 'succeeds on the mobile site' do - get :show, :id => @person.to_param, :format => :mobile + get :show, params: {id: @person.to_param}, format: :mobile expect(response).to be_success end it 'forces to sign in if the person is remote' do p = FactoryGirl.create(:person) - get :show, :id => p.to_param + get :show, params: {id: p.to_param} expect(response).to be_redirect expect(response).to redirect_to new_user_session_path end it "leaks no private profile info" do - get :show, id: @person.to_param + get :show, params: {id: @person.to_param} expect(response.body).not_to include(@person.profile.bio) end @@ -296,7 +296,7 @@ describe PeopleController, :type => :controller do last_name: {html_attribute: "property", name: "og:profile:last_name"} } - get :show, id: @person.to_param + get :show, params: {id: @person.to_param} methods_properties.each do |method, property| value = presenter.send(method) @@ -313,12 +313,12 @@ describe PeopleController, :type => :controller do end it "succeeds" do - get :show, :id => @person.to_param + get :show, params: {id: @person.to_param} expect(response).to be_success end it 'succeeds on the mobile site' do - get :show, :id => @person.to_param, :format => :mobile + get :show, params: {id: @person.to_param}, format: :mobile expect(response).to be_success end @@ -326,18 +326,18 @@ describe PeopleController, :type => :controller do note = FactoryGirl.create(:notification, :recipient => @user, :target => @person, :unread => true) expect { - get :show, :id => @person.to_param + get :show, params: {id: @person.to_param} note.reload }.to change(Notification.where(:unread => true), :count).by(-1) end it "includes private profile info" do - get :show, id: @person.to_param + get :show, params: {id: @person.to_param} expect(response.body).to include(@person.profile.bio) end it "preloads data using gon for the aspect memberships dropdown" do - get :show, id: @person.to_param + get :show, params: {id: @person.to_param} expect_gon_preloads_for_aspect_membership_dropdown(:person, true) end end @@ -348,22 +348,22 @@ describe PeopleController, :type => :controller do end it "succeeds" do - get :show, :id => @person.to_param + get :show, params: {id: @person.to_param} expect(response).to be_success end it 'succeeds on the mobile site' do - get :show, :id => @person.to_param, :format => :mobile + get :show, params: {id: @person.to_param}, format: :mobile expect(response).to be_success end it "leaks no private profile info" do - get :show, id: @person.to_param + get :show, params: {id: @person.to_param} expect(response.body).not_to include(@person.profile.bio) end it "preloads data using gon for the aspect memberships dropdown" do - get :show, id: @person.to_param + get :show, params: {id: @person.to_param} expect_gon_preloads_for_aspect_membership_dropdown(:person, false) end end @@ -376,7 +376,7 @@ describe PeopleController, :type => :controller do end it "leaks no private profile info" do - get :show, id: @person.to_param + get :show, params: {id: @person.to_param} expect(response.body).not_to include(@person.profile.bio) end end @@ -384,7 +384,7 @@ describe PeopleController, :type => :controller do describe '#stream' do it "redirects non-json requests" do - get :stream, person_id: @user.person.to_param + get :stream, params: {person_id: @user.person.to_param} expect(response).to be_redirect end @@ -395,7 +395,7 @@ describe PeopleController, :type => :controller do @user.post(:status_message, :text => "to all aspects", :to => 'all') @user.post(:status_message, :text => "public", :to => 'all', :public => true) expect(@user.reload.posts.length).to eq(3) - get :stream, person_id: @user.person.to_param, format: :json + get :stream, params: {person_id: @user.person.to_param}, format: :json expect(assigns(:stream).posts.map(&:id)).to match_array(@user.posts.map(&:id)) end @@ -403,7 +403,7 @@ describe PeopleController, :type => :controller do cmmt = 'I mean it' message = @user.post :status_message, :text => 'test more', :to => @aspect.id @user.comment!(message, cmmt) - get :stream, person_id: @user.person.to_param, format: :json + get :stream, params: {person_id: @user.person.to_param}, format: :json expect(response).to be_success expect(response.body).to include(cmmt) end @@ -416,7 +416,7 @@ describe PeopleController, :type => :controller do it "includes reshares" do reshare = @user.post(:reshare, :public => true, :root_guid => FactoryGirl.create(:status_message, :public => true).guid, :to => alice.aspect_ids) - get :stream, person_id: @user.person.to_param, format: :json + get :stream, params: {person_id: @user.person.to_param}, format: :json expect(assigns[:stream].posts.map { |x| x.id }).to include(reshare.id) end @@ -431,7 +431,7 @@ describe PeopleController, :type => :controller do posts_user_can_see << bob.post(:status_message, :text => "public", :to => 'all', :public => true) expect(bob.reload.posts.length).to eq(4) - get :stream, person_id: @person.to_param, format: :json + get :stream, params: {person_id: @person.to_param}, format: :json expect(assigns(:stream).posts.map(&:id)).to match_array(posts_user_can_see.map(&:id)) end end @@ -448,13 +448,13 @@ describe PeopleController, :type => :controller do public_post = eve.post(:status_message, :text => "public", :to => 'all', :public => true) expect(eve.reload.posts.length).to eq(3) - get :stream, person_id: @person.to_param, format: :json + get :stream, params: {person_id: @person.to_param}, format: :json expect(assigns[:stream].posts.map(&:id)).to match_array([public_post].map(&:id)) end it "posts include reshares" do reshare = @user.post(:reshare, :public => true, :root_guid => FactoryGirl.create(:status_message, :public => true).guid, :to => alice.aspect_ids) - get :stream, person_id: @user.person.to_param, format: :json + get :stream, params: {person_id: @user.person.to_param}, format: :json expect(assigns[:stream].posts.map { |x| x.id }).to include(reshare.id) end end @@ -478,17 +478,17 @@ describe PeopleController, :type => :controller do it "posts include reshares" do reshare = @user.post(:reshare, :public => true, :root_guid => FactoryGirl.create(:status_message, :public => true).guid, :to => alice.aspect_ids) - get :stream, person_id: @user.person.to_param, format: :json + get :stream, params: {person_id: @user.person.to_param}, format: :json expect(assigns[:stream].posts.map { |x| x.id }).to include(reshare.id) end it "assigns only public posts" do - get :stream, person_id: @person.to_param, format: :json + get :stream, params: {person_id: @person.to_param}, format: :json expect(assigns[:stream].posts.map(&:id)).to match_array(@public_posts.map(&:id)) end it 'is sorted by created_at desc' do - get :stream, person_id: @person.to_param, format: :json + get :stream, params: {person_id: @person.to_param}, format: :json expect(assigns[:stream].stream_posts).to eq(@public_posts.sort_by { |p| p.created_at }.reverse) end end @@ -503,19 +503,19 @@ describe PeopleController, :type => :controller do end it 'redirects html requests' do - get :hovercard, :person_id => @hover_test.guid + get :hovercard, params: {person_id: @hover_test.guid} expect(response).to redirect_to person_path(:id => @hover_test.guid) end it 'returns json with profile stuff' do - get :hovercard, :person_id => @hover_test.guid, :format => 'json' + get :hovercard, params: {person_id: @hover_test.guid}, format: :json expect(JSON.parse(response.body)["diaspora_id"]).to eq(@hover_test.diaspora_handle) end it "returns contact when sharing" do alice.share_with(@hover_test, alice.aspects.first) expect(@controller).to receive(:current_user).at_least(:once).and_return(alice) - get :hovercard, person_id: @hover_test.guid, format: "json" + get :hovercard, params: {person_id: @hover_test.guid}, format: :json expect(JSON.parse(response.body)["contact"]).not_to be_falsy end @@ -525,13 +525,13 @@ describe PeopleController, :type => :controller do end it "succeeds with local person" do - get :hovercard, person_id: bob.person.guid, format: :json + get :hovercard, params: {person_id: bob.person.guid}, format: :json expect(response.status).to eq(200) expect(JSON.parse(response.body)["diaspora_id"]).to eq(bob.diaspora_handle) end it "succeeds with remote person" do - get :hovercard, person_id: remote_raphael.guid, format: :json + get :hovercard, params: {person_id: remote_raphael.guid}, format: :json expect(response.status).to eq(200) expect(JSON.parse(response.body)["diaspora_id"]).to eq(remote_raphael.diaspora_handle) end @@ -557,22 +557,22 @@ describe PeopleController, :type => :controller do describe "via json" do it "returns no data when a search fails" do - get :refresh_search, q: "weweweKorth", format: "json" + get :refresh_search, params: {q: "weweweKorth"}, format: :json expect(response.body).to eq({search_html: "", contacts: nil}.to_json) end it "returns no data unless a fully composed name is sent" do - get :refresh_search, q: "Korth" + get :refresh_search, params: {q: "Korth"} expect(response.body).to eq({search_html: "", contacts: nil}.to_json) end it "returns with a found name" do - get :refresh_search, q: @korth.diaspora_handle + get :refresh_search, params: {q: @korth.diaspora_handle} expect(JSON.parse(response.body)["contacts"].size).to eq(1) end it "doesn't include closed accounts" do - get :refresh_search, q: @closed.diaspora_handle + get :refresh_search, params: {q: @closed.diaspora_handle} expect(JSON.parse(response.body)["contacts"]).to be_nil end end @@ -583,13 +583,13 @@ describe PeopleController, :type => :controller do it 'assigns the contacts of a person' do contact = alice.contact_for(bob.person) contacts = contact.contacts - get :contacts, :person_id => bob.person.to_param + get :contacts, params: {person_id: bob.person.to_param} expect(assigns(:contacts_of_contact).to_a).to eq(contacts.to_a) expect(response).to be_success end it 'shows an error when invalid person id' do - get :contacts, :person_id => 'foo' + get :contacts, params: {person_id: "foo"} expect(flash[:error]).to be_present expect(response).to redirect_to people_path end @@ -598,16 +598,16 @@ describe PeopleController, :type => :controller do 16.times do |i| eve.post(:photo, :user_file => uploaded_photo, :to => eve.aspects.first.id, :public => true) end - get :contacts, :person_id => eve.person.to_param + get :contacts, params: {person_id: eve.person.to_param} expect(response.body).to include ',"photos_count":16' eve.post(:photo, :user_file => uploaded_photo, :to => eve.aspects.first.id, :public => false) - get :contacts, :person_id => eve.person.to_param + get :contacts, params: {person_id: eve.person.to_param} expect(response.body).to include ',"photos_count":16' # eve is not sharing with alice end it "returns a 406 for json format" do - get :contacts, person_id: "foo", format: :json + get :contacts, params: {person_id: "foo"}, format: :json expect(response.code).to eq("406") end end diff --git a/spec/controllers/photos_controller_spec.rb b/spec/controllers/photos_controller_spec.rb index 9b76fffe5..d323ba87b 100644 --- a/spec/controllers/photos_controller_spec.rb +++ b/spec/controllers/photos_controller_spec.rb @@ -24,18 +24,18 @@ describe PhotosController, :type => :controller do it 'accepts a photo from a regular form submission' do expect { - post :create, @params + post :create, params: @params }.to change(Photo, :count).by(1) end it 'returns application/json when possible' do request.env['HTTP_ACCEPT'] = 'application/json' - expect(post(:create, @params).headers['Content-Type']).to match 'application/json.*' + expect(post(:create, params: @params).headers["Content-Type"]).to match "application/json.*" end it 'returns text/html by default' do request.env['HTTP_ACCEPT'] = 'text/html,*/*' - expect(post(:create, @params).headers['Content-Type']).to match 'text/html.*' + expect(post(:create, params: @params).headers["Content-Type"]).to match "text/html.*" end end @@ -47,57 +47,57 @@ describe PhotosController, :type => :controller do it "creates a photo" do expect { - post :create, @params + post :create, params: @params }.to change(Photo, :count).by(1) end it "doesn't allow mass assignment of person" do new_user = FactoryGirl.create(:user) @params[:photo][:author] = new_user - post :create, @params + post :create, params: @params expect(Photo.last.author).to eq(alice.person) end it "doesn't allow mass assignment of person_id" do new_user = FactoryGirl.create(:user) @params[:photo][:author_id] = new_user.id - post :create, @params + post :create, params: @params expect(Photo.last.author).to eq(alice.person) end it 'can set the photo as the profile photo' do old_url = alice.person.profile.image_url @params[:photo][:set_profile_photo] = true - post :create, @params + post :create, params: @params expect(alice.reload.person.profile.image_url).not_to eq(old_url) end end describe '#index' do it "succeeds without any available pictures" do - get :index, :person_id => FactoryGirl.create(:person).guid.to_s + get :index, params: {person_id: FactoryGirl.create(:person).guid} expect(response).to be_success end it "succeeds on mobile devices without any available pictures" do - get :index, format: :mobile, person_id: FactoryGirl.create(:person).guid.to_s + get :index, params: {person_id: FactoryGirl.create(:person).guid}, format: :mobile expect(response).to be_success end it "succeeds on mobile devices with available pictures" do - get :index, format: :mobile, person_id: bob.person.guid.to_s + get :index, params: {person_id: bob.person.guid}, format: :mobile expect(response).to be_success end it "displays the logged in user's pictures" do - get :index, :person_id => alice.person.guid.to_s + get :index, params: {person_id: alice.person.guid} expect(assigns[:person]).to eq(alice.person) expect(assigns[:posts]).to eq([@alices_photo]) end it "displays another person's pictures" do - get :index, :person_id => bob.person.guid.to_s + get :index, params: {person_id: bob.person.guid} expect(assigns[:person]).to eq(bob.person) expect(assigns[:posts]).to eq([@bobs_photo]) end @@ -106,25 +106,24 @@ describe PhotosController, :type => :controller do 16.times do |i| eve.post(:photo, :user_file => uploaded_photo, :to => eve.aspects.first.id, :public => true) end - get :index, :person_id => eve.person.to_param + get :index, params: {person_id: eve.person.to_param} expect(response.body).to include ',"photos_count":16' eve.post(:photo, :user_file => uploaded_photo, :to => eve.aspects.first.id, :public => false) - get :index, :person_id => eve.person.to_param + get :index, params: {person_id: eve.person.to_param} expect(response.body).to include ',"photos_count":16' # eve is not sharing with alice end it "returns json when requested" do request.env['HTTP_ACCEPT'] = 'application/json' - get :index, :person_id => alice.person.guid.to_s + get :index, params: {person_id: alice.person.guid} expect(response.headers['Content-Type']).to match 'application/json.*' end it 'displays by date of creation' do max_time = bob.photos.first.created_at - 1.day - get :index, person_id: bob.person.guid.to_s, - max_time: max_time.to_i + get :index, params: {person_id: bob.person.guid, max_time: max_time.to_i} expect(assigns[:posts]).to be_empty end @@ -136,19 +135,19 @@ describe PhotosController, :type => :controller do end it "succeeds" do - get :index, person_id: @person.to_param + get :index, params: {person_id: @person.to_param} expect(response.status).to eq(200) end it "succeeds on the mobile site" do - get :index, person_id: @person.to_param, format: :mobile + get :index, params: {person_id: @person.to_param}, format: :mobile expect(response).to be_success end it "forces to sign in if the person is remote" do p = FactoryGirl.create(:person) - get :index, person_id: p.to_param + get :index, params: {person_id: p.to_param} expect(response).to be_redirect expect(response).to redirect_to new_user_session_path end @@ -157,16 +156,16 @@ describe PhotosController, :type => :controller do 16.times do eve.post(:photo, user_file: uploaded_photo, to: eve.aspects.first.id, public: true) end - get :index, person_id: eve.person.to_param + get :index, params: {person_id: eve.person.to_param} expect(response.body).to include ',"photos_count":16' eve.post(:photo, user_file: uploaded_photo, to: eve.aspects.first.id, public: false) - get :index, person_id: eve.person.to_param + get :index, params: {person_id: eve.person.to_param} expect(response.body).to include ',"photos_count":16' end it "displays a person's pictures" do - get :index, person_id: bob.person.guid.to_s + get :index, params: {person_id: bob.person.guid} expect(assigns[:person]).to eq(bob.person) expect(assigns[:posts]).to eq([@bobs_photo]) end @@ -175,42 +174,42 @@ describe PhotosController, :type => :controller do describe '#destroy' do it 'let a user delete his message' do - delete :destroy, :id => @alices_photo.id + delete :destroy, params: {id: @alices_photo.id} expect(Photo.find_by_id(@alices_photo.id)).to be_nil end it 'will let you delete your profile picture' do - xhr :get, :make_profile_photo, :photo_id => @alices_photo.id, :format => :js - delete :destroy, :id => @alices_photo.id + get :make_profile_photo, params: {photo_id: @alices_photo.id}, xhr: true, format: :js + delete :destroy, params: {id: @alices_photo.id}, format: :json expect(Photo.find_by_id(@alices_photo.id)).to be_nil end it 'sends a retraction on delete' do allow(@controller).to receive(:current_user).and_return(alice) expect(alice).to receive(:retract).with(@alices_photo) - delete :destroy, :id => @alices_photo.id + delete :destroy, params: {id: @alices_photo.id} end it 'will not let you destroy posts visible to you' do - delete :destroy, :id => @bobs_photo.id + delete :destroy, params: {id: @bobs_photo.id} expect(Photo.find_by_id(@bobs_photo.id)).to be_truthy end it 'will not let you destroy posts you do not own' do eves_photo = eve.post(:photo, :user_file => uploaded_photo, :to => eve.aspects.first.id, :public => true) - delete :destroy, :id => eves_photo.id + delete :destroy, params: {id: eves_photo.id} expect(Photo.find_by_id(eves_photo.id)).to be_truthy end end describe "#make_profile_photo" do it 'should return a 201 on a js success' do - xhr :get, :make_profile_photo, :photo_id => @alices_photo.id, :format => 'js' + get :make_profile_photo, params: {photo_id: @alices_photo.id}, xhr: true, format: :js expect(response.code).to eq("201") end it 'should return a 422 on failure' do - get :make_profile_photo, :photo_id => @bobs_photo.id + get :make_profile_photo, params: {photo_id: @bobs_photo.id} expect(response.code).to eq("422") end end @@ -218,19 +217,19 @@ describe PhotosController, :type => :controller do describe "#show" do it 'should return 404 for nonexistent stuff on mobile devices' do expect { - get :show, :person_id => bob.person.guid, :id => 772831, :format => 'mobile' + get :show, params: {person_id: bob.person.guid, id: 772_831}, format: :mobile }.to raise_error ActiveRecord::RecordNotFound end it 'should return 200 for existing stuff on mobile devices' do - get :show, :person_id => alice.person.guid, :id => @alices_photo.id, :format => 'mobile' + get :show, params: {person_id: alice.person.guid, id: @alices_photo.id}, format: :mobile expect(response).to be_success end it "doesn't leak private photos to the public" do sign_out :user expect { - get :show, :person_id => alice.person.guid, :id => @alices_photo.id, :format => 'mobile' + get :show, params: {person_id: alice.person.guid, id: @alices_photo.id}, format: :mobile }.to raise_error ActiveRecord::RecordNotFound end end diff --git a/spec/controllers/posts_controller_spec.rb b/spec/controllers/posts_controller_spec.rb index efbc1d8dd..28216a97e 100644 --- a/spec/controllers/posts_controller_spec.rb +++ b/spec/controllers/posts_controller_spec.rb @@ -16,7 +16,7 @@ describe PostsController, type: :controller do it "succeeds" do expect_any_instance_of(PostService).to receive(:mark_user_notifications).with(post.id) - get :show, id: post.id + get :show, params: {id: post.id} expect(response).to be_success end @@ -29,12 +29,12 @@ describe PostsController, type: :controller do expect(msg.mentioned_people.count).to eq(1) user.destroy - get :show, id: msg.id + get :show, params: {id: msg.id} expect(response).to be_success end it "renders the application layout on mobile" do - get :show, id: post.id, format: :mobile + get :show, params: {id: post.id}, format: :mobile expect(response).to render_template("layouts/application") end @@ -42,7 +42,7 @@ describe PostsController, type: :controller do reshare_id = FactoryGirl.create(:reshare, author: alice.person).id expect_any_instance_of(PostService).to receive(:mark_user_notifications).with(reshare_id) - get :show, id: reshare_id, format: :mobile + get :show, params: {id: reshare_id}, format: :mobile expect(response).to be_success end end @@ -54,7 +54,7 @@ describe PostsController, type: :controller do it "returns a 404" do expect { - get :show, id: post.id + get :show, params: {id: post.id} }.to raise_error ActiveRecord::RecordNotFound end end @@ -66,13 +66,13 @@ describe PostsController, type: :controller do let(:public_with_tags) { alice.post(:status_message, text: "#hi #howareyou", public: true) } it "shows a public post" do - get :show, id: public.id + get :show, params: {id: public.id} expect(response.body).to match "hello" end it "succeeds for statusnet" do @request.env["HTTP_ACCEPT"] = "application/html+xml,text/html" - get :show, id: public.id + get :show, params: {id: public.id} expect(response.body).to match "hello" end @@ -88,7 +88,7 @@ describe PostsController, type: :controller do author_name: {html_attribute: "property", name: "og:article:author"} } - get :show, id: public.id, format: :html + get :show, params: {id: public.id}, format: :html methods_properties.each do |method, property| value = presenter.send(method) @@ -99,7 +99,7 @@ describe PostsController, type: :controller do end it "includes the correct multiple meta tags" do - get :show, id: public_with_tags.id, format: :html + get :show, params: {id: public_with_tags.id}, format: :html expect(response.body).to include('') expect(response.body).to include('') @@ -108,7 +108,7 @@ describe PostsController, type: :controller do context "given a limited post" do it "forces the user to sign" do - get :show, id: post.id + get :show, params: {id: post.id} expect(response).to be_redirect expect(response).to redirect_to new_user_session_path end @@ -119,12 +119,12 @@ describe PostsController, type: :controller do describe "oembed" do it "works when you can see it" do sign_in alice - get :oembed, url: "/posts/#{post.id}" + get :oembed, params: {url: "/posts/#{post.id}"} expect(response.body).to match /iframe/ end it "returns a 404 response when the post is not found" do - get :oembed, url: "/posts/#{post.id}" + get :oembed, params: {url: "/posts/#{post.id}"} expect(response.status).to eq(404) end end @@ -132,13 +132,13 @@ describe PostsController, type: :controller do describe "#interactions" do context "user not signed in" do it "returns a 401 for private posts and format json" do - get :interactions, id: post.id, format: :json + get :interactions, params: {id: post.id}, format: :json expect(response.status).to eq(401) expect(JSON.parse(response.body)["error"]).to eq(I18n.t("devise.failure.unauthenticated")) end it "returns a 406 for private posts and format html" do - get :interactions, id: post.id + get :interactions, params: {id: post.id} expect(response.status).to eq(406) end end @@ -149,13 +149,13 @@ describe PostsController, type: :controller do end it "shows interactions of a post as json" do - get :interactions, id: post.id, format: :json + get :interactions, params: {id: post.id}, format: :json expect(response.body).to eq(PostInteractionPresenter.new(post, alice).to_json) end it "returns a 406 for format html" do sign_in alice - get :interactions, id: post.id + get :interactions, params: {id: post.id} expect(response.status).to eq(406) end end @@ -168,12 +168,12 @@ describe PostsController, type: :controller do end it "returns status 204 without a :q parameter" do - get :mentionable, id: post.id, format: :json + get :mentionable, params: {id: post.id}, format: :json expect(response.status).to eq(204) end it "responses status 406 (not acceptable) on html request" do - get :mentionable, id: post.id, q: "whatever", format: :html + get :mentionable, params: {id: post.id, q: "whatever"}, format: :html expect(response.status).to eq(406) end @@ -181,13 +181,13 @@ describe PostsController, type: :controller do expect(post_service).to receive(:find!) do raise ActiveRecord::RecordNotFound end - get :mentionable, id: post.id, q: "whatever", format: :json + get :mentionable, params: {id: post.id, q: "whatever"}, format: :json expect(response.status).to eq(404) end it "calls PostService#mentionable_in_comment and passes the result as a response" do expect(post_service).to receive(:mentionable_in_comment).with(post.id.to_s, "whatever").and_return([bob.person]) - get :mentionable, id: post.id, q: "whatever", format: :json + get :mentionable, params: {id: post.id, q: "whatever"}, format: :json expect(response.status).to eq(200) expect(response.body).to eq([bob.person].to_json) end @@ -196,7 +196,7 @@ describe PostsController, type: :controller do context "without a user signed in" do it "returns 401" do allow(post_service).to receive(:mentionable_in_comment).and_return([]) - get :mentionable, id: post.id, q: "whatever", format: :json + get :mentionable, params: {id: post.id, q: "whatever"}, format: :json expect(response.status).to eq(401) expect(JSON.parse(response.body)["error"]).to eq(I18n.t("devise.failure.unauthenticated")) end @@ -212,12 +212,12 @@ describe PostsController, type: :controller do it "works when it is your post" do expect_any_instance_of(PostService).to receive(:destroy).with(post.id.to_s) - delete :destroy, format: :json, id: post.id + delete :destroy, params: {id: post.id}, format: :json expect(response.status).to eq(204) end it "redirects to stream on mobile" do - delete :destroy, format: :mobile, id: post.id + delete :destroy, params: {id: post.id}, format: :mobile expect(response).to be_redirect expect(response).to redirect_to stream_path end @@ -227,7 +227,7 @@ describe PostsController, type: :controller do it "will respond with a 403" do sign_in bob, scope: :user - delete :destroy, format: :json, id: post.id + delete :destroy, params: {id: post.id}, format: :json expect(response.body).to eq("You are not allowed to do that") expect(response.status).to eq(403) end @@ -236,7 +236,7 @@ describe PostsController, type: :controller do sign_in eve, scope: :user expect { - delete :destroy, format: :json, id: post.id + delete :destroy, params: {id: post.id}, format: :json }.to raise_error ActiveRecord::RecordNotFound end end diff --git a/spec/controllers/profiles_controller_spec.rb b/spec/controllers/profiles_controller_spec.rb index 9a6a47e8e..802d4b0e6 100644 --- a/spec/controllers/profiles_controller_spec.rb +++ b/spec/controllers/profiles_controller_spec.rb @@ -15,7 +15,7 @@ describe ProfilesController, :type => :controller do expect(Person).to receive(:find_by_guid!).with("12345").and_return(mock_person) expect(PersonPresenter).to receive(:new).with(mock_person, eve).and_return(mock_presenter) - get :show, :id => 12345, :format => :json + get :show, params: {id: 12_345}, format: :json expect(response.body).to eq({:rock_star => "Jamie Cai"}.to_json) end end @@ -44,17 +44,19 @@ describe ProfilesController, :type => :controller do describe '#update' do it "sets the flash" do - put :update, :profile => { - :image_url => "", - :first_name => "Will", - :last_name => "Smith" + put :update, params: { + profile: { + image_url: "", + first_name: "Will", + last_name: "Smith" } + } expect(flash[:notice]).not_to be_blank end it "sets nsfw" do expect(eve.person(true).profile.nsfw).to eq(false) - put :update, :profile => { :id => eve.person.id, :nsfw => "1" } + put :update, params: {profile: {id: eve.person.id, nsfw: "1"}} expect(eve.person(true).profile.nsfw).to eq(true) end @@ -63,7 +65,7 @@ describe ProfilesController, :type => :controller do eve.person.profile.save expect(eve.person(true).profile.nsfw).to eq(true) - put :update, :profile => { :id => eve.person.id } + put :update, params: {profile: {id: eve.person.id}} expect(eve.person(true).profile.nsfw).to eq(false) end @@ -72,7 +74,7 @@ describe ProfilesController, :type => :controller do :tags => '#apples #oranges', :profile => {:tag_string => ''} } - put :update, params + put :update, params: params expect(eve.person(true).profile.tag_list.to_set).to eq(['apples', 'oranges'].to_set) end @@ -81,7 +83,7 @@ describe ProfilesController, :type => :controller do :tags => ',#apples,#oranges,', :profile => {:tag_string => '#pears'} } - put :update, params + put :update, params: params expect(eve.person(true).profile.tag_list.to_set).to eq(['apples', 'oranges', 'pears'].to_set) end @@ -90,7 +92,7 @@ describe ProfilesController, :type => :controller do :tags => ',#apples,#oranges,', :profile => {:tag_string => 'bananas'} } - put :update, params + put :update, params: params expect(eve.person(true).profile.tag_list.to_set).to eq(['apples', 'oranges', 'bananas'].to_set) end @@ -102,7 +104,7 @@ describe ProfilesController, :type => :controller do :month => '02', :day => '28' } } } - put :update, params + put :update, params: params expect(eve.person(true).profile.birthday.year).to eq(2001) expect(eve.person(true).profile.birthday.month).to eq(2) expect(eve.person(true).profile.birthday.day).to eq(28) @@ -116,7 +118,7 @@ describe ProfilesController, :type => :controller do :month => '02', :day => '31' } } } - put :update, params + put :update, params: params expect(flash[:error]).not_to be_blank end @@ -134,7 +136,7 @@ describe ProfilesController, :type => :controller do it "doesn't overwrite the profile photo when an empty string is passed in" do image_url = eve.person.profile.image_url - put :update, @params + put :update, params: @params expect(Person.find(eve.person.id).profile.image_url).to eq(image_url) end @@ -150,12 +152,12 @@ describe ProfilesController, :type => :controller do it 'person_id' do person = eve.person profile = person.profile - put :update, @profile_params + put :update, params: @profile_params expect(profile.reload.person_id).to eq(person.id) end it 'diaspora handle' do - put :update, @profile_params + put :update, params: @profile_params expect(Person.find(eve.person.id).profile[:diaspora_handle]).not_to eq('abc@a.com') end end diff --git a/spec/controllers/registrations_controller_spec.rb b/spec/controllers/registrations_controller_spec.rb index d39edb683..91cf4603d 100644 --- a/spec/controllers/registrations_controller_spec.rb +++ b/spec/controllers/registrations_controller_spec.rb @@ -30,19 +30,19 @@ describe RegistrationsController, type: :controller do end it "redirects #create to the login page" do - post :create, valid_params + post :create, params: valid_params expect(flash[:error]).to eq(I18n.t("registrations.closed")) expect(response).to redirect_to new_user_session_path end it "does not redirect if there is a valid invite token" do code = InvitationCode.create(user: bob) - get :new, invite: {token: code.token} + get :new, params: {invite: {token: code.token}} expect(response).not_to be_redirect end it "does redirect if there is an invalid invite token" do - get :new, invite: {token: "fssdfsd"} + get :new, params: {invite: {token: "fssdfsd"}} expect(response).to redirect_to new_user_session_path end @@ -50,7 +50,7 @@ describe RegistrationsController, type: :controller do code = InvitationCode.create(user: bob) code.update_attributes(count: 0) - get :new, invite: {token: code.token} + get :new, params: {invite: {token: code.token}} expect(response).to redirect_to new_user_session_path end @@ -58,7 +58,7 @@ describe RegistrationsController, type: :controller do code = InvitationCode.create(user: bob) AppConfig.settings.invitations.open = false - get :new, invite: {token: code.token} + get :new, params: {invite: {token: code.token}} expect(response).to redirect_to new_user_session_path end @@ -68,7 +68,7 @@ describe RegistrationsController, type: :controller do code = InvitationCode.create(user: bob) code.update_attributes(count: 0) - get :new, invite: {token: code.token} + get :new, params: {invite: {token: code.token}} expect(response).not_to be_redirect end end @@ -79,22 +79,22 @@ describe RegistrationsController, type: :controller do context "with valid parameters" do it "creates a user" do expect { - get :create, valid_params + get :create, params: valid_params }.to change(User, :count).by(1) end it "assigns @user" do - get :create, valid_params + get :create, params: valid_params expect(assigns(:user)).to be_truthy end it "sets the flash" do - get :create, valid_params + get :create, params: valid_params expect(flash[:notice]).not_to be_blank end it "redirects to the home path" do - get :create, valid_params + get :create, params: valid_params expect(response).to be_redirect expect(response.location).to match(/^#{getting_started_url}$/) end @@ -106,7 +106,7 @@ describe RegistrationsController, type: :controller do code = InvitationCode.create(user: bob) expect { - get :create, valid_params.merge(invite: {token: code.token}) + get :create, params: valid_params.merge(invite: {token: code.token}) }.to change { code.reload.count }.by(-1) end @@ -114,14 +114,14 @@ describe RegistrationsController, type: :controller do code = InvitationCode.create(user: bob) expect { - get :create, valid_params.merge(invite: {token: code.token}) + get :create, params: valid_params.merge(invite: {token: code.token}) }.not_to change { code.reload.count } end it "links inviter with the user" do code = InvitationCode.create(user: bob) - post :create, valid_params.merge(invite: {token: code.token}) + post :create, params: valid_params.merge(invite: {token: code.token}) expect(User.find_by(username: "jdoe").invited_by).to eq(bob) end @@ -132,20 +132,20 @@ describe RegistrationsController, type: :controller do let(:invalid_params) { valid_params.deep_merge(user: {password_confirmation: "baddword"}) } it "does not create a user" do - expect { get :create, invalid_params }.not_to change(User, :count) + expect { get :create, params: invalid_params }.not_to change(User, :count) end it "does not create a person" do - expect { get :create, invalid_params }.not_to change(Person, :count) + expect { get :create, params: invalid_params }.not_to change(Person, :count) end it "assigns @user" do - get :create, invalid_params + get :create, params: invalid_params expect(assigns(:user)).not_to be_nil end it "sets the flash error" do - get :create, invalid_params + get :create, params: invalid_params expect(flash[:error]).not_to be_blank end @@ -155,17 +155,17 @@ describe RegistrationsController, type: :controller do code = InvitationCode.create(user: bob) expect { - get :create, invalid_params.merge(invite: {token: code.token}) + get :create, params: invalid_params.merge(invite: {token: code.token}) }.not_to change { code.reload.count } end it "renders new" do - get :create, invalid_params + get :create, params: invalid_params expect(response).to render_template("registrations/new") end it "keeps invalid params in form" do - get :create, invalid_params + get :create, params: invalid_params expect(response.body).to match /jdoe@example.com/m end end diff --git a/spec/controllers/report_controller_spec.rb b/spec/controllers/report_controller_spec.rb index bb049243c..176a1d4f8 100644 --- a/spec/controllers/report_controller_spec.rb +++ b/spec/controllers/report_controller_spec.rb @@ -46,14 +46,14 @@ describe ReportController, type: :controller do context "report offensive post" do it "succeeds" do - put :create, report: {item_id: @message.id, item_type: "Post", text: "offensive content"} + put :create, params: {report: {item_id: @message.id, item_type: "Post", text: "offensive content"}} expect(response.status).to eq(200) expect(Report.exists?(item_id: @message.id, item_type: "Post")).to be true end end context "report offensive comment" do it "succeeds" do - put :create, report: {item_id: @comment.id, item_type: "Comment", text: "offensive content"} + put :create, params: {report: {item_id: @comment.id, item_type: "Comment", text: "offensive content"}} expect(response.status).to eq(200) expect(Report.exists?(item_id: @comment.id, item_type: "Comment")).to be true end @@ -63,14 +63,14 @@ describe ReportController, type: :controller do describe "#update" do context "mark post report as user" do it "is behind redirect_unless_admin_or_moderator" do - put :update, id: @message.id, type: "post" + put :update, params: {id: @message.id, type: "post"} expect(response).to redirect_to stream_path expect(Report.where(reviewed: false, item_id: @message.id, item_type: "Post")).to be_truthy end end context "mark comment report as user" do it "is behind redirect_unless_admin_or_moderator" do - put :update, id: @comment.id, type: "comment" + put :update, params: {id: @comment.id, type: "comment"} expect(response).to redirect_to stream_path expect(Report.where(reviewed: false, item_id: @comment.id, item_type: "Comment")).to be_truthy end @@ -81,7 +81,7 @@ describe ReportController, type: :controller do Role.add_admin(alice.person) end it "succeeds" do - put :update, id: @message.id, type: "post" + put :update, params: {id: @message.id, type: "post"} expect(response.status).to eq(302) expect(Report.where(reviewed: true, item_id: @message.id, item_type: "Post")).to be_truthy end @@ -91,7 +91,7 @@ describe ReportController, type: :controller do Role.add_admin(alice.person) end it "succeeds" do - put :update, id: @comment.id, type: "comment" + put :update, params: {id: @comment.id, type: "comment"} expect(response.status).to eq(302) expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "Comment")).to be_truthy end @@ -103,7 +103,7 @@ describe ReportController, type: :controller do end it "succeeds" do - put :update, id: @message.id, type: "post" + put :update, params: {id: @message.id, type: "post"} expect(response.status).to eq(302) expect(Report.where(reviewed: true, item_id: @message.id, item_type: "Post")).to be_truthy end @@ -114,7 +114,7 @@ describe ReportController, type: :controller do Role.add_moderator(alice.person) end it "succeeds" do - put :update, id: @comment.id, type: "comment" + put :update, params: {id: @comment.id, type: "comment"} expect(response.status).to eq(302) expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "Comment")).to be_truthy end @@ -124,14 +124,14 @@ describe ReportController, type: :controller do describe "#destroy" do context "destroy post as user" do it "is behind redirect_unless_admin_or_moderator" do - delete :destroy, id: @message.id, type: "post" + delete :destroy, params: {id: @message.id, type: "post"} expect(response).to redirect_to stream_path expect(Report.where(reviewed: false, item_id: @message.id, item_type: "Post")).to be_truthy end end context "destroy comment as user" do it "is behind redirect_unless_admin_or_moderator" do - delete :destroy, id: @comment.id, type: "comment" + delete :destroy, params: {id: @comment.id, type: "comment"} expect(response).to redirect_to stream_path expect(Report.where(reviewed: false, item_id: @comment.id, item_type: "Comment")).to be_truthy end @@ -142,7 +142,7 @@ describe ReportController, type: :controller do Role.add_admin(alice.person) end it "succeeds" do - delete :destroy, id: @message.id, type: "post" + delete :destroy, params: {id: @message.id, type: "post"} expect(response.status).to eq(302) expect(Report.where(reviewed: true, item_id: @message.id, item_type: "Post")).to be_truthy end @@ -152,7 +152,7 @@ describe ReportController, type: :controller do Role.add_admin(alice.person) end it "succeeds" do - delete :destroy, id: @comment.id, type: "comment" + delete :destroy, params: {id: @comment.id, type: "comment"} expect(response.status).to eq(302) expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "Comment")).to be_truthy end @@ -163,7 +163,7 @@ describe ReportController, type: :controller do Role.add_moderator(alice.person) end it "succeeds" do - delete :destroy, id: @message.id, type: "post" + delete :destroy, params: {id: @message.id, type: "post"} expect(response.status).to eq(302) expect(Report.where(reviewed: true, item_id: @message.id, item_type: "Post")).to be_truthy end @@ -173,7 +173,7 @@ describe ReportController, type: :controller do Role.add_moderator(alice.person) end it "succeeds" do - delete :destroy, id: @comment.id, type: "comment" + delete :destroy, params: {id: @comment.id, type: "comment"} expect(response.status).to eq(302) expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "Comment")).to be_truthy end diff --git a/spec/controllers/reshares_controller_spec.rb b/spec/controllers/reshares_controller_spec.rb index 38a65b94e..4682baa23 100644 --- a/spec/controllers/reshares_controller_spec.rb +++ b/spec/controllers/reshares_controller_spec.rb @@ -1,7 +1,7 @@ describe ResharesController, :type => :controller do describe '#create' do let(:post_request!) { - post :create, :format => :json, :root_guid => @post_guid + post :create, params: {root_guid: @post_guid}, format: :json } before do @@ -74,13 +74,13 @@ describe ResharesController, :type => :controller do it "returns a 404 for a post not visible to the user" do sign_in(eve, scope: :user) expect { - get :index, post_id: @post.id, format: :json + get :index, params: {post_id: @post.id}, format: :json }.to raise_error(ActiveRecord::RecordNotFound) end it "returns an empty array for a post visible to the user" do sign_in(bob, scope: :user) - get :index, post_id: @post.id, format: :json + get :index, params: {post_id: @post.id}, format: :json expect(JSON.parse(response.body)).to eq([]) end end @@ -93,12 +93,12 @@ describe ResharesController, :type => :controller do it "returns an array of reshares for a post" do bob.reshare!(@post) - get :index, post_id: @post.id, format: :json + get :index, params: {post_id: @post.id}, format: :json expect(JSON.parse(response.body).map {|h| h["id"] }).to eq(@post.reshares.map(&:id)) end it "returns an empty array for a post with no reshares" do - get :index, post_id: @post.id, format: :json + get :index, params: {post_id: @post.id}, format: :json expect(JSON.parse(response.body)).to eq([]) end end diff --git a/spec/controllers/search_controller_spec.rb b/spec/controllers/search_controller_spec.rb index ab90b253b..655cb86d4 100644 --- a/spec/controllers/search_controller_spec.rb +++ b/spec/controllers/search_controller_spec.rb @@ -7,7 +7,7 @@ describe SearchController, :type => :controller do describe 'query is a person' do it 'goes to people index page' do - get :search, :q => 'eugene' + get :search, params: {q: "eugene"} expect(response).to be_redirect end end @@ -15,17 +15,17 @@ describe SearchController, :type => :controller do describe 'query is a tag' do it 'goes to a tag page' do - get :search, :q => '#cats' + get :search, params: {q: "#cats"} expect(response).to redirect_to(tag_path('cats')) end it 'removes dots from the query' do - get :search, :q => '#cat.s' + get :search, params: {q: "#cat.s"} expect(response).to redirect_to(tag_path('cats')) end it 'stay on the page if you search for the empty hash' do - get :search, :q => '#' + get :search, params: {q: "#"} expect(flash[:error]).to be_present end end diff --git a/spec/controllers/services_controller_spec.rb b/spec/controllers/services_controller_spec.rb index 75cff3391..9ad8e36aa 100644 --- a/spec/controllers/services_controller_spec.rb +++ b/spec/controllers/services_controller_spec.rb @@ -35,12 +35,12 @@ describe ServicesController, :type => :controller do it 'creates a new service and associates it with the current user' do expect { - post :create, :provider => 'facebook' + post :create, params: {provider: "facebook"} }.to change(user.services, :count).by(1) end it 'saves the provider' do - post :create, :provider => 'facebook' + post :create, params: {provider: "facebook"} expect(user.reload.services.first.class.name).to eq("Services::Facebook") end @@ -49,7 +49,7 @@ describe ServicesController, :type => :controller do it "imports the profile photo from the service" do expect(Workers::FetchProfilePhoto).to receive(:perform_async) - post :create, :provider => 'facebook' + post :create, params: {provider: "facebook"} end end @@ -58,12 +58,12 @@ describe ServicesController, :type => :controller do it 'doesnt create a new service' do service_count = Service.count - post :create, :provider => 'twitter' + post :create, params: {provider: "twitter"} expect(Service.count).to eq(service_count) end it 'flashes an already_authorized error with the diaspora handle for the user' do - post :create, :provider => 'twitter' + post :create, params: {provider: "twitter"} expect(flash[:error].include?(user.profile.diaspora_handle)).to be true expect(flash[:error].include?( 'already authorized' )).to be true end @@ -84,12 +84,12 @@ describe ServicesController, :type => :controller do it 'doesnt create a new service' do service_count = Service.count - post :create, :provider => 'twitter' + post :create, params: {provider: "twitter"} expect(Service.count).to eq(service_count) end it 'flashes an read-only access error' do - post :create, :provider => 'twitter' + post :create, params: {provider: "twitter"} expect(flash[:error].include?( 'Access level is read-only' )).to be true end end @@ -103,7 +103,7 @@ describe ServicesController, :type => :controller do it "doesn't break when twitter-specific extras aren't available in omniauth hash" do expect { - post :create, :provider => 'facebook' + post :create, params: {provider: "facebook"} }.to change(user.services, :count).by(1) end end @@ -121,7 +121,7 @@ describe ServicesController, :type => :controller do expect(Workers::FetchProfilePhoto).not_to receive(:perform_async) - post :create, :provider => 'twitter' + post :create, params: {provider: "twitter"} end it 'queues a job to save user photo if the photo does not exist' do @@ -129,7 +129,7 @@ describe ServicesController, :type => :controller do expect(Workers::FetchProfilePhoto).to receive(:perform_async).with(user.id, anything(), "https://service.com/fallback_lowres.jpg") - post :create, :provider => 'twitter' + post :create, params: {provider: "twitter"} end end end @@ -141,7 +141,7 @@ describe ServicesController, :type => :controller do it 'destroys a service selected by id' do expect{ - delete :destroy, :id => @service1.id + delete :destroy, params: {id: @service1.id} }.to change(user.services, :count).by(-1) end end diff --git a/spec/controllers/sessions_controller_spec.rb b/spec/controllers/sessions_controller_spec.rb index 55ae17bae..69bbf510c 100644 --- a/spec/controllers/sessions_controller_spec.rb +++ b/spec/controllers/sessions_controller_spec.rb @@ -15,14 +15,14 @@ describe SessionsController, type: :controller do describe "#create" do it "redirects to /stream for a non-mobile user" do - post :create, {"user" => {"remember_me" => "0", "username" => @user.username, "password" => "evankorth"}} + post :create, params: {user: {remember_me: "0", username: @user.username, password: "evankorth"}} expect(response).to be_redirect expect(response.location).to match /^#{stream_url}\??$/ end it "redirects to /stream for a mobile user" do request.headers["X_MOBILE_DEVICE"] = true - post :create, {"user" => {"remember_me" => "0", "username" => @user.username, "password" => "evankorth"}} + post :create, params: {user: {remember_me: "0", username: @user.username, password: "evankorth"}} expect(response).to be_redirect expect(response.location).to match /^#{stream_url}\??$/ end diff --git a/spec/controllers/share_visibilities_controller_spec.rb b/spec/controllers/share_visibilities_controller_spec.rb index 30c0151e9..f70a50ea3 100644 --- a/spec/controllers/share_visibilities_controller_spec.rb +++ b/spec/controllers/share_visibilities_controller_spec.rb @@ -14,13 +14,13 @@ describe ShareVisibilitiesController, :type => :controller do end it 'succeeds' do - put :update, :format => :js, :id => 42, :post_id => @status.id + put :update, params: {id: 42, post_id: @status.id}, format: :js expect(response).to be_success end it 'it calls toggle_hidden_shareable' do expect(@controller.current_user).to receive(:toggle_hidden_shareable).with(an_instance_of(StatusMessage)) - put :update, :format => :js, :id => 42, :post_id => @status.id + put :update, params: {id: 42, post_id: @status.id}, format: :js end end @@ -31,14 +31,14 @@ describe ShareVisibilitiesController, :type => :controller do it "raises an error" do expect { - put :update, format: :js, id: 42, post_id: @status.id + put :update, params: {id: 42, post_id: @status.id}, format: :js }.to raise_error ActiveRecord::RecordNotFound end it "it doesn't call toggle_hidden_shareable" do expect(@controller.current_user).not_to receive(:toggle_hidden_shareable).with(an_instance_of(StatusMessage)) begin - put :update, format: :js, id: 42, post_id: @status.id + put :update, params: {id: 42, post_id: @status.id}, format: :js rescue ActiveRecord::RecordNotFound end end diff --git a/spec/controllers/status_messages_controller_spec.rb b/spec/controllers/status_messages_controller_spec.rb index 5d2dcd9ae..8b99c04c2 100644 --- a/spec/controllers/status_messages_controller_spec.rb +++ b/spec/controllers/status_messages_controller_spec.rb @@ -27,16 +27,18 @@ describe StatusMessagesController, :type => :controller do end it 'accepts get params' do - get :bookmarklet, { url: 'https://www.youtube.com/watch?v=0Bmhjf0rKe8', - title: 'Surprised Kitty', - notes: 'cute kitty' } + get :bookmarklet, params: { + url: "https://www.youtube.com/watch?v=0Bmhjf0rKe8", + title: "Surprised Kitty", + notes: "cute kitty" + } expect(response).to be_success end end describe '#new' do it 'succeeds' do - get :new, :person_id => bob.person.id + get :new, params: {person_id: bob.person.id} expect(response).to be_success end @@ -56,30 +58,30 @@ describe StatusMessagesController, :type => :controller do } it 'creates with valid json' do - post :create, status_message_hash.merge(:format => 'json') + post :create, params: status_message_hash, format: :json expect(response.status).to eq(201) end it 'creates with invalid json' do - post :create, status_message_hash.merge(:status_message => { :text => "0123456789" * 7000 }, :format => 'json') + post :create, params: status_message_hash.merge(status_message: {text: "0123456789" * 7000}), format: :json expect(response.status).to eq(403) end it 'creates with valid mobile' do - post :create, status_message_hash.merge(:format => 'mobile') + post :create, params: status_message_hash, format: :mobile expect(response.status).to eq(302) expect(response).to be_redirect end it 'creates with invalid mobile' do - post :create, status_message_hash.merge(:status_message => { :text => "0123456789" * 7000 }, :format => 'mobile') + post :create, params: status_message_hash.merge(status_message: {text: "0123456789" * 7000}), format: :mobile expect(response.status).to eq(302) expect(response).to be_redirect end it 'removes getting started from new users' do expect(@controller).to receive(:remove_getting_started) - post :create, status_message_hash + post :create, params: status_message_hash end context "with aspect_ids" do @@ -88,43 +90,43 @@ describe StatusMessagesController, :type => :controller do end it "takes one aspect as array in aspect_ids" do - post :create, status_message_hash - expect(response.status).to eq(302) + post :create, params: status_message_hash, format: :json + expect(response.status).to eq(201) status_message = StatusMessage.find_by_text(text) - expect(status_message.aspect_visibilities.map(&:aspect)).to eq([@aspect1]) + expect(status_message.aspect_visibilities.map(&:aspect)).to eq([@aspect1]), format: :json end it "takes one aspect as string in aspect_ids" do - post :create, status_message_hash.merge(aspect_ids: @aspect1.id.to_s) - expect(response.status).to eq(302) + post :create, params: status_message_hash.merge(aspect_ids: @aspect1.id.to_s), format: :json + expect(response.status).to eq(201) status_message = StatusMessage.find_by_text(text) expect(status_message.aspect_visibilities.map(&:aspect)).to eq([@aspect1]) end it "takes public as array in aspect_ids" do - post :create, status_message_hash.merge(aspect_ids: ["public"]) - expect(response.status).to eq(302) + post :create, params: status_message_hash.merge(aspect_ids: ["public"]), format: :json + expect(response.status).to eq(201) status_message = StatusMessage.find_by_text(text) expect(status_message.public).to be_truthy end it "takes public as string in aspect_ids" do - post :create, status_message_hash.merge(aspect_ids: "public") - expect(response.status).to eq(302) + post :create, params: status_message_hash.merge(aspect_ids: "public"), format: :json + expect(response.status).to eq(201) status_message = StatusMessage.find_by_text(text) expect(status_message.public).to be_truthy end it "takes all_aspects as array in aspect_ids" do - post :create, status_message_hash.merge(aspect_ids: ["all_aspects"]) - expect(response.status).to eq(302) + post :create, params: status_message_hash.merge(aspect_ids: ["all_aspects"]), format: :json + expect(response.status).to eq(201) status_message = StatusMessage.find_by_text(text) expect(status_message.aspect_visibilities.map(&:aspect)).to match_array([@aspect1, @aspect2]) end it "takes all_aspects as string in aspect_ids" do - post :create, status_message_hash.merge(aspect_ids: "all_aspects") - expect(response.status).to eq(302) + post :create, params: status_message_hash.merge(aspect_ids: "all_aspects"), format: :json + expect(response.status).to eq(201) status_message = StatusMessage.find_by_text(text) expect(status_message.aspect_visibilities.map(&:aspect)).to match_array([@aspect1, @aspect2]) end @@ -137,7 +139,7 @@ describe StatusMessagesController, :type => :controller do status_message_hash[:services] = ['facebook'] service_types = Service.titles(status_message_hash[:services]) expect(alice).to receive(:dispatch_post).with(anything(), hash_including(:service_types => service_types)) - post :create, status_message_hash + post :create, params: status_message_hash end it "works if services is a string" do @@ -145,12 +147,12 @@ describe StatusMessagesController, :type => :controller do alice.services << s1 status_message_hash[:services] = "facebook" expect(alice).to receive(:dispatch_post).with(anything(), hash_including(:service_types => ["Services::Facebook"])) - post :create, status_message_hash + post :create, params: status_message_hash end it "doesn't overwrite author_id" do status_message_hash[:status_message][:author_id] = bob.person.id - post :create, status_message_hash + post :create, params: status_message_hash new_message = StatusMessage.find_by_text(text) expect(new_message.author_id).to eq(alice.person.id) end @@ -158,7 +160,7 @@ describe StatusMessagesController, :type => :controller do it "doesn't overwrite id" do old_status_message = alice.post(:status_message, :text => "hello", :to => @aspect1.id) status_message_hash[:status_message][:id] = old_status_message.id - post :create, status_message_hash + post :create, params: status_message_hash expect(old_status_message.reload.text).to eq('hello') end @@ -166,18 +168,18 @@ describe StatusMessagesController, :type => :controller do expect(alice).to receive(:dispatch_post) {|post, _opts| expect(post.subscribers).to eq([bob.person]) } - post :create, status_message_hash + post :create, params: status_message_hash end it 'respsects provider_display_name' do status_message_hash.merge!(:aspect_ids => ['public']) status_message_hash[:status_message].merge!(:provider_display_name => "mobile") - post :create, status_message_hash + post :create, params: status_message_hash expect(StatusMessage.first.provider_display_name).to eq('mobile') end it "has no participation" do - post :create, status_message_hash + post :create, params: status_message_hash new_message = StatusMessage.find_by_text(text) expect(new_message.participations.count).to eq(0) end @@ -196,19 +198,19 @@ describe StatusMessagesController, :type => :controller do it "will post a photo without text" do @hash.delete :text - post :create, @hash - expect(response).to be_redirect + post :create, params: @hash, format: :json + expect(response.status).to eq(201) end it "attaches all referenced photos" do - post :create, @hash + post :create, params: @hash, format: :json status_message = StatusMessage.find_by_text(text) expect(status_message.photos.map(&:id)).to match_array([@photo1, @photo2].map(&:id)) end it "sets the pending bit of referenced photos" do inlined_jobs do - post :create, @hash + post :create, params: @hash, format: :json end expect(@photo1.reload.pending).to be false diff --git a/spec/controllers/tags_controller_spec.rb b/spec/controllers/tags_controller_spec.rb index 3b49bccbc..b62adc5b0 100644 --- a/spec/controllers/tags_controller_spec.rb +++ b/spec/controllers/tags_controller_spec.rb @@ -12,13 +12,13 @@ describe TagsController, :type => :controller do end it 'responds with json' do - get :index, :q => "ra", :format => 'json' + get :index, params: {q: "ra"}, format: :json #parse json expect(response.body).to include("#rad") end it 'requires at least two characters' do - get :index, :q => "c", :format => 'json' + get :index, params: {q: "c"}, format: :json expect(response.body).not_to include("#cats") end @@ -28,7 +28,7 @@ describe TagsController, :type => :controller do end it 'does not allow json requestors to party' do - get :index, :format => :json + get :index, format: :json expect(response.status).to eq(422) end end @@ -40,7 +40,7 @@ describe TagsController, :type => :controller do end it 'redirect to the downcase tag uri' do - get :show, :name => 'DiasporaRocks!' + get :show, params: {name: "DiasporaRocks!"} expect(response).to redirect_to(:action => :show, :name => 'diasporarocks!') end end @@ -53,7 +53,7 @@ describe TagsController, :type => :controller do end it 'includes the tagged user' do - get :show, :name => 'cats' + get :show, params: {name: "cats"} expect(response.body).to include(bob.diaspora_handle) end end @@ -69,40 +69,40 @@ describe TagsController, :type => :controller do end it 'assigns a Stream::Tag object with the current_user' do - get :show, :name => 'yes' + get :show, params: {name: "yes"} expect(assigns[:stream].user).to eq(alice) end it 'succeeds' do - get :show, :name => 'hellyes' + get :show, params: {name: "hellyes"} expect(response.status).to eq(200) end it 'includes the tagged post' do - get :show, :name => 'foo' + get :show, params: {name: "foo"} expect(assigns[:stream].posts.first.text).to include("tagged post") end it 'includes comments of the tagged post' do alice.comment!(@post, "comment on a tagged post") - get :show, :name => 'foo', :format => 'json' + get :show, params: {name: "foo"}, format: :json expect(response.body).to include("comment on a tagged post") end end context "not signed in" do it 'assigns a Stream::Tag object with no user' do - get :show, :name => 'yes' + get :show, params: {name: "yes"} expect(assigns[:stream].user).to be_nil end it 'succeeds' do - get :show, :name => 'hellyes' + get :show, params: {name: "hellyes"} expect(response.status).to eq(200) end it 'succeeds with mobile' do - get :show, :name => 'foo', :format => :mobile + get :show, params: {name: "foo"}, format: :mobile expect(response).to be_success end @@ -113,7 +113,7 @@ describe TagsController, :type => :controller do public: true, created_at: @post.created_at - 1.day ) - get :show, name: "what", max_time: @post.created_at, format: :json + get :show, params: {name: "what", max_time: @post.created_at.to_i}, format: :json expect(JSON.parse(response.body).size).to be(1) expect(JSON.parse(response.body).first["guid"]).to eq(post2.guid) end @@ -122,7 +122,7 @@ describe TagsController, :type => :controller do it "includes the correct meta tags" do tag_url = tag_url "yes", host: AppConfig.pod_uri.host, port: AppConfig.pod_uri.port - get :show, name: "yes" + get :show, params: {name: "yes"} expect(response.body).to include('') expect(response.body).to include( diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index b68b96a95..e3ef6a785 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -58,26 +58,26 @@ describe UsersController, :type => :controller do end it "contains the text" do - get :public, username: @user.username, format: :atom + get :public, params: {username: @user.username}, format: :atom doc = Nokogiri::XML(response.body) expect(doc.css("entry content")[0].content).to eq(@sm.message.markdownified(disable_hovercards: true)) end it "contains the title" do - get :public, username: @user.username, format: :atom + get :public, params: {username: @user.username}, format: :atom doc = Nokogiri::XML(response.body) expect(doc.css("entry title")[0].content).to eq(post_page_title(@sm)) end it "contains the author" do - get :public, username: @user.username, format: :atom + get :public, params: {username: @user.username}, format: :atom doc = Nokogiri::XML(response.body) expect(doc.css("entry author name")[0].content).to eq(@sm.author_name) end it "contains the original author for reshares" do FactoryGirl.create(:reshare, root: @sm, author: bob.person) - get :public, username: bob.username, format: :atom + get :public, params: {username: bob.username}, format: :atom doc = Nokogiri::XML(response.body) expect(doc.css("entry author name")[0].content).to eq(@sm.author_name) end @@ -85,7 +85,7 @@ describe UsersController, :type => :controller do it 'includes reshares in the atom feed' do reshare = FactoryGirl.create(:reshare, :author => @user.person) - get :public, :username => @user.username, :format => :atom + get :public, params: {username: @user.username}, format: :atom expect(response.body).to include reshare.root.text end @@ -93,17 +93,17 @@ describe UsersController, :type => :controller do post = FactoryGirl.create(:status_message, :public => true); reshare = FactoryGirl.create(:reshare, :root => post, :author => @user.person) post.delete - get :public, :username => @user.username, :format => :atom + get :public, params: {username: @user.username}, format: :atom expect(response.code).to eq('200') end it 'redirects to a profile page if html is requested' do - get :public, :username => @user.username + get :public, params: {username: @user.username} expect(response).to be_redirect end it 'redirects to a profile page if mobile is requested' do - get :public, :username => @user.username, :format => :mobile + get :public, params: {username: @user.username}, format: :mobile expect(response).to be_redirect end end @@ -116,12 +116,12 @@ describe UsersController, :type => :controller do it "doesn't overwrite random attributes" do expect { - put :update, @params + put :update, params: @params }.not_to change(@user, :diaspora_handle) end it 'renders the user edit page' do - put :update, @params + put :update, params: @params expect(response).to render_template('edit') end @@ -139,7 +139,7 @@ describe UsersController, :type => :controller do it "uses devise's update with password" do expect(@user).to receive(:update_with_password).with(hash_including(password_params)) allow(@controller).to receive(:current_user).and_return(@user) - put :update, params + put :update, params: params end end @@ -148,9 +148,7 @@ describe UsersController, :type => :controller do old_language = 'en' @user.language = old_language @user.save - put(:update, :id => @user.id, :user => - { :language => "fr"} - ) + put :update, params: {id: @user.id, user: {language: "fr"}} @user.reload expect(@user.language).not_to eq(old_language) end @@ -161,7 +159,7 @@ describe UsersController, :type => :controller do old_color_theme = "original" @user.color_theme = old_color_theme @user.save - put(:update, id: @user.id, user: {color_theme: "dark_green"}) + put :update, params: {id: @user.id, user: {color_theme: "dark_green"}} @user.reload expect(@user.color_theme).not_to eq(old_color_theme) end @@ -170,43 +168,43 @@ describe UsersController, :type => :controller do describe 'email' do it 'disallow the user to change his new (unconfirmed) mail when it is the same as the old' do @user.email = "my@newemail.com" - put(:update, :id => @user.id, :user => { :email => "my@newemail.com"}) + put :update, params: {id: @user.id, user: {email: "my@newemail.com"}} @user.reload expect(@user.unconfirmed_email).to eql(nil) end it 'allow the user to change his (unconfirmed) email' do - put(:update, :id => @user.id, :user => { :email => "my@newemail.com"}) + put :update, params: {id: @user.id, user: {email: "my@newemail.com"}} @user.reload expect(@user.unconfirmed_email).to eql("my@newemail.com") end it 'informs the user about success' do - put(:update, :id => @user.id, :user => { :email => "my@newemail.com"}) + put :update, params: {id: @user.id, user: {email: "my@newemail.com"}} expect(request.flash[:notice]).to eql(I18n.t('users.update.unconfirmed_email_changed')) expect(request.flash[:error]).to be_blank end it 'informs the user about failure' do - put(:update, id: @user.id, user: {email: "mynewemailcom"}) + put :update, params: {id: @user.id, user: {email: "mynewemailcom"}} expect(request.flash[:error]).to eql(I18n.t('users.update.unconfirmed_email_not_changed')) expect(request.flash[:notice]).to be_blank end it 'allow the user to change his (unconfirmed) email to blank (= abort confirmation)' do - put(:update, :id => @user.id, :user => { :email => ""}) + put :update, params: {id: @user.id, user: {email: ""}} @user.reload expect(@user.unconfirmed_email).to eql(nil) end it 'sends out activation email on success' do expect(Workers::Mail::ConfirmEmail).to receive(:perform_async).with(@user.id).once - put(:update, :id => @user.id, :user => { :email => "my@newemail.com"}) + put :update, params: {id: @user.id, user: {email: "my@newemail.com"}} end it "saves unconfirmed_email when podmail is disabled" do AppConfig.mail.enable = false - put(:update, id: @user.id, user: {email: "my@newemail.com"}) + put :update, params: {id: @user.id, user: {email: "my@newemail.com"}} @user.reload expect(@user.email).to eql("my@newemail.com") end @@ -218,7 +216,7 @@ describe UsersController, :type => :controller do it "lets the user turn off mail" do par = {id: @user.id, user: {email_preferences: {email_type => "true"}}} expect { - put :update, par + put :update, params: par }.to change(@user.user_preferences, :count).by(1) end @@ -226,7 +224,7 @@ describe UsersController, :type => :controller do @user.user_preferences.create(email_type: email_type) par = {id: @user.id, user: {email_preferences: {email_type => "false"}}} expect { - put :update, par + put :update, params: par }.to change(@user.user_preferences, :count).by(-1) end end @@ -235,7 +233,7 @@ describe UsersController, :type => :controller do describe 'getting started' do it 'can be reenabled' do - put :update, user: {getting_started: true} + put :update, params: {user: {getting_started: true}} expect(@user.reload.getting_started?).to be true end end @@ -250,32 +248,32 @@ describe UsersController, :type => :controller do describe '#edit' do it "returns a 200" do - get 'edit', :id => @user.id + get :edit, params: {id: @user.id} expect(response.status).to eq(200) end it 'displays community spotlight checkbox' do AppConfig.settings.community_spotlight.enable = true - get 'edit', :id => @user.id + get :edit, params: {id: @user.id} expect(response.body).to include('input name="user[show_community_spotlight_in_stream]"') end it 'hides community spotlight checkbox' do AppConfig.settings.community_spotlight = false - get 'edit', :id => @user.id + get :edit, params: {id: @user.id} expect(response.body).not_to include('input name="user[show_community_spotlight_in_stream]"') end it 'set @email_pref to false when there is a user pref' do @user.user_preferences.create(:email_type => 'mentioned') - get 'edit', :id => @user.id + get :edit, params: {id: @user.id} expect(assigns[:email_prefs]['mentioned']).to be false end it "does not allow token auth" do sign_out :user bob.reset_authentication_token! - get :edit, :auth_token => bob.authentication_token + get :edit, params: {auth_token: bob.authentication_token} expect(response).to redirect_to new_user_session_path end end @@ -283,17 +281,17 @@ describe UsersController, :type => :controller do describe '#destroy' do it 'does nothing if the password does not match' do expect(Workers::DeleteAccount).not_to receive(:perform_async) - delete :destroy, :user => { :current_password => "stuff" } + delete :destroy, params: {user: {current_password: "stuff"}} end it 'closes the account' do expect(alice).to receive(:close_account!) - delete :destroy, :user => { :current_password => "bluepin7" } + delete :destroy, params: {user: {current_password: "bluepin7"}} end it 'enqueues a delete job' do expect(Workers::DeleteAccount).to receive(:perform_async).with(anything) - delete :destroy, :user => { :current_password => "bluepin7" } + delete :destroy, params: {user: {current_password: "bluepin7"}} end end @@ -303,12 +301,12 @@ describe UsersController, :type => :controller do end it 'redirects to to the user edit page' do - get 'confirm_email', :token => @user.confirm_email_token + get :confirm_email, params: {token: @user.confirm_email_token} expect(response).to redirect_to edit_user_path end it 'confirms email' do - get 'confirm_email', :token => @user.confirm_email_token + get :confirm_email, params: {token: @user.confirm_email_token} @user.reload expect(@user.email).to eql('my@newemail.com') expect(request.flash[:notice]).to eql(I18n.t('users.confirm_email.email_confirmed', :email => 'my@newemail.com')) @@ -316,7 +314,7 @@ describe UsersController, :type => :controller do end it 'does NOT confirm email with wrong token' do - get 'confirm_email', :token => @user.confirm_email_token.reverse + get :confirm_email, params: {token: @user.confirm_email_token.reverse} @user.reload expect(@user.email).not_to eql('my@newemail.com') expect(request.flash[:error]).to eql(I18n.t('users.confirm_email.email_not_confirmed')) @@ -331,7 +329,7 @@ describe UsersController, :type => :controller do end it 'does not fail miserably on mobile' do - get :getting_started, :format => :mobile + get :getting_started, format: :mobile expect(response).to be_success end diff --git a/spec/integration/api/user_info_controller_spec.rb b/spec/integration/api/user_info_controller_spec.rb index eaff50459..2c692a100 100644 --- a/spec/integration/api/user_info_controller_spec.rb +++ b/spec/integration/api/user_info_controller_spec.rb @@ -5,7 +5,7 @@ describe Api::OpenidConnect::UserInfoController do describe "#show" do before do @user = auth_with_read_and_ppid.user - get api_openid_connect_user_info_path, access_token: access_token_with_read + get api_openid_connect_user_info_path, params: {access_token: access_token_with_read} end it "shows the info" do From 7c9590a27cfed609eb0b7b046905b4669e6738df Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 18:48:39 +0200 Subject: [PATCH 25/52] Use `.reload` instead of `(true)` in specs Or remove it where not needed --- spec/controllers/profiles_controller_spec.rb | 21 ++++++++++--------- .../federation/attack_vectors_spec.rb | 6 +++--- spec/models/contact_spec.rb | 1 - spec/models/user/connecting_spec.rb | 12 +++++------ spec/shared_behaviors/taggable.rb | 2 +- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/spec/controllers/profiles_controller_spec.rb b/spec/controllers/profiles_controller_spec.rb index 802d4b0e6..405b2902b 100644 --- a/spec/controllers/profiles_controller_spec.rb +++ b/spec/controllers/profiles_controller_spec.rb @@ -55,18 +55,18 @@ describe ProfilesController, :type => :controller do end it "sets nsfw" do - expect(eve.person(true).profile.nsfw).to eq(false) + expect(eve.person.reload.profile.nsfw).to eq(false) put :update, params: {profile: {id: eve.person.id, nsfw: "1"}} - expect(eve.person(true).profile.nsfw).to eq(true) + expect(eve.person.reload.profile.nsfw).to eq(true) end it "unsets nsfw" do eve.person.profile.nsfw = true eve.person.profile.save - expect(eve.person(true).profile.nsfw).to eq(true) + expect(eve.person.reload.profile.nsfw).to eq(true) put :update, params: {profile: {id: eve.person.id}} - expect(eve.person(true).profile.nsfw).to eq(false) + expect(eve.person.reload.profile.nsfw).to eq(false) end it 'sets tags' do @@ -75,7 +75,7 @@ describe ProfilesController, :type => :controller do :profile => {:tag_string => ''} } put :update, params: params - expect(eve.person(true).profile.tag_list.to_set).to eq(['apples', 'oranges'].to_set) + expect(eve.person.reload.profile.tag_list.to_set).to eq(%w[apples oranges].to_set) end it 'sets plaintext tags' do @@ -84,7 +84,7 @@ describe ProfilesController, :type => :controller do :profile => {:tag_string => '#pears'} } put :update, params: params - expect(eve.person(true).profile.tag_list.to_set).to eq(['apples', 'oranges', 'pears'].to_set) + expect(eve.person.reload.profile.tag_list.to_set).to eq(%w[apples oranges pears].to_set) end it 'sets plaintext tags without #' do @@ -93,7 +93,7 @@ describe ProfilesController, :type => :controller do :profile => {:tag_string => 'bananas'} } put :update, params: params - expect(eve.person(true).profile.tag_list.to_set).to eq(['apples', 'oranges', 'bananas'].to_set) + expect(eve.person.reload.profile.tag_list.to_set).to eq(%w[apples oranges bananas].to_set) end it 'sets valid birthday' do @@ -105,9 +105,10 @@ describe ProfilesController, :type => :controller do :day => '28' } } } put :update, params: params - expect(eve.person(true).profile.birthday.year).to eq(2001) - expect(eve.person(true).profile.birthday.month).to eq(2) - expect(eve.person(true).profile.birthday.day).to eq(28) + birthday = eve.person.reload.profile.birthday + expect(birthday.year).to eq(2001) + expect(birthday.month).to eq(2) + expect(birthday.day).to eq(28) end it 'displays error for invalid birthday' do diff --git a/spec/integration/federation/attack_vectors_spec.rb b/spec/integration/federation/attack_vectors_spec.rb index b7dcbbe5b..b88d4883c 100644 --- a/spec/integration/federation/attack_vectors_spec.rb +++ b/spec/integration/federation/attack_vectors_spec.rb @@ -36,7 +36,7 @@ describe "attack vectors", type: :request do post_message(generate_payload(Diaspora::Federation::Entities.profile(profile), alice, bob), bob) - expect(eve.profile(true).first_name).not_to eq("Not BOB") + expect(eve.profile.reload.first_name).not_to eq("Not BOB") end it "public post should not be spoofed from another author" do @@ -59,14 +59,14 @@ describe "attack vectors", type: :request do it "should not receive contact retractions from another person" do # we are banking on bob being friends with alice and eve # here, alice is trying to disconnect bob and eve - contact = bob.contacts(true).find_by(person_id: eve.person.id) + contact = bob.contacts.reload.find_by(person_id: eve.person.id) expect(contact).to be_sharing post_message( generate_payload(Diaspora::Federation::Entities.retraction(ContactRetraction.for(contact)), alice, bob), bob ) - expect(bob.contacts(true).find_by(person_id: eve.person.id)).to be_sharing + expect(bob.contacts.reload.find_by(person_id: eve.person.id)).to be_sharing end end diff --git a/spec/models/contact_spec.rb b/spec/models/contact_spec.rb index 08a1b00d8..aabad41dc 100644 --- a/spec/models/contact_spec.rb +++ b/spec/models/contact_spec.rb @@ -161,7 +161,6 @@ describe Contact, type: :model do describe "#contacts" do before do bob.aspects.create(name: "next") - bob.aspects(true) @original_aspect = bob.aspects.where(name: "generic").first @new_aspect = bob.aspects.where(name: "next").first diff --git a/spec/models/user/connecting_spec.rb b/spec/models/user/connecting_spec.rb index 40ef55ce6..2d6d53f9d 100644 --- a/spec/models/user/connecting_spec.rb +++ b/spec/models/user/connecting_spec.rb @@ -21,7 +21,7 @@ describe User::Connecting, type: :model do expect { eve.disconnected_by(alice.person) - }.to change(eve.contacts(true), :count).by(-1) + }.to change(eve.contacts, :count).by(-1) end it "does not remove contact if disconnect twice" do @@ -31,7 +31,7 @@ describe User::Connecting, type: :model do expect { bob.disconnected_by(alice.person) bob.disconnected_by(alice.person) - }.not_to change(bob.contacts(true), :count) + }.not_to change(bob.contacts, :count) contact.reload expect(contact).not_to be_sharing @@ -50,7 +50,7 @@ describe User::Connecting, type: :model do it "removes a contacts receiving flag" do expect(bob.contacts.find_by(person_id: alice.person.id)).to be_receiving bob.disconnect(bob.contact_for(alice.person)) - expect(bob.contacts(true).find_by(person_id: alice.person.id)).not_to be_receiving + expect(bob.contacts.reload.find_by(person_id: alice.person.id)).not_to be_receiving end it "removes contact if not sharing" do @@ -58,7 +58,7 @@ describe User::Connecting, type: :model do expect { alice.disconnect(contact) - }.to change(alice.contacts(true), :count).by(-1) + }.to change(alice.contacts, :count).by(-1) end it "does not remove contact if disconnect twice" do @@ -68,7 +68,7 @@ describe User::Connecting, type: :model do expect { alice.disconnect(contact) alice.disconnect(contact) - }.not_to change(bob.contacts(true), :count) + }.not_to change(bob.contacts, :count) contact.reload expect(contact).not_to be_receiving @@ -100,7 +100,7 @@ describe User::Connecting, type: :model do expect { alice.disconnect(contact) - }.to change(contact.aspects(true), :count).from(2).to(0) + }.to change(contact.aspects, :count).from(2).to(0) end end end diff --git a/spec/shared_behaviors/taggable.rb b/spec/shared_behaviors/taggable.rb index e7a61fb5f..d6accd6a4 100644 --- a/spec/shared_behaviors/taggable.rb +++ b/spec/shared_behaviors/taggable.rb @@ -30,7 +30,7 @@ shared_examples_for "it is taggable" do it "supports non-ascii characters" do tag_list.each do |tag| - expect(@object.tags(true).map(&:name)).to include(tag) + expect(@object.tags.reload.map(&:name)).to include(tag) end end From 621fdda197ad66e433326682baf76473a39e33c2 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 19:04:54 +0200 Subject: [PATCH 26/52] New syntax for request specs --- spec/integration/application_spec.rb | 10 +-- .../federation/federation_helper.rb | 4 +- spec/integration/mentioning_spec.rb | 5 +- spec/integration/mobile_posts_spec.rb | 6 +- spec/integration/tag_people_spec.rb | 4 +- .../protected_resource_endpoint_spec.rb | 8 +- .../api/openid_connect/token_endpoint_spec.rb | 78 ++++++++++--------- 7 files changed, 60 insertions(+), 55 deletions(-) diff --git a/spec/integration/application_spec.rb b/spec/integration/application_spec.rb index 39c6c0d67..2c4e78fd5 100644 --- a/spec/integration/application_spec.rb +++ b/spec/integration/application_spec.rb @@ -10,14 +10,14 @@ describe ApplicationController, type: :request do it "redirects to the new session page on validation fails" do expect_any_instance_of(SessionsController).to receive(:verified_request?).and_return(false) - post "/users/sign_in", user: {remember_me: 0, username: @user.username, password: "evankorth"} + post "/users/sign_in", params: {user: {remember_me: 0, username: @user.username, password: "evankorth"}} expect(response).to redirect_to new_user_session_path expect(flash[:error]).to eq(I18n.t("error_messages.csrf_token_fail")) end it "doesn't redirect to the new session page if the validation succeeded" do expect_any_instance_of(SessionsController).to receive(:verified_request?).and_return(true) - post "/users/sign_in", user: {remember_me: 0, username: @user.username, password: "evankorth"} + post "/users/sign_in", params: {user: {remember_me: 0, username: @user.username, password: "evankorth"}} expect(response).to redirect_to stream_path expect(flash[:error]).to be_blank end @@ -30,7 +30,7 @@ describe ApplicationController, type: :request do it "signs out users if a wrong token was given" do expect_any_instance_of(UsersController).to receive(:verified_request?).and_return(false) - put edit_user_path, user: {language: "en"} + put edit_user_path, params: {user: {language: "en"}} expect(response).to redirect_to new_user_session_path expect(flash[:error]).to eq(I18n.t("error_messages.csrf_token_fail")) end @@ -38,12 +38,12 @@ describe ApplicationController, type: :request do it "sends an email to the current user if the token validation failed" do expect_any_instance_of(UsersController).to receive(:verified_request?).and_return(false) expect(Workers::Mail::CsrfTokenFail).to receive(:perform_async).with(alice.id) - put edit_user_path, user: {language: "en"} + put edit_user_path, params: {user: {language: "en"}} end it "doesn't sign out users if the token was correct" do expect_any_instance_of(UsersController).to receive(:verified_request?).and_return(true) - put edit_user_path, user: {language: "en"} + put edit_user_path, params: {user: {language: "en"}} expect(response).not_to be_redirect expect(flash[:error]).to be_blank end diff --git a/spec/integration/federation/federation_helper.rb b/spec/integration/federation/federation_helper.rb index 3525c95fe..58e95f908 100644 --- a/spec/integration/federation/federation_helper.rb +++ b/spec/integration/federation/federation_helper.rb @@ -61,12 +61,12 @@ def post_message(payload, recipient=nil) if recipient inlined_jobs do headers = {"CONTENT_TYPE" => "application/json"} - post "/receive/users/#{recipient.guid}", payload, headers + post "/receive/users/#{recipient.guid}", params: payload, headers: headers end else inlined_jobs do headers = {"CONTENT_TYPE" => "application/magic-envelope+xml"} - post "/receive/public", payload, headers + post "/receive/public", params: payload, headers: headers end end end diff --git a/spec/integration/mentioning_spec.rb b/spec/integration/mentioning_spec.rb index 94bd5f8cf..41a231d3e 100644 --- a/spec/integration/mentioning_spec.rb +++ b/spec/integration/mentioning_spec.rb @@ -51,7 +51,10 @@ module MentioningSpecHelpers sign_in user1 status_msg = nil inlined_jobs do - post "/status_messages.json", status_message: {text: text_mentioning(mentioned_user)}, aspect_ids: aspects + post "/status_messages.json", params: { + status_message: {text: text_mentioning(mentioned_user)}, + aspect_ids: aspects + } status_msg = StatusMessage.find(JSON.parse(response.body)["id"]) end status_msg diff --git a/spec/integration/mobile_posts_spec.rb b/spec/integration/mobile_posts_spec.rb index 1ffd10a79..1b5e53509 100644 --- a/spec/integration/mobile_posts_spec.rb +++ b/spec/integration/mobile_posts_spec.rb @@ -3,7 +3,7 @@ describe PostsController, type: :request do let(:sm) { FactoryGirl.build(:status_message_with_poll, public: true) } it "displays the poll" do - get "/posts/#{sm.id}", format: :mobile + get "/posts/#{sm.id}", params: {format: :mobile} expect(response.status).to eq(200) expect(response.body).to match(/div class='poll'/) @@ -13,7 +13,7 @@ describe PostsController, type: :request do it "displays the correct percentage for the answers" do alice.participate_in_poll!(sm, sm.poll.poll_answers.first) bob.participate_in_poll!(sm, sm.poll.poll_answers.last) - get "/posts/#{sm.id}", format: :mobile + get "/posts/#{sm.id}", params: {format: :mobile} expect(response.status).to eq(200) expect(response.body).to match(/div class='percentage pull-right'>\n50%/) @@ -24,7 +24,7 @@ describe PostsController, type: :request do let(:sm) { FactoryGirl.build(:status_message_with_location, public: true) } it "displays the location" do - get "/posts/#{sm.id}", format: :mobile + get "/posts/#{sm.id}", params: {format: :mobile} expect(response.status).to eq(200) expect(response.body).to match(/'location nsfw-hidden'/) diff --git a/spec/integration/tag_people_spec.rb b/spec/integration/tag_people_spec.rb index 336b7acf0..22b07d851 100644 --- a/spec/integration/tag_people_spec.rb +++ b/spec/integration/tag_people_spec.rb @@ -1,4 +1,4 @@ -describe TagsController, :type => :request do +describe TagsController, type: :request do describe 'will_paginate people on the tag page' do let(:people) { (1..2).map { FactoryGirl.create(:person) } } let(:tag) { "diaspora" } @@ -17,7 +17,7 @@ describe TagsController, :type => :request do end it 'fetches the second page' do - get "/tags/#{tag}", page: 2 + get "/tags/#{tag}", params: {page: 2} expect(response.status).to eq(200) expect(response.body).to match(/
  • 2<\/a><\/li>/) diff --git a/spec/lib/api/openid_connect/protected_resource_endpoint_spec.rb b/spec/lib/api/openid_connect/protected_resource_endpoint_spec.rb index e93a995ef..fc2f4cb11 100644 --- a/spec/lib/api/openid_connect/protected_resource_endpoint_spec.rb +++ b/spec/lib/api/openid_connect/protected_resource_endpoint_spec.rb @@ -11,7 +11,7 @@ describe Api::OpenidConnect::ProtectedResourceEndpoint, type: :request do context "when valid access token is provided" do before do - get api_openid_connect_user_info_path, access_token: access_token_with_read + get api_openid_connect_user_info_path, params: {access_token: access_token_with_read} end it "includes private in the cache-control header" do @@ -21,7 +21,7 @@ describe Api::OpenidConnect::ProtectedResourceEndpoint, type: :request do context "when access token is expired" do before do - get api_openid_connect_user_info_path, access_token: expired_access_token + get api_openid_connect_user_info_path, params: {access_token: expired_access_token} end it "should respond with a 401 Unauthorized response" do @@ -47,7 +47,7 @@ describe Api::OpenidConnect::ProtectedResourceEndpoint, type: :request do context "when an invalid access token is provided" do before do - get api_openid_connect_user_info_path, access_token: invalid_token + get api_openid_connect_user_info_path, params: {access_token: invalid_token} end it "should respond with a 401 Unauthorized response" do @@ -66,7 +66,7 @@ describe Api::OpenidConnect::ProtectedResourceEndpoint, type: :request do context "when authorization has been destroyed" do before do auth_with_read.destroy - get api_openid_connect_user_info_path, access_token: access_token_with_read + get api_openid_connect_user_info_path, params: {access_token: access_token_with_read} end it "should respond with a 401 Unauthorized response" do diff --git a/spec/lib/api/openid_connect/token_endpoint_spec.rb b/spec/lib/api/openid_connect/token_endpoint_spec.rb index a455f8ffa..85e482ce5 100644 --- a/spec/lib/api/openid_connect/token_endpoint_spec.rb +++ b/spec/lib/api/openid_connect/token_endpoint_spec.rb @@ -19,9 +19,9 @@ describe Api::OpenidConnect::TokenEndpoint, type: :request do describe "the authorization code grant type" do context "when the authorization code is valid" do before do - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", client_id: client.client_id, client_secret: client.client_secret, - redirect_uri: "http://localhost:3000/", code: code + redirect_uri: "http://localhost:3000/", code: code} end it "should return a valid id token" do @@ -53,26 +53,26 @@ describe Api::OpenidConnect::TokenEndpoint, type: :request do it "should not allow code to be reused" do auth.reload - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", client_id: client.client_id, client_secret: client.client_secret, - redirect_uri: "http://localhost:3000/", code: code + redirect_uri: "http://localhost:3000/", code: code} expect(JSON.parse(response.body)["error"]).to eq("invalid_grant") end it "should not allow a nil code" do - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", client_id: client.client_id, client_secret: client.client_secret, - redirect_uri: "http://localhost:3000/", code: nil + redirect_uri: "http://localhost:3000/", code: nil} expect(JSON.parse(response.body)["error"]).to eq("invalid_request") end end context "when the authorization code is valid with jwt bearer" do before do - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", redirect_uri: "http://localhost:3000/", code: code_with_specific_id, client_assertion_type: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer", - client_assertion: File.read(valid_client_assertion_path) + client_assertion: File.read(valid_client_assertion_path)} end it "should return a valid id token" do @@ -97,27 +97,27 @@ describe Api::OpenidConnect::TokenEndpoint, type: :request do it "should not allow code to be reused" do auth_with_specific_id.reload - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", client_id: client.client_id, client_secret: client.client_secret, - redirect_uri: "http://localhost:3000/", code: code_with_specific_id + redirect_uri: "http://localhost:3000/", code: code_with_specific_id} expect(JSON.parse(response.body)["error"]).to eq("invalid_grant") end end context "when the authorization code is not valid" do it "should return an invalid grant error" do - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", - client_id: client.client_id, client_secret: client.client_secret, code: "123456" + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", + client_id: client.client_id, client_secret: client.client_secret, code: "123456"} expect(response.body).to include "invalid_grant" end end context "when the client assertion is in an invalid format" do before do - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", redirect_uri: "http://localhost:3000/", code: code_with_specific_id, client_assertion_type: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer", - client_assertion: "invalid_client_assertion.random" + client_assertion: "invalid_client_assertion.random"} end it "should return an error" do @@ -127,10 +127,10 @@ describe Api::OpenidConnect::TokenEndpoint, type: :request do context "when the client assertion is not matching with jwks keys" do before do - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", redirect_uri: "http://localhost:3000/", code: code_with_specific_id, client_assertion_type: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer", - client_assertion: File.read(client_assertion_with_tampered_sig_path) + client_assertion: File.read(client_assertion_with_tampered_sig_path)} end it "should return an error" do @@ -140,10 +140,10 @@ describe Api::OpenidConnect::TokenEndpoint, type: :request do context "when kid doesn't exist in jwks keys" do before do - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", redirect_uri: "http://localhost:3000/", code: code_with_specific_id, client_assertion_type: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer", - client_assertion: File.read(client_assertion_with_nonexistent_kid_path) + client_assertion: File.read(client_assertion_with_nonexistent_kid_path)} end it "should return an error" do @@ -153,18 +153,18 @@ describe Api::OpenidConnect::TokenEndpoint, type: :request do context "when the client is unregistered" do it "should return an error" do - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", code: auth.refresh_token, - client_id: SecureRandom.hex(16).to_s, client_secret: client.client_secret + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", code: auth.refresh_token, + client_id: SecureRandom.hex(16).to_s, client_secret: client.client_secret} expect(response.body).to include "invalid_client" end end context "when the client is unregistered with jwks keys" do before do - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", redirect_uri: "http://localhost:3000/", code: code_with_specific_id, client_assertion_type: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer", - client_assertion: File.read(client_assertion_with_nonexistent_client_id_path) + client_assertion: File.read(client_assertion_with_nonexistent_client_id_path)} end it "should return an error" do @@ -174,16 +174,16 @@ describe Api::OpenidConnect::TokenEndpoint, type: :request do context "when the code field is missing" do it "should return an invalid request error" do - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", - client_id: client.client_id, client_secret: client.client_secret + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", + client_id: client.client_id, client_secret: client.client_secret} expect(response.body).to include "invalid_request" end end context "when the client_secret doesn't match" do it "should return an invalid client error" do - post api_openid_connect_access_tokens_path, grant_type: "authorization_code", code: auth.refresh_token, - client_id: client.client_id, client_secret: "client.client_secret" + post api_openid_connect_access_tokens_path, params: {grant_type: "authorization_code", code: auth.refresh_token, + client_id: client.client_id, client_secret: "client.client_secret"} expect(response.body).to include "invalid_client" end end @@ -191,8 +191,8 @@ describe Api::OpenidConnect::TokenEndpoint, type: :request do describe "an unsupported grant type" do it "should return an unsupported grant type error" do - post api_openid_connect_access_tokens_path, grant_type: "noexistgrant", username: "bob", - password: "bluepin7", client_id: client.client_id, client_secret: client.client_secret, scope: "read" + post api_openid_connect_access_tokens_path, params: {grant_type: "noexistgrant", username: "bob", + password: "bluepin7", client_id: client.client_id, client_secret: client.client_secret, scope: "read"} expect(response.body).to include "unsupported_grant_type" end end @@ -200,8 +200,8 @@ describe Api::OpenidConnect::TokenEndpoint, type: :request do describe "the refresh token grant type" do context "when the refresh token is valid" do it "should return an access token" do - post api_openid_connect_access_tokens_path, grant_type: "refresh_token", - client_id: client.client_id, client_secret: client.client_secret, refresh_token: auth.refresh_token + post api_openid_connect_access_tokens_path, params: {grant_type: "refresh_token", + client_id: client.client_id, client_secret: client.client_secret, refresh_token: auth.refresh_token} json = JSON.parse(response.body) expect(response.body).to include "expires_in" expect(json["access_token"].length).to eq(64) @@ -211,32 +211,34 @@ describe Api::OpenidConnect::TokenEndpoint, type: :request do context "when the refresh token is not valid" do it "should return an invalid grant error" do - post api_openid_connect_access_tokens_path, grant_type: "refresh_token", - client_id: client.client_id, client_secret: client.client_secret, refresh_token: "123456" + post api_openid_connect_access_tokens_path, params: {grant_type: "refresh_token", + client_id: client.client_id, client_secret: client.client_secret, refresh_token: "123456"} expect(response.body).to include "invalid_grant" end end context "when the client is unregistered" do it "should return an error" do - post api_openid_connect_access_tokens_path, grant_type: "refresh_token", refresh_token: auth.refresh_token, - client_id: SecureRandom.hex(16).to_s, client_secret: client.client_secret + post api_openid_connect_access_tokens_path, params: {grant_type: "refresh_token", + refresh_token: auth.refresh_token, + client_id: SecureRandom.hex(16).to_s, client_secret: client.client_secret} expect(response.body).to include "invalid_client" end end context "when the refresh_token field is missing" do it "should return an invalid request error" do - post api_openid_connect_access_tokens_path, grant_type: "refresh_token", - client_id: client.client_id, client_secret: client.client_secret + post api_openid_connect_access_tokens_path, params: {grant_type: "refresh_token", + client_id: client.client_id, client_secret: client.client_secret} expect(response.body).to include "'refresh_token' required" end end context "when the client_secret doesn't match" do it "should return an invalid client error" do - post api_openid_connect_access_tokens_path, grant_type: "refresh_token", refresh_token: auth.refresh_token, - client_id: client.client_id, client_secret: "client.client_secret" + post api_openid_connect_access_tokens_path, params: {grant_type: "refresh_token", + refresh_token: auth.refresh_token, + client_id: client.client_id, client_secret: "client.client_secret"} expect(response.body).to include "invalid_client" end end From 9626c77a1c77d571de31ac7d6c57146c98b2730c Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 19:28:44 +0200 Subject: [PATCH 27/52] Remove `skip_fallback` from post fetcher --- lib/diaspora/fetcher/public.rb | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/lib/diaspora/fetcher/public.rb b/lib/diaspora/fetcher/public.rb index 34af2f30e..1a7fbd7ee 100644 --- a/lib/diaspora/fetcher/public.rb +++ b/lib/diaspora/fetcher/public.rb @@ -102,25 +102,16 @@ module Diaspora; module Fetcher; class Public logger.debug "post: #{post.to_s[0..250]}" - # disable some stuff we don't want for bulk inserts - StatusMessage.skip_callback :create, :set_guid - entry = StatusMessage.diaspora_initialize( - :author => @person, - :public => true - ) - entry.assign_attributes( + author: @person, + public: true, guid: post["guid"], text: post["text"], provider_display_name: post["provider_display_name"], created_at: ActiveSupport::TimeZone.new("UTC").parse(post["created_at"]).to_datetime, - interacted_at: ActiveSupport::TimeZone.new("UTC").parse(post["interacted_at"]).to_datetime ) entry.save - # re-enable everything we disabled before - StatusMessage.set_callback :create, :set_guid - end set_fetch_status Public::Status_Processed end From 27f3b68f546f35a907f847970265952c66c7d0e7 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 19:47:58 +0200 Subject: [PATCH 28/52] Copy headers in OpenidConnect TokenEndpointController --- .../api/openid_connect/token_endpoint_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/openid_connect/token_endpoint_controller.rb b/app/controllers/api/openid_connect/token_endpoint_controller.rb index c8fd53c2d..378f0086b 100644 --- a/app/controllers/api/openid_connect/token_endpoint_controller.rb +++ b/app/controllers/api/openid_connect/token_endpoint_controller.rb @@ -8,7 +8,8 @@ module Api if req["client_assertion_type"] == "urn:ietf:params:oauth:client-assertion-type:jwt-bearer" handle_jwt_bearer(req) end - self.status, response.headers, self.response_body = Api::OpenidConnect::TokenEndpoint.new.call(request.env) + self.status, headers, self.response_body = Api::OpenidConnect::TokenEndpoint.new.call(request.env) + headers.each {|name, value| response.headers[name] = value } nil end From 385ab76077ab6d9dd3adbf00b26bc743f7c4fbb7 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 20:06:26 +0200 Subject: [PATCH 29/52] Refactor OpenID specs to prevent duplicate client names --- .../step_definitions/oidc_common_steps.rb | 2 +- .../authorizations_controller_spec.rb | 5 ++-- spec/factories.rb | 24 ++----------------- .../api/openid_connect/token_endpoint_spec.rb | 2 +- 4 files changed, 7 insertions(+), 26 deletions(-) diff --git a/features/step_definitions/oidc_common_steps.rb b/features/step_definitions/oidc_common_steps.rb index 24f543754..0f7ae95a8 100644 --- a/features/step_definitions/oidc_common_steps.rb +++ b/features/step_definitions/oidc_common_steps.rb @@ -1,5 +1,5 @@ Given /^a client with a provided picture exists for user "([^\"]*)"$/ do |email| - app = FactoryGirl.create(:o_auth_application_with_image) + app = FactoryGirl.create(:o_auth_application, logo_uri: "/assets/user/default.png") user = User.find_by(email: email) FactoryGirl.create(:auth_with_read, user: user, o_auth_application: app) end diff --git a/spec/controllers/api/openid_connect/authorizations_controller_spec.rb b/spec/controllers/api/openid_connect/authorizations_controller_spec.rb index 51d6e40ca..54435e0b3 100644 --- a/spec/controllers/api/openid_connect/authorizations_controller_spec.rb +++ b/spec/controllers/api/openid_connect/authorizations_controller_spec.rb @@ -1,7 +1,5 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do let!(:client) { FactoryGirl.create(:o_auth_application) } - let!(:client_with_xss) { FactoryGirl.create(:o_auth_application_with_xss) } - let!(:client_with_multiple_redirects) { FactoryGirl.create(:o_auth_application_with_multiple_redirects) } before do sign_in alice, scope: :user @@ -92,6 +90,8 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when multiple redirect URLs are pre-registered" do it "should return an invalid request error" do + client_with_multiple_redirects = + FactoryGirl.create(:o_auth_application, redirect_uris: %w[http://localhost:3000/ http://localhost/]) post api_openid_connect_authorizations_new_path, params: {client_id: client_with_multiple_redirects.client_id, response_type: "id_token", scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16)} expect(response.body).to include("The request was malformed") @@ -186,6 +186,7 @@ describe Api::OpenidConnect::AuthorizationsController, type: :request do context "when XSS script is passed as name" do it "should escape html" do + client_with_xss = FactoryGirl.create(:o_auth_application_with_xss) post api_openid_connect_authorizations_new_path, params: {client_id: client_with_xss.client_id, redirect_uri: "http://localhost:3000/", response_type: "id_token", scope: "openid", nonce: SecureRandom.hex(16), state: SecureRandom.hex(16)} diff --git a/spec/factories.rb b/spec/factories.rb index 30c8cb5ac..d3fc152d8 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -360,35 +360,15 @@ FactoryGirl.define do factory(:status, :parent => :status_message) factory :o_auth_application, class: Api::OpenidConnect::OAuthApplication do - client_name "Diaspora Test Client" + client_name { "Diaspora Test Client #{r_str}" } redirect_uris %w(http://localhost:3000/) end - factory :o_auth_application_with_image, class: Api::OpenidConnect::OAuthApplication do - client_name "Diaspora Test Client" - redirect_uris %w(http://localhost:3000/) - logo_uri "/assets/user/default.png" - end - - factory :o_auth_application_with_ppid, class: Api::OpenidConnect::OAuthApplication do - client_name "Diaspora Test Client" - redirect_uris %w(http://localhost:3000/) + factory :o_auth_application_with_ppid, parent: :o_auth_application do ppid true sector_identifier_uri "https://example.com/uri" end - factory :o_auth_application_with_ppid_with_specific_id, class: Api::OpenidConnect::OAuthApplication do - client_name "Diaspora Test Client" - redirect_uris %w(http://localhost:3000/) - ppid true - sector_identifier_uri "https://example.com/uri" - end - - factory :o_auth_application_with_multiple_redirects, class: Api::OpenidConnect::OAuthApplication do - client_name "Diaspora Test Client" - redirect_uris %w(http://localhost:3000/ http://localhost/) - end - factory :o_auth_application_with_xss, class: Api::OpenidConnect::OAuthApplication do client_name "" redirect_uris %w(http://localhost:3000/) diff --git a/spec/lib/api/openid_connect/token_endpoint_spec.rb b/spec/lib/api/openid_connect/token_endpoint_spec.rb index 85e482ce5..440d8132a 100644 --- a/spec/lib/api/openid_connect/token_endpoint_spec.rb +++ b/spec/lib/api/openid_connect/token_endpoint_spec.rb @@ -5,7 +5,7 @@ describe Api::OpenidConnect::TokenEndpoint, type: :request do o_auth_application: client, user: bob, redirect_uri: "http://localhost:3000/", scopes: ["openid"]) } let!(:code) { auth.create_code } - let!(:client_with_specific_id) { FactoryGirl.create(:o_auth_application_with_ppid_with_specific_id) } + let!(:client_with_specific_id) { FactoryGirl.create(:o_auth_application_with_ppid) } let!(:auth_with_specific_id) do client_with_specific_id.client_id = "14d692cd53d9c1a9f46fd69e0e57443e" client_with_specific_id.jwks = File.read(jwks_file_path) From 1adb4837ef5d7c5c594c2e70384d6e4e06966f53 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 20:27:33 +0200 Subject: [PATCH 30/52] Fix OpenID Connect TokenEndpoint when client id is not found --- lib/api/openid_connect/token_endpoint.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/api/openid_connect/token_endpoint.rb b/lib/api/openid_connect/token_endpoint.rb index a2e8c8ac2..7bde221a9 100644 --- a/lib/api/openid_connect/token_endpoint.rb +++ b/lib/api/openid_connect/token_endpoint.rb @@ -50,7 +50,7 @@ module Api end def app_valid?(o_auth_app, req) - o_auth_app.client_secret == req.client_secret + o_auth_app.try(:client_secret) == req.client_secret end end end From 77951c4657b98dd8d83aa456754de97ead0de429 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 20:52:25 +0200 Subject: [PATCH 31/52] Fix user removal spec --- spec/models/user_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 719129c78..7032dac82 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1078,7 +1078,7 @@ describe User, :type => :model do end it "#flags user for removal" do - remove_at = Time.now+5.days + remove_at = Time.now.change(usec: 0).utc + 5.days @user.flag_for_removal(remove_at) expect(@user.remove_after).to eq(remove_at) end From b61536ff0654335b18d7ad261a2beb1b15682590 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 21:14:42 +0200 Subject: [PATCH 32/52] Remove unused `formatted_birthday` from profile model --- app/models/profile.rb | 4 ---- spec/models/profile_spec.rb | 24 ------------------------ 2 files changed, 28 deletions(-) diff --git a/app/models/profile.rb b/app/models/profile.rb index 3b903c1be..dc5398133 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -106,10 +106,6 @@ class Profile < ApplicationRecord end end - def formatted_birthday - birthday.to_s(:long).gsub(/, 100[0|4]/, "") if birthday.present? - end - def bio_message @bio_message ||= Diaspora::MessageRenderer.new(bio) end diff --git a/spec/models/profile_spec.rb b/spec/models/profile_spec.rb index 4d245f7fd..8b6b5ab53 100644 --- a/spec/models/profile_spec.rb +++ b/spec/models/profile_spec.rb @@ -269,30 +269,6 @@ describe Profile, :type => :model do it_should_behave_like 'it is taggable' end - describe '#formatted_birthday' do - before do - @profile = FactoryGirl.build(:profile) - @profile_hash = { 'year' => '2000', 'month' => '01', 'day' => '01' } - @profile.date = @profile_hash - end - - it 'returns a formatted date' do - expect(@profile.formatted_birthday).to eq("January 1, 2000") - end - - it 'removes nil year birthdays' do - @profile_hash.delete('year') - @profile.date = @profile_hash - expect(@profile.formatted_birthday).to eq('January 1') - end - - it 'retuns nil if no birthday is set' do - @profile.date = {} - expect(@profile.formatted_birthday).to eq(nil) - end - - end - describe "#tombstone!" do before do @profile = bob.person.profile From ca8974d4a0b0b0d7a0adae3463150b95ac65c3d6 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 21:17:33 +0200 Subject: [PATCH 33/52] Use ActionDispatch::TestRequest in NotificationSerializer spec --- spec/serializers/notification_serializer_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/serializers/notification_serializer_spec.rb b/spec/serializers/notification_serializer_spec.rb index 8f9a20a3c..156dc5ee5 100644 --- a/spec/serializers/notification_serializer_spec.rb +++ b/spec/serializers/notification_serializer_spec.rb @@ -3,7 +3,7 @@ describe NotificationSerializer do before do allow(notifications_controller).to receive(:current_user).and_return(notification.recipient) - notifications_controller.request = ActionController::TestRequest.new(host: AppConfig.pod_uri) + notifications_controller.request = ActionDispatch::TestRequest.new(host: AppConfig.pod_uri) end let(:notification) { FactoryGirl.create(:notification) } From d62772f9c0a37d796d0d27ae71d42407e130ddca Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 22:00:02 +0200 Subject: [PATCH 34/52] Replace `Fixnum` with `Integer` --- spec/models/status_message_spec.rb | 4 ++-- spec/presenters/o_embed_presenter_spec.rb | 4 ++-- spec/workers/send_private_spec.rb | 2 +- spec/workers/send_public_spec.rb | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/models/status_message_spec.rb b/spec/models/status_message_spec.rb index 718f49ba3..d7632958e 100644 --- a/spec/models/status_message_spec.rb +++ b/spec/models/status_message_spec.rb @@ -193,7 +193,7 @@ describe StatusMessage, type: :model do it "should queue a GatherOembedData if it includes a link" do status_message - expect(Workers::GatherOEmbedData).to receive(:perform_async).with(instance_of(Fixnum), instance_of(String)) + expect(Workers::GatherOEmbedData).to receive(:perform_async).with(kind_of(Integer), instance_of(String)) status_message.save end @@ -214,7 +214,7 @@ describe StatusMessage, type: :model do it "should queue a GatherOpenGraphData if it includes a link" do status_message - expect(Workers::GatherOpenGraphData).to receive(:perform_async).with(instance_of(Fixnum), instance_of(String)) + expect(Workers::GatherOpenGraphData).to receive(:perform_async).with(kind_of(Integer), instance_of(String)) status_message.save end diff --git a/spec/presenters/o_embed_presenter_spec.rb b/spec/presenters/o_embed_presenter_spec.rb index 9a14a5e7a..55c19a80e 100644 --- a/spec/presenters/o_embed_presenter_spec.rb +++ b/spec/presenters/o_embed_presenter_spec.rb @@ -17,7 +17,7 @@ describe OEmbedPresenter do describe '#iframe_html' do it 'passes the height options to post_iframe_url' do - expect(@oembed).to receive(:post_iframe_url).with(instance_of(Fixnum), instance_of(Hash)) + expect(@oembed).to receive(:post_iframe_url).with(kind_of(Integer), instance_of(Hash)) @oembed.iframe_html end end @@ -31,4 +31,4 @@ describe OEmbedPresenter do expect(OEmbedPresenter.id_from_url('http://localhost:400/p/1')).to eq("1") end end -end \ No newline at end of file +end diff --git a/spec/workers/send_private_spec.rb b/spec/workers/send_private_spec.rb index 92765c0a2..e3d9a99bc 100644 --- a/spec/workers/send_private_spec.rb +++ b/spec/workers/send_private_spec.rb @@ -23,7 +23,7 @@ describe Workers::SendPrivate do sender_id, obj_str, targets ).and_return(failing_targets) expect(Workers::SendPrivate).to receive(:perform_in).with( - kind_of(Fixnum), sender_id, obj_str, failing_targets, 1 + kind_of(Integer), sender_id, obj_str, failing_targets, 1 ) Workers::SendPrivate.new.perform(sender_id, obj_str, targets) diff --git a/spec/workers/send_public_spec.rb b/spec/workers/send_public_spec.rb index bf34c6501..4f87ddb33 100644 --- a/spec/workers/send_public_spec.rb +++ b/spec/workers/send_public_spec.rb @@ -19,7 +19,7 @@ describe Workers::SendPublic do sender_id, obj_str, urls, xml ).and_return(failing_urls) expect(Workers::SendPublic).to receive(:perform_in).with( - kind_of(Fixnum), sender_id, obj_str, failing_urls, xml, 1 + kind_of(Integer), sender_id, obj_str, failing_urls, xml, 1 ) Workers::SendPublic.new.perform(sender_id, obj_str, urls, xml) From 63e342e6c48e872cf25ecd5a1e11c7695fd8df43 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 22:18:26 +0200 Subject: [PATCH 35/52] Use aspect_ids for visible_shareables --- spec/models/user/posting_spec.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/spec/models/user/posting_spec.rb b/spec/models/user/posting_spec.rb index 83226b16a..dd24509ed 100644 --- a/spec/models/user/posting_spec.rb +++ b/spec/models/user/posting_spec.rb @@ -10,18 +10,17 @@ describe User, :type => :model do describe '#add_to_streams' do before do - @params = {:text => "hey", :to => [@aspect.id, @aspect1.id]} - @post = alice.build_post(:status_message, @params) + @post = alice.build_post(:status_message, text: "hey") @post.save - @aspect_ids = @params[:to] + @aspect_ids = [@aspect.id, @aspect1.id] @aspects = alice.aspects_from_ids(@aspect_ids) end it 'saves post into visible post ids' do expect { alice.add_to_streams(@post, @aspects) - }.to change{alice.visible_shareables(Post, :by_members_of => @aspects).length}.by(1) - expect(alice.visible_shareables(Post, :by_members_of => @aspects)).to include @post + }.to change { alice.visible_shareables(Post, by_members_of: @aspect_ids).length }.by(1) + expect(alice.visible_shareables(Post, by_members_of: @aspect_ids)).to include @post end it 'saves post into each aspect in aspect_ids' do From 29ab4d8242c2b7be45aeb6e83ae4f2a8d66320f6 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 22:40:18 +0200 Subject: [PATCH 36/52] Fix querying spec, remove `(Post)` --- spec/models/user/querying_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/user/querying_spec.rb b/spec/models/user/querying_spec.rb index 471f2e32e..18ea07dfd 100644 --- a/spec/models/user/querying_spec.rb +++ b/spec/models/user/querying_spec.rb @@ -72,7 +72,7 @@ describe User::Querying, :type => :model do end it "does not pull back hidden posts" do - @status.share_visibilities(Post).where(user_id: alice.id).first.update_attributes(hidden: true) + @status.share_visibilities.where(user_id: alice.id).first.update_attributes(hidden: true) expect(alice.visible_shareable_ids(Post).include?(@status.id)).to be false end end From f4136d45599ee9a97031204a45cc739dbf527505 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 22:47:33 +0200 Subject: [PATCH 37/52] Fix post spec * don't use `double` for queries * use `second` instead of `at()`. --- spec/models/post_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index 550fdc74d..fdfc1f4b4 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -65,12 +65,12 @@ describe Post, :type => :model do it 'calls includes_for_a_stream' do expect(Post).to receive(:includes_for_a_stream) - Post.for_a_stream(double, double) + Post.for_a_stream(Time.zone.now, "created_at") end it 'calls excluding_blocks if a user is present' do expect(Post).to receive(:excluding_blocks).with(alice).and_return(Post) - Post.for_a_stream(double, double, alice) + Post.for_a_stream(Time.zone.now, "created_at", alice) end end @@ -168,7 +168,7 @@ describe Post, :type => :model do it "returns them in reverse creation order" do posts = Post.for_visible_shareable_sql(Time.now + 1, "created_at") expect(posts.first.text).to eq("second") - expect(posts.at(1).text).to eq("first") + expect(posts.second.text).to eq("first") expect(posts.last.text).to eq("alice - 5") end end From 33e3e3a14deac5c29bbce3d84b1bf4248f79c67b Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 22:56:18 +0200 Subject: [PATCH 38/52] Fix person spec, use `first(15)` instead of `slice(0..14)` --- spec/lib/stream/person_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/lib/stream/person_spec.rb b/spec/lib/stream/person_spec.rb index b5cd7422b..2c44377bc 100644 --- a/spec/lib/stream/person_spec.rb +++ b/spec/lib/stream/person_spec.rb @@ -32,7 +32,7 @@ describe Stream::Person do end posts = posts.reverse.slice(0..14) - fetched_posts = fetched_posts.slice(0..14) + fetched_posts = fetched_posts.first(15) expect(fetched_posts).to eq(posts) end From ff3bd1f59b037b44bc758caa71d1509795a0f537 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 6 Aug 2017 23:22:59 +0200 Subject: [PATCH 39/52] Fix post service spec * load records to array to check them * test that only 15 people are returned --- spec/services/post_service_spec.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/spec/services/post_service_spec.rb b/spec/services/post_service_spec.rb index 28dfae6c1..5dd889b72 100644 --- a/spec/services/post_service_spec.rb +++ b/spec/services/post_service_spec.rb @@ -299,7 +299,7 @@ describe PostService do include_context "with a current user's friend" it "returns mention suggestions in the correct order" do - result = post_service.mentionable_in_comment(post.id, "Ro") + result = post_service.mentionable_in_comment(post.id, "Ro").to_a expect(result.size).to be > 7 # participants: post author, comments, likers expect(result[0..4]).to eq([post_author, commenter1, commenter2, liker1, liker2]) @@ -396,8 +396,10 @@ describe PostService do end it "calls Person.limit" do - expect_any_instance_of(Person::ActiveRecord_Relation).to receive(:limit).with(15).and_call_original - post_service.mentionable_in_comment(post.id, "whatever") + 16.times { + FactoryGirl.create(:comment, author: FactoryGirl.create(:person, first_name: "Ro#{r_str}"), post: post) + } + expect(post_service.mentionable_in_comment(post.id, "Ro").length).to eq(15) end it "contains a constraint on a current user" do From b80d324504efc2806d37c4217eaff8e9a39f057c Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Mon, 7 Aug 2017 01:36:10 +0200 Subject: [PATCH 40/52] Fix some failing cukes because they were too fast --- features/desktop/signs_up.feature | 1 + features/mobile/activity_stream.feature | 3 ++- features/step_definitions/web_steps.rb | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/features/desktop/signs_up.feature b/features/desktop/signs_up.feature index d68c58f19..bed865064 100644 --- a/features/desktop/signs_up.feature +++ b/features/desktop/signs_up.feature @@ -58,6 +58,7 @@ Feature: new user registration | profile_first_name | some name | And I fill in "tags" with "#rockstar" And I press the first ".as-result-item" within "#as-results-tags" + And I wait until ajax requests finished And I follow "awesome_button" Then I should be on the stream page And the publisher should be expanded diff --git a/features/mobile/activity_stream.feature b/features/mobile/activity_stream.feature index 27475abcd..823b4f7ad 100644 --- a/features/mobile/activity_stream.feature +++ b/features/mobile/activity_stream.feature @@ -21,7 +21,8 @@ Feature: Viewing my activity on the stream mobile page Scenario: Show liked post on my activity When I sign in as "bob@bob.bob" on the mobile website When I click on selector "a.like-action.inactive" - And I go to the activity stream page + Then I should see an element "a.like-action.active" + When I go to the activity stream page Then I should see "My activity" within "#main" And I should see "Hello! I am #newhere" within ".ltr" diff --git a/features/step_definitions/web_steps.rb b/features/step_definitions/web_steps.rb index f2c564c8f..36092716f 100644 --- a/features/step_definitions/web_steps.rb +++ b/features/step_definitions/web_steps.rb @@ -186,3 +186,9 @@ end Then /^show me the page$/ do save_and_open_page end + +Then /^I wait until ajax requests finished$/ do + Timeout.timeout(Capybara.default_max_wait_time) do + loop until page.evaluate_script("jQuery.active") == 0 + end +end From b203862ca3e748edb3a19446a8433568ea223aff Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Mon, 7 Aug 2017 03:11:53 +0200 Subject: [PATCH 41/52] Workaround for bootstrap-sass The change in assets.rb should be enough, but it doesn't work, because sprockets `after_initialize` runs before it and initializes sprockets with unfiltered paths. But the trick with the underscore works, because bootstrap-sass has named the file `_bootstrap.scss`, and rails-assets-bootstrap has `bootstrap.scss`, so with `_bootstrap` it uses the correct bootstrap. --- app/assets/stylesheets/bootstrap-complete.scss | 2 +- config/initializers/assets.rb | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/bootstrap-complete.scss b/app/assets/stylesheets/bootstrap-complete.scss index df03c6ad0..0e49df681 100644 --- a/app/assets/stylesheets/bootstrap-complete.scss +++ b/app/assets/stylesheets/bootstrap-complete.scss @@ -1,7 +1,7 @@ // Calling this file bootstrap would cause an infinite recursion during asset compilation. @import "bootstrap-sprockets"; @import "bootstrap-variables"; //our overwrites of bootstrap variables -@import "bootstrap"; +@import "_bootstrap"; // Plugins diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index b8d5fb65f..33e369e29 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -3,8 +3,16 @@ # bootstrap-markdown plugin relies on rails-assets-bootstrap gem but we use # bootstrap-sass this line makes sure we exclude every asset comming # from rails-assets-bootstrap to prevent conflicts with bootstrap-sass -Rails.configuration.assets.paths.reject! do |path| - path.include?("rails-assets-bootstrap") && !path.include?("rails-assets-bootstrap-markdown") + +# See https://github.com/tenex/rails-assets/issues/314 +Rails.application.config.after_initialize do + # add the gem names you wish to reject to the below array + excluded_gem_names = ["rails-assets-bootstrap"] + + excluded_gem_full_names = Gem::Specification.select {|g| excluded_gem_names.include? g.name }.flat_map(&:full_name) + Rails.application.config.assets.paths.reject! do |path| + excluded_gem_full_names.any? {|gem_name| path.include? gem_name } + end end # Version of your assets, change this if you want to expire all your assets. From 1f272f530681d83b3ec8500656a493afe601115d Mon Sep 17 00:00:00 2001 From: Dennis Schubert Date: Mon, 7 Aug 2017 15:09:48 +0200 Subject: [PATCH 42/52] Do not touch the schema_migrations table in migrations ... this breaks the Rails 5 upgrade, and it's actually no longer needed. New installations will have the right size anyway, and even if some older installations miss the migration by not updating for 2 years, it still doesn't matter since there is no risk that we will ever have emojis in our migration filenames. --- db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb b/db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb index 37dd9373e..832742889 100644 --- a/db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb +++ b/db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb @@ -86,9 +86,6 @@ class SetMysqlToUnicodeMb4 < ActiveRecord::Migration remove_index 'rails_admin_histories', :name => 'index_rails_admin_histories' add_index 'rails_admin_histories', ["item", "table", "month", "year"], :name => 'index_rails_admin_histories', length: {"table"=>188}, :using => :btree - remove_index 'schema_migrations', :name => 'unique_schema_migrations' - add_index 'schema_migrations', ["version"], :name => 'unique_schema_migrations', length: {"version"=>191}, :using => :btree - remove_index 'services', :name => 'index_services_on_type_and_uid' add_index 'services', ["type", "uid"], :name => 'index_services_on_type_and_uid', length: {"type"=>64, "uid"=>127}, :using => :btree From b61423750440f08f8c6a425ab2fb2692df8a7dc9 Mon Sep 17 00:00:00 2001 From: Dennis Schubert Date: Mon, 7 Aug 2017 15:20:15 +0200 Subject: [PATCH 43/52] Make all current migrations Rails 4.2 based --- db/migrate/0000_create_schema.rb | 2 +- db/migrate/20130207231310_add_facebook_id_to_post.rb | 2 +- db/migrate/20130404211624_fix_default_image_url_from_profile.rb | 2 +- db/migrate/20130429073928_add_tweet_id_to_post.rb | 2 +- db/migrate/20130608171134_add_open_graph_cache.rb | 2 +- .../20130613203350_remove_limit_from_root_guid_in_posts.rb | 2 +- .../20130717104359_migrate_activity_stream_to_status_message.rb | 2 +- db/migrate/20130801063213_add_tumblr_post_ids_to_posts.rb | 2 +- db/migrate/20131017093025_create_post_reports.rb | 2 +- db/migrate/20131213171804_create_simple_captcha_data.rb | 2 +- db/migrate/20140121132816_add_post_type_to_post_report.rb | 2 +- db/migrate/20140214104217_rename_post_report_to_report.rb | 2 +- db/migrate/20140222162826_devise_add_lastseenable_user.rb | 2 +- db/migrate/20140308154022_create_polls.rb | 2 +- db/migrate/20140422134050_rename_post_columns_to_item.rb | 2 +- db/migrate/20140422134627_change_user_id_type_to_integer.rb | 2 +- ...taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb | 2 +- db/migrate/20140801101230_create_chat_contacts.rb | 2 +- db/migrate/20140801101352_create_chat_fragments.rb | 2 +- .../20140824230505_add_completed_at_to_account_deletions.rb | 2 +- db/migrate/20140826165533_increase_simple_captcha_limit.rb | 2 +- db/migrate/20140906192846_fix_open_graph_data.rb | 2 +- db/migrate/20141001162851_add_remove_after_to_users.rb | 2 +- db/migrate/20141007003922_add_chat_enabled_to_aspects.rb | 2 +- db/migrate/20141024170120_create_chat_offline_messages.rb | 2 +- .../20141209041241_drop_open_graph_caches_with_invalid_urls.rb | 2 +- db/migrate/20141216213423_purge_orphan_conversations.rb | 2 +- db/migrate/20141227120907_add_export_to_user.rb | 2 +- db/migrate/20141230214830_user_pref_strip_exif.rb | 2 +- db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb | 2 +- db/migrate/20150209230946_disable_mail_for_closed_account.rb | 2 +- db/migrate/20150220001357_add_photos_export_to_user.rb | 2 +- ...150403192408_remove_deleted_aspects_from_auto_follow_back.rb | 2 +- db/migrate/20150403212139_fix_wrong_only_sharing.rb | 2 +- db/migrate/20150523004437_enable_color_themes.rb | 2 +- db/migrate/20150531005120_cleanup_default_avatars.rb | 2 +- db/migrate/20150607143809_fix_photo_public_flag.rb | 2 +- db/migrate/20150613202109_create_o_auth_applications.rb | 2 +- db/migrate/20150630221004_add_public_to_profiles.rb | 2 +- db/migrate/20150708153926_create_authorizations.rb | 2 +- db/migrate/20150708153928_create_o_auth_access_tokens.rb | 2 +- db/migrate/20150714055110_create_id_tokens.rb | 2 +- db/migrate/20150724152052_remove_favorites_from_posts.rb | 2 +- .../20150731123113_create_pairwise_pseudonymous_identifiers.rb | 2 +- db/migrate/20150731123114_add_status_to_pods.rb | 2 +- db/migrate/20150828132451_remove_duplicate_and_empty_pods.rb | 2 +- db/migrate/20151003142048_update_report_item_types.rb | 2 +- db/migrate/20151210213023_remove_signatures_from_relayables.rb | 2 +- db/migrate/20160124234712_extend_pods.rb | 2 +- db/migrate/20160225232049_link_share_visibilities_with_user.rb | 2 +- db/migrate/20160302025129_cleanup_aspect_visibility.rb | 2 +- db/migrate/20160307142216_cleanup_handles.rb | 2 +- .../20160327103605_add_author_id_index_to_participations.rb | 2 +- .../20160509232726_cleanup_duplicates_and_add_unique_indexes.rb | 2 +- .../20160531170531_remove_duplicate_aspect_visibilities.rb | 2 +- db/migrate/20160618033455_cleanup_participations.rb | 2 +- db/migrate/20160720212620_create_signature_tables.rb | 2 +- db/migrate/20160802212635_cleanup_posts_table.rb | 2 +- db/migrate/20160807212443_participation_counter.rb | 2 +- .../20160810230114_cleanup_invitation_columns_from_users.rb | 2 +- db/migrate/20160813115514_remove_id_tokens.rb | 2 +- ...2739_remove_started_sharing_notifications_without_contact.rb | 2 +- db/migrate/20160829170244_add_post_default_to_aspects.rb | 2 +- db/migrate/20160901072443_add_video_url_to_open_graph_cache.rb | 2 +- db/migrate/20160902180630_remove_invalid_unconfirmed_emails.rb | 2 +- db/migrate/20160906225138_fix_photos_share_visibilities.rb | 2 +- db/migrate/20161015174300_remove_empty_pod.rb | 2 +- db/migrate/20161024231443_add_scheduled_check_to_pod.rb | 2 +- db/migrate/20161107100840_polymorphic_mentions.rb | 2 +- db/migrate/20170430022507_remove_message_signature.rb | 2 +- 70 files changed, 70 insertions(+), 70 deletions(-) diff --git a/db/migrate/0000_create_schema.rb b/db/migrate/0000_create_schema.rb index 97fcc3da6..900b8a8e8 100644 --- a/db/migrate/0000_create_schema.rb +++ b/db/migrate/0000_create_schema.rb @@ -1,4 +1,4 @@ -class CreateSchema < ActiveRecord::Migration +class CreateSchema < ActiveRecord::Migration[4.2] create_table "account_deletions", :force => true do |t| t.string "diaspora_handle" t.integer "person_id" diff --git a/db/migrate/20130207231310_add_facebook_id_to_post.rb b/db/migrate/20130207231310_add_facebook_id_to_post.rb index df888dcca..f559f46a7 100644 --- a/db/migrate/20130207231310_add_facebook_id_to_post.rb +++ b/db/migrate/20130207231310_add_facebook_id_to_post.rb @@ -1,4 +1,4 @@ -class AddFacebookIdToPost < ActiveRecord::Migration +class AddFacebookIdToPost < ActiveRecord::Migration[4.2] def change add_column :posts, :facebook_id, :string end diff --git a/db/migrate/20130404211624_fix_default_image_url_from_profile.rb b/db/migrate/20130404211624_fix_default_image_url_from_profile.rb index 4749728fc..80618b8a5 100644 --- a/db/migrate/20130404211624_fix_default_image_url_from_profile.rb +++ b/db/migrate/20130404211624_fix_default_image_url_from_profile.rb @@ -1,4 +1,4 @@ -class FixDefaultImageUrlFromProfile < ActiveRecord::Migration +class FixDefaultImageUrlFromProfile < ActiveRecord::Migration[4.2] def up execute("UPDATE profiles SET image_url = REPLACE(image_url, 'images', 'assets'), image_url_small = REPLACE(image_url_small, 'images', 'assets'), image_url_medium = REPLACE(image_url_medium, 'images', 'assets') WHERE image_url LIKE '%images/user/default.png';") end diff --git a/db/migrate/20130429073928_add_tweet_id_to_post.rb b/db/migrate/20130429073928_add_tweet_id_to_post.rb index f62c2b964..7f9c5808f 100644 --- a/db/migrate/20130429073928_add_tweet_id_to_post.rb +++ b/db/migrate/20130429073928_add_tweet_id_to_post.rb @@ -1,4 +1,4 @@ -class AddTweetIdToPost < ActiveRecord::Migration +class AddTweetIdToPost < ActiveRecord::Migration[4.2] def change add_column :posts, :tweet_id, :string add_index :posts, ['tweet_id'], :length => { "tweet_id" => 191 } diff --git a/db/migrate/20130608171134_add_open_graph_cache.rb b/db/migrate/20130608171134_add_open_graph_cache.rb index ccf4aecc4..ac4826c1f 100644 --- a/db/migrate/20130608171134_add_open_graph_cache.rb +++ b/db/migrate/20130608171134_add_open_graph_cache.rb @@ -1,4 +1,4 @@ -class AddOpenGraphCache < ActiveRecord::Migration +class AddOpenGraphCache < ActiveRecord::Migration[4.2] def up create_table :open_graph_caches do |t| t.string :title diff --git a/db/migrate/20130613203350_remove_limit_from_root_guid_in_posts.rb b/db/migrate/20130613203350_remove_limit_from_root_guid_in_posts.rb index 97b653a10..2e88f0a1e 100644 --- a/db/migrate/20130613203350_remove_limit_from_root_guid_in_posts.rb +++ b/db/migrate/20130613203350_remove_limit_from_root_guid_in_posts.rb @@ -1,4 +1,4 @@ -class RemoveLimitFromRootGuidInPosts < ActiveRecord::Migration +class RemoveLimitFromRootGuidInPosts < ActiveRecord::Migration[4.2] def up remove_index 'posts', :name => 'index_posts_on_root_guid' remove_index 'posts', :name => 'index_posts_on_author_id_and_root_guid' diff --git a/db/migrate/20130717104359_migrate_activity_stream_to_status_message.rb b/db/migrate/20130717104359_migrate_activity_stream_to_status_message.rb index 678cc8410..c37d8dd3e 100644 --- a/db/migrate/20130717104359_migrate_activity_stream_to_status_message.rb +++ b/db/migrate/20130717104359_migrate_activity_stream_to_status_message.rb @@ -1,4 +1,4 @@ -class MigrateActivityStreamToStatusMessage < ActiveRecord::Migration +class MigrateActivityStreamToStatusMessage < ActiveRecord::Migration[4.2] class Post < ApplicationRecord; self.inheritance_column = false; end def up posts_stream_photos = Post.where(type: 'ActivityStreams::Photo') diff --git a/db/migrate/20130801063213_add_tumblr_post_ids_to_posts.rb b/db/migrate/20130801063213_add_tumblr_post_ids_to_posts.rb index e8ddb4877..638157388 100644 --- a/db/migrate/20130801063213_add_tumblr_post_ids_to_posts.rb +++ b/db/migrate/20130801063213_add_tumblr_post_ids_to_posts.rb @@ -1,4 +1,4 @@ -class AddTumblrPostIdsToPosts < ActiveRecord::Migration +class AddTumblrPostIdsToPosts < ActiveRecord::Migration[4.2] def change add_column :posts, :tumblr_ids, :text end diff --git a/db/migrate/20131017093025_create_post_reports.rb b/db/migrate/20131017093025_create_post_reports.rb index bb68ff896..5ccceca03 100644 --- a/db/migrate/20131017093025_create_post_reports.rb +++ b/db/migrate/20131017093025_create_post_reports.rb @@ -1,4 +1,4 @@ -class CreatePostReports < ActiveRecord::Migration +class CreatePostReports < ActiveRecord::Migration[4.2] def change create_table :post_reports do |t| t.integer :post_id, :null => false diff --git a/db/migrate/20131213171804_create_simple_captcha_data.rb b/db/migrate/20131213171804_create_simple_captcha_data.rb index 4573b2056..9068aec00 100644 --- a/db/migrate/20131213171804_create_simple_captcha_data.rb +++ b/db/migrate/20131213171804_create_simple_captcha_data.rb @@ -1,4 +1,4 @@ -class CreateSimpleCaptchaData < ActiveRecord::Migration +class CreateSimpleCaptchaData < ActiveRecord::Migration[4.2] def self.up create_table :simple_captcha_data do |t| t.string :key, :limit => 40 diff --git a/db/migrate/20140121132816_add_post_type_to_post_report.rb b/db/migrate/20140121132816_add_post_type_to_post_report.rb index 4d6686eea..766efb9b9 100644 --- a/db/migrate/20140121132816_add_post_type_to_post_report.rb +++ b/db/migrate/20140121132816_add_post_type_to_post_report.rb @@ -1,4 +1,4 @@ -class AddPostTypeToPostReport < ActiveRecord::Migration +class AddPostTypeToPostReport < ActiveRecord::Migration[4.2] def change add_column :post_reports, :post_type, :string, :null => false, :after => :post_id, :default => 'post' change_column_default :post_reports, :post_type, nil diff --git a/db/migrate/20140214104217_rename_post_report_to_report.rb b/db/migrate/20140214104217_rename_post_report_to_report.rb index 2d477491e..3b02b0aec 100644 --- a/db/migrate/20140214104217_rename_post_report_to_report.rb +++ b/db/migrate/20140214104217_rename_post_report_to_report.rb @@ -1,4 +1,4 @@ -class RenamePostReportToReport < ActiveRecord::Migration +class RenamePostReportToReport < ActiveRecord::Migration[4.2] def self.up rename_table :post_reports, :reports end diff --git a/db/migrate/20140222162826_devise_add_lastseenable_user.rb b/db/migrate/20140222162826_devise_add_lastseenable_user.rb index 5c62814af..c0a5428d4 100644 --- a/db/migrate/20140222162826_devise_add_lastseenable_user.rb +++ b/db/migrate/20140222162826_devise_add_lastseenable_user.rb @@ -1,4 +1,4 @@ -class DeviseAddLastseenableUser < ActiveRecord::Migration +class DeviseAddLastseenableUser < ActiveRecord::Migration[4.2] def self.up add_column :users, :last_seen, :datetime User.find_each do |user| diff --git a/db/migrate/20140308154022_create_polls.rb b/db/migrate/20140308154022_create_polls.rb index f2d84ba6a..c9dd794a2 100644 --- a/db/migrate/20140308154022_create_polls.rb +++ b/db/migrate/20140308154022_create_polls.rb @@ -1,4 +1,4 @@ -class CreatePolls < ActiveRecord::Migration +class CreatePolls < ActiveRecord::Migration[4.2] def up create_table :polls do |t| t.string :question, :null => false diff --git a/db/migrate/20140422134050_rename_post_columns_to_item.rb b/db/migrate/20140422134050_rename_post_columns_to_item.rb index 4550eacd7..986326152 100644 --- a/db/migrate/20140422134050_rename_post_columns_to_item.rb +++ b/db/migrate/20140422134050_rename_post_columns_to_item.rb @@ -1,4 +1,4 @@ -class RenamePostColumnsToItem < ActiveRecord::Migration +class RenamePostColumnsToItem < ActiveRecord::Migration[4.2] def up rename_column :reports, :post_id, :item_id rename_column :reports, :post_type, :item_type diff --git a/db/migrate/20140422134627_change_user_id_type_to_integer.rb b/db/migrate/20140422134627_change_user_id_type_to_integer.rb index 1f4918e8b..019cef962 100644 --- a/db/migrate/20140422134627_change_user_id_type_to_integer.rb +++ b/db/migrate/20140422134627_change_user_id_type_to_integer.rb @@ -1,4 +1,4 @@ -class ChangeUserIdTypeToInteger < ActiveRecord::Migration +class ChangeUserIdTypeToInteger < ActiveRecord::Migration[4.2] def up remove_column :reports, :user_id add_column :reports, :user_id, :integer, :null => false, :default => 1 diff --git a/db/migrate/20140601102543_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb b/db/migrate/20140601102543_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb index 8edb50807..5a3f71a25 100644 --- a/db/migrate/20140601102543_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +++ b/db/migrate/20140601102543_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb @@ -1,5 +1,5 @@ # This migration comes from acts_as_taggable_on_engine (originally 3) -class AddTaggingsCounterCacheToTags < ActiveRecord::Migration +class AddTaggingsCounterCacheToTags < ActiveRecord::Migration[4.2] def self.up add_column :tags, :taggings_count, :integer, default: 0 diff --git a/db/migrate/20140801101230_create_chat_contacts.rb b/db/migrate/20140801101230_create_chat_contacts.rb index 718b5ae8d..b50afcece 100644 --- a/db/migrate/20140801101230_create_chat_contacts.rb +++ b/db/migrate/20140801101230_create_chat_contacts.rb @@ -1,4 +1,4 @@ -class CreateChatContacts < ActiveRecord::Migration +class CreateChatContacts < ActiveRecord::Migration[4.2] def up create_table :chat_contacts do |t| t.integer :user_id, null: false diff --git a/db/migrate/20140801101352_create_chat_fragments.rb b/db/migrate/20140801101352_create_chat_fragments.rb index 0fbdc40ee..0457abf22 100644 --- a/db/migrate/20140801101352_create_chat_fragments.rb +++ b/db/migrate/20140801101352_create_chat_fragments.rb @@ -1,4 +1,4 @@ -class CreateChatFragments < ActiveRecord::Migration +class CreateChatFragments < ActiveRecord::Migration[4.2] def up create_table :chat_fragments do |t| t.integer :user_id, null: false diff --git a/db/migrate/20140824230505_add_completed_at_to_account_deletions.rb b/db/migrate/20140824230505_add_completed_at_to_account_deletions.rb index 9b2af8c6a..2c701dcac 100644 --- a/db/migrate/20140824230505_add_completed_at_to_account_deletions.rb +++ b/db/migrate/20140824230505_add_completed_at_to_account_deletions.rb @@ -1,4 +1,4 @@ -class AddCompletedAtToAccountDeletions < ActiveRecord::Migration +class AddCompletedAtToAccountDeletions < ActiveRecord::Migration[4.2] def change add_column :account_deletions, :completed_at, :datetime end diff --git a/db/migrate/20140826165533_increase_simple_captcha_limit.rb b/db/migrate/20140826165533_increase_simple_captcha_limit.rb index b4d43dd64..c0d7d4827 100644 --- a/db/migrate/20140826165533_increase_simple_captcha_limit.rb +++ b/db/migrate/20140826165533_increase_simple_captcha_limit.rb @@ -1,4 +1,4 @@ -class IncreaseSimpleCaptchaLimit < ActiveRecord::Migration +class IncreaseSimpleCaptchaLimit < ActiveRecord::Migration[4.2] def self.up change_column :simple_captcha_data, :value, :string, :limit => 12 end diff --git a/db/migrate/20140906192846_fix_open_graph_data.rb b/db/migrate/20140906192846_fix_open_graph_data.rb index 54959931d..5aec2b531 100644 --- a/db/migrate/20140906192846_fix_open_graph_data.rb +++ b/db/migrate/20140906192846_fix_open_graph_data.rb @@ -1,4 +1,4 @@ -class FixOpenGraphData < ActiveRecord::Migration +class FixOpenGraphData < ActiveRecord::Migration[4.2] def self.up change_column :open_graph_caches, :url, :text change_column :open_graph_caches, :image, :text diff --git a/db/migrate/20141001162851_add_remove_after_to_users.rb b/db/migrate/20141001162851_add_remove_after_to_users.rb index c63b916b6..8169e5e8b 100644 --- a/db/migrate/20141001162851_add_remove_after_to_users.rb +++ b/db/migrate/20141001162851_add_remove_after_to_users.rb @@ -1,4 +1,4 @@ -class AddRemoveAfterToUsers < ActiveRecord::Migration +class AddRemoveAfterToUsers < ActiveRecord::Migration[4.2] def change add_column :users, :remove_after, :datetime end diff --git a/db/migrate/20141007003922_add_chat_enabled_to_aspects.rb b/db/migrate/20141007003922_add_chat_enabled_to_aspects.rb index ba4fd31fc..a5e300b94 100644 --- a/db/migrate/20141007003922_add_chat_enabled_to_aspects.rb +++ b/db/migrate/20141007003922_add_chat_enabled_to_aspects.rb @@ -1,4 +1,4 @@ -class AddChatEnabledToAspects < ActiveRecord::Migration +class AddChatEnabledToAspects < ActiveRecord::Migration[4.2] def self.up add_column :aspects, :chat_enabled, :boolean, default: false end diff --git a/db/migrate/20141024170120_create_chat_offline_messages.rb b/db/migrate/20141024170120_create_chat_offline_messages.rb index 8c30101b0..5c31e632d 100644 --- a/db/migrate/20141024170120_create_chat_offline_messages.rb +++ b/db/migrate/20141024170120_create_chat_offline_messages.rb @@ -1,4 +1,4 @@ -class CreateChatOfflineMessages < ActiveRecord::Migration +class CreateChatOfflineMessages < ActiveRecord::Migration[4.2] def self.up create_table :chat_offline_messages do |t| t.string :from, :null => false diff --git a/db/migrate/20141209041241_drop_open_graph_caches_with_invalid_urls.rb b/db/migrate/20141209041241_drop_open_graph_caches_with_invalid_urls.rb index bfbfab884..1c2b3dbf7 100644 --- a/db/migrate/20141209041241_drop_open_graph_caches_with_invalid_urls.rb +++ b/db/migrate/20141209041241_drop_open_graph_caches_with_invalid_urls.rb @@ -1,4 +1,4 @@ -class DropOpenGraphCachesWithInvalidUrls < ActiveRecord::Migration +class DropOpenGraphCachesWithInvalidUrls < ActiveRecord::Migration[4.2] def up OpenGraphCache.where(url: 'http://').delete_all end diff --git a/db/migrate/20141216213423_purge_orphan_conversations.rb b/db/migrate/20141216213423_purge_orphan_conversations.rb index c5eb90bff..45e6f5856 100644 --- a/db/migrate/20141216213423_purge_orphan_conversations.rb +++ b/db/migrate/20141216213423_purge_orphan_conversations.rb @@ -1,4 +1,4 @@ -class PurgeOrphanConversations < ActiveRecord::Migration +class PurgeOrphanConversations < ActiveRecord::Migration[4.2] def up Conversation.where(id: Conversation.joins("LEFT JOIN conversation_visibilities ON conversation_visibilities.conversation_id = conversations.id") .group('conversations.id') diff --git a/db/migrate/20141227120907_add_export_to_user.rb b/db/migrate/20141227120907_add_export_to_user.rb index 376d5fe36..ef1779f76 100644 --- a/db/migrate/20141227120907_add_export_to_user.rb +++ b/db/migrate/20141227120907_add_export_to_user.rb @@ -1,4 +1,4 @@ -class AddExportToUser < ActiveRecord::Migration +class AddExportToUser < ActiveRecord::Migration[4.2] def change add_column :users, :export, :string add_column :users, :exported_at, :datetime diff --git a/db/migrate/20141230214830_user_pref_strip_exif.rb b/db/migrate/20141230214830_user_pref_strip_exif.rb index 79983181d..b573d4874 100644 --- a/db/migrate/20141230214830_user_pref_strip_exif.rb +++ b/db/migrate/20141230214830_user_pref_strip_exif.rb @@ -1,4 +1,4 @@ -class UserPrefStripExif < ActiveRecord::Migration +class UserPrefStripExif < ActiveRecord::Migration[4.2] def up add_column :users, :strip_exif, :boolean, default: true end diff --git a/db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb b/db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb index 832742889..37cef149a 100644 --- a/db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb +++ b/db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb @@ -1,4 +1,4 @@ -class SetMysqlToUnicodeMb4 < ActiveRecord::Migration +class SetMysqlToUnicodeMb4 < ActiveRecord::Migration[4.2] # Converts the tables and strings columns to utf8mb4, which is the true, full # unicode support in MySQl diff --git a/db/migrate/20150209230946_disable_mail_for_closed_account.rb b/db/migrate/20150209230946_disable_mail_for_closed_account.rb index 575b16cfc..2dd573745 100644 --- a/db/migrate/20150209230946_disable_mail_for_closed_account.rb +++ b/db/migrate/20150209230946_disable_mail_for_closed_account.rb @@ -1,4 +1,4 @@ -class DisableMailForClosedAccount < ActiveRecord::Migration +class DisableMailForClosedAccount < ActiveRecord::Migration[4.2] def up User.joins(:person).where(people: {closed_account: true}).update_all(disable_mail: true) end diff --git a/db/migrate/20150220001357_add_photos_export_to_user.rb b/db/migrate/20150220001357_add_photos_export_to_user.rb index f19349723..6bec80420 100644 --- a/db/migrate/20150220001357_add_photos_export_to_user.rb +++ b/db/migrate/20150220001357_add_photos_export_to_user.rb @@ -1,4 +1,4 @@ -class AddPhotosExportToUser < ActiveRecord::Migration +class AddPhotosExportToUser < ActiveRecord::Migration[4.2] def up add_column :users, :exported_photos_file, :string add_column :users, :exported_photos_at, :datetime diff --git a/db/migrate/20150403192408_remove_deleted_aspects_from_auto_follow_back.rb b/db/migrate/20150403192408_remove_deleted_aspects_from_auto_follow_back.rb index d0d12058d..f5f19e750 100644 --- a/db/migrate/20150403192408_remove_deleted_aspects_from_auto_follow_back.rb +++ b/db/migrate/20150403192408_remove_deleted_aspects_from_auto_follow_back.rb @@ -1,4 +1,4 @@ -class RemoveDeletedAspectsFromAutoFollowBack < ActiveRecord::Migration +class RemoveDeletedAspectsFromAutoFollowBack < ActiveRecord::Migration[4.2] def up User.where.not(auto_follow_back_aspect_id: Aspect.select(:id)) .where(auto_follow_back: true) diff --git a/db/migrate/20150403212139_fix_wrong_only_sharing.rb b/db/migrate/20150403212139_fix_wrong_only_sharing.rb index 8299ea88b..c02f4bba6 100644 --- a/db/migrate/20150403212139_fix_wrong_only_sharing.rb +++ b/db/migrate/20150403212139_fix_wrong_only_sharing.rb @@ -1,4 +1,4 @@ -class FixWrongOnlySharing < ActiveRecord::Migration +class FixWrongOnlySharing < ActiveRecord::Migration[4.2] def up Contact.where(sharing: true, receiving: false) .where(id: AspectMembership.select(:contact_id)) diff --git a/db/migrate/20150523004437_enable_color_themes.rb b/db/migrate/20150523004437_enable_color_themes.rb index d9cea868d..816fd1fbf 100644 --- a/db/migrate/20150523004437_enable_color_themes.rb +++ b/db/migrate/20150523004437_enable_color_themes.rb @@ -1,4 +1,4 @@ -class EnableColorThemes < ActiveRecord::Migration +class EnableColorThemes < ActiveRecord::Migration[4.2] def up add_column(:users, :color_theme, :string) end diff --git a/db/migrate/20150531005120_cleanup_default_avatars.rb b/db/migrate/20150531005120_cleanup_default_avatars.rb index 93010fb2a..f3dcee9a2 100644 --- a/db/migrate/20150531005120_cleanup_default_avatars.rb +++ b/db/migrate/20150531005120_cleanup_default_avatars.rb @@ -1,4 +1,4 @@ -class CleanupDefaultAvatars < ActiveRecord::Migration +class CleanupDefaultAvatars < ActiveRecord::Migration[4.2] def up Profile.where("image_url LIKE ?", "%user/default%") .update_all(image_url: nil, image_url_small: nil, image_url_medium: nil) diff --git a/db/migrate/20150607143809_fix_photo_public_flag.rb b/db/migrate/20150607143809_fix_photo_public_flag.rb index fa75167ef..ee223cd6a 100644 --- a/db/migrate/20150607143809_fix_photo_public_flag.rb +++ b/db/migrate/20150607143809_fix_photo_public_flag.rb @@ -1,4 +1,4 @@ -class FixPhotoPublicFlag < ActiveRecord::Migration +class FixPhotoPublicFlag < ActiveRecord::Migration[4.2] def up Photo.joins(:status_message).where(posts: {public: true}).update_all(public: true) end diff --git a/db/migrate/20150613202109_create_o_auth_applications.rb b/db/migrate/20150613202109_create_o_auth_applications.rb index 1170b5c9e..a39f0ace9 100644 --- a/db/migrate/20150613202109_create_o_auth_applications.rb +++ b/db/migrate/20150613202109_create_o_auth_applications.rb @@ -1,6 +1,6 @@ # Inspired by https://github.com/nov/openid_connect_sample/blob/master/db/migrate/20110829023826_create_clients.rb -class CreateOAuthApplications < ActiveRecord::Migration +class CreateOAuthApplications < ActiveRecord::Migration[4.2] def change create_table :o_auth_applications do |t| t.belongs_to :user, index: true diff --git a/db/migrate/20150630221004_add_public_to_profiles.rb b/db/migrate/20150630221004_add_public_to_profiles.rb index 06973e027..4797c1f38 100644 --- a/db/migrate/20150630221004_add_public_to_profiles.rb +++ b/db/migrate/20150630221004_add_public_to_profiles.rb @@ -1,4 +1,4 @@ -class AddPublicToProfiles < ActiveRecord::Migration +class AddPublicToProfiles < ActiveRecord::Migration[4.2] def change add_column :profiles, :public_details, :boolean, default: false end diff --git a/db/migrate/20150708153926_create_authorizations.rb b/db/migrate/20150708153926_create_authorizations.rb index ee88ab017..b9e06dd2c 100644 --- a/db/migrate/20150708153926_create_authorizations.rb +++ b/db/migrate/20150708153926_create_authorizations.rb @@ -1,4 +1,4 @@ -class CreateAuthorizations < ActiveRecord::Migration +class CreateAuthorizations < ActiveRecord::Migration[4.2] def change create_table :authorizations do |t| t.belongs_to :user, index: true diff --git a/db/migrate/20150708153928_create_o_auth_access_tokens.rb b/db/migrate/20150708153928_create_o_auth_access_tokens.rb index d833011c5..779283cbe 100644 --- a/db/migrate/20150708153928_create_o_auth_access_tokens.rb +++ b/db/migrate/20150708153928_create_o_auth_access_tokens.rb @@ -1,6 +1,6 @@ # Inspired by https://github.com/nov/openid_connect_sample/blob/master/db/migrate/20110829023837_create_access_tokens.rb -class CreateOAuthAccessTokens < ActiveRecord::Migration +class CreateOAuthAccessTokens < ActiveRecord::Migration[4.2] def change create_table :o_auth_access_tokens do |t| t.belongs_to :authorization, index: true diff --git a/db/migrate/20150714055110_create_id_tokens.rb b/db/migrate/20150714055110_create_id_tokens.rb index b1e3abdfa..df98206a4 100644 --- a/db/migrate/20150714055110_create_id_tokens.rb +++ b/db/migrate/20150714055110_create_id_tokens.rb @@ -1,6 +1,6 @@ # Inspired by https://github.com/nov/openid_connect_sample/blob/master/db/migrate/20110829024010_create_id_tokens.rb -class CreateIdTokens < ActiveRecord::Migration +class CreateIdTokens < ActiveRecord::Migration[4.2] def change create_table :id_tokens do |t| t.belongs_to :authorization, index: true diff --git a/db/migrate/20150724152052_remove_favorites_from_posts.rb b/db/migrate/20150724152052_remove_favorites_from_posts.rb index 8d4bd873f..737d3c593 100644 --- a/db/migrate/20150724152052_remove_favorites_from_posts.rb +++ b/db/migrate/20150724152052_remove_favorites_from_posts.rb @@ -1,4 +1,4 @@ -class RemoveFavoritesFromPosts < ActiveRecord::Migration +class RemoveFavoritesFromPosts < ActiveRecord::Migration[4.2] def self.up remove_column :posts, :favorite end diff --git a/db/migrate/20150731123113_create_pairwise_pseudonymous_identifiers.rb b/db/migrate/20150731123113_create_pairwise_pseudonymous_identifiers.rb index 0c8690848..12ed8597f 100644 --- a/db/migrate/20150731123113_create_pairwise_pseudonymous_identifiers.rb +++ b/db/migrate/20150731123113_create_pairwise_pseudonymous_identifiers.rb @@ -1,6 +1,6 @@ # Inspired by https://github.com/nov/openid_connect_sample/blob/master/db/migrate/20110829024140_create_pairwise_pseudonymous_identifiers.rb -class CreatePairwisePseudonymousIdentifiers < ActiveRecord::Migration +class CreatePairwisePseudonymousIdentifiers < ActiveRecord::Migration[4.2] def change create_table :ppid do |t| t.belongs_to :o_auth_application, index: true diff --git a/db/migrate/20150731123114_add_status_to_pods.rb b/db/migrate/20150731123114_add_status_to_pods.rb index b53051f06..e94a011b1 100644 --- a/db/migrate/20150731123114_add_status_to_pods.rb +++ b/db/migrate/20150731123114_add_status_to_pods.rb @@ -1,4 +1,4 @@ -class AddStatusToPods < ActiveRecord::Migration +class AddStatusToPods < ActiveRecord::Migration[4.2] def change add_column :pods, :status, :integer, default: 0 add_column :pods, :checked_at, :datetime, default: Time.zone.at(0) diff --git a/db/migrate/20150828132451_remove_duplicate_and_empty_pods.rb b/db/migrate/20150828132451_remove_duplicate_and_empty_pods.rb index e93acf722..f3d434474 100644 --- a/db/migrate/20150828132451_remove_duplicate_and_empty_pods.rb +++ b/db/migrate/20150828132451_remove_duplicate_and_empty_pods.rb @@ -1,4 +1,4 @@ -class RemoveDuplicateAndEmptyPods < ActiveRecord::Migration +class RemoveDuplicateAndEmptyPods < ActiveRecord::Migration[4.2] def up remove_dupes remove_empty_or_nil diff --git a/db/migrate/20151003142048_update_report_item_types.rb b/db/migrate/20151003142048_update_report_item_types.rb index 9a318edff..3d4972537 100644 --- a/db/migrate/20151003142048_update_report_item_types.rb +++ b/db/migrate/20151003142048_update_report_item_types.rb @@ -1,4 +1,4 @@ -class UpdateReportItemTypes < ActiveRecord::Migration +class UpdateReportItemTypes < ActiveRecord::Migration[4.2] def change Report.all.each do |report| report.update_attribute :item_type, report[:item_type].capitalize diff --git a/db/migrate/20151210213023_remove_signatures_from_relayables.rb b/db/migrate/20151210213023_remove_signatures_from_relayables.rb index 1d2cb485c..c9b7a45fa 100644 --- a/db/migrate/20151210213023_remove_signatures_from_relayables.rb +++ b/db/migrate/20151210213023_remove_signatures_from_relayables.rb @@ -1,4 +1,4 @@ -class RemoveSignaturesFromRelayables < ActiveRecord::Migration +class RemoveSignaturesFromRelayables < ActiveRecord::Migration[4.2] def change remove_column :comments, :parent_author_signature, :text remove_column :poll_participations, :parent_author_signature, :text diff --git a/db/migrate/20160124234712_extend_pods.rb b/db/migrate/20160124234712_extend_pods.rb index d86769091..8e9d6c20b 100644 --- a/db/migrate/20160124234712_extend_pods.rb +++ b/db/migrate/20160124234712_extend_pods.rb @@ -1,4 +1,4 @@ -class ExtendPods < ActiveRecord::Migration +class ExtendPods < ActiveRecord::Migration[4.2] class Pod < ApplicationRecord has_many :people diff --git a/db/migrate/20160225232049_link_share_visibilities_with_user.rb b/db/migrate/20160225232049_link_share_visibilities_with_user.rb index a31a2b0ef..9a18e5586 100644 --- a/db/migrate/20160225232049_link_share_visibilities_with_user.rb +++ b/db/migrate/20160225232049_link_share_visibilities_with_user.rb @@ -1,4 +1,4 @@ -class LinkShareVisibilitiesWithUser < ActiveRecord::Migration +class LinkShareVisibilitiesWithUser < ActiveRecord::Migration[4.2] class ShareVisibility < ApplicationRecord end diff --git a/db/migrate/20160302025129_cleanup_aspect_visibility.rb b/db/migrate/20160302025129_cleanup_aspect_visibility.rb index 18be29f05..eae7a4491 100644 --- a/db/migrate/20160302025129_cleanup_aspect_visibility.rb +++ b/db/migrate/20160302025129_cleanup_aspect_visibility.rb @@ -1,4 +1,4 @@ -class CleanupAspectVisibility < ActiveRecord::Migration +class CleanupAspectVisibility < ActiveRecord::Migration[4.2] class AspectVisibility < ApplicationRecord end diff --git a/db/migrate/20160307142216_cleanup_handles.rb b/db/migrate/20160307142216_cleanup_handles.rb index b2ed8fc8a..e39be2279 100644 --- a/db/migrate/20160307142216_cleanup_handles.rb +++ b/db/migrate/20160307142216_cleanup_handles.rb @@ -1,4 +1,4 @@ -class CleanupHandles < ActiveRecord::Migration +class CleanupHandles < ActiveRecord::Migration[4.2] def change remove_column :photos, :tmp_old_id, :integer remove_column :photos, :diaspora_handle, :string diff --git a/db/migrate/20160327103605_add_author_id_index_to_participations.rb b/db/migrate/20160327103605_add_author_id_index_to_participations.rb index 8a6382aeb..c41607981 100644 --- a/db/migrate/20160327103605_add_author_id_index_to_participations.rb +++ b/db/migrate/20160327103605_add_author_id_index_to_participations.rb @@ -1,4 +1,4 @@ -class AddAuthorIdIndexToParticipations < ActiveRecord::Migration +class AddAuthorIdIndexToParticipations < ActiveRecord::Migration[4.2] def change add_index :participations, :author_id, :using => :btree end diff --git a/db/migrate/20160509232726_cleanup_duplicates_and_add_unique_indexes.rb b/db/migrate/20160509232726_cleanup_duplicates_and_add_unique_indexes.rb index 26b79067b..4e17deb71 100644 --- a/db/migrate/20160509232726_cleanup_duplicates_and_add_unique_indexes.rb +++ b/db/migrate/20160509232726_cleanup_duplicates_and_add_unique_indexes.rb @@ -1,4 +1,4 @@ -class CleanupDuplicatesAndAddUniqueIndexes < ActiveRecord::Migration +class CleanupDuplicatesAndAddUniqueIndexes < ActiveRecord::Migration[4.2] def up # temporary index to speed up the migration add_index :photos, :guid, length: 191 diff --git a/db/migrate/20160531170531_remove_duplicate_aspect_visibilities.rb b/db/migrate/20160531170531_remove_duplicate_aspect_visibilities.rb index 8269606be..40306c898 100644 --- a/db/migrate/20160531170531_remove_duplicate_aspect_visibilities.rb +++ b/db/migrate/20160531170531_remove_duplicate_aspect_visibilities.rb @@ -1,4 +1,4 @@ -class RemoveDuplicateAspectVisibilities < ActiveRecord::Migration +class RemoveDuplicateAspectVisibilities < ActiveRecord::Migration[4.2] def up where = "WHERE a1.aspect_id = a2.aspect_id AND a1.shareable_id = a2.shareable_id AND "\ "a1.shareable_type = a2.shareable_type AND a1.id > a2.id" diff --git a/db/migrate/20160618033455_cleanup_participations.rb b/db/migrate/20160618033455_cleanup_participations.rb index 42d4fdd3c..49a03addc 100644 --- a/db/migrate/20160618033455_cleanup_participations.rb +++ b/db/migrate/20160618033455_cleanup_participations.rb @@ -1,4 +1,4 @@ -class CleanupParticipations < ActiveRecord::Migration +class CleanupParticipations < ActiveRecord::Migration[4.2] class Participation < ApplicationRecord end diff --git a/db/migrate/20160720212620_create_signature_tables.rb b/db/migrate/20160720212620_create_signature_tables.rb index 8bc82befc..fa843fcdd 100644 --- a/db/migrate/20160720212620_create_signature_tables.rb +++ b/db/migrate/20160720212620_create_signature_tables.rb @@ -1,4 +1,4 @@ -class CreateSignatureTables < ActiveRecord::Migration +class CreateSignatureTables < ActiveRecord::Migration[4.2] class SignatureOrder < ApplicationRecord end diff --git a/db/migrate/20160802212635_cleanup_posts_table.rb b/db/migrate/20160802212635_cleanup_posts_table.rb index 79e473e8e..ffab18c7d 100644 --- a/db/migrate/20160802212635_cleanup_posts_table.rb +++ b/db/migrate/20160802212635_cleanup_posts_table.rb @@ -1,4 +1,4 @@ -class CleanupPostsTable < ActiveRecord::Migration +class CleanupPostsTable < ActiveRecord::Migration[4.2] def change remove_index :posts, column: %i(status_message_guid pending), name: :index_posts_on_status_message_guid_and_pending, length: {status_message_guid: 190} diff --git a/db/migrate/20160807212443_participation_counter.rb b/db/migrate/20160807212443_participation_counter.rb index fae1d9b03..719458ec7 100644 --- a/db/migrate/20160807212443_participation_counter.rb +++ b/db/migrate/20160807212443_participation_counter.rb @@ -1,4 +1,4 @@ -class ParticipationCounter < ActiveRecord::Migration +class ParticipationCounter < ActiveRecord::Migration[4.2] class Comment < ApplicationRecord end diff --git a/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb b/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb index 895b75471..57fdc03d4 100644 --- a/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb +++ b/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb @@ -1,4 +1,4 @@ -class CleanupInvitationColumnsFromUsers < ActiveRecord::Migration +class CleanupInvitationColumnsFromUsers < ActiveRecord::Migration[4.2] class InvitationCode < ApplicationRecord end diff --git a/db/migrate/20160813115514_remove_id_tokens.rb b/db/migrate/20160813115514_remove_id_tokens.rb index 36689d688..346b2a24b 100644 --- a/db/migrate/20160813115514_remove_id_tokens.rb +++ b/db/migrate/20160813115514_remove_id_tokens.rb @@ -1,6 +1,6 @@ require_relative "20150714055110_create_id_tokens" -class RemoveIdTokens < ActiveRecord::Migration +class RemoveIdTokens < ActiveRecord::Migration[4.2] def change revert CreateIdTokens end diff --git a/db/migrate/20160822212739_remove_started_sharing_notifications_without_contact.rb b/db/migrate/20160822212739_remove_started_sharing_notifications_without_contact.rb index f41f1d202..2761cbe5e 100644 --- a/db/migrate/20160822212739_remove_started_sharing_notifications_without_contact.rb +++ b/db/migrate/20160822212739_remove_started_sharing_notifications_without_contact.rb @@ -1,4 +1,4 @@ -class RemoveStartedSharingNotificationsWithoutContact < ActiveRecord::Migration +class RemoveStartedSharingNotificationsWithoutContact < ActiveRecord::Migration[4.2] class Notification < ApplicationRecord end diff --git a/db/migrate/20160829170244_add_post_default_to_aspects.rb b/db/migrate/20160829170244_add_post_default_to_aspects.rb index dcc2d76c6..e86193346 100644 --- a/db/migrate/20160829170244_add_post_default_to_aspects.rb +++ b/db/migrate/20160829170244_add_post_default_to_aspects.rb @@ -1,4 +1,4 @@ -class AddPostDefaultToAspects < ActiveRecord::Migration +class AddPostDefaultToAspects < ActiveRecord::Migration[4.2] def change add_column :aspects, :post_default, :boolean, default: true add_column :users, :post_default_public, :boolean, default: false diff --git a/db/migrate/20160901072443_add_video_url_to_open_graph_cache.rb b/db/migrate/20160901072443_add_video_url_to_open_graph_cache.rb index 487248a26..eb123a6b3 100644 --- a/db/migrate/20160901072443_add_video_url_to_open_graph_cache.rb +++ b/db/migrate/20160901072443_add_video_url_to_open_graph_cache.rb @@ -1,4 +1,4 @@ -class AddVideoUrlToOpenGraphCache < ActiveRecord::Migration +class AddVideoUrlToOpenGraphCache < ActiveRecord::Migration[4.2] def change add_column :open_graph_caches, :video_url, :text end diff --git a/db/migrate/20160902180630_remove_invalid_unconfirmed_emails.rb b/db/migrate/20160902180630_remove_invalid_unconfirmed_emails.rb index 0e98b4499..27a7feecf 100644 --- a/db/migrate/20160902180630_remove_invalid_unconfirmed_emails.rb +++ b/db/migrate/20160902180630_remove_invalid_unconfirmed_emails.rb @@ -1,4 +1,4 @@ -class RemoveInvalidUnconfirmedEmails < ActiveRecord::Migration +class RemoveInvalidUnconfirmedEmails < ActiveRecord::Migration[4.2] class User < ApplicationRecord end diff --git a/db/migrate/20160906225138_fix_photos_share_visibilities.rb b/db/migrate/20160906225138_fix_photos_share_visibilities.rb index cd2627c8b..ff382a7d5 100644 --- a/db/migrate/20160906225138_fix_photos_share_visibilities.rb +++ b/db/migrate/20160906225138_fix_photos_share_visibilities.rb @@ -1,4 +1,4 @@ -class FixPhotosShareVisibilities < ActiveRecord::Migration +class FixPhotosShareVisibilities < ActiveRecord::Migration[4.2] class Photo < ApplicationRecord end diff --git a/db/migrate/20161015174300_remove_empty_pod.rb b/db/migrate/20161015174300_remove_empty_pod.rb index 482b4f5db..9e3ddd367 100644 --- a/db/migrate/20161015174300_remove_empty_pod.rb +++ b/db/migrate/20161015174300_remove_empty_pod.rb @@ -1,4 +1,4 @@ -class RemoveEmptyPod < ActiveRecord::Migration +class RemoveEmptyPod < ActiveRecord::Migration[4.2] def up Pod.delete_all("host IS NULL") diff --git a/db/migrate/20161024231443_add_scheduled_check_to_pod.rb b/db/migrate/20161024231443_add_scheduled_check_to_pod.rb index 6d18ba228..b080564b7 100644 --- a/db/migrate/20161024231443_add_scheduled_check_to_pod.rb +++ b/db/migrate/20161024231443_add_scheduled_check_to_pod.rb @@ -1,4 +1,4 @@ -class AddScheduledCheckToPod < ActiveRecord::Migration +class AddScheduledCheckToPod < ActiveRecord::Migration[4.2] def change add_column :pods, :scheduled_check, :boolean, default: false, null: false end diff --git a/db/migrate/20161107100840_polymorphic_mentions.rb b/db/migrate/20161107100840_polymorphic_mentions.rb index 69bd3017a..99f65d822 100644 --- a/db/migrate/20161107100840_polymorphic_mentions.rb +++ b/db/migrate/20161107100840_polymorphic_mentions.rb @@ -1,4 +1,4 @@ -class PolymorphicMentions < ActiveRecord::Migration +class PolymorphicMentions < ActiveRecord::Migration[4.2] def change remove_index :mentions, column: %i(post_id) remove_index :mentions, column: %i(person_id post_id), unique: true diff --git a/db/migrate/20170430022507_remove_message_signature.rb b/db/migrate/20170430022507_remove_message_signature.rb index f2519dba5..a8e65c2e0 100644 --- a/db/migrate/20170430022507_remove_message_signature.rb +++ b/db/migrate/20170430022507_remove_message_signature.rb @@ -1,4 +1,4 @@ -class RemoveMessageSignature < ActiveRecord::Migration +class RemoveMessageSignature < ActiveRecord::Migration[4.2] def change remove_column :messages, :author_signature, :text end From ef70549832779dd901f365118a486060fcce249d Mon Sep 17 00:00:00 2001 From: Dennis Schubert Date: Mon, 7 Aug 2017 15:32:08 +0200 Subject: [PATCH 44/52] Replace usages of the deprecated delete_all with conditions --- db/migrate/20160124234712_extend_pods.rb | 2 +- .../20160225232049_link_share_visibilities_with_user.rb | 6 +++--- db/migrate/20160302025129_cleanup_aspect_visibility.rb | 8 ++++---- db/migrate/20160618033455_cleanup_participations.rb | 2 +- ...0160810230114_cleanup_invitation_columns_from_users.rb | 2 +- ...emove_started_sharing_notifications_without_contact.rb | 3 ++- db/migrate/20161015174300_remove_empty_pod.rb | 2 +- 7 files changed, 13 insertions(+), 12 deletions(-) diff --git a/db/migrate/20160124234712_extend_pods.rb b/db/migrate/20160124234712_extend_pods.rb index 8e9d6c20b..9f2dc7ebc 100644 --- a/db/migrate/20160124234712_extend_pods.rb +++ b/db/migrate/20160124234712_extend_pods.rb @@ -52,7 +52,7 @@ class ExtendPods < ActiveRecord::Migration[4.2] end # cleanup unused pods - Pod.joins("LEFT OUTER JOIN people ON pods.id = people.pod_id").delete_all("people.id is NULL") + Pod.joins("LEFT OUTER JOIN people ON pods.id = people.pod_id").where("people.id is NULL").delete_all remove_column :people, :url end diff --git a/db/migrate/20160225232049_link_share_visibilities_with_user.rb b/db/migrate/20160225232049_link_share_visibilities_with_user.rb index 9a18e5586..8a6f0f5ea 100644 --- a/db/migrate/20160225232049_link_share_visibilities_with_user.rb +++ b/db/migrate/20160225232049_link_share_visibilities_with_user.rb @@ -26,7 +26,7 @@ class LinkShareVisibilitiesWithUser < ActiveRecord::Migration[4.2] remove_column :share_visibilities, :contact_id ShareVisibility.joins("LEFT OUTER JOIN users ON users.id = share_visibilities.user_id") - .delete_all("users.id is NULL") + .where("users.id is NULL").delete_all change_column :share_visibilities, :user_id, :integer, null: false @@ -73,8 +73,8 @@ class LinkShareVisibilitiesWithUser < ActiveRecord::Migration[4.2] def cleanup_deleted_share_visibilities ShareVisibility.joins("LEFT OUTER JOIN posts ON posts.id = share_visibilities.shareable_id") - .where(shareable_type: "Post").delete_all("posts.id is NULL") + .where(shareable_type: "Post").where("posts.id is NULL").delete_all ShareVisibility.joins("LEFT OUTER JOIN photos ON photos.id = share_visibilities.shareable_id") - .where(shareable_type: "Photo").delete_all("photos.id is NULL") + .where(shareable_type: "Photo").where("photos.id is NULL").delete_all end end diff --git a/db/migrate/20160302025129_cleanup_aspect_visibility.rb b/db/migrate/20160302025129_cleanup_aspect_visibility.rb index eae7a4491..7d3ae9c5f 100644 --- a/db/migrate/20160302025129_cleanup_aspect_visibility.rb +++ b/db/migrate/20160302025129_cleanup_aspect_visibility.rb @@ -4,13 +4,13 @@ class CleanupAspectVisibility < ActiveRecord::Migration[4.2] def up AspectVisibility.joins("LEFT OUTER JOIN posts ON posts.id = aspect_visibilities.shareable_id") - .where(shareable_type: "Post").delete_all("posts.id is NULL") + .where(shareable_type: "Post").where("posts.id is NULL").delete_all AspectVisibility.joins("LEFT OUTER JOIN photos ON photos.id = aspect_visibilities.shareable_id") - .where(shareable_type: "Photo").delete_all("photos.id is NULL") + .where(shareable_type: "Photo").where("photos.id is NULL").delete_all AspectVisibility.joins("INNER JOIN posts ON posts.id = aspect_visibilities.shareable_id") - .where(shareable_type: "Post").delete_all(posts: {public: true}) + .where(shareable_type: "Post").where(posts: {public: true}).delete_all AspectVisibility.joins("INNER JOIN photos ON photos.id = aspect_visibilities.shareable_id") - .where(shareable_type: "Photo").delete_all(photos: {public: true}) + .where(shareable_type: "Photo").where(photos: {public: true}).delete_all remove_columns :aspect_visibilities, :created_at, :updated_at end diff --git a/db/migrate/20160618033455_cleanup_participations.rb b/db/migrate/20160618033455_cleanup_participations.rb index 49a03addc..df27d04a7 100644 --- a/db/migrate/20160618033455_cleanup_participations.rb +++ b/db/migrate/20160618033455_cleanup_participations.rb @@ -39,6 +39,6 @@ class CleanupParticipations < ActiveRecord::Migration[4.2] end Participation.joins("LEFT OUTER JOIN posts ON posts.id = participations.target_id") - .where(target_type: "Post").delete_all("posts.id is NULL") + .where(target_type: "Post").where("posts.id is NULL").delete_all end end diff --git a/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb b/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb index 57fdc03d4..20efab0e5 100644 --- a/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb +++ b/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb @@ -34,7 +34,7 @@ class CleanupInvitationColumnsFromUsers < ActiveRecord::Migration[4.2] InvitationCode.where("count < 0").update_all(count: new_counter) # remove old invitation-users - User.delete_all(username: nil) + User.where(username: nil).delete_all change_column :users, :username, :string, null: false end diff --git a/db/migrate/20160822212739_remove_started_sharing_notifications_without_contact.rb b/db/migrate/20160822212739_remove_started_sharing_notifications_without_contact.rb index 2761cbe5e..ddd1f5b3a 100644 --- a/db/migrate/20160822212739_remove_started_sharing_notifications_without_contact.rb +++ b/db/migrate/20160822212739_remove_started_sharing_notifications_without_contact.rb @@ -7,6 +7,7 @@ class RemoveStartedSharingNotificationsWithoutContact < ActiveRecord::Migration[ .joins("INNER JOIN people ON people.id = notifications.target_id") .joins("LEFT OUTER JOIN contacts ON contacts.person_id = people.id " \ "AND contacts.user_id = notifications.recipient_id") - .delete_all("contacts.id IS NULL") + .where("contacts.id IS NULL") + .delete_all end end diff --git a/db/migrate/20161015174300_remove_empty_pod.rb b/db/migrate/20161015174300_remove_empty_pod.rb index 9e3ddd367..ba7369bc1 100644 --- a/db/migrate/20161015174300_remove_empty_pod.rb +++ b/db/migrate/20161015174300_remove_empty_pod.rb @@ -1,6 +1,6 @@ class RemoveEmptyPod < ActiveRecord::Migration[4.2] def up - Pod.delete_all("host IS NULL") + Pod.where("host IS NULL").delete_all change_column :pods, :host, :string, null: false end From 5b1be7d8dac07eb133250835bce12e36f8e4908a Mon Sep 17 00:00:00 2001 From: Dennis Schubert Date: Mon, 7 Aug 2017 15:44:49 +0200 Subject: [PATCH 45/52] Remove the schema.rb from this repo Although this is contrary to rails best-practises, we cannot provide a schema.rb that works for both MySQL and PostgreSQL, so we have no choice. Our migrations are maintained, so it should always be possible to get back to a "clean" database schema anyway. --- .gitignore | 6 + db/schema.rb | 675 ------------------------------------------- lib/tasks/tests.rake | 9 +- 3 files changed, 10 insertions(+), 680 deletions(-) delete mode 100644 db/schema.rb diff --git a/.gitignore b/.gitignore index 74399f663..fea147b0e 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,12 @@ public/404.html public/422.html public/500.html +# the db/schema.rb. Although this is contrary to rails best-practises, we +# cannot provide a schema.rb that works for both MySQL and PostgreSQL, so we +# have no choice. Our migrations are maintained, so it should always be +# possible to get back to a "clean" database schema anyway. +db/schema.rb + # Sprites app/assets/images/branding-*.png app/assets/images/branding/logos-*.png diff --git a/db/schema.rb b/db/schema.rb deleted file mode 100644 index 48db06ecd..000000000 --- a/db/schema.rb +++ /dev/null @@ -1,675 +0,0 @@ -# encoding: UTF-8 -# This file is auto-generated from the current state of the database. Instead -# of editing this file, please use the migrations feature of Active Record to -# incrementally modify your database, and then regenerate this schema definition. -# -# Note that this schema.rb definition is the authoritative source for your -# database schema. If you need to create the application database on another -# system, you should be using db:schema:load, not running all the migrations -# from scratch. The latter is a flawed and unsustainable approach (the more migrations -# you'll amass, the slower it'll run and the greater likelihood for issues). -# -# It's strongly recommended that you check this file into your version control system. - -ActiveRecord::Schema.define(version: 20170430022507) do - - create_table "account_deletions", force: :cascade do |t| - t.string "diaspora_handle", limit: 255 - t.integer "person_id", limit: 4 - t.datetime "completed_at" - end - - create_table "aspect_memberships", force: :cascade do |t| - t.integer "aspect_id", limit: 4, null: false - t.integer "contact_id", limit: 4, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - add_index "aspect_memberships", ["aspect_id", "contact_id"], name: "index_aspect_memberships_on_aspect_id_and_contact_id", unique: true, using: :btree - add_index "aspect_memberships", ["aspect_id"], name: "index_aspect_memberships_on_aspect_id", using: :btree - add_index "aspect_memberships", ["contact_id"], name: "index_aspect_memberships_on_contact_id", using: :btree - - create_table "aspect_visibilities", force: :cascade do |t| - t.integer "shareable_id", limit: 4, null: false - t.integer "aspect_id", limit: 4, null: false - t.string "shareable_type", limit: 255, default: "Post", null: false - end - - add_index "aspect_visibilities", ["aspect_id"], name: "index_aspect_visibilities_on_aspect_id", using: :btree - add_index "aspect_visibilities", ["shareable_id", "shareable_type", "aspect_id"], name: "shareable_and_aspect_id", length: {"shareable_id"=>nil, "shareable_type"=>189, "aspect_id"=>nil}, using: :btree - add_index "aspect_visibilities", ["shareable_id", "shareable_type"], name: "index_aspect_visibilities_on_shareable_id_and_shareable_type", length: {"shareable_id"=>nil, "shareable_type"=>190}, using: :btree - - create_table "aspects", force: :cascade do |t| - t.string "name", limit: 255, null: false - t.integer "user_id", limit: 4, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.boolean "contacts_visible", default: true, null: false - t.integer "order_id", limit: 4 - t.boolean "chat_enabled", default: false - t.boolean "post_default", default: true - end - - add_index "aspects", ["user_id", "contacts_visible"], name: "index_aspects_on_user_id_and_contacts_visible", using: :btree - add_index "aspects", ["user_id"], name: "index_aspects_on_user_id", using: :btree - - create_table "authorizations", force: :cascade do |t| - t.integer "user_id", limit: 4 - t.integer "o_auth_application_id", limit: 4 - t.string "refresh_token", limit: 255 - t.string "code", limit: 255 - t.string "redirect_uri", limit: 255 - t.string "nonce", limit: 255 - t.string "scopes", limit: 255 - t.boolean "code_used", default: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - add_index "authorizations", ["o_auth_application_id"], name: "index_authorizations_on_o_auth_application_id", using: :btree - add_index "authorizations", ["user_id"], name: "index_authorizations_on_user_id", using: :btree - - create_table "blocks", force: :cascade do |t| - t.integer "user_id", limit: 4 - t.integer "person_id", limit: 4 - end - - create_table "chat_contacts", force: :cascade do |t| - t.integer "user_id", limit: 4, null: false - t.string "jid", limit: 255, null: false - t.string "name", limit: 255 - t.string "ask", limit: 128 - t.string "subscription", limit: 128, null: false - end - - add_index "chat_contacts", ["user_id", "jid"], name: "index_chat_contacts_on_user_id_and_jid", unique: true, length: {"user_id"=>nil, "jid"=>190}, using: :btree - - create_table "chat_fragments", force: :cascade do |t| - t.integer "user_id", limit: 4, null: false - t.string "root", limit: 256, null: false - t.string "namespace", limit: 256, null: false - t.text "xml", limit: 65535, null: false - end - - add_index "chat_fragments", ["user_id"], name: "index_chat_fragments_on_user_id", unique: true, using: :btree - - create_table "chat_offline_messages", force: :cascade do |t| - t.string "from", limit: 255, null: false - t.string "to", limit: 255, null: false - t.text "message", limit: 65535, null: false - t.datetime "created_at", null: false - end - - create_table "comment_signatures", id: false, force: :cascade do |t| - t.integer "comment_id", limit: 4, null: false - t.text "author_signature", limit: 65535, null: false - t.integer "signature_order_id", limit: 4, null: false - t.text "additional_data", limit: 65535 - end - - add_index "comment_signatures", ["comment_id"], name: "index_comment_signatures_on_comment_id", unique: true, using: :btree - add_index "comment_signatures", ["signature_order_id"], name: "comment_signatures_signature_orders_id_fk", using: :btree - - create_table "comments", force: :cascade do |t| - t.text "text", limit: 65535, null: false - t.integer "commentable_id", limit: 4, null: false - t.integer "author_id", limit: 4, null: false - t.string "guid", limit: 255, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "likes_count", limit: 4, default: 0, null: false - t.string "commentable_type", limit: 60, default: "Post", null: false - end - - add_index "comments", ["author_id"], name: "index_comments_on_person_id", using: :btree - add_index "comments", ["commentable_id", "commentable_type"], name: "index_comments_on_commentable_id_and_commentable_type", using: :btree - add_index "comments", ["guid"], name: "index_comments_on_guid", unique: true, length: {"guid"=>191}, using: :btree - - create_table "contacts", force: :cascade do |t| - t.integer "user_id", limit: 4, null: false - t.integer "person_id", limit: 4, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.boolean "sharing", default: false, null: false - t.boolean "receiving", default: false, null: false - end - - add_index "contacts", ["person_id"], name: "index_contacts_on_person_id", using: :btree - add_index "contacts", ["user_id", "person_id"], name: "index_contacts_on_user_id_and_person_id", unique: true, using: :btree - - create_table "conversation_visibilities", force: :cascade do |t| - t.integer "conversation_id", limit: 4, null: false - t.integer "person_id", limit: 4, null: false - t.integer "unread", limit: 4, default: 0, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - add_index "conversation_visibilities", ["conversation_id", "person_id"], name: "index_conversation_visibilities_usefully", unique: true, using: :btree - add_index "conversation_visibilities", ["conversation_id"], name: "index_conversation_visibilities_on_conversation_id", using: :btree - add_index "conversation_visibilities", ["person_id"], name: "index_conversation_visibilities_on_person_id", using: :btree - - create_table "conversations", force: :cascade do |t| - t.string "subject", limit: 255 - t.string "guid", limit: 255, null: false - t.integer "author_id", limit: 4, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - add_index "conversations", ["author_id"], name: "conversations_author_id_fk", using: :btree - add_index "conversations", ["guid"], name: "index_conversations_on_guid", unique: true, length: {"guid"=>191}, using: :btree - - create_table "invitation_codes", force: :cascade do |t| - t.string "token", limit: 255 - t.integer "user_id", limit: 4 - t.integer "count", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - create_table "like_signatures", id: false, force: :cascade do |t| - t.integer "like_id", limit: 4, null: false - t.text "author_signature", limit: 65535, null: false - t.integer "signature_order_id", limit: 4, null: false - t.text "additional_data", limit: 65535 - end - - add_index "like_signatures", ["like_id"], name: "index_like_signatures_on_like_id", unique: true, using: :btree - add_index "like_signatures", ["signature_order_id"], name: "like_signatures_signature_orders_id_fk", using: :btree - - create_table "likes", force: :cascade do |t| - t.boolean "positive", default: true - t.integer "target_id", limit: 4 - t.integer "author_id", limit: 4 - t.string "guid", limit: 255 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "target_type", limit: 60, null: false - end - - add_index "likes", ["author_id"], name: "likes_author_id_fk", using: :btree - add_index "likes", ["guid"], name: "index_likes_on_guid", unique: true, length: {"guid"=>191}, using: :btree - add_index "likes", ["target_id", "author_id", "target_type"], name: "index_likes_on_target_id_and_author_id_and_target_type", unique: true, using: :btree - add_index "likes", ["target_id"], name: "index_likes_on_post_id", using: :btree - - create_table "locations", force: :cascade do |t| - t.string "address", limit: 255 - t.string "lat", limit: 255 - t.string "lng", limit: 255 - t.integer "status_message_id", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - create_table "mentions", force: :cascade do |t| - t.integer "mentions_container_id", limit: 4, null: false - t.integer "person_id", limit: 4, null: false - t.string "mentions_container_type", limit: 255, null: false - end - - add_index "mentions", ["mentions_container_id", "mentions_container_type"], name: "index_mentions_on_mc_id_and_mc_type", length: {"mentions_container_id"=>nil, "mentions_container_type"=>191}, using: :btree - add_index "mentions", ["person_id", "mentions_container_id", "mentions_container_type"], name: "index_mentions_on_person_and_mc_id_and_mc_type", unique: true, length: {"person_id"=>nil, "mentions_container_id"=>nil, "mentions_container_type"=>191}, using: :btree - add_index "mentions", ["person_id"], name: "index_mentions_on_person_id", using: :btree - - create_table "messages", force: :cascade do |t| - t.integer "conversation_id", limit: 4, null: false - t.integer "author_id", limit: 4, null: false - t.string "guid", limit: 255, null: false - t.text "text", limit: 65535, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - add_index "messages", ["author_id"], name: "index_messages_on_author_id", using: :btree - add_index "messages", ["conversation_id"], name: "messages_conversation_id_fk", using: :btree - add_index "messages", ["guid"], name: "index_messages_on_guid", unique: true, length: {"guid"=>191}, using: :btree - - create_table "notification_actors", force: :cascade do |t| - t.integer "notification_id", limit: 4 - t.integer "person_id", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - add_index "notification_actors", ["notification_id", "person_id"], name: "index_notification_actors_on_notification_id_and_person_id", unique: true, using: :btree - add_index "notification_actors", ["notification_id"], name: "index_notification_actors_on_notification_id", using: :btree - add_index "notification_actors", ["person_id"], name: "index_notification_actors_on_person_id", using: :btree - - create_table "notifications", force: :cascade do |t| - t.string "target_type", limit: 255 - t.integer "target_id", limit: 4 - t.integer "recipient_id", limit: 4, null: false - t.boolean "unread", default: true, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "type", limit: 255 - end - - add_index "notifications", ["recipient_id"], name: "index_notifications_on_recipient_id", using: :btree - add_index "notifications", ["target_id"], name: "index_notifications_on_target_id", using: :btree - add_index "notifications", ["target_type", "target_id"], name: "index_notifications_on_target_type_and_target_id", length: {"target_type"=>190, "target_id"=>nil}, using: :btree - - create_table "o_auth_access_tokens", force: :cascade do |t| - t.integer "authorization_id", limit: 4 - t.string "token", limit: 255 - t.datetime "expires_at" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - add_index "o_auth_access_tokens", ["authorization_id"], name: "index_o_auth_access_tokens_on_authorization_id", using: :btree - add_index "o_auth_access_tokens", ["token"], name: "index_o_auth_access_tokens_on_token", unique: true, length: {"token"=>191}, using: :btree - - create_table "o_auth_applications", force: :cascade do |t| - t.integer "user_id", limit: 4 - t.string "client_id", limit: 255 - t.string "client_secret", limit: 255 - t.string "client_name", limit: 255 - t.text "redirect_uris", limit: 65535 - t.string "response_types", limit: 255 - t.string "grant_types", limit: 255 - t.string "application_type", limit: 255, default: "web" - t.string "contacts", limit: 255 - t.string "logo_uri", limit: 255 - t.string "client_uri", limit: 255 - t.string "policy_uri", limit: 255 - t.string "tos_uri", limit: 255 - t.string "sector_identifier_uri", limit: 255 - t.string "token_endpoint_auth_method", limit: 255 - t.text "jwks", limit: 65535 - t.string "jwks_uri", limit: 255 - t.boolean "ppid", default: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - add_index "o_auth_applications", ["client_id"], name: "index_o_auth_applications_on_client_id", unique: true, length: {"client_id"=>191}, using: :btree - add_index "o_auth_applications", ["user_id"], name: "index_o_auth_applications_on_user_id", using: :btree - - create_table "o_embed_caches", force: :cascade do |t| - t.string "url", limit: 1024, null: false - t.text "data", limit: 65535, null: false - end - - add_index "o_embed_caches", ["url"], name: "index_o_embed_caches_on_url", length: {"url"=>191}, using: :btree - - create_table "open_graph_caches", force: :cascade do |t| - t.string "title", limit: 255 - t.string "ob_type", limit: 255 - t.text "image", limit: 65535 - t.text "url", limit: 65535 - t.text "description", limit: 65535 - t.text "video_url", limit: 65535 - end - - create_table "participations", force: :cascade do |t| - t.string "guid", limit: 255 - t.integer "target_id", limit: 4 - t.string "target_type", limit: 60, null: false - t.integer "author_id", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "count", limit: 4, default: 1, null: false - end - - add_index "participations", ["author_id"], name: "index_participations_on_author_id", using: :btree - add_index "participations", ["guid"], name: "index_participations_on_guid", length: {"guid"=>191}, using: :btree - add_index "participations", ["target_id", "target_type", "author_id"], name: "index_participations_on_target_id_and_target_type_and_author_id", unique: true, using: :btree - - create_table "people", force: :cascade do |t| - t.string "guid", limit: 255, null: false - t.string "diaspora_handle", limit: 255, null: false - t.text "serialized_public_key", limit: 65535, null: false - t.integer "owner_id", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.boolean "closed_account", default: false - t.integer "fetch_status", limit: 4, default: 0 - t.integer "pod_id", limit: 4 - end - - add_index "people", ["diaspora_handle"], name: "index_people_on_diaspora_handle", unique: true, length: {"diaspora_handle"=>191}, using: :btree - add_index "people", ["guid"], name: "index_people_on_guid", unique: true, length: {"guid"=>191}, using: :btree - add_index "people", ["owner_id"], name: "index_people_on_owner_id", unique: true, using: :btree - add_index "people", ["pod_id"], name: "people_pod_id_fk", using: :btree - - create_table "photos", force: :cascade do |t| - t.integer "author_id", limit: 4, null: false - t.boolean "public", default: false, null: false - t.string "guid", limit: 255, null: false - t.boolean "pending", default: false, null: false - t.text "text", limit: 65535 - t.text "remote_photo_path", limit: 65535 - t.string "remote_photo_name", limit: 255 - t.string "random_string", limit: 255 - t.string "processed_image", limit: 255 - t.datetime "created_at" - t.datetime "updated_at" - t.string "unprocessed_image", limit: 255 - t.string "status_message_guid", limit: 255 - t.integer "comments_count", limit: 4 - t.integer "height", limit: 4 - t.integer "width", limit: 4 - end - - add_index "photos", ["guid"], name: "index_photos_on_guid", unique: true, length: {"guid"=>191}, using: :btree - add_index "photos", ["status_message_guid"], name: "index_photos_on_status_message_guid", length: {"status_message_guid"=>191}, using: :btree - - create_table "pods", force: :cascade do |t| - t.string "host", limit: 255, null: false - t.boolean "ssl" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "status", limit: 4, default: 0 - t.datetime "checked_at", default: '1970-01-01 00:00:00' - t.datetime "offline_since" - t.integer "response_time", limit: 4, default: -1 - t.string "software", limit: 255 - t.string "error", limit: 255 - t.integer "port", limit: 4 - t.boolean "blocked", default: false - t.boolean "scheduled_check", default: false, null: false - end - - add_index "pods", ["checked_at"], name: "index_pods_on_checked_at", using: :btree - add_index "pods", ["host", "port"], name: "index_pods_on_host_and_port", unique: true, length: {"host"=>190, "port"=>nil}, using: :btree - add_index "pods", ["offline_since"], name: "index_pods_on_offline_since", using: :btree - add_index "pods", ["status"], name: "index_pods_on_status", using: :btree - - create_table "poll_answers", force: :cascade do |t| - t.string "answer", limit: 255, null: false - t.integer "poll_id", limit: 4, null: false - t.string "guid", limit: 255 - t.integer "vote_count", limit: 4, default: 0 - end - - add_index "poll_answers", ["guid"], name: "index_poll_answers_on_guid", unique: true, length: {"guid"=>191}, using: :btree - add_index "poll_answers", ["poll_id"], name: "index_poll_answers_on_poll_id", using: :btree - - create_table "poll_participation_signatures", id: false, force: :cascade do |t| - t.integer "poll_participation_id", limit: 4, null: false - t.text "author_signature", limit: 65535, null: false - t.integer "signature_order_id", limit: 4, null: false - t.text "additional_data", limit: 65535 - end - - add_index "poll_participation_signatures", ["poll_participation_id"], name: "index_poll_participation_signatures_on_poll_participation_id", unique: true, using: :btree - add_index "poll_participation_signatures", ["signature_order_id"], name: "poll_participation_signatures_signature_orders_id_fk", using: :btree - - create_table "poll_participations", force: :cascade do |t| - t.integer "poll_answer_id", limit: 4, null: false - t.integer "author_id", limit: 4, null: false - t.integer "poll_id", limit: 4, null: false - t.string "guid", limit: 255 - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "poll_participations", ["guid"], name: "index_poll_participations_on_guid", unique: true, length: {"guid"=>191}, using: :btree - add_index "poll_participations", ["poll_id"], name: "index_poll_participations_on_poll_id", using: :btree - - create_table "polls", force: :cascade do |t| - t.string "question", limit: 255, null: false - t.integer "status_message_id", limit: 4, null: false - t.boolean "status" - t.string "guid", limit: 255 - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "polls", ["guid"], name: "index_polls_on_guid", unique: true, length: {"guid"=>191}, using: :btree - add_index "polls", ["status_message_id"], name: "index_polls_on_status_message_id", using: :btree - - create_table "posts", force: :cascade do |t| - t.integer "author_id", limit: 4, null: false - t.boolean "public", default: false, null: false - t.string "guid", limit: 255, null: false - t.string "type", limit: 40, null: false - t.text "text", limit: 65535 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "provider_display_name", limit: 255 - t.string "root_guid", limit: 255 - t.integer "likes_count", limit: 4, default: 0 - t.integer "comments_count", limit: 4, default: 0 - t.integer "o_embed_cache_id", limit: 4 - t.integer "reshares_count", limit: 4, default: 0 - t.datetime "interacted_at" - t.string "facebook_id", limit: 255 - t.string "tweet_id", limit: 255 - t.integer "open_graph_cache_id", limit: 4 - t.text "tumblr_ids", limit: 65535 - end - - add_index "posts", ["author_id", "root_guid"], name: "index_posts_on_author_id_and_root_guid", unique: true, length: {"author_id"=>nil, "root_guid"=>190}, using: :btree - add_index "posts", ["author_id"], name: "index_posts_on_person_id", using: :btree - add_index "posts", ["guid"], name: "index_posts_on_guid", unique: true, length: {"guid"=>191}, using: :btree - add_index "posts", ["id", "type", "created_at"], name: "index_posts_on_id_and_type_and_created_at", using: :btree - add_index "posts", ["id", "type"], name: "index_posts_on_id_and_type", using: :btree - add_index "posts", ["root_guid"], name: "index_posts_on_root_guid", length: {"root_guid"=>191}, using: :btree - add_index "posts", ["tweet_id"], name: "index_posts_on_tweet_id", length: {"tweet_id"=>191}, using: :btree - - create_table "ppid", force: :cascade do |t| - t.integer "o_auth_application_id", limit: 4 - t.integer "user_id", limit: 4 - t.string "guid", limit: 32 - t.string "string", limit: 32 - t.string "identifier", limit: 255 - end - - add_index "ppid", ["o_auth_application_id"], name: "index_ppid_on_o_auth_application_id", using: :btree - add_index "ppid", ["user_id"], name: "index_ppid_on_user_id", using: :btree - - create_table "profiles", force: :cascade do |t| - t.string "diaspora_handle", limit: 255 - t.string "first_name", limit: 127 - t.string "last_name", limit: 127 - t.string "image_url", limit: 255 - t.string "image_url_small", limit: 255 - t.string "image_url_medium", limit: 255 - t.date "birthday" - t.string "gender", limit: 255 - t.text "bio", limit: 65535 - t.boolean "searchable", default: true, null: false - t.integer "person_id", limit: 4, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "location", limit: 255 - t.string "full_name", limit: 70 - t.boolean "nsfw", default: false - t.boolean "public_details", default: false - end - - add_index "profiles", ["full_name", "searchable"], name: "index_profiles_on_full_name_and_searchable", using: :btree - add_index "profiles", ["full_name"], name: "index_profiles_on_full_name", using: :btree - add_index "profiles", ["person_id"], name: "index_profiles_on_person_id", using: :btree - - create_table "rails_admin_histories", force: :cascade do |t| - t.text "message", limit: 65535 - t.string "username", limit: 255 - t.integer "item", limit: 4 - t.string "table", limit: 255 - t.integer "month", limit: 2 - t.integer "year", limit: 8 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - add_index "rails_admin_histories", ["item", "table", "month", "year"], name: "index_rails_admin_histories", length: {"item"=>nil, "table"=>188, "month"=>nil, "year"=>nil}, using: :btree - - create_table "reports", force: :cascade do |t| - t.integer "item_id", limit: 4, null: false - t.string "item_type", limit: 255, null: false - t.boolean "reviewed", default: false - t.text "text", limit: 65535 - t.datetime "created_at" - t.datetime "updated_at" - t.integer "user_id", limit: 4, null: false - end - - add_index "reports", ["item_id"], name: "index_reports_on_item_id", using: :btree - - create_table "roles", force: :cascade do |t| - t.integer "person_id", limit: 4 - t.string "name", limit: 255 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - create_table "services", force: :cascade do |t| - t.string "type", limit: 127, null: false - t.integer "user_id", limit: 4, null: false - t.string "uid", limit: 127 - t.string "access_token", limit: 255 - t.string "access_secret", limit: 255 - t.string "nickname", limit: 255 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - add_index "services", ["type", "uid"], name: "index_services_on_type_and_uid", length: {"type"=>64, "uid"=>nil}, using: :btree - add_index "services", ["user_id"], name: "index_services_on_user_id", using: :btree - - create_table "share_visibilities", force: :cascade do |t| - t.integer "shareable_id", limit: 4, null: false - t.boolean "hidden", default: false, null: false - t.string "shareable_type", limit: 60, default: "Post", null: false - t.integer "user_id", limit: 4, null: false - end - - add_index "share_visibilities", ["shareable_id", "shareable_type", "hidden", "user_id"], name: "shareable_and_hidden_and_user_id", using: :btree - add_index "share_visibilities", ["shareable_id", "shareable_type", "user_id"], name: "shareable_and_user_id", unique: true, using: :btree - add_index "share_visibilities", ["shareable_id"], name: "index_post_visibilities_on_post_id", using: :btree - add_index "share_visibilities", ["user_id"], name: "index_share_visibilities_on_user_id", using: :btree - - create_table "signature_orders", force: :cascade do |t| - t.string "order", limit: 255, null: false - end - - add_index "signature_orders", ["order"], name: "index_signature_orders_on_order", unique: true, length: {"order"=>191}, using: :btree - - create_table "simple_captcha_data", force: :cascade do |t| - t.string "key", limit: 40 - t.string "value", limit: 12 - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "simple_captcha_data", ["key"], name: "idx_key", using: :btree - - create_table "tag_followings", force: :cascade do |t| - t.integer "tag_id", limit: 4, null: false - t.integer "user_id", limit: 4, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - add_index "tag_followings", ["tag_id", "user_id"], name: "index_tag_followings_on_tag_id_and_user_id", unique: true, using: :btree - add_index "tag_followings", ["tag_id"], name: "index_tag_followings_on_tag_id", using: :btree - add_index "tag_followings", ["user_id"], name: "index_tag_followings_on_user_id", using: :btree - - create_table "taggings", force: :cascade do |t| - t.integer "tag_id", limit: 4 - t.integer "taggable_id", limit: 4 - t.string "taggable_type", limit: 127 - t.integer "tagger_id", limit: 4 - t.string "tagger_type", limit: 127 - t.string "context", limit: 127 - t.datetime "created_at" - end - - add_index "taggings", ["created_at"], name: "index_taggings_on_created_at", using: :btree - add_index "taggings", ["tag_id"], name: "index_taggings_on_tag_id", using: :btree - add_index "taggings", ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context", length: {"taggable_id"=>nil, "taggable_type"=>95, "context"=>95}, using: :btree - add_index "taggings", ["taggable_id", "taggable_type", "tag_id"], name: "index_taggings_uniquely", unique: true, using: :btree - - create_table "tags", force: :cascade do |t| - t.string "name", limit: 255 - t.integer "taggings_count", limit: 4, default: 0 - end - - add_index "tags", ["name"], name: "index_tags_on_name", unique: true, length: {"name"=>191}, using: :btree - - create_table "user_preferences", force: :cascade do |t| - t.string "email_type", limit: 255 - t.integer "user_id", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - create_table "users", force: :cascade do |t| - t.string "username", limit: 255, null: false - t.text "serialized_private_key", limit: 65535 - t.boolean "getting_started", default: true, null: false - t.boolean "disable_mail", default: false, null: false - t.string "language", limit: 255 - t.string "email", limit: 255, default: "", null: false - t.string "encrypted_password", limit: 255, default: "", null: false - t.string "reset_password_token", limit: 255 - t.datetime "remember_created_at" - t.integer "sign_in_count", limit: 4, default: 0 - t.datetime "current_sign_in_at" - t.datetime "last_sign_in_at" - t.string "current_sign_in_ip", limit: 255 - t.string "last_sign_in_ip", limit: 255 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "invited_by_id", limit: 4 - t.string "authentication_token", limit: 30 - t.string "unconfirmed_email", limit: 255 - t.string "confirm_email_token", limit: 30 - t.datetime "locked_at" - t.boolean "show_community_spotlight_in_stream", default: true, null: false - t.boolean "auto_follow_back", default: false - t.integer "auto_follow_back_aspect_id", limit: 4 - t.text "hidden_shareables", limit: 65535 - t.datetime "reset_password_sent_at" - t.datetime "last_seen" - t.datetime "remove_after" - t.string "export", limit: 255 - t.datetime "exported_at" - t.boolean "exporting", default: false - t.boolean "strip_exif", default: true - t.string "exported_photos_file", limit: 255 - t.datetime "exported_photos_at" - t.boolean "exporting_photos", default: false - t.string "color_theme", limit: 255 - t.boolean "post_default_public", default: false - end - - add_index "users", ["authentication_token"], name: "index_users_on_authentication_token", unique: true, using: :btree - add_index "users", ["email"], name: "index_users_on_email", unique: true, length: {"email"=>191}, using: :btree - add_index "users", ["username"], name: "index_users_on_username", unique: true, length: {"username"=>191}, using: :btree - - add_foreign_key "aspect_memberships", "aspects", name: "aspect_memberships_aspect_id_fk", on_delete: :cascade - add_foreign_key "aspect_memberships", "contacts", name: "aspect_memberships_contact_id_fk", on_delete: :cascade - add_foreign_key "aspect_visibilities", "aspects", name: "aspect_visibilities_aspect_id_fk", on_delete: :cascade - add_foreign_key "authorizations", "o_auth_applications" - add_foreign_key "authorizations", "users" - add_foreign_key "comment_signatures", "comments", name: "comment_signatures_comment_id_fk", on_delete: :cascade - add_foreign_key "comment_signatures", "signature_orders", name: "comment_signatures_signature_orders_id_fk" - add_foreign_key "comments", "people", column: "author_id", name: "comments_author_id_fk", on_delete: :cascade - add_foreign_key "contacts", "people", name: "contacts_person_id_fk", on_delete: :cascade - add_foreign_key "conversation_visibilities", "conversations", name: "conversation_visibilities_conversation_id_fk", on_delete: :cascade - add_foreign_key "conversation_visibilities", "people", name: "conversation_visibilities_person_id_fk", on_delete: :cascade - add_foreign_key "conversations", "people", column: "author_id", name: "conversations_author_id_fk", on_delete: :cascade - add_foreign_key "like_signatures", "likes", name: "like_signatures_like_id_fk", on_delete: :cascade - add_foreign_key "like_signatures", "signature_orders", name: "like_signatures_signature_orders_id_fk" - add_foreign_key "likes", "people", column: "author_id", name: "likes_author_id_fk", on_delete: :cascade - add_foreign_key "messages", "conversations", name: "messages_conversation_id_fk", on_delete: :cascade - add_foreign_key "messages", "people", column: "author_id", name: "messages_author_id_fk", on_delete: :cascade - add_foreign_key "notification_actors", "notifications", name: "notification_actors_notification_id_fk", on_delete: :cascade - add_foreign_key "o_auth_access_tokens", "authorizations" - add_foreign_key "o_auth_applications", "users" - add_foreign_key "people", "pods", name: "people_pod_id_fk", on_delete: :cascade - add_foreign_key "poll_participation_signatures", "poll_participations", name: "poll_participation_signatures_poll_participation_id_fk", on_delete: :cascade - add_foreign_key "poll_participation_signatures", "signature_orders", name: "poll_participation_signatures_signature_orders_id_fk" - add_foreign_key "posts", "people", column: "author_id", name: "posts_author_id_fk", on_delete: :cascade - add_foreign_key "ppid", "o_auth_applications" - add_foreign_key "ppid", "users" - add_foreign_key "profiles", "people", name: "profiles_person_id_fk", on_delete: :cascade - add_foreign_key "services", "users", name: "services_user_id_fk", on_delete: :cascade - add_foreign_key "share_visibilities", "users", name: "share_visibilities_user_id_fk", on_delete: :cascade -end diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake index 11c9bf3c5..b6e2bcfcf 100644 --- a/lib/tasks/tests.rake +++ b/lib/tasks/tests.rake @@ -1,14 +1,13 @@ namespace :ci do namespace :travis do - task prepare_db: %w(db:create db:test:load) - task prepare: %w(prepare_db assets:generate_error_pages) + task prepare_db: %w[db:create db:migrate] + task prepare: %w[prepare_db assets:generate_error_pages] desc "Run everyhting except cucumber" - task other: %w(prepare tests:generate_fixtures spec jasmine:ci) + task other: %w[prepare tests:generate_fixtures spec jasmine:ci] desc "Run cucumber" - task cucumber: %w(prepare rake:cucumber) - + task cucumber: %w[prepare rake:cucumber] end end From 50f1fd304fe6b9083a9a46b53af825bfff849130 Mon Sep 17 00:00:00 2001 From: Dennis Schubert Date: Tue, 8 Aug 2017 00:14:04 +0200 Subject: [PATCH 46/52] Remove UTF8 to UTF8mb4 migration we released that in 0.5.0.0 in 2015, we do not support skipping majors anyway, and this is broken in Rails 5, so let's remove this. If people upgrade from before 0.5.0.0, they have to upgrade via 0.6.0.0, but that's written in the documenation. --- ...20150106050733_set_mysql_to_unicode_mb4.rb | 110 ------------------ 1 file changed, 110 deletions(-) delete mode 100644 db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb diff --git a/db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb b/db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb deleted file mode 100644 index 37cef149a..000000000 --- a/db/migrate/20150106050733_set_mysql_to_unicode_mb4.rb +++ /dev/null @@ -1,110 +0,0 @@ -class SetMysqlToUnicodeMb4 < ActiveRecord::Migration[4.2] - # Converts the tables and strings columns to utf8mb4, which is the true, full - # unicode support in MySQl - - def self.up - # shorten indexes regardless of the RDBMS provider - for consitency - shorten_indexes - change_encoding('utf8mb4', 'utf8mb4_bin') if AppConfig.mysql? - end - - def self.down - change_encoding('utf8', 'utf8_bin') if AppConfig.mysql? - end - - def check_config(encoding, collation) - connection_config = ActiveRecord::Base.connection_config - raise "Database encoding is not #{encoding}!" if connection_config[:encoding] != encoding - raise "Database collation is not #{collation}!" if connection_config[:collation] != collation - end - - def change_encoding(encoding, collation) - # Make sure the podmin changed the database.yml file - check_config(encoding, collation) - - execute "ALTER DATABASE `#{ActiveRecord::Base.connection.current_database}` CHARACTER SET #{encoding} COLLATE #{collation};" - - tables.each do |table| - - modify_text_columns = columns(table).select {|column| column.type == :text }.map {|column| - "MODIFY `#{column.name}` TEXT #{'NOT' unless column.null } NULL#{" DEFAULT '#{column.default}'" if column.has_default?}" - }.join(", ") - - execute "ALTER TABLE `#{table}` CONVERT TO CHARACTER SET #{encoding} COLLATE #{collation}#{", #{modify_text_columns}" unless modify_text_columns.empty?};" - end - end - - def shorten_indexes - remove_index 'aspect_visibilities', :name => 'shareable_and_aspect_id' - add_index 'aspect_visibilities', ["shareable_id", "shareable_type", "aspect_id"], :name => 'shareable_and_aspect_id', length: {"shareable_type"=>189}, :using => :btree - - remove_index 'aspect_visibilities', :name => 'index_aspect_visibilities_on_shareable_id_and_shareable_type' - add_index 'aspect_visibilities', ["shareable_id", "shareable_type"], :name => 'index_aspect_visibilities_on_shareable_id_and_shareable_type', length: {"shareable_type"=>190}, :using => :btree - - remove_index 'chat_contacts', :name => 'index_chat_contacts_on_user_id_and_jid' - add_index 'chat_contacts', ["user_id", "jid"], :name => 'index_chat_contacts_on_user_id_and_jid', length: {"jid"=>190}, :using => :btree, :unique => true - - remove_index 'comments', :name => 'index_comments_on_guid' - add_index 'comments', ["guid"], :name => 'index_comments_on_guid', length: {"guid"=>191}, :using => :btree, :unique => true - - remove_index 'likes', :name => 'index_likes_on_guid' - add_index 'likes', ["guid"], :name => 'index_likes_on_guid', length: {"guid"=>191}, :using => :btree, :unique => true - - remove_index 'o_embed_caches', :name => 'index_o_embed_caches_on_url' - add_index 'o_embed_caches', ["url"], :name => 'index_o_embed_caches_on_url', length: {"url"=>191}, :using => :btree - - remove_index 'participations', :name => 'index_participations_on_guid' - add_index 'participations', ["guid"], :name => 'index_participations_on_guid', length: {"guid"=>191}, :using => :btree - - remove_index 'people', :name => 'index_people_on_diaspora_handle' - add_index "people", ["diaspora_handle"], :name => "index_people_on_diaspora_handle", :unique => true, :length => {"diaspora_handle" => 191} - - remove_index 'people', :name => 'index_people_on_guid' - add_index 'people', ["guid"], :name => 'index_people_on_guid', length: {"guid"=>191}, :using => :btree, :unique => true - - remove_index 'photos', :name => 'index_photos_on_status_message_guid' - add_index 'photos', ["status_message_guid"], :name => 'index_photos_on_status_message_guid', length: {"status_message_guid"=>191}, :using => :btree - - remove_index 'posts', :name => 'index_posts_on_guid' - add_index 'posts', ["guid"], :name => 'index_posts_on_guid', length: {"guid"=>191}, :using => :btree, :unique => true - - remove_index 'posts', :name => 'index_posts_on_status_message_guid_and_pending' - add_index 'posts', ["status_message_guid", "pending"], :name => 'index_posts_on_status_message_guid_and_pending', length: {"status_message_guid"=>190}, :using => :btree - - remove_index 'posts', :name => 'index_posts_on_status_message_guid' - add_index 'posts', ["status_message_guid"], :name => 'index_posts_on_status_message_guid', length: {"status_message_guid"=>191}, :using => :btree - - remove_index 'posts', :name => 'index_posts_on_author_id_and_root_guid' - add_index 'posts', ["author_id", "root_guid"], :name => 'index_posts_on_author_id_and_root_guid', length: {"root_guid"=>190}, :using => :btree, :unique => true - - remove_index 'posts', :name => 'index_posts_on_root_guid' - add_index 'posts', ["root_guid"], :name => 'index_posts_on_root_guid', length: {"root_guid"=>191} - - remove_index 'posts', :name => 'index_posts_on_tweet_id' - add_index 'posts', ['tweet_id'], :name => 'index_posts_on_tweet_id', length: {"tweet_id"=>191}, :using => :btree - - remove_index 'rails_admin_histories', :name => 'index_rails_admin_histories' - add_index 'rails_admin_histories', ["item", "table", "month", "year"], :name => 'index_rails_admin_histories', length: {"table"=>188}, :using => :btree - - remove_index 'services', :name => 'index_services_on_type_and_uid' - add_index 'services', ["type", "uid"], :name => 'index_services_on_type_and_uid', length: {"type"=>64, "uid"=>127}, :using => :btree - - remove_index 'taggings', :name => 'index_taggings_on_taggable_id_and_taggable_type_and_context' - add_index 'taggings', ["taggable_id", "taggable_type", "context"], :name => 'index_taggings_on_taggable_id_and_taggable_type_and_context', length: {"taggable_type"=>95, "context"=>95}, :using => :btree - - remove_index 'tags', :name => 'index_tags_on_name' - add_index 'tags', ["name"], :name => 'index_tags_on_name', length: {"name"=>191}, :using => :btree, :unique => true - - remove_index 'users', :name => 'index_users_on_invitation_service_and_invitation_identifier' - add_index 'users', ["invitation_service", "invitation_identifier"], :name => 'index_users_on_invitation_service_and_invitation_identifier', length: {"invitation_service"=>64, "invitation_identifier"=>127}, :using => :btree, :unique => true - - remove_index 'users', :name => 'index_users_on_username' - add_index 'users', ["username"], :name => 'index_users_on_username', length: {"username"=>191}, :using => :btree, :unique => true - - remove_index 'users', :name => 'index_users_on_email' - add_index 'users', ["email"], :name => 'index_users_on_email', length: {"email"=>191}, :using => :btree - - remove_index 'notifications', :name => 'index_notifications_on_target_type_and_target_id' - add_index 'notifications', ["target_type", "target_id"], name: 'index_notifications_on_target_type_and_target_id', length: {"target_type"=>190}, using: :btree - end -end From ec680962ee96627aac0cc9a11a14a6757d06509d Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Thu, 10 Aug 2017 03:26:56 +0200 Subject: [PATCH 47/52] Convert CreateSchema migration to real migration with up method Otherwise Rails 5 would ignore the migration version and create the tables with bitints as IDs on MySQL. --- db/migrate/0000_create_schema.rb | 974 ++++++++++++++++--------------- 1 file changed, 489 insertions(+), 485 deletions(-) diff --git a/db/migrate/0000_create_schema.rb b/db/migrate/0000_create_schema.rb index 900b8a8e8..a6393fd40 100644 --- a/db/migrate/0000_create_schema.rb +++ b/db/migrate/0000_create_schema.rb @@ -1,488 +1,492 @@ class CreateSchema < ActiveRecord::Migration[4.2] - create_table "account_deletions", :force => true do |t| - t.string "diaspora_handle" - t.integer "person_id" + # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/LineLength, Layout/ExtraSpacing + def up + create_table :account_deletions do |t| + t.string :diaspora_handle + t.integer :person_id + end + + create_table :aspect_memberships do |t| + t.integer :aspect_id, null: false + t.integer :contact_id, null: false + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + add_index :aspect_memberships, %i[aspect_id contact_id], name: :index_aspect_memberships_on_aspect_id_and_contact_id, unique: true + add_index :aspect_memberships, [:aspect_id], name: :index_aspect_memberships_on_aspect_id + add_index :aspect_memberships, [:contact_id], name: :index_aspect_memberships_on_contact_id + + create_table :aspect_visibilities do |t| + t.integer :shareable_id, null: false + t.integer :aspect_id, null: false + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.string :shareable_type, default: "Post", null: false + end + + add_index :aspect_visibilities, [:aspect_id], name: :index_aspect_visibilities_on_aspect_id + add_index :aspect_visibilities, %i[shareable_id shareable_type aspect_id], name: :shareable_and_aspect_id, length: {shareable_type: 189}, using: :btree + add_index :aspect_visibilities, %i[shareable_id shareable_type], name: :index_aspect_visibilities_on_shareable_id_and_shareable_type, length: {shareable_type: 190}, using: :btree + + create_table :aspects do |t| + t.string :name, null: false + t.integer :user_id, null: false + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.boolean :contacts_visible, default: true, null: false + t.integer :order_id + end + + add_index :aspects, %i[user_id contacts_visible], name: :index_aspects_on_user_id_and_contacts_visible + add_index :aspects, [:user_id], name: :index_aspects_on_user_id + + create_table :blocks do |t| + t.integer :user_id + t.integer :person_id + end + + create_table :comments do |t| + t.text :text, null: false + t.integer :commentable_id, null: false + t.integer :author_id, null: false + t.string :guid, null: false + t.text :author_signature + t.text :parent_author_signature + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.integer :likes_count, default: 0, null: false + t.string :commentable_type, limit: 60, default: "Post", null: false + end + + add_index :comments, [:author_id], name: :index_comments_on_person_id + add_index :comments, %i[commentable_id commentable_type], name: :index_comments_on_commentable_id_and_commentable_type + add_index :comments, [:guid], name: :index_comments_on_guid, length: {guid: 191}, using: :btree, unique: true + + create_table :contacts do |t| + t.integer :user_id, null: false + t.integer :person_id, null: false + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.boolean :sharing, default: false, null: false + t.boolean :receiving, default: false, null: false + end + + add_index :contacts, [:person_id], name: :index_contacts_on_person_id + add_index :contacts, %i[user_id person_id], name: :index_contacts_on_user_id_and_person_id, unique: true + + create_table :conversation_visibilities do |t| + t.integer :conversation_id, null: false + t.integer :person_id, null: false + t.integer :unread, default: 0, null: false + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + add_index :conversation_visibilities, %i[conversation_id person_id], name: :index_conversation_visibilities_usefully, unique: true + add_index :conversation_visibilities, [:conversation_id], name: :index_conversation_visibilities_on_conversation_id + add_index :conversation_visibilities, [:person_id], name: :index_conversation_visibilities_on_person_id + + create_table :conversations do |t| + t.string :subject + t.string :guid, null: false + t.integer :author_id, null: false + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + add_index :conversations, [:author_id], name: :conversations_author_id_fk + + create_table :invitation_codes do |t| + t.string :token + t.integer :user_id + t.integer :count + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + create_table :invitations do |t| + t.text :message + t.integer :sender_id + t.integer :recipient_id + t.integer :aspect_id + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.string :service + t.string :identifier + t.boolean :admin, default: false + t.string :language, default: "en" + end + + add_index :invitations, [:aspect_id], name: :index_invitations_on_aspect_id + add_index :invitations, [:recipient_id], name: :index_invitations_on_recipient_id + add_index :invitations, [:sender_id], name: :index_invitations_on_sender_id + + create_table :likes do |t| + t.boolean :positive, default: true + t.integer :target_id + t.integer :author_id + t.string :guid + t.text :author_signature + t.text :parent_author_signature + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.string :target_type, limit: 60, null: false + end + + add_index :likes, [:author_id], name: :likes_author_id_fk + add_index :likes, [:guid], name: :index_likes_on_guid, length: {guid: 191}, using: :btree, unique: true + add_index :likes, %i[target_id author_id target_type], name: :index_likes_on_target_id_and_author_id_and_target_type, unique: true + add_index :likes, [:target_id], name: :index_likes_on_post_id + + create_table :locations do |t| + t.string :address + t.string :lat + t.string :lng + t.integer :status_message_id + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + create_table :mentions do |t| + t.integer :post_id, null: false + t.integer :person_id, null: false + end + + add_index :mentions, %i[person_id post_id], name: :index_mentions_on_person_id_and_post_id, unique: true + add_index :mentions, [:person_id], name: :index_mentions_on_person_id + add_index :mentions, [:post_id], name: :index_mentions_on_post_id + + create_table :messages do |t| + t.integer :conversation_id, null: false + t.integer :author_id, null: false + t.string :guid, null: false + t.text :text, null: false + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.text :author_signature + t.text :parent_author_signature + end + + add_index :messages, [:author_id], name: :index_messages_on_author_id + add_index :messages, [:conversation_id], name: :messages_conversation_id_fk + + create_table :notification_actors do |t| + t.integer :notification_id + t.integer :person_id + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + add_index :notification_actors, %i[notification_id person_id], name: :index_notification_actors_on_notification_id_and_person_id, unique: true + add_index :notification_actors, [:notification_id], name: :index_notification_actors_on_notification_id + add_index :notification_actors, [:person_id], name: :index_notification_actors_on_person_id + + create_table :notifications do |t| + t.string :target_type + t.integer :target_id + t.integer :recipient_id, null: false + t.boolean :unread, default: true, null: false + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.string :type + end + + add_index :notifications, [:recipient_id], name: :index_notifications_on_recipient_id + add_index :notifications, [:target_id], name: :index_notifications_on_target_id + add_index :notifications, %i[target_type target_id], name: :index_notifications_on_target_type_and_target_id, length: {target_type: 190}, using: :btree + + create_table :o_embed_caches do |t| + t.string :url, limit: 1024, null: false + t.text :data, null: false + end + + add_index :o_embed_caches, [:url], name: :index_o_embed_caches_on_url, length: {url: 191}, using: :btree + + create_table :participations do |t| + t.string :guid + t.integer :target_id + t.string :target_type, limit: 60, null: false + t.integer :author_id + t.text :author_signature + t.text :parent_author_signature + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + add_index :participations, [:guid], name: :index_participations_on_guid, length: {guid: 191}, using: :btree + add_index :participations, %i[target_id target_type author_id], name: :index_participations_on_target_id_and_target_type_and_author_id + + create_table :people do |t| + t.string :guid, null: false + t.text :url, null: false + t.string :diaspora_handle, null: false + t.text :serialized_public_key, null: false + t.integer :owner_id + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.boolean :closed_account, default: false + t.integer :fetch_status, default: 0 + end + + add_index :people, [:diaspora_handle], name: :index_people_on_diaspora_handle, unique: true, length: {diaspora_handle: 191} + add_index :people, [:guid], name: :index_people_on_guid, length: {guid: 191}, using: :btree, unique: true + add_index :people, [:owner_id], name: :index_people_on_owner_id, unique: true + + create_table :photos do |t| + t.integer :tmp_old_id + t.integer :author_id, null: false + t.boolean :public, default: false, null: false + t.string :diaspora_handle + t.string :guid, null: false + t.boolean :pending, default: false, null: false + t.text :text + t.text :remote_photo_path + t.string :remote_photo_name + t.string :random_string + t.string :processed_image + t.datetime :created_at + t.datetime :updated_at + t.string :unprocessed_image + t.string :status_message_guid + t.integer :comments_count + t.integer :height + t.integer :width + end + + add_index :photos, [:status_message_guid], name: :index_photos_on_status_message_guid, length: {status_message_guid: 191}, using: :btree + + create_table :pods do |t| + t.string :host + t.boolean :ssl + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + create_table :posts do |t| + t.integer :author_id, null: false + t.boolean :public, default: false, null: false + t.string :diaspora_handle + t.string :guid, null: false + t.boolean :pending, default: false, null: false + t.string :type, limit: 40, null: false + t.text :text + t.text :remote_photo_path + t.string :remote_photo_name + t.string :random_string + t.string :processed_image + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.string :unprocessed_image + t.string :object_url + t.string :image_url + t.integer :image_height + t.integer :image_width + t.string :provider_display_name + t.string :actor_url + t.string :objectId + t.string :root_guid, limit: 30 + t.string :status_message_guid + t.integer :likes_count, default: 0 + t.integer :comments_count, default: 0 + t.integer :o_embed_cache_id + t.integer :reshares_count, default: 0 + t.datetime :interacted_at + t.string :frame_name + t.boolean :favorite, default: false + end + + add_index :posts, %i[author_id root_guid], name: :index_posts_on_author_id_and_root_guid, length: {root_guid: 30}, using: :btree, unique: true + add_index :posts, [:author_id], name: :index_posts_on_person_id + add_index :posts, [:guid], name: :index_posts_on_guid, length: {guid: 191}, using: :btree, unique: true + add_index :posts, %i[id type created_at], name: :index_posts_on_id_and_type_and_created_at + add_index :posts, [:root_guid], name: :index_posts_on_root_guid, length: {root_guid: 30} + add_index :posts, %i[status_message_guid pending], name: :index_posts_on_status_message_guid_and_pending, length: {status_message_guid: 190}, using: :btree + add_index :posts, [:status_message_guid], name: :index_posts_on_status_message_guid, length: {status_message_guid: 191}, using: :btree + add_index :posts, %i[type pending id], name: :index_posts_on_type_and_pending_and_id + + create_table :profiles do |t| + t.string :diaspora_handle + t.string :first_name, limit: 127 + t.string :last_name, limit: 127 + t.string :image_url + t.string :image_url_small + t.string :image_url_medium + t.date :birthday + t.string :gender + t.text :bio + t.boolean :searchable, default: true, null: false + t.integer :person_id, null: false + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.string :location + t.string :full_name, limit: 70 + t.boolean :nsfw, default: false + end + + add_index :profiles, %i[full_name searchable], name: :index_profiles_on_full_name_and_searchable + add_index :profiles, [:full_name], name: :index_profiles_on_full_name + add_index :profiles, [:person_id], name: :index_profiles_on_person_id + + create_table :rails_admin_histories do |t| + t.text :message + t.string :username + t.integer :item + t.string :table + t.integer :month, limit: 2 + t.integer :year, limit: 8 + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + add_index :rails_admin_histories, %i[item table month year], name: :index_rails_admin_histories, length: {table: 188} + + create_table :roles do |t| + t.integer :person_id + t.string :name + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + create_table :services do |t| + t.string :type, limit: 127, null: false + t.integer :user_id, null: false + t.string :uid, limit: 127 + t.string :access_token + t.string :access_secret + t.string :nickname + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + add_index :services, %i[type uid], name: :index_services_on_type_and_uid, length: {type: 64, uid: 127}, using: :btree + add_index :services, [:user_id], name: :index_services_on_user_id + + create_table :share_visibilities do |t| + t.integer :shareable_id, null: false + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.boolean :hidden, default: false, null: false + t.integer :contact_id, null: false + t.string :shareable_type, limit: 60, default: "Post", null: false + end + + add_index :share_visibilities, [:contact_id], name: :index_post_visibilities_on_contact_id + add_index :share_visibilities, %i[shareable_id shareable_type contact_id], name: :shareable_and_contact_id + add_index :share_visibilities, %i[shareable_id shareable_type hidden contact_id], name: :shareable_and_hidden_and_contact_id + add_index :share_visibilities, [:shareable_id], name: :index_post_visibilities_on_post_id + + create_table :tag_followings do |t| + t.integer :tag_id, null: false + t.integer :user_id, null: false + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + add_index :tag_followings, %i[tag_id user_id], name: :index_tag_followings_on_tag_id_and_user_id, unique: true + add_index :tag_followings, [:tag_id], name: :index_tag_followings_on_tag_id + add_index :tag_followings, [:user_id], name: :index_tag_followings_on_user_id + + create_table :taggings do |t| + t.integer :tag_id + t.integer :taggable_id + t.string :taggable_type, limit: 127 + t.integer :tagger_id + t.string :tagger_type, limit: 127 + t.string :context, limit: 127 + t.datetime :created_at + end + + add_index :taggings, [:created_at], name: :index_taggings_on_created_at + add_index :taggings, [:tag_id], name: :index_taggings_on_tag_id + add_index :taggings, %i[taggable_id taggable_type context], name: :index_taggings_on_taggable_id_and_taggable_type_and_context, length: {taggable_type: 95, context: 95}, using: :btree + add_index :taggings, %i[taggable_id taggable_type tag_id], name: :index_taggings_uniquely, unique: true + + create_table :tags do |t| + t.string :name + end + + add_index :tags, [:name], name: :index_tags_on_name, unique: true, length: {name: 191} + + create_table :user_preferences do |t| + t.string :email_type + t.integer :user_id + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + + create_table :users do |t| + t.string :username + t.text :serialized_private_key + t.boolean :getting_started, default: true, null: false + t.boolean :disable_mail, default: false, null: false + t.string :language + t.string :email, default: "", null: false + t.string :encrypted_password, default: "", null: false + t.string :invitation_token, limit: 60 + t.datetime :invitation_sent_at + t.string :reset_password_token + t.datetime :remember_created_at + t.integer :sign_in_count, default: 0 + t.datetime :current_sign_in_at + t.datetime :last_sign_in_at + t.string :current_sign_in_ip + t.string :last_sign_in_ip + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + t.string :invitation_service, limit: 127 + t.string :invitation_identifier, limit: 127 + t.integer :invitation_limit + t.integer :invited_by_id + t.string :invited_by_type + t.string :authentication_token, limit: 30 + t.string :unconfirmed_email + t.string :confirm_email_token, limit: 30 + t.datetime :locked_at + t.boolean :show_community_spotlight_in_stream, default: true, null: false + t.boolean :auto_follow_back, default: false + t.integer :auto_follow_back_aspect_id + t.text :hidden_shareables + t.datetime :reset_password_sent_at + end + + add_index :users, [:authentication_token], name: :index_users_on_authentication_token, unique: true + add_index :users, [:email], name: :index_users_on_email, length: {email: 191} + add_index :users, %i[invitation_service invitation_identifier], name: :index_users_on_invitation_service_and_invitation_identifier, length: {invitation_service: 64, invitation_identifier: 127}, using: :btree, unique: true + add_index :users, [:invitation_token], name: :index_users_on_invitation_token + add_index :users, [:username], name: :index_users_on_username, length: {username: 191}, using: :btree, unique: true + + add_foreign_key :aspect_memberships, :aspects, name: :aspect_memberships_aspect_id_fk, on_delete: :cascade + add_foreign_key :aspect_memberships, :contacts, name: :aspect_memberships_contact_id_fk, on_delete: :cascade + + add_foreign_key :aspect_visibilities, :aspects, name: :aspect_visibilities_aspect_id_fk, on_delete: :cascade + + add_foreign_key :comments, :people, name: :comments_author_id_fk, column: :author_id, on_delete: :cascade + + add_foreign_key :contacts, :people, name: :contacts_person_id_fk, on_delete: :cascade + + add_foreign_key :conversation_visibilities, :conversations, name: :conversation_visibilities_conversation_id_fk, on_delete: :cascade + add_foreign_key :conversation_visibilities, :people, name: :conversation_visibilities_person_id_fk, on_delete: :cascade + + add_foreign_key :conversations, :people, name: :conversations_author_id_fk, column: :author_id, on_delete: :cascade + + add_foreign_key :invitations, :users, name: :invitations_recipient_id_fk, column: :recipient_id, on_delete: :cascade + add_foreign_key :invitations, :users, name: :invitations_sender_id_fk, column: :sender_id, on_delete: :cascade + + add_foreign_key :likes, :people, name: :likes_author_id_fk, column: :author_id, on_delete: :cascade + + add_foreign_key :messages, :conversations, name: :messages_conversation_id_fk, on_delete: :cascade + add_foreign_key :messages, :people, name: :messages_author_id_fk, column: :author_id, on_delete: :cascade + + add_foreign_key :notification_actors, :notifications, name: :notification_actors_notification_id_fk, on_delete: :cascade + + add_foreign_key :posts, :people, name: :posts_author_id_fk, column: :author_id, on_delete: :cascade + + add_foreign_key :profiles, :people, name: :profiles_person_id_fk, on_delete: :cascade + + add_foreign_key :services, :users, name: :services_user_id_fk, on_delete: :cascade + + add_foreign_key :share_visibilities, :contacts, name: :post_visibilities_contact_id_fk, on_delete: :cascade end - - create_table "aspect_memberships", :force => true do |t| - t.integer "aspect_id", :null => false - t.integer "contact_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "aspect_memberships", ["aspect_id", "contact_id"], :name => "index_aspect_memberships_on_aspect_id_and_contact_id", :unique => true - add_index "aspect_memberships", ["aspect_id"], :name => "index_aspect_memberships_on_aspect_id" - add_index "aspect_memberships", ["contact_id"], :name => "index_aspect_memberships_on_contact_id" - - create_table "aspect_visibilities", :force => true do |t| - t.integer "shareable_id", :null => false - t.integer "aspect_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "shareable_type", :default => "Post", :null => false - end - - add_index "aspect_visibilities", ["aspect_id"], :name => "index_aspect_visibilities_on_aspect_id" - add_index 'aspect_visibilities', ["shareable_id", "shareable_type", "aspect_id"], :name => 'shareable_and_aspect_id', length: {"shareable_type"=>189}, :using => :btree - add_index 'aspect_visibilities', ["shareable_id", "shareable_type"], :name => 'index_aspect_visibilities_on_shareable_id_and_shareable_type', length: {"shareable_type"=>190}, :using => :btree - - create_table "aspects", :force => true do |t| - t.string "name", :null => false - t.integer "user_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.boolean "contacts_visible", :default => true, :null => false - t.integer "order_id" - end - - add_index "aspects", ["user_id", "contacts_visible"], :name => "index_aspects_on_user_id_and_contacts_visible" - add_index "aspects", ["user_id"], :name => "index_aspects_on_user_id" - - create_table "blocks", :force => true do |t| - t.integer "user_id" - t.integer "person_id" - end - - create_table "comments", :force => true do |t| - t.text "text", :null => false - t.integer "commentable_id", :null => false - t.integer "author_id", :null => false - t.string "guid", :null => false - t.text "author_signature" - t.text "parent_author_signature" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "likes_count", :default => 0, :null => false - t.string "commentable_type", :limit => 60, :default => "Post", :null => false - end - - add_index "comments", ["author_id"], :name => "index_comments_on_person_id" - add_index "comments", ["commentable_id", "commentable_type"], :name => "index_comments_on_commentable_id_and_commentable_type" - add_index 'comments', ["guid"], :name => 'index_comments_on_guid', length: {"guid"=>191}, :using => :btree, :unique => true - - create_table "contacts", :force => true do |t| - t.integer "user_id", :null => false - t.integer "person_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.boolean "sharing", :default => false, :null => false - t.boolean "receiving", :default => false, :null => false - end - - add_index "contacts", ["person_id"], :name => "index_contacts_on_person_id" - add_index "contacts", ["user_id", "person_id"], :name => "index_contacts_on_user_id_and_person_id", :unique => true - - create_table "conversation_visibilities", :force => true do |t| - t.integer "conversation_id", :null => false - t.integer "person_id", :null => false - t.integer "unread", :default => 0, :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "conversation_visibilities", ["conversation_id", "person_id"], :name => "index_conversation_visibilities_usefully", :unique => true - add_index "conversation_visibilities", ["conversation_id"], :name => "index_conversation_visibilities_on_conversation_id" - add_index "conversation_visibilities", ["person_id"], :name => "index_conversation_visibilities_on_person_id" - - create_table "conversations", :force => true do |t| - t.string "subject" - t.string "guid", :null => false - t.integer "author_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "conversations", ["author_id"], :name => "conversations_author_id_fk" - - create_table "invitation_codes", :force => true do |t| - t.string "token" - t.integer "user_id" - t.integer "count" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "invitations", :force => true do |t| - t.text "message" - t.integer "sender_id" - t.integer "recipient_id" - t.integer "aspect_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "service" - t.string "identifier" - t.boolean "admin", :default => false - t.string "language", :default => "en" - end - - add_index "invitations", ["aspect_id"], :name => "index_invitations_on_aspect_id" - add_index "invitations", ["recipient_id"], :name => "index_invitations_on_recipient_id" - add_index "invitations", ["sender_id"], :name => "index_invitations_on_sender_id" - - create_table "likes", :force => true do |t| - t.boolean "positive", :default => true - t.integer "target_id" - t.integer "author_id" - t.string "guid" - t.text "author_signature" - t.text "parent_author_signature" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "target_type", :limit => 60, :null => false - end - - add_index "likes", ["author_id"], :name => "likes_author_id_fk" - add_index 'likes', ["guid"], :name => 'index_likes_on_guid', length: {"guid"=>191}, :using => :btree, :unique => true - add_index "likes", ["target_id", "author_id", "target_type"], :name => "index_likes_on_target_id_and_author_id_and_target_type", :unique => true - add_index "likes", ["target_id"], :name => "index_likes_on_post_id" - - create_table "locations", :force => true do |t| - t.string "address" - t.string "lat" - t.string "lng" - t.integer "status_message_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "mentions", :force => true do |t| - t.integer "post_id", :null => false - t.integer "person_id", :null => false - end - - add_index "mentions", ["person_id", "post_id"], :name => "index_mentions_on_person_id_and_post_id", :unique => true - add_index "mentions", ["person_id"], :name => "index_mentions_on_person_id" - add_index "mentions", ["post_id"], :name => "index_mentions_on_post_id" - - create_table "messages", :force => true do |t| - t.integer "conversation_id", :null => false - t.integer "author_id", :null => false - t.string "guid", :null => false - t.text "text", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.text "author_signature" - t.text "parent_author_signature" - end - - add_index "messages", ["author_id"], :name => "index_messages_on_author_id" - add_index "messages", ["conversation_id"], :name => "messages_conversation_id_fk" - - create_table "notification_actors", :force => true do |t| - t.integer "notification_id" - t.integer "person_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "notification_actors", ["notification_id", "person_id"], :name => "index_notification_actors_on_notification_id_and_person_id", :unique => true - add_index "notification_actors", ["notification_id"], :name => "index_notification_actors_on_notification_id" - add_index "notification_actors", ["person_id"], :name => "index_notification_actors_on_person_id" - - create_table "notifications", :force => true do |t| - t.string "target_type" - t.integer "target_id" - t.integer "recipient_id", :null => false - t.boolean "unread", :default => true, :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "type" - end - - add_index "notifications", ["recipient_id"], :name => "index_notifications_on_recipient_id" - add_index "notifications", ["target_id"], :name => "index_notifications_on_target_id" - add_index 'notifications', ["target_type", "target_id"], name: 'index_notifications_on_target_type_and_target_id', length: {"target_type"=>190}, using: :btree - - create_table "o_embed_caches", :force => true do |t| - t.string "url", :limit => 1024, :null => false - t.text "data", :null => false - end - - add_index "o_embed_caches", ["url"], :name => "index_o_embed_caches_on_url", :length => {"url"=> 191}, using: :btree - - create_table "participations", :force => true do |t| - t.string "guid" - t.integer "target_id" - t.string "target_type", :limit => 60, :null => false - t.integer "author_id" - t.text "author_signature" - t.text "parent_author_signature" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index 'participations', ["guid"], :name => 'index_participations_on_guid', length: {"guid"=>191}, :using => :btree - add_index "participations", ["target_id", "target_type", "author_id"], :name => "index_participations_on_target_id_and_target_type_and_author_id" - - create_table "people", :force => true do |t| - t.string "guid", :null => false - t.text "url", :null => false - t.string "diaspora_handle", :null => false - t.text "serialized_public_key", :null => false - t.integer "owner_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.boolean "closed_account", :default => false - t.integer "fetch_status", :default => 0 - end - - add_index "people", ["diaspora_handle"], :name => "index_people_on_diaspora_handle", :unique => true, :length => {"diaspora_handle" => 191} - add_index 'people', ["guid"], :name => 'index_people_on_guid', length: {"guid"=>191}, :using => :btree, :unique => true - add_index "people", ["owner_id"], :name => "index_people_on_owner_id", :unique => true - - create_table "photos", :force => true do |t| - t.integer "tmp_old_id" - t.integer "author_id", :null => false - t.boolean "public", :default => false, :null => false - t.string "diaspora_handle" - t.string "guid", :null => false - t.boolean "pending", :default => false, :null => false - t.text "text" - t.text "remote_photo_path" - t.string "remote_photo_name" - t.string "random_string" - t.string "processed_image" - t.datetime "created_at" - t.datetime "updated_at" - t.string "unprocessed_image" - t.string "status_message_guid" - t.integer "comments_count" - t.integer "height" - t.integer "width" - end - - add_index 'photos', ["status_message_guid"], :name => 'index_photos_on_status_message_guid', length: {"status_message_guid"=>191}, :using => :btree - - create_table "pods", :force => true do |t| - t.string "host" - t.boolean "ssl" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "posts", :force => true do |t| - t.integer "author_id", :null => false - t.boolean "public", :default => false, :null => false - t.string "diaspora_handle" - t.string "guid", :null => false - t.boolean "pending", :default => false, :null => false - t.string "type", :limit => 40, :null => false - t.text "text" - t.text "remote_photo_path" - t.string "remote_photo_name" - t.string "random_string" - t.string "processed_image" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "unprocessed_image" - t.string "object_url" - t.string "image_url" - t.integer "image_height" - t.integer "image_width" - t.string "provider_display_name" - t.string "actor_url" - t.string "objectId" - t.string "root_guid", :limit => 30 - t.string "status_message_guid" - t.integer "likes_count", :default => 0 - t.integer "comments_count", :default => 0 - t.integer "o_embed_cache_id" - t.integer "reshares_count", :default => 0 - t.datetime "interacted_at" - t.string "frame_name" - t.boolean "favorite", :default => false - end - - add_index 'posts', ["author_id", "root_guid"], :name => 'index_posts_on_author_id_and_root_guid', length: {"root_guid"=>30}, :using => :btree, :unique => true - add_index "posts", ["author_id"], :name => "index_posts_on_person_id" - add_index 'posts', ["guid"], :name => 'index_posts_on_guid', length: {"guid"=>191}, :using => :btree, :unique => true - add_index "posts", ["id", "type", "created_at"], :name => "index_posts_on_id_and_type_and_created_at" - add_index 'posts', ["root_guid"], :name => 'index_posts_on_root_guid', length: {"root_guid"=>30} - add_index 'posts', ["status_message_guid", "pending"], :name => 'index_posts_on_status_message_guid_and_pending', length: {"status_message_guid"=>190}, :using => :btree - add_index 'posts', ["status_message_guid"], :name => 'index_posts_on_status_message_guid', length: {"status_message_guid"=>191}, :using => :btree - add_index "posts", ["type", "pending", "id"], :name => "index_posts_on_type_and_pending_and_id" - - create_table "profiles", :force => true do |t| - t.string "diaspora_handle" - t.string "first_name", :limit => 127 - t.string "last_name", :limit => 127 - t.string "image_url" - t.string "image_url_small" - t.string "image_url_medium" - t.date "birthday" - t.string "gender" - t.text "bio" - t.boolean "searchable", :default => true, :null => false - t.integer "person_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "location" - t.string "full_name", :limit => 70 - t.boolean "nsfw", :default => false - end - - add_index "profiles", ["full_name", "searchable"], :name => "index_profiles_on_full_name_and_searchable" - add_index "profiles", ["full_name"], :name => "index_profiles_on_full_name" - add_index "profiles", ["person_id"], :name => "index_profiles_on_person_id" - - create_table "rails_admin_histories", :force => true do |t| - t.text "message" - t.string "username" - t.integer "item" - t.string "table" - t.integer "month", :limit => 2 - t.integer "year", :limit => 8 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "rails_admin_histories", ["item", "table", "month", "year"], :name => "index_rails_admin_histories", :length => {"table" => 188} - - create_table "roles", :force => true do |t| - t.integer "person_id" - t.string "name" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "services", :force => true do |t| - t.string "type", :limit => 127, :null => false - t.integer "user_id", :null => false - t.string "uid", :limit => 127 - t.string "access_token" - t.string "access_secret" - t.string "nickname" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index 'services', ["type", "uid"], :name => 'index_services_on_type_and_uid', length: {"type"=>64, "uid"=>127}, :using => :btree - add_index "services", ["user_id"], :name => "index_services_on_user_id" - - create_table "share_visibilities", :force => true do |t| - t.integer "shareable_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.boolean "hidden", :default => false, :null => false - t.integer "contact_id", :null => false - t.string "shareable_type", :limit => 60, :default => "Post", :null => false - end - - add_index "share_visibilities", ["contact_id"], :name => "index_post_visibilities_on_contact_id" - add_index "share_visibilities", ["shareable_id", "shareable_type", "contact_id"], :name => "shareable_and_contact_id" - add_index "share_visibilities", ["shareable_id", "shareable_type", "hidden", "contact_id"], :name => "shareable_and_hidden_and_contact_id" - add_index "share_visibilities", ["shareable_id"], :name => "index_post_visibilities_on_post_id" - - create_table "tag_followings", :force => true do |t| - t.integer "tag_id", :null => false - t.integer "user_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "tag_followings", ["tag_id", "user_id"], :name => "index_tag_followings_on_tag_id_and_user_id", :unique => true - add_index "tag_followings", ["tag_id"], :name => "index_tag_followings_on_tag_id" - add_index "tag_followings", ["user_id"], :name => "index_tag_followings_on_user_id" - - create_table "taggings", :force => true do |t| - t.integer "tag_id" - t.integer "taggable_id" - t.string "taggable_type", :limit => 127 - t.integer "tagger_id" - t.string "tagger_type", :limit => 127 - t.string "context", :limit => 127 - t.datetime "created_at" - end - - add_index "taggings", ["created_at"], :name => "index_taggings_on_created_at" - add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id" - add_index 'taggings', ["taggable_id", "taggable_type", "context"], :name => 'index_taggings_on_taggable_id_and_taggable_type_and_context', length: {"taggable_type"=>95, "context"=>95}, :using => :btree - add_index "taggings", ["taggable_id", "taggable_type", "tag_id"], :name => "index_taggings_uniquely", :unique => true - - create_table "tags", :force => true do |t| - t.string "name" - end - - add_index "tags", ["name"], :name => "index_tags_on_name", :unique => true, :length => {"name" => 191} - - create_table "user_preferences", :force => true do |t| - t.string "email_type" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "users", :force => true do |t| - t.string "username" - t.text "serialized_private_key" - t.boolean "getting_started", :default => true, :null => false - t.boolean "disable_mail", :default => false, :null => false - t.string "language" - t.string "email", :default => "", :null => false - t.string "encrypted_password", :default => "", :null => false - t.string "invitation_token", :limit => 60 - t.datetime "invitation_sent_at" - t.string "reset_password_token" - t.datetime "remember_created_at" - t.integer "sign_in_count", :default => 0 - t.datetime "current_sign_in_at" - t.datetime "last_sign_in_at" - t.string "current_sign_in_ip" - t.string "last_sign_in_ip" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "invitation_service", :limit => 127 - t.string "invitation_identifier", :limit => 127 - t.integer "invitation_limit" - t.integer "invited_by_id" - t.string "invited_by_type" - t.string "authentication_token", :limit => 30 - t.string "unconfirmed_email" - t.string "confirm_email_token", :limit => 30 - t.datetime "locked_at" - t.boolean "show_community_spotlight_in_stream", :default => true, :null => false - t.boolean "auto_follow_back", :default => false - t.integer "auto_follow_back_aspect_id" - t.text "hidden_shareables" - t.datetime "reset_password_sent_at" - end - - add_index "users", ["authentication_token"], :name => "index_users_on_authentication_token", :unique => true - add_index "users", ["email"], :name => "index_users_on_email", length: {"email" => "191"} - add_index 'users', ["invitation_service", "invitation_identifier"], :name => 'index_users_on_invitation_service_and_invitation_identifier', length: {"invitation_service"=>64, "invitation_identifier"=>127}, :using => :btree, :unique => true - add_index "users", ["invitation_token"], :name => "index_users_on_invitation_token" - add_index 'users', ["username"], :name => 'index_users_on_username', length: {"username"=>191}, :using => :btree, :unique => true - - add_foreign_key "aspect_memberships", "aspects", name: "aspect_memberships_aspect_id_fk", on_delete: :cascade - add_foreign_key "aspect_memberships", "contacts", name: "aspect_memberships_contact_id_fk", on_delete: :cascade - - add_foreign_key "aspect_visibilities", "aspects", name: "aspect_visibilities_aspect_id_fk", on_delete: :cascade - - add_foreign_key "comments", "people", name: "comments_author_id_fk", column: "author_id", on_delete: :cascade - - add_foreign_key "contacts", "people", name: "contacts_person_id_fk", on_delete: :cascade - - add_foreign_key "conversation_visibilities", "conversations", name: "conversation_visibilities_conversation_id_fk", on_delete: :cascade - add_foreign_key "conversation_visibilities", "people", name: "conversation_visibilities_person_id_fk", on_delete: :cascade - - add_foreign_key "conversations", "people", name: "conversations_author_id_fk", column: "author_id", on_delete: :cascade - - add_foreign_key "invitations", "users", name: "invitations_recipient_id_fk", column: "recipient_id", on_delete: :cascade - add_foreign_key "invitations", "users", name: "invitations_sender_id_fk", column: "sender_id", on_delete: :cascade - - add_foreign_key "likes", "people", name: "likes_author_id_fk", column: "author_id", on_delete: :cascade - - add_foreign_key "messages", "conversations", name: "messages_conversation_id_fk", on_delete: :cascade - add_foreign_key "messages", "people", name: "messages_author_id_fk", column: "author_id", on_delete: :cascade - - add_foreign_key "notification_actors", "notifications", name: "notification_actors_notification_id_fk", on_delete: :cascade - - add_foreign_key "posts", "people", name: "posts_author_id_fk", column: "author_id", on_delete: :cascade - - add_foreign_key "profiles", "people", name: "profiles_person_id_fk", on_delete: :cascade - - add_foreign_key "services", "users", name: "services_user_id_fk", on_delete: :cascade - - add_foreign_key "share_visibilities", "contacts", name: "post_visibilities_contact_id_fk", on_delete: :cascade + # rubocop:enable Metrics/AbcSize, Metrics/MethodLength, Metrics/LineLength, Layout/ExtraSpacing end From 6b8c2ebe9f17fedcef7332371ffa6c62408cfc21 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Thu, 10 Aug 2017 04:13:02 +0200 Subject: [PATCH 48/52] Fix rubocop cop namespace for ExtraSpacing --- .../20160810230114_cleanup_invitation_columns_from_users.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb b/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb index 20efab0e5..2022589fc 100644 --- a/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb +++ b/db/migrate/20160810230114_cleanup_invitation_columns_from_users.rb @@ -47,7 +47,7 @@ class CleanupInvitationColumnsFromUsers < ActiveRecord::Migration[4.2] end def create_invitations_table - # rubocop:disable Style/ExtraSpacing + # rubocop:disable Layout/ExtraSpacing create_table :invitations, force: :cascade do |t| t.text :message, limit: 65_535 t.integer :sender_id, limit: 4 @@ -60,7 +60,7 @@ class CleanupInvitationColumnsFromUsers < ActiveRecord::Migration[4.2] t.boolean :admin, default: false t.string :language, limit: 255, default: "en" end - # rubocop:enable Style/ExtraSpacing + # rubocop:enable Layout/ExtraSpacing add_index :invitations, :aspect_id, name: :index_invitations_on_aspect_id, using: :btree add_index :invitations, :recipient_id, name: :index_invitations_on_recipient_id, using: :btree From 605e2925893fd34f24427b228c8fcbdfa1e1dd2e Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Fri, 11 Aug 2017 02:14:32 +0200 Subject: [PATCH 49/52] Wait for image to be uploaded --- app/assets/javascripts/mobile/mobile_file_uploader.js | 1 - features/step_definitions/web_steps.rb | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/mobile/mobile_file_uploader.js b/app/assets/javascripts/mobile/mobile_file_uploader.js index 86c784818..3a33ef5ee 100644 --- a/app/assets/javascripts/mobile/mobile_file_uploader.js +++ b/app/assets/javascripts/mobile/mobile_file_uploader.js @@ -33,7 +33,6 @@ function createUploader(){ $("#fileInfo-publisher").text(fileName + " " + progress + "%"); }, onSubmit: function() { - $("#file-upload-publisher").addClass("loading"); $("#publisher_textarea_wrapper").addClass("with_attachments"); $("#photodropzone").append( "
  • " + diff --git a/features/step_definitions/web_steps.rb b/features/step_definitions/web_steps.rb index 36092716f..2ffdd4829 100644 --- a/features/step_definitions/web_steps.rb +++ b/features/step_definitions/web_steps.rb @@ -93,6 +93,8 @@ When /^(?:|I )attach the file "([^"]*)" to (?:hidden )?"([^"]*)"(?: within "([^" page.execute_script("$(\"input[name='#{field}']\").css('opacity', '1');") attach_file(field, Rails.root.join(path).to_s) end + # wait for the image to be ready + page.assert_selector(".loading", count: 0) end Then /^(?:|I )should see (\".+?\"[\s]*)(?:[\s]+within[\s]* "([^"]*)")?$/ do |vars, selector| From 62cb1f99cea3cf171057c5ca5fa794685e0ba1f0 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Fri, 11 Aug 2017 20:41:48 +0200 Subject: [PATCH 50/52] Get current time before the test to be safer on MySQL --- spec/models/pod_spec.rb | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/spec/models/pod_spec.rb b/spec/models/pod_spec.rb index 730f240e3..99e860c0b 100644 --- a/spec/models/pod_spec.rb +++ b/spec/models/pod_spec.rb @@ -142,6 +142,7 @@ describe Pod, type: :model do before do @pod = FactoryGirl.create(:pod) @result = double("result") + @now = Time.zone.now allow(@result).to receive(:rt) { 123 } allow(@result).to receive(:software_version) { "diaspora a.b.c.d" } @@ -158,7 +159,7 @@ describe Pod, type: :model do expect(@pod.status).to eq("no_errors") expect(@pod.offline?).to be_falsy expect(@pod.response_time).to eq(123) - expect(@pod.checked_at).to be_within(1.second).of Time.zone.now + expect(@pod.checked_at).to be_within(1.second).of @now end it "resets the scheduled_check flag" do @@ -177,7 +178,7 @@ describe Pod, type: :model do @pod.test_connection! expect(@pod.offline?).to be_truthy - expect(@pod.offline_since).to be_within(1.second).of Time.zone.now + expect(@pod.offline_since).to be_within(1.second).of @now end it "preserves the original offline timestamp" do @@ -185,13 +186,12 @@ describe Pod, type: :model do expect(@result).to receive(:error).at_least(:once) { ConnectionTester::NetFailure.new } @pod.test_connection! - now = Time.zone.now - expect(@pod.offline_since).to be_within(1.second).of now + expect(@pod.offline_since).to be_within(1.second).of @now Timecop.travel(Time.zone.today + 30.days) do @pod.test_connection! - expect(@pod.offline_since).to be_within(1.second).of now - expect(Time.zone.now).to be_within(1.day).of(now + 30.days) + expect(@pod.offline_since).to be_within(1.second).of @now + expect(Time.zone.now).to be_within(1.day).of(@now + 30.days) end end end @@ -215,19 +215,22 @@ describe Pod, type: :model do end it "handles a failed status" do + now = Time.zone.now + pod.status = :unknown_error pod.update_offline_since expect(pod.offline?).to be_truthy - expect(pod.offline_since).to be_within(1.second).of Time.zone.now + expect(pod.offline_since).to be_within(1.second).of now end it "preserves the original offline timestamp" do + now = Time.zone.now + pod.status = :unknown_error pod.update_offline_since pod.save - now = Time.zone.now expect(pod.offline_since).to be_within(1.second).of now Timecop.travel(Time.zone.today + 30.days) do From c2526c6111ba0f78d8478997d1bf129e37a9352c Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Fri, 11 Aug 2017 21:25:00 +0200 Subject: [PATCH 51/52] Don't wait for .loading class, it's sometimes already removed again --- features/desktop/notifications.feature | 1 - features/step_definitions/notifications_steps.rb | 4 ---- 2 files changed, 5 deletions(-) diff --git a/features/desktop/notifications.feature b/features/desktop/notifications.feature index 13fc31a6b..7726d3d87 100644 --- a/features/desktop/notifications.feature +++ b/features/desktop/notifications.feature @@ -177,6 +177,5 @@ Feature: Notifications When I wait for notifications to load Then there should be 10 notifications loaded When I scroll down on the notifications dropdown - Then the notification dropdown should load more notifications When I wait for notifications to load Then there should be 15 notifications loaded diff --git a/features/step_definitions/notifications_steps.rb b/features/step_definitions/notifications_steps.rb index 65aa57ad0..bd38c03f0 100644 --- a/features/step_definitions/notifications_steps.rb +++ b/features/step_definitions/notifications_steps.rb @@ -25,10 +25,6 @@ And "I scroll down on the notifications dropdown" do page.execute_script("$('.notifications').scrollTop(350)") end -Then "the notification dropdown should load more notifications" do - expect(find("#notification-dropdown")).to have_css(".loading") -end - Then "the notification dropdown should be visible" do expect(find(:css, "#notification-dropdown")).to be_visible end From 6b2c010ecc6f60da6ef193670e8701b3178f2a7d Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Fri, 11 Aug 2017 22:03:48 +0200 Subject: [PATCH 52/52] Wait for like to finish --- features/support/publishing_cuke_helpers.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/features/support/publishing_cuke_helpers.rb b/features/support/publishing_cuke_helpers.rb index d9a17b98c..a6e0593ff 100644 --- a/features/support/publishing_cuke_helpers.rb +++ b/features/support/publishing_cuke_helpers.rb @@ -95,7 +95,9 @@ module PublishingCukeHelpers def like_stream_post(post_text) within_post(post_text) do - find(:css, 'a.like').click + action = find(:css, "a.like").text + find(:css, "a.like").click + expect(find(:css, "a.like")).not_to have_text(action) end end