From cd563dd337e22889d731bc60349e1a6e181cfb5b Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Mon, 15 Jun 2015 02:49:54 +0200 Subject: [PATCH] add fixtures --- .gitignore | 3 ++- Gemfile | 9 +++++++- Gemfile.lock | 10 +++++++++ .../webfinger_controller_spec.rb | 6 ++--- spec/factories.rb | 16 ++++++++++++++ spec/spec_helper.rb | 16 ++++++++++++++ spec/support/fixture_builder.rb | 16 ++++++++++++++ test/dummy/app/models/person.rb | 2 ++ test/dummy/config/application.rb | 3 +++ test/dummy/lib/diaspora/guid.rb | 22 +++++++++++++++++++ test/dummy/test/fixtures/,keep | 0 11 files changed, 97 insertions(+), 6 deletions(-) create mode 100644 spec/factories.rb create mode 100644 spec/support/fixture_builder.rb create mode 100644 test/dummy/lib/diaspora/guid.rb create mode 100644 test/dummy/test/fixtures/,keep diff --git a/.gitignore b/.gitignore index f051548..6e7d083 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,5 @@ test/dummy/db/*.sqlite3 test/dummy/db/*.sqlite3-journal test/dummy/log/*.log test/dummy/tmp/ -test/dummy/.sass-cache \ No newline at end of file +test/dummy/.sass-cache +test/dummy/test/fixtures/*.y*ml diff --git a/Gemfile b/Gemfile index 0fafd2c..dbc3fff 100644 --- a/Gemfile +++ b/Gemfile @@ -11,15 +11,17 @@ gemspec # your gem to rubygems.org. group :development do + # code style gem "rubocop", "0.32.0" - # Debugging + # debugging gem "pry" gem "pry-debundle" gem "pry-byebug" end group :test do + # rspec gem "rspec-instafail", "0.2.6", require: false gem "fuubar", "2.0.0" gem "nyan-cat-formatter", require: false @@ -30,12 +32,17 @@ group :test do gem "codeclimate-test-reporter", require: false # test helpers + gem "fixture_builder", "0.4.1" gem "factory_girl_rails", "4.5.0" end group :development, :test do + # rspec gem "rspec-rails", "3.2.3" + # GUID generation + gem "uuid", "2.3.7" + # test database gem "sqlite3" end diff --git a/Gemfile.lock b/Gemfile.lock index 0c2565d..f7bdb60 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -61,6 +61,9 @@ GEM factory_girl_rails (4.5.0) factory_girl (~> 4.5.0) railties (>= 3.0.0) + fixture_builder (0.4.1) + activerecord (>= 2) + activesupport (>= 2) fuubar (2.0.0) rspec (~> 3.0) ruby-progressbar (~> 1.4) @@ -70,6 +73,8 @@ GEM json (1.8.3) loofah (2.0.2) nokogiri (>= 1.5.9) + macaddr (1.7.1) + systemu (~> 2.6.2) mail (2.6.3) mime-types (>= 1.16, < 3) method_source (0.8.2) @@ -166,10 +171,13 @@ GEM activesupport (>= 3.0) sprockets (>= 2.8, < 4.0) sqlite3 (1.3.10) + systemu (2.6.5) thor (0.19.1) thread_safe (0.3.5) tzinfo (1.2.2) thread_safe (~> 0.1) + uuid (2.3.7) + macaddr (~> 1.0) PLATFORMS ruby @@ -178,6 +186,7 @@ DEPENDENCIES codeclimate-test-reporter diaspora_federation! factory_girl_rails (= 4.5.0) + fixture_builder (= 0.4.1) fuubar (= 2.0.0) nyan-cat-formatter pry @@ -189,6 +198,7 @@ DEPENDENCIES simplecov (= 0.10.0) simplecov-rcov (= 0.2.3) sqlite3 + uuid (= 2.3.7) BUNDLED WITH 1.10.3 diff --git a/spec/controllers/diaspora_federation/webfinger_controller_spec.rb b/spec/controllers/diaspora_federation/webfinger_controller_spec.rb index 375d8b2..3410850 100644 --- a/spec/controllers/diaspora_federation/webfinger_controller_spec.rb +++ b/spec/controllers/diaspora_federation/webfinger_controller_spec.rb @@ -23,14 +23,12 @@ module DiasporaFederation describe "#legacy_webfinger" do it "succeeds when the person exists" do - skip - post :legacy_webfinger, "q" => "bob@diaspora.pod" + post :legacy_webfinger, "q" => "alice@localhost:3000" expect(response).to be_success end it "succeeds with 'acct:' in the query when the person exists" do - skip - post :legacy_webfinger, "q" => "acct:bob@diaspora.pod" + post :legacy_webfinger, "q" => "acct:alice@localhost:3000" expect(response).to be_success end diff --git a/spec/factories.rb b/spec/factories.rb new file mode 100644 index 0000000..88173c4 --- /dev/null +++ b/spec/factories.rb @@ -0,0 +1,16 @@ +require "factory_girl" + +def r_str + SecureRandom.hex(3) +end + +FactoryGirl.define do + factory :person do + sequence(:diaspora_handle) {|n| "person-#{n}-#{r_str}@localhost:3000" } + url "http://localhost:3000/" + serialized_public_key OpenSSL::PKey::RSA.generate(1024).public_key.export + after(:create) do |u| + u.save + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 07b7787..510bbad 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -3,6 +3,9 @@ require File.join(File.dirname(__FILE__), "..", "test", "dummy", "config", "envi require "rspec/rails" +# load factory girl factories +require "factories" + require "simplecov" require "simplecov-rcov" SimpleCov.formatters = [ @@ -16,6 +19,16 @@ end require "codeclimate-test-reporter" CodeClimate::TestReporter.start +# Force fixture rebuild +FileUtils.rm_f(Rails.root.join("tmp", "fixture_builder.yml")) + +# 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 + RSpec.configure do |config| config.infer_spec_type_from_file_location! @@ -25,6 +38,9 @@ RSpec.configure do |config| expect_config.syntax = :expect end + config.include FactoryGirl::Syntax::Methods + config.use_transactional_fixtures = true + config.mock_with :rspec do |mocks| # Prevents you from mocking or stubbing a method that does not exist on # a real object. This is generally recommended, and will default to diff --git a/spec/support/fixture_builder.rb b/spec/support/fixture_builder.rb new file mode 100644 index 0000000..dbb7f41 --- /dev/null +++ b/spec/support/fixture_builder.rb @@ -0,0 +1,16 @@ +require "fixture_builder" + +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(:person, diaspora_handle: "alice@localhost:3000") + end +end diff --git a/test/dummy/app/models/person.rb b/test/dummy/app/models/person.rb index a92a5b6..38b1a29 100644 --- a/test/dummy/app/models/person.rb +++ b/test/dummy/app/models/person.rb @@ -1,4 +1,6 @@ class Person < ActiveRecord::Base + include ::Diaspora::Guid + def salmon_url "#{url}receive/users/#{guid}" end diff --git a/test/dummy/config/application.rb b/test/dummy/config/application.rb index de60092..6d9d1d7 100644 --- a/test/dummy/config/application.rb +++ b/test/dummy/config/application.rb @@ -24,5 +24,8 @@ module Dummy # Do not swallow errors in after_commit/after_rollback callbacks. config.active_record.raise_in_transactional_callbacks = true + + # autoload files from test/dummy/lib + config.autoload_once_paths += %W(#{config.root}/lib) end end diff --git a/test/dummy/lib/diaspora/guid.rb b/test/dummy/lib/diaspora/guid.rb new file mode 100644 index 0000000..a94ff3b --- /dev/null +++ b/test/dummy/lib/diaspora/guid.rb @@ -0,0 +1,22 @@ +# 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/test/fixtures/,keep b/test/dummy/test/fixtures/,keep new file mode 100644 index 0000000..e69de29