diff --git a/.gitignore b/.gitignore index a18d897..0a48702 100644 --- a/.gitignore +++ b/.gitignore @@ -20,15 +20,10 @@ doc *.directory # dummmy app -test/dummy/db/*.sqlite3 -test/dummy/db/*.sqlite3-journal test/dummy/log/*.log test/dummy/log/*.log* -test/dummy/tmp/ -test/dummy/.sass-cache -test/dummy/test/fixtures/*.y*ml -rspec-persistance.txt +rspec-persistence.txt .rake_tasks diff --git a/.rubocop.yml b/.rubocop.yml index b6deb4b..75eb94c 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -15,8 +15,6 @@ Metrics/LineLength: # the code easier to read (by naming things), but can also clutter the class Metrics/MethodLength: Max: 20 - Exclude: - - "lib/diaspora_federation/test/factories.rb" # The guiding principle of classes is SRP, SRP can't be accurately measured by LoC Metrics/ClassLength: @@ -27,8 +25,6 @@ Metrics/ModuleLength: # Raise AbcSize from 15 to 20 Metrics/AbcSize: Max: 20 - Exclude: - - "lib/diaspora_federation/test/factories.rb" # No space makes the method definition shorter and differentiates # from a regular assignment. @@ -165,13 +161,14 @@ Metrics/BlockLength: - "**/*.rake" - "spec/**/*.rb" - "test/dummy/config/**/*.rb" - - "lib/diaspora_federation/test/factories.rb" +# Rails cops only for controllers +Rails/Date: + Exclude: + - "spec/support/**/*" Rails/TimeZone: Exclude: - "spec/lib/**/*" - -# Rails cops only for controllers Rails/Delegate: Exclude: - "lib/**/*" @@ -209,7 +206,7 @@ Performance/RegexpMatch: # for rails 4 and ruby < 2.2.2 Rails/HttpPositionalArguments: Exclude: - - "spec/controllers/diaspora_federation/fixtures_rails4_spec.rb" + - "spec/controllers/diaspora_federation/rails4_spec.rb" # remove with next rubocop update, see https://github.com/bbatsov/rubocop/issues/4172 Style/MixinGrouping: diff --git a/.travis.yml b/.travis.yml index 61a0fc0..0769f80 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,15 @@ rvm: - 2.3.3 - 2.2.5 - 2.1 +gemfile: + - Gemfile + - test/gemfiles/rails4.Gemfile + - test/gemfiles/no-rails.Gemfile + +matrix: + exclude: + - rvm: 2.1 + gemfile: Gemfile sudo: false cache: @@ -15,7 +24,7 @@ branches: - 'master' - 'develop' -before_install: test/scripts/prepare-travis.sh +before_install: gem install bundler bundler_args: "--deployment --without development --jobs=3 --retry=3" script: test/scripts/travis.sh diff --git a/Gemfile b/Gemfile index 3dae122..d93f671 100644 --- a/Gemfile +++ b/Gemfile @@ -17,9 +17,9 @@ end group :development do # code style - gem "pronto", "0.8.2" - gem "pronto-rubocop", "0.8.0", require: false - gem "rubocop", "0.48.0" + gem "pronto", "0.8.2", require: false + gem "pronto-rubocop", "0.8.0", require: false + gem "rubocop", "0.48.0", require: false # automatic test runs gem "guard-rspec", require: false @@ -49,8 +49,6 @@ group :test do gem "simplecov-rcov", "0.2.3", require: false # test helpers - gem "factory_girl_rails", "~> 4.7" - gem "fixture_builder", "0.5.0" gem "json-schema-rspec", "0.0.4" gem "rspec-collection_matchers", "~> 1.1.2" gem "rspec-json_expectations", "~> 2.1" @@ -58,15 +56,9 @@ group :test do end group :development, :test do + gem "rake" + # unit tests - gem "rspec-core", "~> 3.5.1" + gem "rspec", "~> 3.5.0" gem "rspec-rails", "~> 3.5.1" - - # test database - gem "sqlite3", "~> 1.3.11" -end - -group :development, :production do - # Logging (only for dummy-app, not for the gem) - gem "logging-rails", "0.5.0" end diff --git a/Gemfile.lock b/Gemfile.lock index cc83452..b05a0e0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -9,26 +9,16 @@ PATH valid (~> 1.0) diaspora_federation-json_schema (0.1.8) diaspora_federation-rails (0.1.8) + actionpack (>= 4.2, < 6) diaspora_federation (= 0.1.8) - rails (>= 4.2, < 6) diaspora_federation-test (0.1.8) diaspora_federation (= 0.1.8) - factory_girl (~> 4.7) + fabrication (~> 2.16.0) uuid (~> 2.3.8) GEM remote: https://rubygems.org/ specs: - actioncable (5.0.2) - actionpack (= 5.0.2) - nio4r (>= 1.2, < 3.0) - websocket-driver (~> 0.6.1) - actionmailer (5.0.2) - actionpack (= 5.0.2) - actionview (= 5.0.2) - activejob (= 5.0.2) - mail (~> 2.5, >= 2.5.4) - rails-dom-testing (~> 2.0) actionpack (5.0.2) actionview (= 5.0.2) activesupport (= 5.0.2) @@ -42,15 +32,6 @@ GEM erubis (~> 2.7.0) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) - activejob (5.0.2) - activesupport (= 5.0.2) - globalid (>= 0.3.6) - activemodel (5.0.2) - activesupport (= 5.0.2) - activerecord (5.0.2) - activemodel (= 5.0.2) - activesupport (= 5.0.2) - arel (~> 7.0) activesupport (5.0.2) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (~> 0.7) @@ -58,7 +39,6 @@ GEM tzinfo (~> 1.1) addressable (2.5.1) public_suffix (~> 2.0, >= 2.0.2) - arel (7.1.4) ast (2.3.0) builder (3.2.3) byebug (9.0.6) @@ -73,19 +53,12 @@ GEM erubis (2.7.0) ethon (0.10.1) ffi (>= 1.3.0) - factory_girl (4.8.0) - activesupport (>= 3.0.0) - factory_girl_rails (4.8.0) - factory_girl (~> 4.8.0) - railties (>= 3.0.0) + fabrication (2.16.1) faraday (0.12.0.1) multipart-post (>= 1.2, < 3) faraday_middleware (0.11.0.1) faraday (>= 0.7.4, < 1.0) ffi (1.9.18) - fixture_builder (0.5.0) - activerecord (>= 2) - activesupport (>= 2) formatador (0.2.5) fuubar (2.2.0) rspec-core (~> 3.0) @@ -93,8 +66,6 @@ GEM gitlab (3.7.0) httparty (~> 0.13.0) terminal-table - globalid (0.3.7) - activesupport (>= 4.1.0) guard (2.14.1) formatador (>= 0.2.4) listen (>= 2.7, < 4.0) @@ -127,30 +98,17 @@ GEM rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) ruby_dep (~> 1.2) - little-plugger (1.1.4) - logging (2.2.0) - little-plugger (~> 1.1) - multi_json (~> 1.10) - logging-rails (0.5.0) - logging (>= 1.8) loofah (2.0.3) nokogiri (>= 1.5.9) lumberjack (1.0.11) macaddr (1.7.1) systemu (~> 2.6.2) - mail (2.6.4) - mime-types (>= 1.16, < 4) method_source (0.8.2) - mime-types (3.1) - mime-types-data (~> 3.2015) - mime-types-data (3.2016.0521) mini_portile2 (2.1.0) minitest (5.10.1) - multi_json (1.12.1) multi_xml (0.6.0) multipart-post (2.0.0) nenv (0.3.0) - nio4r (2.0.0) nokogiri (1.7.1) mini_portile2 (~> 2.1.0) notiffany (0.1.1) @@ -184,18 +142,6 @@ GEM rack (2.0.1) rack-test (0.6.3) rack (>= 1.0) - rails (5.0.2) - actioncable (= 5.0.2) - actionmailer (= 5.0.2) - actionpack (= 5.0.2) - actionview (= 5.0.2) - activejob (= 5.0.2) - activemodel (= 5.0.2) - activerecord (= 5.0.2) - activesupport (= 5.0.2) - bundler (>= 1.3.0, < 2.0) - railties (= 5.0.2) - sprockets-rails (>= 2.0.0) rails-dom-testing (2.0.2) activesupport (>= 4.2.0, < 6.0) nokogiri (~> 1.6) @@ -265,14 +211,6 @@ GEM spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) spring (>= 1.2, < 3.0) - sprockets (3.7.1) - concurrent-ruby (~> 1.0) - rack (> 1, < 3) - sprockets-rails (3.2.0) - actionpack (>= 4.0) - activesupport (>= 4.0) - sprockets (>= 3.0.0) - sqlite3 (1.3.13) systemu (2.6.5) terminal-table (1.7.3) unicode-display_width (~> 1.1.1) @@ -290,9 +228,6 @@ GEM addressable (>= 2.3.6) crack (>= 0.3.2) hashdiff - websocket-driver (0.6.5) - websocket-extensions (>= 0.1.0) - websocket-extensions (0.1.2) yard (0.9.8) PLATFORMS @@ -304,20 +239,18 @@ DEPENDENCIES diaspora_federation-json_schema! diaspora_federation-rails! diaspora_federation-test! - factory_girl_rails (~> 4.7) - fixture_builder (= 0.5.0) fuubar (= 2.2.0) guard-rspec guard-rubocop json-schema-rspec (= 0.0.4) - logging-rails (= 0.5.0) nyan-cat-formatter pronto (= 0.8.2) pronto-rubocop (= 0.8.0) pry pry-byebug + rake + rspec (~> 3.5.0) rspec-collection_matchers (~> 1.1.2) - rspec-core (~> 3.5.1) rspec-json_expectations (~> 2.1) rspec-rails (~> 3.5.1) rubocop (= 0.48.0) @@ -326,7 +259,6 @@ DEPENDENCIES spring spring-commands-rspec spring-watcher-listen - sqlite3 (~> 1.3.11) webmock (~> 2.0) yard diff --git a/Rakefile b/Rakefile index b6dde4a..4088c01 100644 --- a/Rakefile +++ b/Rakefile @@ -13,14 +13,19 @@ RDoc::Task.new(:rdoc) do |rdoc| rdoc.rdoc_files.include("lib/**/*.rb") end -APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__) -load "rails/tasks/engine.rake" +if defined?(::Rails) + APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__) + load "rails/tasks/engine.rake" + load "rails/tasks/statistics.rake" -load "rails/tasks/statistics.rake" + Rails.application.load_tasks +else + require "rspec/core/rake_task" + RSpec::Core::RakeTask.new(:spec) + FileList["lib/tasks/**/*.rake"].each {|task| load(task) } +end Bundler::GemHelper.install_tasks name: "diaspora_federation" -Rails.application.load_tasks - -task test: %w(spec:prepare spec) +task test: :spec task default: :test diff --git a/diaspora_federation-rails.gemspec b/diaspora_federation-rails.gemspec index 19cae1a..8023b65 100644 --- a/diaspora_federation-rails.gemspec +++ b/diaspora_federation-rails.gemspec @@ -19,7 +19,7 @@ Gem::Specification.new do |s| s.required_ruby_version = "~> 2.1" - s.add_dependency "rails", ">= 4.2", "< 6" + s.add_dependency "actionpack", ">= 4.2", "< 6" s.add_dependency "diaspora_federation", DiasporaFederation::VERSION end diff --git a/diaspora_federation-test.gemspec b/diaspora_federation-test.gemspec index e0b8cba..e7d946d 100644 --- a/diaspora_federation-test.gemspec +++ b/diaspora_federation-test.gemspec @@ -20,6 +20,6 @@ Gem::Specification.new do |s| s.required_ruby_version = "~> 2.1" s.add_dependency "diaspora_federation", DiasporaFederation::VERSION - s.add_dependency "factory_girl", "~> 4.7" + s.add_dependency "fabrication", "~> 2.16.0" s.add_dependency "uuid", "~> 2.3.8" end diff --git a/lib/diaspora_federation/test.rb b/lib/diaspora_federation/test.rb index 249c9d9..db81377 100644 --- a/lib/diaspora_federation/test.rb +++ b/lib/diaspora_federation/test.rb @@ -1,4 +1,7 @@ -require "diaspora_federation/test/factories" +require "fabrication" + +require "diaspora_federation" +require "diaspora_federation/test/entity_generator" module DiasporaFederation # This module encapsulates helper functions maybe wanted by a testsuite of a diaspora_federation gem user application. diff --git a/lib/diaspora_federation/test/entity_generator.rb b/lib/diaspora_federation/test/entity_generator.rb new file mode 100644 index 0000000..1f9c7e6 --- /dev/null +++ b/lib/diaspora_federation/test/entity_generator.rb @@ -0,0 +1,25 @@ +module DiasporaFederation + module Test + # Generator to instantiate entities + class EntityGenerator < Fabrication::Generator::Base + def self.supports?(klass) + klass.ancestors.include?(DiasporaFederation::Entity) + end + + def build_instance + self._instance = _klass.new(_attributes) + end + + def to_hash(attributes=[], _callbacks=[]) + process_attributes(attributes) + _attributes.each_with_object({}) do |(name, value), hash| + hash[name.to_sym] = value + end + end + end + + Fabrication.configure do |config| + config.generators << EntityGenerator + end + end +end diff --git a/lib/diaspora_federation/test/factories.rb b/lib/diaspora_federation/test/factories.rb index 673492e..1efbb59 100644 --- a/lib/diaspora_federation/test/factories.rb +++ b/lib/diaspora_federation/test/factories.rb @@ -1,238 +1,228 @@ -require "diaspora_federation" -require "factory_girl" require "uuid" +require "securerandom" +require "diaspora_federation/test" module DiasporaFederation module Test # Factories for federation entities module Factories - # Defines the federation entity factories - def self.federation_factories - FactoryGirl.define do - initialize_with { new(attributes) } - sequence(:guid) { UUID.generate :compact } - sequence(:diaspora_id) {|n| "person-#{n}-#{SecureRandom.hex(3)}@localhost:3000" } - sequence(:public_key) { OpenSSL::PKey::RSA.generate(1024).public_key.export } + Fabricate.sequence(:guid) { UUID.generate(:compact) } + Fabricate.sequence(:diaspora_id) {|n| "person-#{n}-#{SecureRandom.hex(3)}@localhost:3000" } + Fabricate.sequence(:public_key) { OpenSSL::PKey::RSA.generate(1024).public_key.export } - factory :webfinger, class: DiasporaFederation::Discovery::WebFinger do - guid - acct_uri { "acct:#{generate(:diaspora_id)}" } - alias_url "http://localhost:3000/people/0123456789abcdef" - hcard_url "http://localhost:3000/hcard/users/user" - seed_url "http://localhost:3000/" - profile_url "http://localhost:3000/u/user" - atom_url "http://localhost:3000/public/user.atom" - salmon_url "http://localhost:3000/receive/users/0123456789abcdef" - public_key - subscribe_url "http://localhost:3000/people?q={uri}" - end + Fabricator(:webfinger, class_name: DiasporaFederation::Discovery::WebFinger) do + guid { Fabricate.sequence(:guid) } + acct_uri { "acct:#{Fabricate.sequence(:diaspora_id)}" } + alias_url "http://localhost:3000/people/0123456789abcdef" + hcard_url "http://localhost:3000/hcard/users/user" + seed_url "http://localhost:3000/" + profile_url "http://localhost:3000/u/user" + atom_url "http://localhost:3000/public/user.atom" + salmon_url "http://localhost:3000/receive/users/0123456789abcdef" + public_key { Fabricate.sequence(:public_key) } + subscribe_url "http://localhost:3000/people?q={uri}" + end - factory :h_card, class: DiasporaFederation::Discovery::HCard do - guid - nickname "some_name" - full_name "my name" - first_name "my name" - last_name "" - url "http://localhost:3000/" - public_key - photo_large_url "/assets/user/default.png" - photo_medium_url "/assets/user/default.png" - photo_small_url "/assets/user/default.png" - searchable true - end + Fabricator(:h_card, class_name: DiasporaFederation::Discovery::HCard) do + guid { Fabricate.sequence(:guid) } + nickname "some_name" + full_name "my name" + first_name "my name" + last_name "" + url "http://localhost:3000/" + public_key { Fabricate.sequence(:public_key) } + photo_large_url "/assets/user/default.png" + photo_medium_url "/assets/user/default.png" + photo_small_url "/assets/user/default.png" + searchable true + end - factory :account_migration_entity, class: DiasporaFederation::Entities::AccountMigration do - author { generate(:diaspora_id) } - profile { - FactoryGirl.build(:profile_entity) - } - end + Fabricator(:account_deletion_entity, class_name: DiasporaFederation::Entities::AccountDeletion) do + author { Fabricate.sequence(:diaspora_id) } + end - factory :person_entity, class: DiasporaFederation::Entities::Person do - guid - author { generate(:diaspora_id) } - url "http://localhost:3000/" - exported_key { generate(:public_key) } - profile { - FactoryGirl.build(:profile_entity, author: author) - } - end + Fabricator(:account_migration_entity, class_name: DiasporaFederation::Entities::AccountMigration) do + author { Fabricate.sequence(:diaspora_id) } + profile { Fabricate(:profile_entity) } + end - factory :profile_entity, class: DiasporaFederation::Entities::Profile do - author { generate(:diaspora_id) } - first_name "my name" - last_name "" - image_url "/assets/user/default.png" - image_url_medium "/assets/user/default.png" - image_url_small "/assets/user/default.png" - birthday "1988-07-15" - gender "Male" - bio "some text about me" - location "github" - searchable true - nsfw false - tag_string "#i #love #tags" - end + Fabricator(:person_entity, class_name: DiasporaFederation::Entities::Person) do + guid { Fabricate.sequence(:guid) } + author { Fabricate.sequence(:diaspora_id) } + url "http://localhost:3000/" + exported_key { Fabricate.sequence(:public_key) } + profile {|attrs| Fabricate(:profile_entity, author: attrs[:author]) } + end - factory :location_entity, class: DiasporaFederation::Entities::Location do - address "Vienna, Austria" - lat 48.208174.to_s - lng 16.373819.to_s - end + Fabricator(:profile_entity, class_name: DiasporaFederation::Entities::Profile) do + author { Fabricate.sequence(:diaspora_id) } + first_name "my name" + last_name "" + image_url "/assets/user/default.png" + image_url_medium "/assets/user/default.png" + image_url_small "/assets/user/default.png" + birthday "1988-07-15" + gender "Male" + bio "some text about me" + location "github" + searchable true + nsfw false + tag_string "#i #love #tags" + end - factory :photo_entity, class: DiasporaFederation::Entities::Photo do - guid - author { generate(:diaspora_id) } - public(true) - created_at { Time.now.utc } - remote_photo_path "https://diaspora.example.tld/uploads/images/" - remote_photo_name "f2a41e9d2db4d9a199c8.jpg" - text "what you see here..." - status_message_guid { generate(:guid) } - height 480 - width 800 - end + Fabricator(:location_entity, class_name: DiasporaFederation::Entities::Location) do + address "Vienna, Austria" + lat 48.208174.to_s + lng 16.373819.to_s + end - factory :relayable_entity, class: DiasporaFederation::Entities::Relayable do - parent_guid { generate(:guid) } - parent { FactoryGirl.build(:related_entity) } - end + Fabricator(:photo_entity, class_name: DiasporaFederation::Entities::Photo) do + guid { Fabricate.sequence(:guid) } + author { Fabricate.sequence(:diaspora_id) } + public true + created_at { Time.now.utc } + remote_photo_path "https://diaspora.example.tld/uploads/images/" + remote_photo_name "f2a41e9d2db4d9a199c8.jpg" + text "what you see here..." + status_message_guid { Fabricate.sequence(:guid) } + height 480 + width 800 + end - factory :participation_entity, - class: DiasporaFederation::Entities::Participation, parent: :relayable_entity do - author { generate(:diaspora_id) } - guid - parent_type "Post" - end + Fabricator(:relayable_entity, class_name: DiasporaFederation::Entities::Relayable) do + parent_guid { Fabricate.sequence(:guid) } + parent { Fabricate(:related_entity) } + end - factory :status_message_entity, class: DiasporaFederation::Entities::StatusMessage do - text "i am a very interesting status update" - author { generate(:diaspora_id) } - guid - public(true) - created_at { Time.now.utc } - end + Fabricator(:participation_entity, + class_name: DiasporaFederation::Entities::Participation, from: :relayable_entity) do + author { Fabricate.sequence(:diaspora_id) } + guid { Fabricate.sequence(:guid) } + parent_type "Post" + end - factory :request_entity, class: DiasporaFederation::Entities::Request do - author { generate(:diaspora_id) } - recipient { generate(:diaspora_id) } - end + Fabricator(:status_message_entity, class_name: DiasporaFederation::Entities::StatusMessage) do + text "i am a very interesting status update" + author { Fabricate.sequence(:diaspora_id) } + guid { Fabricate.sequence(:guid) } + public true + created_at { Time.now.utc } + end - factory :contact_entity, class: DiasporaFederation::Entities::Contact do - author { generate(:diaspora_id) } - recipient { generate(:diaspora_id) } - following true - sharing true - end + Fabricator(:request_entity, class_name: DiasporaFederation::Entities::Request) do + author { Fabricate.sequence(:diaspora_id) } + recipient { Fabricate.sequence(:diaspora_id) } + end - factory :comment_entity, class: DiasporaFederation::Entities::Comment, parent: :relayable_entity do - author { generate(:diaspora_id) } - guid - text "this is a very informative comment" - end + Fabricator(:contact_entity, class_name: DiasporaFederation::Entities::Contact) do + author { Fabricate.sequence(:diaspora_id) } + recipient { Fabricate.sequence(:diaspora_id) } + following true + sharing true + end - factory :like_entity, class: DiasporaFederation::Entities::Like, parent: :relayable_entity do - positive true - author { generate(:diaspora_id) } - guid - parent_type "Post" - end + Fabricator(:comment_entity, class_name: DiasporaFederation::Entities::Comment, from: :relayable_entity) do + author { Fabricate.sequence(:diaspora_id) } + guid { Fabricate.sequence(:guid) } + text "this is a very informative comment" + end - factory :account_deletion_entity, class: DiasporaFederation::Entities::AccountDeletion do - author { generate(:diaspora_id) } - end + Fabricator(:like_entity, class_name: DiasporaFederation::Entities::Like, from: :relayable_entity) do + positive true + author { Fabricate.sequence(:diaspora_id) } + guid { Fabricate.sequence(:guid) } + parent_type "Post" + end - factory :conversation_entity, class: DiasporaFederation::Entities::Conversation do - author { generate(:diaspora_id) } - guid - subject "this is a very informative subject" - created_at { Time.now.utc } - messages [] - participants { Array.new(3) { generate(:diaspora_id) }.join(";") } - end + Fabricator(:conversation_entity, class_name: DiasporaFederation::Entities::Conversation) do + author { Fabricate.sequence(:diaspora_id) } + guid { Fabricate.sequence(:guid) } + subject "this is a very informative subject" + created_at { Time.now.utc } + messages [] + participants { Array.new(3) { Fabricate.sequence(:diaspora_id) }.join(";") } + end - factory :message_entity, class: DiasporaFederation::Entities::Message, parent: :relayable_entity do - guid - author { generate(:diaspora_id) } - text "this is a very informative text" - created_at { Time.now.utc } - conversation_guid { generate(:guid) } - end + Fabricator(:message_entity, class_name: DiasporaFederation::Entities::Message, from: :relayable_entity) do + guid { Fabricate.sequence(:guid) } + author { Fabricate.sequence(:diaspora_id) } + text "this is a very informative text" + created_at { Time.now.utc } + conversation_guid { Fabricate.sequence(:guid) } + end - factory :relayable_retraction_entity, class: DiasporaFederation::Entities::RelayableRetraction do - author { generate(:diaspora_id) } - target_guid { generate(:guid) } - target_type "Comment" - target { FactoryGirl.build(:related_entity, author: author) } - end + Fabricator(:relayable_retraction_entity, class_name: DiasporaFederation::Entities::RelayableRetraction) do + author { Fabricate.sequence(:diaspora_id) } + target_guid { Fabricate.sequence(:guid) } + target_type "Comment" + target {|attrs| Fabricate(:related_entity, author: attrs[:author]) } + end - factory :reshare_entity, class: DiasporaFederation::Entities::Reshare do - root_author { generate(:diaspora_id) } - root_guid { generate(:guid) } - guid - author { generate(:diaspora_id) } - public(true) - created_at { Time.now.utc } - provider_display_name { "the testsuite" } - end + Fabricator(:reshare_entity, class_name: DiasporaFederation::Entities::Reshare) do + root_author { Fabricate.sequence(:diaspora_id) } + root_guid { Fabricate.sequence(:guid) } + guid { Fabricate.sequence(:guid) } + author { Fabricate.sequence(:diaspora_id) } + public true + created_at { Time.now.utc } + provider_display_name { "the testsuite" } + end - factory :retraction_entity, class: DiasporaFederation::Entities::Retraction do - author { generate(:diaspora_id) } - target_guid { generate(:guid) } - target_type "Post" - target { FactoryGirl.build(:related_entity, author: author) } - end + Fabricator(:retraction_entity, class_name: DiasporaFederation::Entities::Retraction) do + author { Fabricate.sequence(:diaspora_id) } + target_guid { Fabricate.sequence(:guid) } + target_type "Post" + target {|attrs| Fabricate(:related_entity, author: attrs[:author]) } + end - factory :signed_retraction_entity, class: DiasporaFederation::Entities::SignedRetraction do - author { generate(:diaspora_id) } - target_guid { generate(:guid) } - target_type "Post" - target { FactoryGirl.build(:related_entity, author: author) } - end + Fabricator(:signed_retraction_entity, class_name: DiasporaFederation::Entities::SignedRetraction) do + author { Fabricate.sequence(:diaspora_id) } + target_guid { Fabricate.sequence(:guid) } + target_type "Post" + target {|attrs| Fabricate(:related_entity, author: attrs[:author]) } + end - factory :poll_answer_entity, class: DiasporaFederation::Entities::PollAnswer do - guid - answer { "Obama is a bicycle" } - end + Fabricator(:poll_answer_entity, class_name: DiasporaFederation::Entities::PollAnswer) do + guid { Fabricate.sequence(:guid) } + answer { "Obama is a bicycle" } + end - factory :poll_entity, class: DiasporaFederation::Entities::Poll do - guid - question { "Select an answer" } - poll_answers { Array.new(3) { FactoryGirl.build(:poll_answer_entity) } } - end + Fabricator(:poll_entity, class_name: DiasporaFederation::Entities::Poll) do + guid { Fabricate.sequence(:guid) } + question { "Select an answer" } + poll_answers { Array.new(3) { Fabricate(:poll_answer_entity) } } + end - factory :poll_participation_entity, - class: DiasporaFederation::Entities::PollParticipation, parent: :relayable_entity do - author { generate(:diaspora_id) } - guid - poll_answer_guid { generate(:guid) } - end + Fabricator(:poll_participation_entity, + class_name: DiasporaFederation::Entities::PollParticipation, from: :relayable_entity) do + author { Fabricate.sequence(:diaspora_id) } + guid { Fabricate.sequence(:guid) } + poll_answer_guid { Fabricate.sequence(:guid) } + end - factory :event_entity, class: DiasporaFederation::Entities::Event do - author { generate(:diaspora_id) } - guid - summary "Cool event" - description "You need to see this!" - start { Time.now.utc.change(min: 0).change(sec: 0).change(usec: 0) - 1.hour } - add_attribute(:end) { Time.now.utc.change(min: 0).change(sec: 0).change(usec: 0) + 1.hour } - all_day false - timezone "Europe/Berlin" - end + Fabricator(:event_entity, class_name: DiasporaFederation::Entities::Event) do |f| + author { Fabricate.sequence(:diaspora_id) } + guid { Fabricate.sequence(:guid) } + summary "Cool event" + description "You need to see this!" + start { change_time(Time.now.utc, min: 0) - 3600 } + f.end { change_time(Time.now.utc, min: 0) + 3600 } + all_day false + timezone "Europe/Berlin" + end - factory :event_participation_entity, - class: DiasporaFederation::Entities::EventParticipation, parent: :relayable_entity do - author { generate(:diaspora_id) } - guid - status "accepted" - end + Fabricator(:event_participation_entity, + class_name: DiasporaFederation::Entities::EventParticipation, from: :relayable_entity) do + author { Fabricate.sequence(:diaspora_id) } + guid { Fabricate.sequence(:guid) } + status "accepted" + end - factory :related_entity, class: DiasporaFederation::Entities::RelatedEntity do - author { generate(:diaspora_id) } - local true - public false - parent nil - end - end + Fabricator(:related_entity, class_name: DiasporaFederation::Entities::RelatedEntity) do + author { Fabricate.sequence(:diaspora_id) } + local true + public false + parent nil end end end diff --git a/lib/tasks/diaspora_federation_tasks.rake b/lib/tasks/diaspora_federation_tasks.rake deleted file mode 100644 index 26df6e9..0000000 --- a/lib/tasks/diaspora_federation_tasks.rake +++ /dev/null @@ -1,4 +0,0 @@ -# desc "Explaining what the task does" -# task :diaspora_federation do -# # Task goes here -# end diff --git a/lib/tasks/gemfiles.rake b/lib/tasks/gemfiles.rake new file mode 100644 index 0000000..223d012 --- /dev/null +++ b/lib/tasks/gemfiles.rake @@ -0,0 +1,28 @@ +namespace :gemfiles do + desc "Generates rails4.Gemfile and no-rails.Gemfile" + task :generate do + FileUtils.mkdir_p("test/gemfiles") + FileUtils.rm(Dir["test/gemfiles/*.Gemfile.lock"]) + + original_gemfile = File.read("Gemfile") + original_gemfile.sub!(/(gemspec name:.*)/) { "#{Regexp.last_match[1]}, path: \"../../\"" } + original_gemfile.sub!(/(gemspec\(name:.*)\)/) { "#{Regexp.last_match[1]}, path: \"../../\")" } + original_gemfile.sub!(/^group :development do$.*?^end$\n\n/m, "") + + rails4_version = "4.2.8" + rails4_gemfile = "#{original_gemfile}\ngem \"actionpack\", \"#{rails4_version}\"\n" + rails4_path = "test/gemfiles/rails4.Gemfile" + File.write(rails4_path, rails4_gemfile) + + no_rails_gemfile = original_gemfile.dup + no_rails_gemfile.sub!(/(gemspec\(name:.*)/) { "#{Regexp.last_match[1]} unless plugin == \"rails\"" } + no_rails_gemfile.sub!(/^.*rspec-rails.*$\n/, "") + no_rails_path = "test/gemfiles/no-rails.Gemfile" + File.write(no_rails_path, no_rails_gemfile) + + Bundler.with_clean_env do + system("BUNDLE_GEMFILE=#{rails4_path} bundle install") + system("BUNDLE_GEMFILE=#{no_rails_path} bundle install") + end + end +end diff --git a/lib/tasks/rails4.rake b/lib/tasks/rails4.rake deleted file mode 100644 index fcae71e..0000000 --- a/lib/tasks/rails4.rake +++ /dev/null @@ -1,15 +0,0 @@ -if defined?(RSpec) - namespace :rails4 do - desc "Run all specs that generate fixtures for rspec with rails 4" - RSpec::Core::RakeTask.new(:generate_fixtures) do |t| - t.rspec_opts = ["--tag fixture4"] - end - - desc "Run all specs in spec directory (exluding controller specs)" - RSpec::Core::RakeTask.new(:spec) do |task| - task.pattern = FileList["spec/**/*_spec.rb"].exclude("spec/controllers/**/*_spec.rb") - end - - task test: %w(spec:prepare_db generate_fixtures spec) - end -end diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake deleted file mode 100644 index 7d08af1..0000000 --- a/lib/tasks/tests.rake +++ /dev/null @@ -1,18 +0,0 @@ -if defined?(RSpec) - namespace :spec do - task prepare_db: %w(db:create db:test:load) - task :prepare_fixtures do - ENV["NO_COVERAGE"] = "true" - Rake::Task["spec:generate_fixtures"].invoke - ENV["NO_COVERAGE"] = "false" - end - - desc "Prepare for rspec" - task prepare: %w(db:environment:set prepare_db prepare_fixtures) - - desc "Run all specs that generate fixtures for rspec" - RSpec::Core::RakeTask.new(:generate_fixtures) do |t| - t.rspec_opts = ["--tag fixture"] - end - end -end diff --git a/spec/controllers/diaspora_federation/fetch_controller_spec.rb b/spec/controllers/diaspora_federation/fetch_controller_spec.rb index e9c35dc..8ad8548 100644 --- a/spec/controllers/diaspora_federation/fetch_controller_spec.rb +++ b/spec/controllers/diaspora_federation/fetch_controller_spec.rb @@ -1,9 +1,9 @@ module DiasporaFederation - describe FetchController, type: :controller do + describe FetchController, type: :controller, rails: 5 do routes { DiasporaFederation::Engine.routes } let(:guid) { "12345678901234567890" } - let(:post) { FactoryGirl.build(:status_message_entity, guid: guid, author: alice.diaspora_id) } + let(:post) { Fabricate(:status_message_entity, guid: guid, author: alice.diaspora_id) } describe "GET #fetch" do it "returns the magic-envelope with the status message" do diff --git a/spec/controllers/diaspora_federation/fixtures_rails4_spec.rb b/spec/controllers/diaspora_federation/fixtures_rails4_spec.rb deleted file mode 100644 index 26db5c8..0000000 --- a/spec/controllers/diaspora_federation/fixtures_rails4_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -module DiasporaFederation - describe WebfingerController, type: :controller do - routes { DiasporaFederation::Engine.routes } - - it "generates webfinger fixture", fixture4: true, rails4: true do - get :legacy_webfinger, q: "alice@localhost:3000" - expect(response).to be_success - save_fixture(response.body, "legacy-webfinger") - end - end - - describe HCardController, type: :controller do - routes { DiasporaFederation::Engine.routes } - - it "generates hcard fixture", fixture4: true, rails4: true do - get :hcard, guid: alice.guid - expect(response).to be_success - save_fixture(response.body, "hcard") - end - end -end diff --git a/spec/controllers/diaspora_federation/h_card_controller_spec.rb b/spec/controllers/diaspora_federation/h_card_controller_spec.rb index c6c6342..9752b7e 100644 --- a/spec/controllers/diaspora_federation/h_card_controller_spec.rb +++ b/spec/controllers/diaspora_federation/h_card_controller_spec.rb @@ -1,12 +1,11 @@ module DiasporaFederation - describe HCardController, type: :controller do + describe HCardController, type: :controller, rails: 5 do routes { DiasporaFederation::Engine.routes } describe "GET #hcard" do - it "succeeds when the person exists", fixture: true do + it "succeeds when the person exists" do get :hcard, params: {guid: alice.guid} expect(response).to be_success - save_fixture(response.body, "hcard") end it "contains the guid" do diff --git a/spec/controllers/diaspora_federation/rails4_spec.rb b/spec/controllers/diaspora_federation/rails4_spec.rb new file mode 100644 index 0000000..4d506b5 --- /dev/null +++ b/spec/controllers/diaspora_federation/rails4_spec.rb @@ -0,0 +1,81 @@ +# only some basic controller tests for rails 4 +module DiasporaFederation + describe WebfingerController, type: :controller, rails: 4 do + routes { DiasporaFederation::Engine.routes } + + it "contains the webfinger result" do + webfinger_xrd = DiasporaFederation::Discovery::WebFinger.new( + acct_uri: "acct:#{alice.diaspora_id}", + alias_url: alice.alias_url, + hcard_url: alice.hcard_url, + seed_url: alice.url, + profile_url: alice.profile_url, + atom_url: alice.atom_url, + salmon_url: alice.salmon_url, + subscribe_url: alice.subscribe_url, + guid: alice.guid, + public_key: alice.serialized_public_key + ).to_xml + + get :legacy_webfinger, q: alice.diaspora_id + expect(response).to be_success + expect(response.body).to eq(webfinger_xrd) + end + + it "404s when the person does not exist" do + get :legacy_webfinger, q: "me@mydiaspora.pod.com" + expect(response).to be_not_found + end + end + + describe HCardController, type: :controller, rails: 4 do + routes { DiasporaFederation::Engine.routes } + + it "contains the hcard result" do + hcard_html = DiasporaFederation::Discovery::HCard.new( + guid: alice.guid, + nickname: alice.nickname, + full_name: alice.full_name, + url: alice.url, + photo_large_url: alice.photo_default_url, + photo_medium_url: alice.photo_default_url, + photo_small_url: alice.photo_default_url, + public_key: alice.serialized_public_key, + searchable: alice.searchable, + first_name: alice.first_name, + last_name: alice.last_name + ).to_html + + get :hcard, guid: alice.guid + expect(response).to be_success + expect(response.body).to eq(hcard_html) + end + + it "404s when the person does not exist" do + get :hcard, guid: "unknown_guid" + expect(response).to be_not_found + end + end + + describe ReceiveController, type: :controller, rails: 4 do + routes { DiasporaFederation::Engine.routes } + + describe "POST #public" do + it "returns a 202 if queued correctly" do + expect_callback(:queue_public_receive, "", true) + + post :public, xml: "" + expect(response.code).to eq("202") + end + end + + describe "POST #private" do + it "returns a 202 if the callback returned true" do + expect_callback(:queue_private_receive, "any-guid", "", true).and_return(true) + + post :private, guid: "any-guid", xml: "" + expect(response.code).to eq("202") + end + end + end +end diff --git a/spec/controllers/diaspora_federation/receive_controller_spec.rb b/spec/controllers/diaspora_federation/receive_controller_spec.rb index 281319e..b480f48 100644 --- a/spec/controllers/diaspora_federation/receive_controller_spec.rb +++ b/spec/controllers/diaspora_federation/receive_controller_spec.rb @@ -15,21 +15,21 @@ module DiasporaFederation expect(response.code).to eq("422") end - it "returns a 202 if queued correctly" do + it "returns a 202 if queued correctly", rails: 5 do expect_callback(:queue_public_receive, "", true) post :public, params: {xml: ""} expect(response.code).to eq("202") end - it "unescapes the xml before sending it to the callback" do + it "unescapes the xml before sending it to the callback", rails: 5 do expect_callback(:queue_public_receive, "", true) post :public, params: {xml: CGI.escape("")} end end - context "magic envelope" do + context "magic envelope", rails: 5 do before do Mime::Type.register("application/magic-envelope+xml", :magic_envelope) @request.env["CONTENT_TYPE"] = "application/magic-envelope+xml" @@ -44,7 +44,7 @@ module DiasporaFederation end end - describe "POST #private" do + describe "POST #private", rails: 5 do context "legacy salmon slap" do it "return a 404 if not queued successfully (unknown user guid)" do expect_callback(:queue_private_receive, "any-guid", "", true).and_return(false) diff --git a/spec/controllers/diaspora_federation/webfinger_controller_spec.rb b/spec/controllers/diaspora_federation/webfinger_controller_spec.rb index b4fb5d7..e26ceeb 100644 --- a/spec/controllers/diaspora_federation/webfinger_controller_spec.rb +++ b/spec/controllers/diaspora_federation/webfinger_controller_spec.rb @@ -8,10 +8,9 @@ module DiasporaFederation WebfingerController.instance_variable_set(:@host_meta_xml, nil) # clear cache end - it "succeeds", fixture: true, fixture4: true do + it "succeeds" do get :host_meta expect(response).to be_success - save_fixture(response.body, "host-meta") end it "contains the webfinger-template" do @@ -36,20 +35,19 @@ module DiasporaFederation end end - describe "GET #legacy_webfinger" do - it "succeeds when the person exists", fixture: true do - get :legacy_webfinger, params: {q: "alice@localhost:3000"} + describe "GET #legacy_webfinger", rails: 5 do + it "succeeds when the person exists" do + get :legacy_webfinger, params: {q: alice.diaspora_id} expect(response).to be_success - save_fixture(response.body, "legacy-webfinger") end it "succeeds with 'acct:' in the query when the person exists" do - get :legacy_webfinger, params: {q: "acct:alice@localhost:3000"} + get :legacy_webfinger, params: {q: "acct:#{alice.diaspora_id}"} expect(response).to be_success end it "contains the diaspora* ID" do - get :legacy_webfinger, params: {q: "acct:alice@localhost:3000"} + get :legacy_webfinger, params: {q: "acct:#{alice.diaspora_id}"} expect(response.body).to include "acct:alice@localhost:3000" end diff --git a/spec/factories.rb b/spec/factories.rb index cd2d5c5..8bd3e67 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,46 +1,42 @@ -require "diaspora_federation/test" +require "diaspora_federation/test/factories" -DiasporaFederation::Test::Factories.federation_factories +Fabricator(:person) do + diaspora_id { Fabricate.sequence(:diaspora_id) } + url "http://somehost:3000/" + serialized_public_key { Fabricate.sequence(:public_key) } +end -FactoryGirl.define do - factory :person do - diaspora_id - url "http://somehost:3000/" - serialized_public_key { generate(:public_key) } - end - - factory :user, class: Person do - diaspora_id - url "http://localhost:3000/" - after(:build) do |user| - private_key = OpenSSL::PKey::RSA.generate(1024) - user.serialized_private_key = private_key.export - user.serialized_public_key = private_key.public_key.export - end - end - - factory :post, class: Entity do - entity_type "Post" - author { FactoryGirl.build(:person) } - end - - factory :comment, class: Entity do - entity_type "Comment" - author { FactoryGirl.build(:person) } - end - - factory :poll, class: Entity do - entity_type "Poll" - author { FactoryGirl.build(:person) } - end - - factory :event, class: Entity do - entity_type "Event" - author { FactoryGirl.build(:person) } - end - - factory :conversation, class: Entity do - entity_type "Conversation" - author { FactoryGirl.build(:person) } +Fabricator(:user, class_name: Person) do + diaspora_id { Fabricate.sequence(:diaspora_id) } + url "http://localhost:3000/" + after_build do |user| + private_key = OpenSSL::PKey::RSA.generate(1024) + user.serialized_private_key = private_key.export + user.serialized_public_key = private_key.public_key.export end end + +Fabricator(:post, class_name: Entity) do + on_init { init_with("Post") } + author { Fabricate(:person) } +end + +Fabricator(:comment, class_name: Entity) do + on_init { init_with("Comment") } + author { Fabricate(:person) } +end + +Fabricator(:poll, class_name: Entity) do + on_init { init_with("Poll") } + author { Fabricate(:person) } +end + +Fabricator(:event, class_name: Entity) do + on_init { init_with("Event") } + author { Fabricate(:person) } +end + +Fabricator(:conversation, class_name: Entity) do + on_init { init_with("Conversation") } + author { Fabricate(:person) } +end diff --git a/spec/integration/comment_integration_spec.rb b/spec/integration/comment_integration_spec.rb index 2d26f2e..f7d5c6a 100644 --- a/spec/integration/comment_integration_spec.rb +++ b/spec/integration/comment_integration_spec.rb @@ -56,7 +56,7 @@ KEY let(:new_data) { "foobar" } let(:text) { "this is a very informative comment" } - let(:parent) { FactoryGirl.build(:related_entity, author: bob.diaspora_id) } + let(:parent) { Fabricate(:related_entity, author: bob.diaspora_id) } let(:comment) { Entities::Comment.new( author: author, guid: guid, parent_guid: parent_guid, text: text, parent: parent, new_data: new_data @@ -210,7 +210,7 @@ XML end context "parsing on every other pod" do - let(:parent) { FactoryGirl.build(:related_entity, author: bob.diaspora_id, local: false) } + let(:parent) { Fabricate(:related_entity, author: bob.diaspora_id, local: false) } before do expect_callback(:fetch_public_key, author).and_return(author_key.public_key) diff --git a/spec/lib/diaspora_federation/discovery/discovery_spec.rb b/spec/lib/diaspora_federation/discovery/discovery_spec.rb index 84b802f..9ca8c24 100644 --- a/spec/lib/diaspora_federation/discovery/discovery_spec.rb +++ b/spec/lib/diaspora_federation/discovery/discovery_spec.rb @@ -1,8 +1,35 @@ module DiasporaFederation describe Discovery::Discovery do - let(:host_meta_xrd) { FixtureGeneration.load_fixture("host-meta") } - let(:webfinger_xrd) { FixtureGeneration.load_fixture("legacy-webfinger") } - let(:hcard_html) { FixtureGeneration.load_fixture("hcard") } + let(:host_meta_xrd) { Discovery::HostMeta.from_base_url("http://localhost:3000/").to_xml } + let(:webfinger_xrd) { + DiasporaFederation::Discovery::WebFinger.new( + acct_uri: "acct:#{alice.diaspora_id}", + alias_url: alice.alias_url, + hcard_url: alice.hcard_url, + seed_url: alice.url, + profile_url: alice.profile_url, + atom_url: alice.atom_url, + salmon_url: alice.salmon_url, + subscribe_url: alice.subscribe_url, + guid: alice.guid, + public_key: alice.serialized_public_key + ).to_xml + } + let(:hcard_html) { + DiasporaFederation::Discovery::HCard.new( + guid: alice.guid, + nickname: alice.nickname, + full_name: alice.full_name, + url: alice.url, + photo_large_url: alice.photo_default_url, + photo_medium_url: alice.photo_default_url, + photo_small_url: alice.photo_default_url, + public_key: alice.serialized_public_key, + searchable: alice.searchable, + first_name: alice.first_name, + last_name: alice.last_name + ).to_html + } let(:account) { alice.diaspora_id } let(:default_image) { "http://localhost:3000/assets/user/default.png" } @@ -27,6 +54,7 @@ module DiasporaFederation stub_request(:get, "http://localhost:3000/hcard/users/#{alice.guid}") .to_return(status: 200, body: hcard_html) + expect_callback(:save_person_after_webfinger, kind_of(Entities::Person)) person = Discovery::Discovery.new(account).fetch_and_save expect(person.guid).to eq(alice.guid) @@ -73,6 +101,7 @@ module DiasporaFederation stub_request(:get, "http://localhost:3000/hcard/users/#{alice.guid}") .to_return(status: 200, body: hcard_html) + expect_callback(:save_person_after_webfinger, kind_of(Entities::Person)) person = Discovery::Discovery.new(account).fetch_and_save expect(person.guid).to eq(alice.guid) @@ -89,6 +118,7 @@ module DiasporaFederation stub_request(:get, "http://localhost:3000/hcard/users/#{alice.guid}") .to_return(status: 200, body: hcard_html) + expect_callback(:save_person_after_webfinger, kind_of(Entities::Person)) person = Discovery::Discovery.new(account).fetch_and_save expect(person.guid).to eq(alice.guid) @@ -179,7 +209,7 @@ module DiasporaFederation - HTML +HTML stub_request(:get, "https://localhost:3000/.well-known/host-meta") .to_return(status: 200, body: host_meta_xrd) @@ -188,6 +218,7 @@ module DiasporaFederation stub_request(:get, "http://localhost:3000/hcard/users/#{alice.guid}") .to_return(status: 200, body: historic_hcard_html) + expect_callback(:save_person_after_webfinger, kind_of(Entities::Person)) person = Discovery::Discovery.new(account).fetch_and_save expect(person.guid).to eq(alice.guid) diff --git a/spec/lib/diaspora_federation/discovery/h_card_spec.rb b/spec/lib/diaspora_federation/discovery/h_card_spec.rb index 487bae0..e614de4 100644 --- a/spec/lib/diaspora_federation/discovery/h_card_spec.rb +++ b/spec/lib/diaspora_federation/discovery/h_card_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Discovery::HCard do - let(:person) { FactoryGirl.create(:person) } + let(:person) { Fabricate(:person) } let(:photo_large_url) { "#{person.url}/upload/large.png" } let(:photo_medium_url) { "#{person.url}/upload/medium.png" } let(:photo_small_url) { "#{person.url}/upload/small.png" } diff --git a/spec/lib/diaspora_federation/discovery/web_finger_spec.rb b/spec/lib/diaspora_federation/discovery/web_finger_spec.rb index 0f4a97f..69d920e 100644 --- a/spec/lib/diaspora_federation/discovery/web_finger_spec.rb +++ b/spec/lib/diaspora_federation/discovery/web_finger_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Discovery::WebFinger do - let(:person) { FactoryGirl.create(:person) } + let(:person) { Fabricate(:person) } let(:acct) { "acct:#{person.diaspora_id}" } let(:public_key_base64) { Base64.strict_encode64(person.serialized_public_key) } diff --git a/spec/lib/diaspora_federation/entities/account_deletion_spec.rb b/spec/lib/diaspora_federation/entities/account_deletion_spec.rb index 8ef5321..eaab619 100644 --- a/spec/lib/diaspora_federation/entities/account_deletion_spec.rb +++ b/spec/lib/diaspora_federation/entities/account_deletion_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Entities::AccountDeletion do - let(:data) { FactoryGirl.attributes_for(:account_deletion_entity) } + let(:data) { Fabricate.attributes_for(:account_deletion_entity) } let(:xml) { <<-XML } diff --git a/spec/lib/diaspora_federation/entities/account_migration_spec.rb b/spec/lib/diaspora_federation/entities/account_migration_spec.rb index 560260e..09dca0d 100644 --- a/spec/lib/diaspora_federation/entities/account_migration_spec.rb +++ b/spec/lib/diaspora_federation/entities/account_migration_spec.rb @@ -3,9 +3,8 @@ module DiasporaFederation let(:new_diaspora_id) { alice.diaspora_id } let(:new_author_pkey) { alice.private_key } let(:hash) { - FactoryGirl.attributes_for( - :account_migration_entity, - profile: FactoryGirl.build(:profile_entity, author: new_diaspora_id) + Fabricate.attributes_for(:account_deletion_entity).merge( + profile: Fabricate(:profile_entity, author: new_diaspora_id) ) } let(:data) { diff --git a/spec/lib/diaspora_federation/entities/comment_spec.rb b/spec/lib/diaspora_federation/entities/comment_spec.rb index e47a364..f6b32d9 100644 --- a/spec/lib/diaspora_federation/entities/comment_spec.rb +++ b/spec/lib/diaspora_federation/entities/comment_spec.rb @@ -1,9 +1,9 @@ module DiasporaFederation describe Entities::Comment do - let(:parent) { FactoryGirl.create(:post, author: bob) } - let(:parent_entity) { FactoryGirl.build(:related_entity, author: bob.diaspora_id) } + let(:parent) { Fabricate(:post, author: bob) } + let(:parent_entity) { Fabricate(:related_entity, author: bob.diaspora_id) } let(:data) { - FactoryGirl + Fabricate .attributes_for( :comment_entity, author: alice.diaspora_id, @@ -60,12 +60,12 @@ JSON describe "#created_at" do it "has a created_at after parse" do entity = described_class.from_xml(Nokogiri::XML::Document.parse(xml).root) - expect(entity.created_at).to be_within(1.second).of(Time.now.utc) + expect(entity.created_at).to be_within(1).of(Time.now.utc) end it "parses the created_at from the xml if it is included and correctly signed" do - created_at = Time.now.utc.change(usec: 0) - 1.minute - comment_data = FactoryGirl.attributes_for(:comment_entity, author: alice.diaspora_id, parent_guid: parent.guid) + created_at = change_time(Time.now.utc) - 60 + comment_data = Fabricate.attributes_for(:comment_entity, author: alice.diaspora_id, parent_guid: parent.guid) comment_data[:created_at] = created_at comment_data[:parent] = parent_entity comment = described_class.new(comment_data, %i(author guid parent_guid text created_at)) diff --git a/spec/lib/diaspora_federation/entities/contact_spec.rb b/spec/lib/diaspora_federation/entities/contact_spec.rb index 8813aaa..bf188d5 100644 --- a/spec/lib/diaspora_federation/entities/contact_spec.rb +++ b/spec/lib/diaspora_federation/entities/contact_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Entities::Contact do - let(:data) { FactoryGirl.attributes_for(:contact_entity) } + let(:data) { Fabricate.attributes_for(:contact_entity) } let(:xml) { <<-XML } diff --git a/spec/lib/diaspora_federation/entities/conversation_spec.rb b/spec/lib/diaspora_federation/entities/conversation_spec.rb index 90aa785..bc4ff5c 100644 --- a/spec/lib/diaspora_federation/entities/conversation_spec.rb +++ b/spec/lib/diaspora_federation/entities/conversation_spec.rb @@ -1,9 +1,9 @@ module DiasporaFederation describe Entities::Conversation do - let(:parent) { FactoryGirl.create(:conversation, author: bob) } - let(:parent_entity) { FactoryGirl.build(:related_entity, author: bob.diaspora_id) } + let(:parent) { Fabricate(:conversation, author: bob) } + let(:parent_entity) { Fabricate(:related_entity, author: bob.diaspora_id) } let(:signed_msg1) { - FactoryGirl.attributes_for( + Fabricate.attributes_for( :message_entity, author: bob.diaspora_id, parent_guid: parent.guid, @@ -11,7 +11,7 @@ module DiasporaFederation ).tap {|hash| add_signatures(hash, Entities::Message) } } let(:signed_msg2) { - FactoryGirl.attributes_for( + Fabricate.attributes_for( :message_entity, author: bob.diaspora_id, parent_guid: parent.guid, @@ -19,11 +19,11 @@ module DiasporaFederation ).tap {|hash| add_signatures(hash, Entities::Message) } } let(:data) { - FactoryGirl.attributes_for(:conversation_entity).merge!( + Fabricate.attributes_for(:conversation_entity).merge!( messages: [Entities::Message.new(signed_msg1), Entities::Message.new(signed_msg2)], author: bob.diaspora_id, guid: parent.guid, - participants: "#{bob.diaspora_id};#{FactoryGirl.generate(:diaspora_id)}" + participants: "#{bob.diaspora_id};#{Fabricate.sequence(:diaspora_id)}" ) } @@ -34,7 +34,7 @@ module DiasporaFederation #{data[:subject]} #{data[:created_at].utc.iso8601} #{data[:participants]} -#{data[:messages].map {|a| a.to_xml.to_s.indent(2) }.join("\n")} +#{data[:messages].map {|a| indent(a.to_xml.to_s, 2) }.join("\n")} XML diff --git a/spec/lib/diaspora_federation/entities/event_participation_spec.rb b/spec/lib/diaspora_federation/entities/event_participation_spec.rb index 7f5275d..8cc932f 100644 --- a/spec/lib/diaspora_federation/entities/event_participation_spec.rb +++ b/spec/lib/diaspora_federation/entities/event_participation_spec.rb @@ -1,9 +1,9 @@ module DiasporaFederation describe Entities::EventParticipation do - let(:parent) { FactoryGirl.create(:event, author: bob) } - let(:parent_entity) { FactoryGirl.build(:related_entity, author: bob.diaspora_id) } + let(:parent) { Fabricate(:event, author: bob) } + let(:parent_entity) { Fabricate(:related_entity, author: bob.diaspora_id) } let(:data) { - FactoryGirl.attributes_for( + Fabricate.attributes_for( :event_participation_entity, author: alice.diaspora_id, parent_guid: parent.guid, diff --git a/spec/lib/diaspora_federation/entities/event_spec.rb b/spec/lib/diaspora_federation/entities/event_spec.rb index 0507ae2..5a759e6 100644 --- a/spec/lib/diaspora_federation/entities/event_spec.rb +++ b/spec/lib/diaspora_federation/entities/event_spec.rb @@ -1,8 +1,8 @@ module DiasporaFederation describe Entities::Event do - let(:location) { FactoryGirl.build(:location_entity) } + let(:location) { Fabricate(:location_entity) } let(:data) { - FactoryGirl.attributes_for(:event_entity).merge(author: alice.diaspora_id, location: location) + Fabricate.attributes_for(:event_entity).merge(author: alice.diaspora_id, location: location) } let(:xml) { <<-XML } diff --git a/spec/lib/diaspora_federation/entities/like_spec.rb b/spec/lib/diaspora_federation/entities/like_spec.rb index ae3534d..08fbc5b 100644 --- a/spec/lib/diaspora_federation/entities/like_spec.rb +++ b/spec/lib/diaspora_federation/entities/like_spec.rb @@ -1,9 +1,9 @@ module DiasporaFederation describe Entities::Like do - let(:parent) { FactoryGirl.create(:post, author: bob) } - let(:parent_entity) { FactoryGirl.build(:related_entity, author: bob.diaspora_id) } + let(:parent) { Fabricate(:post, author: bob) } + let(:parent_entity) { Fabricate(:related_entity, author: bob.diaspora_id) } let(:data) { - FactoryGirl.attributes_for( + Fabricate.attributes_for( :like_entity, author: alice.diaspora_id, parent_guid: parent.guid, diff --git a/spec/lib/diaspora_federation/entities/location_spec.rb b/spec/lib/diaspora_federation/entities/location_spec.rb index 053d3e6..0ba629e 100644 --- a/spec/lib/diaspora_federation/entities/location_spec.rb +++ b/spec/lib/diaspora_federation/entities/location_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Entities::Location do - let(:data) { FactoryGirl.attributes_for(:location_entity) } + let(:data) { Fabricate.attributes_for(:location_entity) } let(:xml) { <<-XML } diff --git a/spec/lib/diaspora_federation/entities/message_spec.rb b/spec/lib/diaspora_federation/entities/message_spec.rb index a2df46d..67f9999 100644 --- a/spec/lib/diaspora_federation/entities/message_spec.rb +++ b/spec/lib/diaspora_federation/entities/message_spec.rb @@ -1,9 +1,9 @@ module DiasporaFederation describe Entities::Message do - let(:parent) { FactoryGirl.create(:conversation, author: bob) } - let(:parent_entity) { FactoryGirl.build(:related_entity, author: bob.diaspora_id) } + let(:parent) { Fabricate(:conversation, author: bob) } + let(:parent_entity) { Fabricate(:related_entity, author: bob.diaspora_id) } let(:data) { - FactoryGirl + Fabricate .attributes_for(:message_entity, author: alice.diaspora_id, parent_guid: parent.guid, parent: parent_entity) .tap {|hash| add_signatures(hash) } } @@ -44,7 +44,7 @@ XML it "does not allow any other person" do expect_callback(:fetch_related_entity, "Conversation", entity.conversation_guid).and_return(parent_entity) - invalid_sender = FactoryGirl.generate(:diaspora_id) + invalid_sender = Fabricate.sequence(:diaspora_id) expect(entity.sender_valid?(invalid_sender)).to be_falsey end diff --git a/spec/lib/diaspora_federation/entities/participation_spec.rb b/spec/lib/diaspora_federation/entities/participation_spec.rb index 4f7a34c..cc1276e 100644 --- a/spec/lib/diaspora_federation/entities/participation_spec.rb +++ b/spec/lib/diaspora_federation/entities/participation_spec.rb @@ -1,9 +1,9 @@ module DiasporaFederation describe Entities::Participation do - let(:parent) { FactoryGirl.create(:post, author: bob) } - let(:parent_entity) { FactoryGirl.build(:related_entity, author: bob.diaspora_id) } + let(:parent) { Fabricate(:post, author: bob) } + let(:parent_entity) { Fabricate(:related_entity, author: bob.diaspora_id) } let(:data) { - FactoryGirl.attributes_for( + Fabricate.attributes_for( :participation_entity, author: alice.diaspora_id, parent_guid: parent.guid, @@ -84,7 +84,7 @@ JSON } it "succeeds when the parent is local" do - local_parent = FactoryGirl.build(:related_entity, local: true) + local_parent = Fabricate(:related_entity, local: true) expect_callback(:fetch_related_entity, parent.entity_type, parent.guid).and_return(local_parent) expect { @@ -101,7 +101,7 @@ JSON end it "raises ParentNotLocal when the parent is not local" do - remote_parent = FactoryGirl.build(:related_entity, local: false) + remote_parent = Fabricate(:related_entity, local: false) expect_callback(:fetch_related_entity, parent.entity_type, parent.guid).and_return(remote_parent) expect { diff --git a/spec/lib/diaspora_federation/entities/person_spec.rb b/spec/lib/diaspora_federation/entities/person_spec.rb index fab067c..786992a 100644 --- a/spec/lib/diaspora_federation/entities/person_spec.rb +++ b/spec/lib/diaspora_federation/entities/person_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Entities::Person do - let(:data) { FactoryGirl.attributes_for(:person_entity) } + let(:data) { Fabricate.attributes_for(:person_entity) } let(:xml) { <<-XML } diff --git a/spec/lib/diaspora_federation/entities/photo_spec.rb b/spec/lib/diaspora_federation/entities/photo_spec.rb index 0f8d71b..9c58728 100644 --- a/spec/lib/diaspora_federation/entities/photo_spec.rb +++ b/spec/lib/diaspora_federation/entities/photo_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Entities::Photo do - let(:data) { FactoryGirl.attributes_for(:photo_entity) } + let(:data) { Fabricate.attributes_for(:photo_entity) } let(:xml) { <<-XML } diff --git a/spec/lib/diaspora_federation/entities/poll_answer_spec.rb b/spec/lib/diaspora_federation/entities/poll_answer_spec.rb index fd88740..b16d23e 100644 --- a/spec/lib/diaspora_federation/entities/poll_answer_spec.rb +++ b/spec/lib/diaspora_federation/entities/poll_answer_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Entities::PollAnswer do - let(:data) { FactoryGirl.attributes_for(:poll_answer_entity) } + let(:data) { Fabricate.attributes_for(:poll_answer_entity) } let(:xml) { <<-XML } diff --git a/spec/lib/diaspora_federation/entities/poll_participation_spec.rb b/spec/lib/diaspora_federation/entities/poll_participation_spec.rb index e81c52e..b63f261 100644 --- a/spec/lib/diaspora_federation/entities/poll_participation_spec.rb +++ b/spec/lib/diaspora_federation/entities/poll_participation_spec.rb @@ -1,9 +1,9 @@ module DiasporaFederation describe Entities::PollParticipation do - let(:parent) { FactoryGirl.create(:poll, author: bob) } - let(:parent_entity) { FactoryGirl.build(:related_entity, author: bob.diaspora_id) } + let(:parent) { Fabricate(:poll, author: bob) } + let(:parent_entity) { Fabricate(:related_entity, author: bob.diaspora_id) } let(:data) { - FactoryGirl.attributes_for( + Fabricate.attributes_for( :poll_participation_entity, author: alice.diaspora_id, parent_guid: parent.guid, diff --git a/spec/lib/diaspora_federation/entities/poll_spec.rb b/spec/lib/diaspora_federation/entities/poll_spec.rb index 7422d39..2065785 100644 --- a/spec/lib/diaspora_federation/entities/poll_spec.rb +++ b/spec/lib/diaspora_federation/entities/poll_spec.rb @@ -1,12 +1,12 @@ module DiasporaFederation describe Entities::Poll do - let(:data) { FactoryGirl.attributes_for(:poll_entity) } + let(:data) { Fabricate.attributes_for(:poll_entity) } let(:xml) { <<-XML } #{data[:guid]} #{data[:question]} -#{data[:poll_answers].map {|a| a.to_xml.to_s.indent(2) }.join("\n")} +#{data[:poll_answers].map {|a| indent(a.to_xml.to_s, 2) }.join("\n")} XML @@ -17,7 +17,7 @@ XML "guid": "#{data[:guid]}", "question": "#{data[:question]}", "poll_answers": [ -#{data[:poll_answers].map {|a| JSON.pretty_generate(a.to_json).indent(6) }.join(",\n")} +#{data[:poll_answers].map {|a| indent(JSON.pretty_generate(a.to_json), 6) }.join(",\n")} ] } } diff --git a/spec/lib/diaspora_federation/entities/profile_spec.rb b/spec/lib/diaspora_federation/entities/profile_spec.rb index 6aca890..b0b6873 100644 --- a/spec/lib/diaspora_federation/entities/profile_spec.rb +++ b/spec/lib/diaspora_federation/entities/profile_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Entities::Profile do - let(:data) { FactoryGirl.attributes_for(:profile_entity) } + let(:data) { Fabricate.attributes_for(:profile_entity) } let(:xml) { <<-XML } diff --git a/spec/lib/diaspora_federation/entities/related_entity_spec.rb b/spec/lib/diaspora_federation/entities/related_entity_spec.rb index 33301a6..977e4b1 100644 --- a/spec/lib/diaspora_federation/entities/related_entity_spec.rb +++ b/spec/lib/diaspora_federation/entities/related_entity_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Entities::RelatedEntity do - let(:data) { FactoryGirl.attributes_for(:related_entity) } + let(:data) { Fabricate.attributes_for(:related_entity) } let(:string) { "RelatedEntity" } it_behaves_like "an Entity subclass" diff --git a/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb b/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb index ebcff4d..3f062c8 100644 --- a/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb +++ b/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb @@ -1,15 +1,15 @@ module DiasporaFederation describe Entities::RelayableRetraction do - let(:target) { FactoryGirl.create(:comment, author: bob) } + let(:target) { Fabricate(:comment, author: bob) } let(:target_entity) { - FactoryGirl.build( + Fabricate( :related_entity, author: bob.diaspora_id, - parent: FactoryGirl.build(:related_entity, author: alice.diaspora_id) + parent: Fabricate(:related_entity, author: alice.diaspora_id) ) } let(:data) { - FactoryGirl.build( + Fabricate( :relayable_retraction_entity, author: alice.diaspora_id, target_guid: target.guid, @@ -41,11 +41,11 @@ XML describe "#to_xml" do let(:author_pkey) { OpenSSL::PKey::RSA.generate(1024) } - let(:hash) { FactoryGirl.attributes_for(:relayable_retraction_entity) } + let(:hash) { Fabricate.attributes_for(:relayable_retraction_entity) } it "updates author signature when it was nil and key was supplied and author is not parent author" do - parent = FactoryGirl.build(:related_entity, author: bob.diaspora_id) - hash[:target] = FactoryGirl.build(:related_entity, author: hash[:author], parent: parent) + parent = Fabricate(:related_entity, author: bob.diaspora_id) + hash[:target] = Fabricate(:related_entity, author: hash[:author], parent: parent) expect_callback(:fetch_private_key, hash[:author]).and_return(author_pkey) @@ -58,8 +58,8 @@ XML end it "sets parent author signature when author is parent author" do - parent = FactoryGirl.build(:related_entity, author: hash[:author]) - hash[:target] = FactoryGirl.build(:related_entity, author: hash[:author], parent: parent) + parent = Fabricate(:related_entity, author: hash[:author]) + hash[:target] = Fabricate(:related_entity, author: hash[:author], parent: parent) expect_callback(:fetch_private_key, hash[:author]).and_return(author_pkey) @@ -72,8 +72,8 @@ XML end it "updates parent author signature when it was nil, key was supplied and sender is author of the parent" do - parent = FactoryGirl.build(:related_entity, author: hash[:author]) - hash[:target] = FactoryGirl.build(:related_entity, author: bob.diaspora_id, parent: parent) + parent = Fabricate(:related_entity, author: hash[:author]) + hash[:target] = Fabricate(:related_entity, author: bob.diaspora_id, parent: parent) expect_callback(:fetch_private_key, hash[:author]).and_return(author_pkey) @@ -105,7 +105,7 @@ XML describe "#to_retraction" do it "copies the attributes to a Retraction" do - relayable_retraction = FactoryGirl.build(:relayable_retraction_entity) + relayable_retraction = Fabricate(:relayable_retraction_entity) retraction = relayable_retraction.to_retraction expect(retraction).to be_a(Entities::Retraction) diff --git a/spec/lib/diaspora_federation/entities/relayable_spec.rb b/spec/lib/diaspora_federation/entities/relayable_spec.rb index 004d25e..0c02c4e 100644 --- a/spec/lib/diaspora_federation/entities/relayable_spec.rb +++ b/spec/lib/diaspora_federation/entities/relayable_spec.rb @@ -3,13 +3,13 @@ module DiasporaFederation let(:author_pkey) { OpenSSL::PKey::RSA.generate(1024) } let(:parent_pkey) { OpenSSL::PKey::RSA.generate(1024) } - let(:guid) { FactoryGirl.generate(:guid) } - let(:parent_guid) { FactoryGirl.generate(:guid) } - let(:author) { FactoryGirl.generate(:diaspora_id) } + let(:guid) { Fabricate.sequence(:guid) } + let(:parent_guid) { Fabricate.sequence(:guid) } + let(:author) { Fabricate.sequence(:diaspora_id) } let(:property) { "hello" } let(:new_property) { "some text" } - let(:local_parent) { FactoryGirl.build(:related_entity, author: bob.diaspora_id) } - let(:remote_parent) { FactoryGirl.build(:related_entity, author: bob.diaspora_id, local: false) } + let(:local_parent) { Fabricate(:related_entity, author: bob.diaspora_id) } + let(:remote_parent) { Fabricate(:related_entity, author: bob.diaspora_id, local: false) } let(:hash) { {guid: guid, author: author, parent_guid: parent_guid, parent: local_parent, property: property} } let(:hash_with_fake_signatures) { hash.merge!(author_signature: "aa", parent_author_signature: "bb") } @@ -521,7 +521,7 @@ XML it "does not allow any random author" do entity = Entities::SomeRelayable.new(hash) - invalid_author = FactoryGirl.generate(:diaspora_id) + invalid_author = Fabricate.sequence(:diaspora_id) expect(entity.sender_valid?(invalid_author)).to be_falsey end diff --git a/spec/lib/diaspora_federation/entities/request_spec.rb b/spec/lib/diaspora_federation/entities/request_spec.rb index d52a9a0..b59f7db 100644 --- a/spec/lib/diaspora_federation/entities/request_spec.rb +++ b/spec/lib/diaspora_federation/entities/request_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Entities::Request do - let(:data) { FactoryGirl.attributes_for(:request_entity) } + let(:data) { Fabricate.attributes_for(:request_entity) } let(:xml) { <<-XML } @@ -17,7 +17,7 @@ XML describe "#to_contact" do it "copies the attributes to a Contact" do - request = FactoryGirl.build(:request_entity) + request = Fabricate(:request_entity) contact = request.to_contact expect(contact).to be_a(Entities::Contact) diff --git a/spec/lib/diaspora_federation/entities/reshare_spec.rb b/spec/lib/diaspora_federation/entities/reshare_spec.rb index f0c9d96..bb680f7 100644 --- a/spec/lib/diaspora_federation/entities/reshare_spec.rb +++ b/spec/lib/diaspora_federation/entities/reshare_spec.rb @@ -1,7 +1,7 @@ module DiasporaFederation describe Entities::Reshare do - let(:root) { FactoryGirl.create(:post, author: bob) } - let(:data) { FactoryGirl.attributes_for(:reshare_entity, root_guid: root.guid, root_author: bob.diaspora_id) } + let(:root) { Fabricate(:post, author: bob) } + let(:data) { Fabricate.attributes_for(:reshare_entity, root_guid: root.guid, root_author: bob.diaspora_id) } let(:xml) { <<-XML } diff --git a/spec/lib/diaspora_federation/entities/retraction_spec.rb b/spec/lib/diaspora_federation/entities/retraction_spec.rb index 75f87c5..5b3aa73 100644 --- a/spec/lib/diaspora_federation/entities/retraction_spec.rb +++ b/spec/lib/diaspora_federation/entities/retraction_spec.rb @@ -1,9 +1,9 @@ module DiasporaFederation describe Entities::Retraction do - let(:target) { FactoryGirl.create(:post, author: bob) } - let(:target_entity) { FactoryGirl.build(:related_entity, author: bob.diaspora_id) } + let(:target) { Fabricate(:post, author: bob) } + let(:target_entity) { Fabricate(:related_entity, author: bob.diaspora_id) } let(:data) { - FactoryGirl.attributes_for( + Fabricate.attributes_for( :retraction_entity, target_guid: target.guid, target_type: target.entity_type, @@ -37,7 +37,7 @@ XML it "does not allow any random author" do entity = Entities::Retraction.new(data) - invalid_author = FactoryGirl.generate(:diaspora_id) + invalid_author = Fabricate.sequence(:diaspora_id) expect(entity.sender_valid?(invalid_author)).to be_falsey end @@ -46,10 +46,10 @@ XML %w(Comment Like PollParticipation).each do |target_type| context "#{target_type} target" do let(:relayable_target) { - FactoryGirl.build( + Fabricate( :related_entity, author: bob.diaspora_id, - parent: FactoryGirl.build(:related_entity, author: alice.diaspora_id) + parent: Fabricate(:related_entity, author: alice.diaspora_id) ) } let(:relayable_data) { data.merge(target_type: target_type, target: relayable_target) } @@ -68,7 +68,7 @@ XML it "does not allow any random author" do entity = Entities::Retraction.new(relayable_data) - invalid_author = FactoryGirl.generate(:diaspora_id) + invalid_author = Fabricate.sequence(:diaspora_id) expect(entity.sender_valid?(invalid_author)).to be_falsey end diff --git a/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb b/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb index a74ce6c..9daecef 100644 --- a/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb +++ b/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb @@ -1,9 +1,9 @@ module DiasporaFederation describe Entities::SignedRetraction do - let(:target) { FactoryGirl.create(:post, author: alice) } - let(:target_entity) { FactoryGirl.build(:related_entity, author: alice.diaspora_id) } + let(:target) { Fabricate(:post, author: alice) } + let(:target_entity) { Fabricate(:related_entity, author: alice.diaspora_id) } let(:data) { - FactoryGirl.build( + Fabricate( :signed_retraction_entity, author: alice.diaspora_id, target_guid: target.guid, @@ -31,7 +31,7 @@ XML describe "#to_xml" do let(:author_pkey) { OpenSSL::PKey::RSA.generate(1024) } - let(:hash) { FactoryGirl.attributes_for(:signed_retraction_entity) } + let(:hash) { Fabricate.attributes_for(:signed_retraction_entity) } it "updates author signature when it was nil and key was supplied" do expect_callback(:fetch_private_key, hash[:author]).and_return(author_pkey) @@ -62,7 +62,7 @@ XML describe "#to_retraction" do it "copies the attributes to a Retraction" do - signed_retraction = FactoryGirl.build(:signed_retraction_entity) + signed_retraction = Fabricate(:signed_retraction_entity) retraction = signed_retraction.to_retraction expect(retraction).to be_a(Entities::Retraction) diff --git a/spec/lib/diaspora_federation/entities/status_message_spec.rb b/spec/lib/diaspora_federation/entities/status_message_spec.rb index 1df135d..1c1f8f4 100644 --- a/spec/lib/diaspora_federation/entities/status_message_spec.rb +++ b/spec/lib/diaspora_federation/entities/status_message_spec.rb @@ -1,10 +1,10 @@ module DiasporaFederation describe Entities::StatusMessage do - let(:photo1) { FactoryGirl.build(:photo_entity, author: alice.diaspora_id) } - let(:photo2) { FactoryGirl.build(:photo_entity, author: alice.diaspora_id) } - let(:location) { FactoryGirl.build(:location_entity) } + let(:photo1) { Fabricate(:photo_entity, author: alice.diaspora_id) } + let(:photo2) { Fabricate(:photo_entity, author: alice.diaspora_id) } + let(:location) { Fabricate(:location_entity) } let(:data) { - FactoryGirl.attributes_for(:status_message_entity).merge( + Fabricate.attributes_for(:status_message_entity).merge( author: alice.diaspora_id, photos: [photo1, photo2], location: location, @@ -140,7 +140,7 @@ XML context "nested entities" do it "validates that nested photos have the same author" do - invalid_data = data.merge(author: FactoryGirl.generate(:diaspora_id)) + invalid_data = data.merge(author: Fabricate.sequence(:diaspora_id)) expect { Entities::StatusMessage.new(invalid_data) }.to raise_error Entity::ValidationError diff --git a/spec/lib/diaspora_federation/entity_spec.rb b/spec/lib/diaspora_federation/entity_spec.rb index 63d76bf..2bba34b 100644 --- a/spec/lib/diaspora_federation/entity_spec.rb +++ b/spec/lib/diaspora_federation/entity_spec.rb @@ -158,7 +158,7 @@ XML test2: false, test3: "456", test4: 789, - test5: Time.current.utc + test5: Time.now.utc } } @@ -208,7 +208,7 @@ XML describe ".from_json" do it "parses entity properties from the input JSON data" do - now = Time.now.change(usec: 0).utc + now = change_time(Time.now.utc) entity_data = <<-JSON { "entity_type": "test_complex_entity", @@ -281,7 +281,7 @@ JSON describe ".from_hash" do it "parses entity properties from the input data" do - now = Time.now.change(usec: 0).utc + now = change_time(Time.now.utc) entity_data = { test1: "abc", test2: false, @@ -417,7 +417,7 @@ JSON end it "is not added to xml if #to_xml returns nil" do - entity = Entities::TestEntityWithRelatedEntity.new(test: "test", parent: FactoryGirl.build(:related_entity)) + entity = Entities::TestEntityWithRelatedEntity.new(test: "test", parent: Fabricate(:related_entity)) xml = entity.to_xml expect(xml.children).to have_exactly(1).items xml.children.first.name = "test" diff --git a/spec/lib/diaspora_federation/federation/fetcher_spec.rb b/spec/lib/diaspora_federation/federation/fetcher_spec.rb index b04b170..22898f5 100644 --- a/spec/lib/diaspora_federation/federation/fetcher_spec.rb +++ b/spec/lib/diaspora_federation/federation/fetcher_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Federation::Fetcher do - let(:post) { FactoryGirl.build(:status_message_entity, public: true) } + let(:post) { Fabricate(:status_message_entity, public: true) } let(:post_magic_env) { Salmon::MagicEnvelope.new(post, post.author).envelop(alice.private_key).to_xml } describe ".fetch_public" do diff --git a/spec/lib/diaspora_federation/federation/receiver/private_spec.rb b/spec/lib/diaspora_federation/federation/receiver/private_spec.rb index 8a99f31..2deda9d 100644 --- a/spec/lib/diaspora_federation/federation/receiver/private_spec.rb +++ b/spec/lib/diaspora_federation/federation/receiver/private_spec.rb @@ -1,7 +1,7 @@ module DiasporaFederation describe Federation::Receiver::Private do let(:recipient) { 42 } - let(:post) { FactoryGirl.build(:status_message_entity, public: false) } + let(:post) { Fabricate(:status_message_entity, public: false) } let(:magic_env) { Salmon::MagicEnvelope.new(post, post.author) } describe "#receive" do @@ -12,7 +12,7 @@ module DiasporaFederation end it "validates the sender" do - sender = FactoryGirl.generate(:diaspora_id) + sender = Fabricate.sequence(:diaspora_id) bad_env = Salmon::MagicEnvelope.new(post, sender) expect { @@ -27,7 +27,7 @@ module DiasporaFederation end context "with relayable" do - let(:comment) { FactoryGirl.build(:comment_entity, parent: FactoryGirl.build(:related_entity, public: false)) } + let(:comment) { Fabricate(:comment_entity, parent: Fabricate(:related_entity, public: false)) } it "receives a comment from the author" do magic_env = Salmon::MagicEnvelope.new(comment, comment.author) @@ -46,7 +46,7 @@ module DiasporaFederation end it "validates the sender" do - sender = FactoryGirl.generate(:diaspora_id) + sender = Fabricate.sequence(:diaspora_id) bad_env = Salmon::MagicEnvelope.new(comment, sender) expect { @@ -57,7 +57,7 @@ module DiasporaFederation context "with retraction" do context "for a post" do - let(:retraction) { FactoryGirl.build(:retraction_entity, target_type: "Post") } + let(:retraction) { Fabricate(:retraction_entity, target_type: "Post") } it "retracts a post from the author" do magic_env = Salmon::MagicEnvelope.new(retraction, retraction.target.author) @@ -68,7 +68,7 @@ module DiasporaFederation end it "validates the sender" do - sender = FactoryGirl.generate(:diaspora_id) + sender = Fabricate.sequence(:diaspora_id) bad_env = Salmon::MagicEnvelope.new(retraction, sender) expect { @@ -79,10 +79,10 @@ module DiasporaFederation context "for a comment" do let(:retraction) { - FactoryGirl.build( + Fabricate( :retraction_entity, target_type: "Comment", - target: FactoryGirl.build(:related_entity, parent: FactoryGirl.build(:related_entity)) + target: Fabricate(:related_entity, parent: Fabricate(:related_entity)) ) } @@ -103,7 +103,7 @@ module DiasporaFederation end it "validates the sender" do - sender = FactoryGirl.generate(:diaspora_id) + sender = Fabricate.sequence(:diaspora_id) bad_env = Salmon::MagicEnvelope.new(retraction, sender) expect { diff --git a/spec/lib/diaspora_federation/federation/receiver/public_spec.rb b/spec/lib/diaspora_federation/federation/receiver/public_spec.rb index 8ec88e1..298cd47 100644 --- a/spec/lib/diaspora_federation/federation/receiver/public_spec.rb +++ b/spec/lib/diaspora_federation/federation/receiver/public_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Federation::Receiver::Public do - let(:post) { FactoryGirl.build(:status_message_entity) } + let(:post) { Fabricate(:status_message_entity) } let(:magic_env) { Salmon::MagicEnvelope.new(post, post.author) } describe "#receive" do @@ -11,7 +11,7 @@ module DiasporaFederation end it "validates the sender" do - sender = FactoryGirl.generate(:diaspora_id) + sender = Fabricate.sequence(:diaspora_id) bad_env = Salmon::MagicEnvelope.new(post, sender) expect { @@ -20,7 +20,7 @@ module DiasporaFederation end context "with relayable" do - let(:comment) { FactoryGirl.build(:comment_entity) } + let(:comment) { Fabricate(:comment_entity) } it "receives a comment from the author" do magic_env = Salmon::MagicEnvelope.new(comment, comment.author) @@ -39,7 +39,7 @@ module DiasporaFederation end it "validates the sender" do - sender = FactoryGirl.generate(:diaspora_id) + sender = Fabricate.sequence(:diaspora_id) bad_env = Salmon::MagicEnvelope.new(comment, sender) expect { @@ -50,7 +50,7 @@ module DiasporaFederation context "with retraction" do context "for a post" do - let(:retraction) { FactoryGirl.build(:retraction_entity, target_type: "Post") } + let(:retraction) { Fabricate(:retraction_entity, target_type: "Post") } it "retracts a post from the author" do magic_env = Salmon::MagicEnvelope.new(retraction, retraction.author) @@ -61,7 +61,7 @@ module DiasporaFederation end it "validates the sender" do - sender = FactoryGirl.generate(:diaspora_id) + sender = Fabricate.sequence(:diaspora_id) bad_env = Salmon::MagicEnvelope.new(retraction, sender) expect { @@ -72,10 +72,10 @@ module DiasporaFederation context "for a comment" do let(:retraction) { - FactoryGirl.build( + Fabricate( :retraction_entity, target_type: "Comment", - target: FactoryGirl.build(:related_entity, parent: FactoryGirl.build(:related_entity)) + target: Fabricate(:related_entity, parent: Fabricate(:related_entity)) ) } @@ -96,7 +96,7 @@ module DiasporaFederation end it "validates the sender" do - sender = FactoryGirl.generate(:diaspora_id) + sender = Fabricate.sequence(:diaspora_id) bad_env = Salmon::MagicEnvelope.new(retraction, sender) expect { @@ -108,7 +108,7 @@ module DiasporaFederation context "validates if it is public" do it "allows public entities" do - public_post = FactoryGirl.build(:status_message_entity, public: true) + public_post = Fabricate(:status_message_entity, public: true) magic_env = Salmon::MagicEnvelope.new(public_post, public_post.author) expect_callback(:receive_entity, public_post, public_post.author, nil) @@ -117,7 +117,7 @@ module DiasporaFederation end it "does not allow non-public entities" do - private_post = FactoryGirl.build(:status_message_entity, public: false) + private_post = Fabricate(:status_message_entity, public: false) magic_env = Salmon::MagicEnvelope.new(private_post, private_post.author) expect { @@ -126,7 +126,7 @@ module DiasporaFederation end it "allows entities without public flag" do - profile = FactoryGirl.build(:profile_entity) + profile = Fabricate(:profile_entity) magic_env = Salmon::MagicEnvelope.new(profile, profile.author) expect_callback(:receive_entity, profile, profile.author, nil) diff --git a/spec/lib/diaspora_federation/federation/receiver_spec.rb b/spec/lib/diaspora_federation/federation/receiver_spec.rb index 3da808f..0c924c8 100644 --- a/spec/lib/diaspora_federation/federation/receiver_spec.rb +++ b/spec/lib/diaspora_federation/federation/receiver_spec.rb @@ -4,7 +4,7 @@ module DiasporaFederation let(:recipient_key) { OpenSSL::PKey::RSA.generate(1024) } describe ".receive_public" do - let(:post) { FactoryGirl.build(:status_message_entity) } + let(:post) { Fabricate(:status_message_entity) } it "parses the entity with magic envelope receiver" do expect_callback(:fetch_public_key, post.author).and_return(sender_key) @@ -44,7 +44,7 @@ module DiasporaFederation end describe ".receive_private" do - let(:post) { FactoryGirl.build(:status_message_entity, public: false) } + let(:post) { Fabricate(:status_message_entity, public: false) } it "parses the entity with magic envelope receiver" do expect_callback(:fetch_public_key, post.author).and_return(sender_key) diff --git a/spec/lib/diaspora_federation/federation/sender/hydra_wrapper_spec.rb b/spec/lib/diaspora_federation/federation/sender/hydra_wrapper_spec.rb index b60ec75..ed5203a 100644 --- a/spec/lib/diaspora_federation/federation/sender/hydra_wrapper_spec.rb +++ b/spec/lib/diaspora_federation/federation/sender/hydra_wrapper_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Federation::Sender::HydraWrapper do - let(:sender_id) { FactoryGirl.generate(:diaspora_id) } + let(:sender_id) { Fabricate.sequence(:diaspora_id) } let(:obj_str) { "status_message@guid" } let(:xml) { "post" } let(:url) { "http://example.org/receive/public" } diff --git a/spec/lib/diaspora_federation/federation/sender_spec.rb b/spec/lib/diaspora_federation/federation/sender_spec.rb index 9cb59cb..29a6a61 100644 --- a/spec/lib/diaspora_federation/federation/sender_spec.rb +++ b/spec/lib/diaspora_federation/federation/sender_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Federation::Sender do - let(:sender_id) { FactoryGirl.generate(:diaspora_id) } + let(:sender_id) { Fabricate.sequence(:diaspora_id) } let(:obj_str) { "status_message@guid" } let(:hydra_wrapper) { double } diff --git a/spec/lib/diaspora_federation/parsers/json_parser_spec.rb b/spec/lib/diaspora_federation/parsers/json_parser_spec.rb index 13c173c..0758395 100644 --- a/spec/lib/diaspora_federation/parsers/json_parser_spec.rb +++ b/spec/lib/diaspora_federation/parsers/json_parser_spec.rb @@ -26,7 +26,7 @@ JSON '{"entity_type": "test_complex_entity"}' it "returns a hash for the correct JSON input" do - now = Time.now.change(usec: 0).utc + now = change_time(Time.now.utc) json = <<-JSON { "entity_type": "test_complex_entity", diff --git a/spec/lib/diaspora_federation/salmon/encrypted_magic_envelope_spec.rb b/spec/lib/diaspora_federation/salmon/encrypted_magic_envelope_spec.rb index eaddd85..2c5bafd 100644 --- a/spec/lib/diaspora_federation/salmon/encrypted_magic_envelope_spec.rb +++ b/spec/lib/diaspora_federation/salmon/encrypted_magic_envelope_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Salmon::EncryptedMagicEnvelope do - let(:sender_id) { FactoryGirl.generate(:diaspora_id) } + let(:sender_id) { Fabricate.sequence(:diaspora_id) } let(:sender_key) { OpenSSL::PKey::RSA.generate(512) } # use small key for speedy specs let(:entity) { Entities::TestEntity.new(test: "abcd") } let(:magic_env) { Salmon::MagicEnvelope.new(entity, sender_id).envelop(sender_key) } diff --git a/spec/lib/diaspora_federation/salmon/magic_envelope_spec.rb b/spec/lib/diaspora_federation/salmon/magic_envelope_spec.rb index b7b305d..47a5955 100644 --- a/spec/lib/diaspora_federation/salmon/magic_envelope_spec.rb +++ b/spec/lib/diaspora_federation/salmon/magic_envelope_spec.rb @@ -1,6 +1,6 @@ module DiasporaFederation describe Salmon::MagicEnvelope do - let(:sender) { FactoryGirl.generate(:diaspora_id) } + let(:sender) { Fabricate.sequence(:diaspora_id) } let(:privkey) { OpenSSL::PKey::RSA.generate(512) } # use small key for speedy specs let(:payload) { Entities::TestEntity.new(test: "asdf") } let(:envelope) { Salmon::MagicEnvelope.new(payload, sender) } @@ -139,7 +139,7 @@ module DiasporaFederation end it "verifies the signature" do - other_sender = FactoryGirl.generate(:diaspora_id) + other_sender = Fabricate.sequence(:diaspora_id) other_key = OpenSSL::PKey::RSA.generate(512) expect_callback(:fetch_public_key, other_sender).and_return(other_key) diff --git a/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb b/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb index 2c32182..7891159 100644 --- a/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb @@ -25,7 +25,7 @@ module DiasporaFederation it_behaves_like "a property with a value validation/restriction" do let(:property) { :messages } let(:wrong_values) { [nil] } - let(:correct_values) { [[], [FactoryGirl.build(:message_entity)]] } + let(:correct_values) { [[], [Fabricate(:message_entity)]] } end end @@ -33,8 +33,8 @@ module DiasporaFederation # must not contain more than 20 participant handles it_behaves_like "a property with a value validation/restriction" do let(:property) { :participants } - let(:wrong_values) { [Array.new(21) { FactoryGirl.generate(:diaspora_id) }.join(";")] } - let(:correct_values) { [Array.new(20) { FactoryGirl.generate(:diaspora_id) }.join(";")] } + let(:wrong_values) { [Array.new(21) { Fabricate.sequence(:diaspora_id) }.join(";")] } + let(:correct_values) { [Array.new(20) { Fabricate.sequence(:diaspora_id) }.join(";")] } end end end diff --git a/spec/lib/diaspora_federation/validators/poll_validator_spec.rb b/spec/lib/diaspora_federation/validators/poll_validator_spec.rb index a0ae57f..2b26b55 100644 --- a/spec/lib/diaspora_federation/validators/poll_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/poll_validator_spec.rb @@ -21,11 +21,11 @@ module DiasporaFederation describe "#poll_answers" do it_behaves_like "a property with a value validation/restriction" do let(:property) { :poll_answers } - let(:wrong_values) { [nil, [FactoryGirl.attributes_for(:poll_answer_entity)]] } + let(:wrong_values) { [nil, [Fabricate.attributes_for(:poll_answer_entity)]] } let(:correct_values) { [ - Array.new(2) { FactoryGirl.build(:poll_answer_entity) }, - Array.new(5) { FactoryGirl.build(:poll_answer_entity) } + Array.new(2) { Fabricate(:poll_answer_entity) }, + Array.new(5) { Fabricate(:poll_answer_entity) } ] } end diff --git a/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb b/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb index 3f3e300..6d1495c 100644 --- a/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb @@ -22,7 +22,7 @@ module DiasporaFederation it_behaves_like "a property with a value validation/restriction" do let(:property) { :target } let(:wrong_values) { [nil] } - let(:correct_values) { [FactoryGirl.build(:related_entity)] } + let(:correct_values) { [Fabricate(:related_entity)] } end end end diff --git a/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb b/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb index 8b92a35..a0bb5c8 100644 --- a/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb @@ -22,7 +22,7 @@ module DiasporaFederation it_behaves_like "a property with a value validation/restriction" do let(:property) { :target } let(:wrong_values) { [nil] } - let(:correct_values) { [FactoryGirl.build(:related_entity)] } + let(:correct_values) { [Fabricate(:related_entity)] } end end end diff --git a/spec/lib/diaspora_federation/validators/rules/diaspora_id_count_spec.rb b/spec/lib/diaspora_federation/validators/rules/diaspora_id_count_spec.rb index d1180b0..5d927b4 100644 --- a/spec/lib/diaspora_federation/validators/rules/diaspora_id_count_spec.rb +++ b/spec/lib/diaspora_federation/validators/rules/diaspora_id_count_spec.rb @@ -1,5 +1,5 @@ describe Validation::Rule::DiasporaIdCount do - let(:id_str) { Array.new(3) { FactoryGirl.generate(:diaspora_id) }.join(";") } + let(:id_str) { Array.new(3) { Fabricate.sequence(:diaspora_id) }.join(";") } it "requires a parameter" do validator = Validation::Validator.new({}) diff --git a/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb b/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb index f304c67..27e9fcf 100644 --- a/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb @@ -22,7 +22,7 @@ module DiasporaFederation it_behaves_like "a property with a value validation/restriction" do let(:property) { :target } let(:wrong_values) { [nil] } - let(:correct_values) { [FactoryGirl.build(:related_entity)] } + let(:correct_values) { [Fabricate(:related_entity)] } end end end diff --git a/spec/lib/diaspora_federation/validators/status_message_validator_spec.rb b/spec/lib/diaspora_federation/validators/status_message_validator_spec.rb index 368386c..2fb5873 100644 --- a/spec/lib/diaspora_federation/validators/status_message_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/status_message_validator_spec.rb @@ -17,7 +17,7 @@ module DiasporaFederation it_behaves_like "a property with a value validation/restriction" do let(:property) { :photos } let(:wrong_values) { [nil] } - let(:correct_values) { [[], [FactoryGirl.build(:photo_entity)]] } + let(:correct_values) { [[], [Fabricate(:photo_entity)]] } end end diff --git a/spec/lib/diaspora_federation_spec.rb b/spec/lib/diaspora_federation_spec.rb index 3a5b4f0..4451309 100644 --- a/spec/lib/diaspora_federation_spec.rb +++ b/spec/lib/diaspora_federation_spec.rb @@ -14,7 +14,7 @@ module DiasporaFederation DiasporaFederation.server_uri = temp end - context "certificate_authorities" do + context "certificate_authorities", rails: true do before do @certificate_authorities = DiasporaFederation.certificate_authorities end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index c5f7454..b4f4ce2 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -12,76 +12,52 @@ unless ENV["NO_COVERAGE"] == "true" end end -ENV["RAILS_ENV"] ||= "test" -require File.join(File.dirname(__FILE__), "..", "test", "dummy", "config", "environment") +dummy_app_path = File.join(File.dirname(__FILE__), "..", "test", "dummy") -require "rspec/rails" -require "webmock/rspec" +begin + require "rails" # try to load rails +rescue LoadError + Dir["#{File.join(dummy_app_path, 'app', 'models')}/*.rb"].each {|f| require f } + require File.join(dummy_app_path, "config", "initializers", "diaspora_federation") +else + ENV["RAILS_ENV"] ||= "test" + require File.join(dummy_app_path, "config", "environment") + + require "rspec/rails" +end + +# test helpers +require "json-schema-rspec" +require "rspec/collection_matchers" require "rspec/json_expectations" +require "webmock/rspec" -# load factory girl factories +# load factories require "factories" # load test entities require "entities" -# some helper methods - -def alice - @alice ||= Person.find_by(diaspora_id: "alice@localhost:3000") -end - -def bob - @bob ||= Person.find_by(diaspora_id: "bob@localhost:3000") -end - -def expect_callback(*opts) - expect(DiasporaFederation.callbacks).to receive(:trigger).with(*opts) -end - -def add_signatures(hash, klass=described_class) - properties = klass.new(hash).send(:enriched_properties) - hash[:author_signature] = properties[:author_signature] - hash[:parent_author_signature] = properties[:parent_author_signature] -end - -def sign_with_key(privkey, signature_data) - Base64.strict_encode64(privkey.sign(OpenSSL::Digest::SHA256.new, signature_data)) -end - -def verify_signature(pubkey, signature, signed_string) - pubkey.verify(OpenSSL::Digest::SHA256.new, Base64.decode64(signature), signed_string) -end - # Requires supporting files with custom matchers and macros, etc, # in ./support/ and its subdirectories. -fixture_builder_file = "#{File.dirname(__FILE__)}/support/fixture_builder.rb" -support_files = Dir["#{File.dirname(__FILE__)}/support/**/*.rb"] - [fixture_builder_file] -support_files.each {|f| require f } -require fixture_builder_file +Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f } RSpec.configure do |config| config.include JSON::SchemaMatchers config.json_schemas[:entity_schema] = "lib/diaspora_federation/schemas/federation_entities.json" - config.example_status_persistence_file_path = "spec/rspec-persistance.txt" - - config.infer_spec_type_from_file_location! - - config.render_views + config.example_status_persistence_file_path = "spec/rspec-persistence.txt" config.expect_with :rspec do |expect_config| expect_config.syntax = :expect end - config.include FactoryGirl::Syntax::Methods - config.use_transactional_fixtures = true - - # load fixtures - config.fixture_path = "#{::Rails.root}/test/fixtures" - config.global_fixtures = :all - - config.filter_run_excluding rails4: true if Rails::VERSION::MAJOR == 5 + if defined?(::Rails) + config.filter_run_excluding rails: (::Rails::VERSION::MAJOR == 5 ? 4 : 5) + else + config.exclude_pattern = "**/controllers/**/*_spec.rb, **/routing/**/*_spec.rb" + config.filter_run_excluding rails: true + end # whitelist codeclimate.com so test coverage can be reported config.after(:suite) do diff --git a/spec/support/fixture_builder.rb b/spec/support/fixture_builder.rb index 9f729ac..0e536d5 100644 --- a/spec/support/fixture_builder.rb +++ b/spec/support/fixture_builder.rb @@ -1,17 +1,14 @@ -require "fixture_builder" +# set default users as initial database for each test +RSpec.configure do |config| + config.before(:suite) do + Person.reset_database + Fabricate(:user, diaspora_id: "alice@localhost:3000") + Fabricate(:user, diaspora_id: "bob@localhost:3000") + Person.init_database = Person.database + end -FixtureBuilder.configure do |fbuilder| - # rebuild fixtures automatically when these files change: - fbuilder.files_to_check += Dir[ - "lib/**/*.rb", - "spec/factories.rb", - "spec/support/fixture_builder.rb", - "test/dummy/app/models/*.rb" - ] - - # now declare objects - fbuilder.factory do - FactoryGirl.create(:user, diaspora_id: "alice@localhost:3000") - FactoryGirl.create(:user, diaspora_id: "bob@localhost:3000") + config.after(:each) do + Entity.reset_database + Person.reset_database end end diff --git a/spec/support/fixture_generation.rb b/spec/support/fixture_generation.rb deleted file mode 100644 index e06dec1..0000000 --- a/spec/support/fixture_generation.rb +++ /dev/null @@ -1,22 +0,0 @@ -module FixtureGeneration - # Saves the markup to a fixture file using the given name - def save_fixture(markup, name, fixture_path=nil) - fixture_path = Rails.root.join("tmp", "fixtures") unless fixture_path - Dir.mkdir(fixture_path) unless File.exist?(fixture_path) - - fixture_file = fixture_path.join("#{name}.fixture.html") - File.open(fixture_file, "w") do |file| - file.puts(markup) - end - end - - def self.load_fixture(name, fixture_path=nil) - fixture_path = Rails.root.join("tmp", "fixtures") unless fixture_path - fixture_file = fixture_path.join("#{name}.fixture.html") - File.open(fixture_file).read - end -end - -RSpec::Rails::ControllerExampleGroup.class_eval do - include FixtureGeneration -end diff --git a/spec/support/helper_methods.rb b/spec/support/helper_methods.rb new file mode 100644 index 0000000..9ac2352 --- /dev/null +++ b/spec/support/helper_methods.rb @@ -0,0 +1,42 @@ +# default users +def alice + @alice ||= Person.find_by(diaspora_id: "alice@localhost:3000") +end + +def bob + @bob ||= Person.find_by(diaspora_id: "bob@localhost:3000") +end + +# callback expectation helper +def expect_callback(*opts) + expect(DiasporaFederation.callbacks).to receive(:trigger).with(*opts) +end + +# signature methods +def add_signatures(hash, klass=described_class) + properties = klass.new(hash).send(:enriched_properties) + hash[:author_signature] = properties[:author_signature] + hash[:parent_author_signature] = properties[:parent_author_signature] +end + +def sign_with_key(privkey, signature_data) + Base64.strict_encode64(privkey.sign(OpenSSL::Digest::SHA256.new, signature_data)) +end + +def verify_signature(pubkey, signature, signed_string) + pubkey.verify(OpenSSL::Digest::SHA256.new, Base64.decode64(signature), signed_string) +end + +# time helper +def change_time(time, options={}) + new_hour = options.fetch(:hour, time.hour) + new_min = options.fetch(:min, options[:hour] ? 0 : time.min) + new_sec = options.fetch(:sec, options[:hour] || options[:min] ? 0 : time.sec) + + ::Time.utc(time.year, time.month, time.day, new_hour, new_min, new_sec) +end + +# indent helper +def indent(string, amount) + string.gsub(/^/, " " * amount) +end diff --git a/spec/support/shared_entity_specs.rb b/spec/support/shared_entity_specs.rb index b869fc0..2191dd1 100644 --- a/spec/support/shared_entity_specs.rb +++ b/spec/support/shared_entity_specs.rb @@ -1,15 +1,15 @@ def entity_hash_from(hash) - hash.transform_values {|value| + hash.map {|key, value| if [String, TrueClass, FalseClass, Integer, NilClass].any? {|c| value.is_a? c } - value + [key, value] elsif value.is_a? Time - value.iso8601 + [key, value.iso8601] elsif value.instance_of?(Array) - value.map(&:to_h) + [key, value.map(&:to_h)] else - value.to_h + [key, value.to_h] end - } + }.to_h end shared_examples "an Entity subclass" do @@ -90,7 +90,7 @@ shared_examples "an XML Entity" do |ignored_props=[]| def validate_property(value, parsed_value) if value.is_a?(Time) - expect(parsed_value).to eq(value.change(usec: 0)) + expect(parsed_value).to eq(change_time(value)) else expect(parsed_value).to eq(value) end @@ -121,7 +121,7 @@ end shared_examples "a retraction" do context "receive with no target found" do - let(:unknown_guid) { FactoryGirl.generate(:guid) } + let(:unknown_guid) { Fabricate.sequence(:guid) } let(:instance) { described_class.new(data.merge(target_guid: unknown_guid)) } it "raises when no target is found" do diff --git a/spec/support/shared_validator_specs.rb b/spec/support/shared_validator_specs.rb index f8b2e95..d539b16 100644 --- a/spec/support/shared_validator_specs.rb +++ b/spec/support/shared_validator_specs.rb @@ -1,6 +1,6 @@ def entity_stub(entity, data={}) - OpenStruct.new(FactoryGirl.factory_by_name(entity).build_class.default_values - .merge(FactoryGirl.attributes_for(entity)).merge(data)) + OpenStruct.new(Fabricate.schematic(entity).options[:class_name].default_values + .merge(Fabricate.attributes_for(entity)).merge(data)) end ALPHANUMERIC_RANGE = [*"0".."9", *"A".."Z", *"a".."z"].freeze @@ -39,7 +39,7 @@ shared_examples "a relayable validator" do it_behaves_like "a property with a value validation/restriction" do let(:property) { :parent } let(:wrong_values) { [nil] } - let(:correct_values) { [FactoryGirl.build(:related_entity)] } + let(:correct_values) { [Fabricate(:related_entity)] } end end end @@ -135,7 +135,7 @@ shared_examples "a boolean validator" do end it "must not be an arbitrary string or other object" do - ["asdf", Time.zone.today, 1234].each do |val| + ["asdf", Date.today, 1234].each do |val| validator = described_class.new(entity_stub(entity, property => val)) expect(validator).not_to be_valid diff --git a/test/dummy/app/assets/images/user/default.png b/test/dummy/app/assets/images/user/default.png deleted file mode 100644 index 53d10ff..0000000 Binary files a/test/dummy/app/assets/images/user/default.png and /dev/null differ diff --git a/test/dummy/app/controllers/application_controller.rb b/test/dummy/app/controllers/application_controller.rb deleted file mode 100644 index d83690e..0000000 --- a/test/dummy/app/controllers/application_controller.rb +++ /dev/null @@ -1,5 +0,0 @@ -class ApplicationController < ActionController::Base - # Prevent CSRF attacks by raising an exception. - # For APIs, you may want to use :null_session instead. - protect_from_forgery with: :exception -end diff --git a/test/dummy/app/controllers/discovery_controller.rb b/test/dummy/app/controllers/discovery_controller.rb deleted file mode 100644 index 242f090..0000000 --- a/test/dummy/app/controllers/discovery_controller.rb +++ /dev/null @@ -1,7 +0,0 @@ -class DiscoveryController < ApplicationController - def discovery - discovery = DiasporaFederation::Discovery::Discovery.new(params[:q]) - - render json: discovery.fetch_and_save - end -end diff --git a/test/dummy/app/models/entity.rb b/test/dummy/app/models/entity.rb index d68e72d..41135ed 100644 --- a/test/dummy/app/models/entity.rb +++ b/test/dummy/app/models/entity.rb @@ -1,5 +1,27 @@ -class Entity < ActiveRecord::Base - include ::Diaspora::Guid +class Entity + attr_accessor :author, :guid + attr_reader :entity_type - belongs_to :author, class_name: "Person" + def initialize(entity_type) + @entity_type = entity_type + @guid = UUID.generate(:compact) + end + + def save! + Entity.database[entity_type][guid] = self + end + + class << self + def find_by(opts) + database[opts[:entity_type]][opts[:guid]] + end + + def database + @database ||= Hash.new({}) + end + + def reset_database + @database = nil + end + end end diff --git a/test/dummy/app/models/person.rb b/test/dummy/app/models/person.rb index 00709a6..cd96c6a 100644 --- a/test/dummy/app/models/person.rb +++ b/test/dummy/app/models/person.rb @@ -1,5 +1,9 @@ -class Person < ActiveRecord::Base - include ::Diaspora::Guid +class Person + attr_accessor :diaspora_id, :url, :guid, :serialized_public_key, :serialized_private_key + + def initialize + @guid = UUID.generate(:compact) + end def private_key; OpenSSL::PKey::RSA.new(serialized_private_key) end def public_key; OpenSSL::PKey::RSA.new(serialized_public_key) end @@ -19,4 +23,26 @@ class Person < ActiveRecord::Base def full_name; "Dummy User" end def first_name; "Dummy" end def last_name; "User" end + + def save! + Person.database[:diaspora_id][diaspora_id] = self + Person.database[:guid][guid] = self + end + + class << self + attr_writer :init_database + + def find_by(opts) + return database[:diaspora_id][opts[:diaspora_id]] if opts[:diaspora_id] + database[:guid][opts[:guid]] + end + + def database + @database ||= @init_database || {diaspora_id: {}, guid: {}} + end + + def reset_database + @database = nil + end + end end diff --git a/test/dummy/app/views/layouts/application.html.erb b/test/dummy/app/views/layouts/application.html.erb deleted file mode 100644 index bdb7dd9..0000000 --- a/test/dummy/app/views/layouts/application.html.erb +++ /dev/null @@ -1,12 +0,0 @@ - - - - Dummy - <%= csrf_meta_tags %> - - - -<%= yield %> - - - diff --git a/test/dummy/bin/bundle b/test/dummy/bin/bundle deleted file mode 100755 index 66e9889..0000000 --- a/test/dummy/bin/bundle +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env ruby -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) -load Gem.bin_path('bundler', 'bundle') diff --git a/test/dummy/bin/rake b/test/dummy/bin/rake deleted file mode 100755 index d87d5f5..0000000 --- a/test/dummy/bin/rake +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env ruby -begin - load File.expand_path('../spring', __FILE__) -rescue LoadError => e - raise unless e.message.include?('spring') -end -require_relative '../config/boot' -require 'rake' -Rake.application.run diff --git a/test/dummy/bin/setup b/test/dummy/bin/setup deleted file mode 100755 index acdb2c1..0000000 --- a/test/dummy/bin/setup +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -require 'pathname' - -# path to your application root. -APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) - -Dir.chdir APP_ROOT do - # This script is a starting point to setup your application. - # Add necessary setup steps to this file: - - puts "== Installing dependencies ==" - system "gem install bundler --conservative" - system "bundle check || bundle install" - - # puts "\n== Copying sample files ==" - # unless File.exist?("config/database.yml") - # system "cp config/database.yml.sample config/database.yml" - # end - - puts "\n== Preparing database ==" - system "bin/rake db:setup" - - puts "\n== Removing old logs and tempfiles ==" - system "rm -f log/*" - system "rm -rf tmp/cache" - - puts "\n== Restarting application server ==" - system "touch tmp/restart.txt" -end diff --git a/test/dummy/bin/spring b/test/dummy/bin/spring deleted file mode 100755 index 9bc076b..0000000 --- a/test/dummy/bin/spring +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env ruby - -# This file loads spring without using Bundler, in order to be fast. -# It gets overwritten when you run the `spring binstub` command. - -unless defined?(Spring) - require 'rubygems' - require 'bundler' - - lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read) - if spring = lockfile.specs.detect { |spec| spec.name == "spring" } - Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path - gem 'spring', spring.version - require 'spring/binstub' - end -end diff --git a/test/dummy/config/application.rb b/test/dummy/config/application.rb index b29a7e8..b3ddb09 100644 --- a/test/dummy/config/application.rb +++ b/test/dummy/config/application.rb @@ -1,6 +1,6 @@ require_relative "boot" -require "rails/all" +require "action_controller/railtie" Bundler.require(*Rails.groups) require "diaspora_federation/rails" @@ -20,7 +20,7 @@ module Dummy # config.i18n.default_locale = :de # Version of your assets, change this if you want to expire all your assets - config.assets.version = "1.0" + # config.assets.version = "1.0" # autoload files from test/dummy/lib config.autoload_once_paths += %W(#{config.root}/lib) diff --git a/test/dummy/config/database.yml b/test/dummy/config/database.yml deleted file mode 100644 index 1c1a37c..0000000 --- a/test/dummy/config/database.yml +++ /dev/null @@ -1,25 +0,0 @@ -# SQLite version 3.x -# gem install sqlite3 -# -# Ensure the SQLite 3 gem is defined in your Gemfile -# gem 'sqlite3' -# -default: &default - adapter: sqlite3 - pool: 5 - timeout: 5000 - -development: - <<: *default - database: db/development.sqlite3 - -# Warning: The database defined as "test" will be erased and -# re-generated from your development database when you run "rake". -# Do not set this db to the same as development or production. -test: - <<: *default - database: db/test.sqlite3 - -production: - <<: *default - database: db/production.sqlite3 diff --git a/test/dummy/config/environments/development.rb b/test/dummy/config/environments/development.rb index b885227..3554572 100644 --- a/test/dummy/config/environments/development.rb +++ b/test/dummy/config/environments/development.rb @@ -14,27 +14,27 @@ Rails.application.configure do config.action_controller.perform_caching = false # Don't care if the mailer can't send. - config.action_mailer.raise_delivery_errors = false + # config.action_mailer.raise_delivery_errors = false # Print deprecation notices to the Rails logger. config.active_support.deprecation = :log # Raise an error on page load if there are pending migrations. - config.active_record.migration_error = :page_load + # config.active_record.migration_error = :page_load # 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 + # config.assets.debug = true # Asset digests allow you to set far-future HTTP expiration dates on all assets, # yet still be able to expire them through the digest params. - config.assets.digest = true + # config.assets.digest = true # Adds additional error checking when serving assets at runtime. # Checks for improperly declared sprockets dependencies. # Raises helpful error messages. - config.assets.raise_runtime_errors = true + # config.assets.raise_runtime_errors = true # Raises error for missing translations # config.action_view.raise_on_missing_translations = true diff --git a/test/dummy/config/environments/production.rb b/test/dummy/config/environments/production.rb index 577a255..08c8c8b 100644 --- a/test/dummy/config/environments/production.rb +++ b/test/dummy/config/environments/production.rb @@ -25,15 +25,15 @@ Rails.application.configure do config.serve_static_files = false # Compress JavaScripts and CSS. - config.assets.js_compressor = :uglifier + # config.assets.js_compressor = :uglifier # config.assets.css_compressor = :sass # Do not fallback to assets pipeline if a precompiled asset is missed. - config.assets.compile = false + # config.assets.compile = false # Asset digests allow you to set far-future HTTP expiration dates on all assets, # yet still be able to expire them through the digest params. - config.assets.digest = true + # config.assets.digest = true # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb @@ -81,5 +81,5 @@ Rails.application.configure do config.log_formatter = ::Logger::Formatter.new # Do not dump schema after migrations. - config.active_record.dump_schema_after_migration = false + # config.active_record.dump_schema_after_migration = false end diff --git a/test/dummy/config/environments/test.rb b/test/dummy/config/environments/test.rb index 76daa24..e7fbf43 100644 --- a/test/dummy/config/environments/test.rb +++ b/test/dummy/config/environments/test.rb @@ -34,13 +34,13 @@ Rails.application.configure do # 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 + # config.action_mailer.delivery_method = :test # Randomize the order test cases are executed. - config.active_support.test_order = :random + # config.active_support.test_order = :random # Print deprecation notices to the stderr. - config.active_support.deprecation = :stderr + # config.active_support.deprecation = :stderr # Raises error for missing translations # config.action_view.raise_on_missing_translations = true diff --git a/test/dummy/config/initializers/backtrace_silencers.rb b/test/dummy/config/initializers/backtrace_silencers.rb deleted file mode 100644 index 59385cd..0000000 --- a/test/dummy/config/initializers/backtrace_silencers.rb +++ /dev/null @@ -1,7 +0,0 @@ -# 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/test/dummy/config/initializers/diaspora_federation.rb b/test/dummy/config/initializers/diaspora_federation.rb index c42cfc6..430b5e8 100644 --- a/test/dummy/config/initializers/diaspora_federation.rb +++ b/test/dummy/config/initializers/diaspora_federation.rb @@ -1,4 +1,4 @@ -require "diaspora_federation/discovery" +require "diaspora_federation" ca_file = if File.file?("/etc/ssl/certs/ca-certificates.crt") # For Debian, Ubuntu, Archlinux, Gentoo @@ -53,20 +53,16 @@ DiasporaFederation.configure do |config| end end - on :save_person_after_webfinger do |person| - unless Person.exists?(diaspora_id: person.diaspora_id) - Person.new(diaspora_id: person.diaspora_id, guid: person.guid, - serialized_public_key: person.exported_key, url: person.url).save! - end + on :save_person_after_webfinger do end on :fetch_private_key do |diaspora_id| - key = Person.where(diaspora_id: diaspora_id).pluck(:serialized_private_key).first - OpenSSL::PKey::RSA.new(key) unless key.nil? + person = Person.find_by(diaspora_id: diaspora_id) + OpenSSL::PKey::RSA.new(person.serialized_private_key) unless person.nil? end on :fetch_public_key do |diaspora_id| - key = Person.where(diaspora_id: diaspora_id).pluck(:serialized_public_key).first + key = Person.find_by(diaspora_id: diaspora_id).serialized_public_key key = DiasporaFederation::Discovery::Discovery.new(diaspora_id).fetch_and_save.exported_key if key.nil? OpenSSL::PKey::RSA.new(key) unless key.nil? end @@ -94,7 +90,7 @@ DiasporaFederation.configure do |config| on :fetch_public_entity do |entity_type, guid| type = DiasporaFederation::Entities.const_get(entity_type).entity_name - FactoryGirl.build("#{type}_entity", guid: guid) + Fabricate("#{type}_entity", guid: guid) end on :fetch_person_url_to do |diaspora_id, path| diff --git a/test/dummy/config/logging.rb b/test/dummy/config/logging.rb deleted file mode 100644 index 344865b..0000000 --- a/test/dummy/config/logging.rb +++ /dev/null @@ -1,93 +0,0 @@ -Logging::Rails.configure do |config| - # Configure the Logging framework with the default log levels - Logging.init %w(debug info warn error fatal) - - # Objects will be converted to strings using the :inspect method. - Logging.format_as :inspect - - # The default layout used by the appenders. - pattern = "[%d] %-5l PID-%p TID-%t %c: %m\n" - layout = Logging.layouts.pattern(pattern: pattern) - - # Setup a color scheme called 'bright' than can be used to add color codes - # to the pattern layout. Color schemes should only be used with appenders - # that write to STDOUT or STDERR; inserting terminal color codes into a file - # is generally considered bad form. - Logging.color_scheme( - "bright", - levels: { - info: :green, - warn: :yellow, - error: :red, - fatal: %i(white on_red) - }, - date: :blue, - logger: :cyan, - message: :magenta - ) - - # Configure an appender that will write log events to STDOUT. A colorized - # pattern layout is used to format the log events into strings before - # writing. - if config.log_to.include? "stdout" - Logging.appenders.stdout( - "stdout", - auto_flushing: true, - layout: Logging.layouts.pattern( - pattern: pattern, - color_scheme: "bright" - ) - ) - end - - # Configure an appender that will write log events to a file. The file will - # be rolled on a daily basis, and the past 7 rolled files will be kept. - # Older files will be deleted. The default pattern layout is used when - # formatting log events into strings. - if config.log_to.include? "file" - Logging.appenders.rolling_file( - "file", - filename: config.paths["log"].first, - keep: 7, - age: "daily", - truncate: false, - auto_flushing: true, - layout: layout - ) - end - - # Setup the root logger with the Rails log level and the desired set of - # appenders. The list of appenders to use should be set in the environment - # specific configuration file. - # - # For example, in a production application you would not want to log to - # STDOUT, but you would want to send an email for "error" and "fatal" - # messages: - # - # => config/environments/production.rb - # - # config.log_to = %w[file email] - # - # In development you would want to log to STDOUT and possibly to a file: - # - # => config/environments/development.rb - # - # config.log_to = %w[stdout file] - # - Logging.logger.root.appenders = config.log_to unless config.log_to.empty? - - # Default log-level (development=debug, production=info) - Logging.logger.root.level = config.log_level - - # log-levels for SQL and federation debug-logging - Logging.logger[ActiveRecord::Base].level = :debug - Logging.logger["XMLLogger"].level = :debug -end - -module ActiveSupport - module Dependencies - def self.logger=(_) - # This was remove in rails 5: https://github.com/rails/rails/commit/798dc5a92537ba4202a1a8e127a5ebdae87bc78d - end - end -end diff --git a/test/dummy/db/migrate/20150614014411_create_people.rb b/test/dummy/db/migrate/20150614014411_create_people.rb deleted file mode 100644 index 1bd5087..0000000 --- a/test/dummy/db/migrate/20150614014411_create_people.rb +++ /dev/null @@ -1,12 +0,0 @@ -class CreatePeople < ActiveRecord::Migration - def change - 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.timestamps null: false - end - end -end diff --git a/test/dummy/db/migrate/20150722224751_rename_diaspora_handle_to_diaspora_id.rb b/test/dummy/db/migrate/20150722224751_rename_diaspora_handle_to_diaspora_id.rb deleted file mode 100644 index e997558..0000000 --- a/test/dummy/db/migrate/20150722224751_rename_diaspora_handle_to_diaspora_id.rb +++ /dev/null @@ -1,5 +0,0 @@ -class RenameDiasporaHandleToDiasporaId < ActiveRecord::Migration - def change - rename_column :people, :diaspora_handle, :diaspora_id - end -end diff --git a/test/dummy/db/migrate/20160202020724_add_serialized_private_key_to_person.rb b/test/dummy/db/migrate/20160202020724_add_serialized_private_key_to_person.rb deleted file mode 100644 index 6d56d4f..0000000 --- a/test/dummy/db/migrate/20160202020724_add_serialized_private_key_to_person.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddSerializedPrivateKeyToPerson < ActiveRecord::Migration - def change - add_column :people, :serialized_private_key, :text - end -end diff --git a/test/dummy/db/migrate/20160202221606_create_entity.rb b/test/dummy/db/migrate/20160202221606_create_entity.rb deleted file mode 100644 index 2bd4e8b..0000000 --- a/test/dummy/db/migrate/20160202221606_create_entity.rb +++ /dev/null @@ -1,11 +0,0 @@ -class CreateEntity < ActiveRecord::Migration - def change - create_table :entities do |t| - t.belongs_to :author, class_name: "Person", null: false - t.string :guid, null: false - t.string :entity_type, null: false - - t.timestamps null: false - end - end -end diff --git a/test/dummy/db/schema.rb b/test/dummy/db/schema.rb deleted file mode 100644 index 4e86501..0000000 --- a/test/dummy/db/schema.rb +++ /dev/null @@ -1,33 +0,0 @@ -# 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: 20160202221606) do - - create_table "entities", force: :cascade do |t| - t.integer "author_id", null: false - t.string "guid", null: false - t.string "entity_type", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - create_table "people", force: :cascade do |t| - t.string "guid", null: false - t.text "url", null: false - t.string "diaspora_id", null: false - t.text "serialized_public_key", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.text "serialized_private_key" - end - -end diff --git a/test/dummy/lib/diaspora/guid.rb b/test/dummy/lib/diaspora/guid.rb deleted file mode 100644 index a94ff3b..0000000 --- a/test/dummy/lib/diaspora/guid.rb +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (c) 2010-2011, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - -# from diaspora for testing - -module Diaspora - module Guid - # Creates a before_create callback which calls #set_guid - def self.included(model) - model.class_eval do - after_initialize :set_guid - validates :guid, uniqueness: true - end - end - - # @return [String] The model's guid. - def set_guid - self.guid = UUID.generate :compact if guid.blank? - end - end -end diff --git a/test/dummy/public/favicon.ico b/test/dummy/public/favicon.ico deleted file mode 100644 index e69de29..0000000 diff --git a/test/dummy/test/fixtures/.keep b/test/dummy/test/fixtures/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/test/gemfiles/no-rails.Gemfile b/test/gemfiles/no-rails.Gemfile new file mode 100644 index 0000000..67a7874 --- /dev/null +++ b/test/gemfiles/no-rails.Gemfile @@ -0,0 +1,40 @@ +source "https://rubygems.org" + +# Declare your gem's dependencies in diaspora_federation.gemspec. +# Bundler will treat runtime dependencies like base dependencies, and +# development dependencies will be added by default to the :development group. +gemspec name: "diaspora_federation", path: "../../" + +Dir["diaspora_federation-*.gemspec"].each do |gemspec| + plugin = gemspec.scan(/diaspora_federation-(.*)\.gemspec/).flatten.first + gemspec(name: "diaspora_federation-#{plugin}", development_group: plugin, path: "../../") unless plugin == "rails" +end + +# Declare any dependencies that are still in development here instead of in +# your gemspec. These might include edge Rails or gems from your path or +# Git. Remember to move these dependencies to your gemspec before releasing +# your gem to rubygems.org. + +group :test do + # rspec formatter + gem "fuubar", "2.2.0", require: false + gem "nyan-cat-formatter", require: false + + # test coverage + gem "codeclimate-test-reporter", "~> 1.0.0", require: false + gem "simplecov", "0.13.0", require: false + gem "simplecov-rcov", "0.2.3", require: false + + # test helpers + gem "json-schema-rspec", "0.0.4" + gem "rspec-collection_matchers", "~> 1.1.2" + gem "rspec-json_expectations", "~> 2.1" + gem "webmock", "~> 2.0" +end + +group :development, :test do + gem "rake" + + # unit tests + gem "rspec", "~> 3.5.0" +end diff --git a/test/gemfiles/no-rails.Gemfile.lock b/test/gemfiles/no-rails.Gemfile.lock new file mode 100644 index 0000000..5e06d54 --- /dev/null +++ b/test/gemfiles/no-rails.Gemfile.lock @@ -0,0 +1,111 @@ +PATH + remote: ../.. + specs: + diaspora_federation (0.1.8) + faraday (>= 0.9.0, < 0.13.0) + faraday_middleware (>= 0.10.0, < 0.12.0) + nokogiri (~> 1.6, >= 1.6.8) + typhoeus (~> 1.0) + valid (~> 1.0) + diaspora_federation-json_schema (0.1.8) + diaspora_federation-test (0.1.8) + diaspora_federation (= 0.1.8) + fabrication (~> 2.16.0) + uuid (~> 2.3.8) + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.5.1) + public_suffix (~> 2.0, >= 2.0.2) + codeclimate-test-reporter (1.0.8) + simplecov (<= 0.13) + crack (0.4.3) + safe_yaml (~> 1.0.0) + diff-lcs (1.3) + docile (1.1.5) + ethon (0.10.1) + ffi (>= 1.3.0) + fabrication (2.16.1) + faraday (0.12.0.1) + multipart-post (>= 1.2, < 3) + faraday_middleware (0.11.0.1) + faraday (>= 0.7.4, < 1.0) + ffi (1.9.18) + fuubar (2.2.0) + rspec-core (~> 3.0) + ruby-progressbar (~> 1.4) + hashdiff (0.3.2) + json (2.0.3) + json-schema (2.8.0) + addressable (>= 2.4) + json-schema-rspec (0.0.4) + json-schema (~> 2.5) + rspec + macaddr (1.7.1) + systemu (~> 2.6.2) + mini_portile2 (2.1.0) + multipart-post (2.0.0) + nokogiri (1.7.1) + mini_portile2 (~> 2.1.0) + nyan-cat-formatter (0.11) + rspec (>= 2.99, >= 2.14.2, < 4) + public_suffix (2.0.5) + rake (12.0.0) + rspec (3.5.0) + rspec-core (~> 3.5.0) + rspec-expectations (~> 3.5.0) + rspec-mocks (~> 3.5.0) + rspec-collection_matchers (1.1.3) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.5.4) + rspec-support (~> 3.5.0) + rspec-expectations (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-json_expectations (2.1.0) + rspec-mocks (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-support (3.5.0) + ruby-progressbar (1.8.1) + safe_yaml (1.0.4) + simplecov (0.13.0) + docile (~> 1.1.0) + json (>= 1.8, < 3) + simplecov-html (~> 0.10.0) + simplecov-html (0.10.0) + simplecov-rcov (0.2.3) + simplecov (>= 0.4.1) + systemu (2.6.5) + typhoeus (1.1.2) + ethon (>= 0.9.0) + uuid (2.3.8) + macaddr (~> 1.0) + valid (1.2.0) + webmock (2.3.2) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff + +PLATFORMS + ruby + +DEPENDENCIES + codeclimate-test-reporter (~> 1.0.0) + diaspora_federation! + diaspora_federation-json_schema! + diaspora_federation-test! + fuubar (= 2.2.0) + json-schema-rspec (= 0.0.4) + nyan-cat-formatter + rake + rspec (~> 3.5.0) + rspec-collection_matchers (~> 1.1.2) + rspec-json_expectations (~> 2.1) + simplecov (= 0.13.0) + simplecov-rcov (= 0.2.3) + webmock (~> 2.0) + +BUNDLED WITH + 1.14.6 diff --git a/test/gemfiles/rails4.Gemfile b/test/gemfiles/rails4.Gemfile new file mode 100644 index 0000000..f8e3efe --- /dev/null +++ b/test/gemfiles/rails4.Gemfile @@ -0,0 +1,43 @@ +source "https://rubygems.org" + +# Declare your gem's dependencies in diaspora_federation.gemspec. +# Bundler will treat runtime dependencies like base dependencies, and +# development dependencies will be added by default to the :development group. +gemspec name: "diaspora_federation", path: "../../" + +Dir["diaspora_federation-*.gemspec"].each do |gemspec| + plugin = gemspec.scan(/diaspora_federation-(.*)\.gemspec/).flatten.first + gemspec(name: "diaspora_federation-#{plugin}", development_group: plugin, path: "../../") +end + +# Declare any dependencies that are still in development here instead of in +# your gemspec. These might include edge Rails or gems from your path or +# Git. Remember to move these dependencies to your gemspec before releasing +# your gem to rubygems.org. + +group :test do + # rspec formatter + gem "fuubar", "2.2.0", require: false + gem "nyan-cat-formatter", require: false + + # test coverage + gem "codeclimate-test-reporter", "~> 1.0.0", require: false + gem "simplecov", "0.13.0", require: false + gem "simplecov-rcov", "0.2.3", require: false + + # test helpers + gem "json-schema-rspec", "0.0.4" + gem "rspec-collection_matchers", "~> 1.1.2" + gem "rspec-json_expectations", "~> 2.1" + gem "webmock", "~> 2.0" +end + +group :development, :test do + gem "rake" + + # unit tests + gem "rspec", "~> 3.5.0" + gem "rspec-rails", "~> 3.5.1" +end + +gem "actionpack", "4.2.8" diff --git a/test/gemfiles/rails4.Gemfile.lock b/test/gemfiles/rails4.Gemfile.lock new file mode 100644 index 0000000..9cc394e --- /dev/null +++ b/test/gemfiles/rails4.Gemfile.lock @@ -0,0 +1,169 @@ +PATH + remote: ../.. + specs: + diaspora_federation (0.1.8) + faraday (>= 0.9.0, < 0.13.0) + faraday_middleware (>= 0.10.0, < 0.12.0) + nokogiri (~> 1.6, >= 1.6.8) + typhoeus (~> 1.0) + valid (~> 1.0) + diaspora_federation-json_schema (0.1.8) + diaspora_federation-rails (0.1.8) + actionpack (>= 4.2, < 6) + diaspora_federation (= 0.1.8) + diaspora_federation-test (0.1.8) + diaspora_federation (= 0.1.8) + fabrication (~> 2.16.0) + uuid (~> 2.3.8) + +GEM + remote: https://rubygems.org/ + specs: + actionpack (4.2.8) + actionview (= 4.2.8) + activesupport (= 4.2.8) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.8) + activesupport (= 4.2.8) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.3) + activesupport (4.2.8) + i18n (~> 0.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.5.1) + public_suffix (~> 2.0, >= 2.0.2) + builder (3.2.3) + codeclimate-test-reporter (1.0.8) + simplecov (<= 0.13) + crack (0.4.3) + safe_yaml (~> 1.0.0) + diff-lcs (1.3) + docile (1.1.5) + erubis (2.7.0) + ethon (0.10.1) + ffi (>= 1.3.0) + fabrication (2.16.1) + faraday (0.12.0.1) + multipart-post (>= 1.2, < 3) + faraday_middleware (0.11.0.1) + faraday (>= 0.7.4, < 1.0) + ffi (1.9.18) + fuubar (2.2.0) + rspec-core (~> 3.0) + ruby-progressbar (~> 1.4) + hashdiff (0.3.2) + i18n (0.8.1) + json (2.0.3) + json-schema (2.8.0) + addressable (>= 2.4) + json-schema-rspec (0.0.4) + json-schema (~> 2.5) + rspec + loofah (2.0.3) + nokogiri (>= 1.5.9) + macaddr (1.7.1) + systemu (~> 2.6.2) + mini_portile2 (2.1.0) + minitest (5.10.1) + multipart-post (2.0.0) + nokogiri (1.7.1) + mini_portile2 (~> 2.1.0) + nyan-cat-formatter (0.11) + rspec (>= 2.99, >= 2.14.2, < 4) + public_suffix (2.0.5) + rack (1.6.5) + rack-test (0.6.3) + rack (>= 1.0) + 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-html-sanitizer (1.0.3) + loofah (~> 2.0) + railties (4.2.8) + actionpack (= 4.2.8) + activesupport (= 4.2.8) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (12.0.0) + rspec (3.5.0) + rspec-core (~> 3.5.0) + rspec-expectations (~> 3.5.0) + rspec-mocks (~> 3.5.0) + rspec-collection_matchers (1.1.3) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.5.4) + rspec-support (~> 3.5.0) + rspec-expectations (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-json_expectations (2.1.0) + rspec-mocks (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-rails (3.5.2) + actionpack (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 3.5.0) + rspec-expectations (~> 3.5.0) + rspec-mocks (~> 3.5.0) + rspec-support (~> 3.5.0) + rspec-support (3.5.0) + ruby-progressbar (1.8.1) + safe_yaml (1.0.4) + simplecov (0.13.0) + docile (~> 1.1.0) + json (>= 1.8, < 3) + simplecov-html (~> 0.10.0) + simplecov-html (0.10.0) + simplecov-rcov (0.2.3) + simplecov (>= 0.4.1) + systemu (2.6.5) + thor (0.19.4) + thread_safe (0.3.6) + typhoeus (1.1.2) + ethon (>= 0.9.0) + tzinfo (1.2.3) + thread_safe (~> 0.1) + uuid (2.3.8) + macaddr (~> 1.0) + valid (1.2.0) + webmock (2.3.2) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff + +PLATFORMS + ruby + +DEPENDENCIES + actionpack (= 4.2.8) + codeclimate-test-reporter (~> 1.0.0) + diaspora_federation! + diaspora_federation-json_schema! + diaspora_federation-rails! + diaspora_federation-test! + fuubar (= 2.2.0) + json-schema-rspec (= 0.0.4) + nyan-cat-formatter + rake + rspec (~> 3.5.0) + rspec-collection_matchers (~> 1.1.2) + rspec-json_expectations (~> 2.1) + rspec-rails (~> 3.5.1) + simplecov (= 0.13.0) + simplecov-rcov (= 0.2.3) + webmock (~> 2.0) + +BUNDLED WITH + 1.14.6 diff --git a/test/scripts/prepare-travis.sh b/test/scripts/prepare-travis.sh deleted file mode 100755 index 61449b7..0000000 --- a/test/scripts/prepare-travis.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -set -x - -gem install bundler - -if [[ ${TRAVIS_RUBY_VERSION} == "2.1" ]]; then - # use rails 4 for ruby 2.1, because rails 5 needs ruby >= 2.2.2 - echo "gem 'rails', '4.2.7.1'" >> Gemfile - bundle install --without development --jobs=3 --retry=3 - bundle update rails -fi diff --git a/test/scripts/travis.sh b/test/scripts/travis.sh index 0a75aff..2697001 100755 --- a/test/scripts/travis.sh +++ b/test/scripts/travis.sh @@ -2,12 +2,11 @@ set -x -if [[ ${TRAVIS_RUBY_VERSION} == "2.1" ]]; then - # ruby 2.1 - export NO_COVERAGE="true" # No coverage for rails 4, because controller specs are disabled - bundle exec rake rails4:test --trace +if [[ ${BUNDLE_GEMFILE} =~ .*test/gemfiles/.*.Gemfile ]]; then + # No coverage for other gemfiles, because some specs are disabled + export NO_COVERAGE="true" + bundle exec rake --trace else - # ruby >= 2.2 bundle exec rake --trace test_exit_code=$? bundle exec codeclimate-test-reporter