rspeckled 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +2 -0
  3. data/LICENSE.txt +19 -0
  4. data/README.md +2 -0
  5. data/Rakefile +1 -0
  6. data/lib/rspeckled/helpers/factories.rb +3 -0
  7. data/lib/rspeckled/helpers/null_objects.rb +3 -0
  8. data/lib/rspeckled/helpers/session_helpers.rb +5 -0
  9. data/lib/rspeckled/helpers.rb +3 -0
  10. data/lib/rspeckled/mock_authentications/omniauth/ebay.rb +24 -0
  11. data/lib/rspeckled/mock_authentications/omniauth/facebook.rb +43 -0
  12. data/lib/rspeckled/mock_authentications/omniauth/twitter.rb +43 -0
  13. data/lib/rspeckled/mock_authentications/omniauth.rb +1 -0
  14. data/lib/rspeckled/plugins/authentication.rb +111 -0
  15. data/lib/rspeckled/plugins/bullet.rb +25 -0
  16. data/lib/rspeckled/plugins/carrier_wave.rb +34 -0
  17. data/lib/rspeckled/plugins/code_climate.rb +8 -0
  18. data/lib/rspeckled/plugins/database_cleaner.rb +49 -0
  19. data/lib/rspeckled/plugins/devise.rb +23 -0
  20. data/lib/rspeckled/plugins/elasticsearch.rb +32 -0
  21. data/lib/rspeckled/plugins/email.rb +27 -0
  22. data/lib/rspeckled/plugins/factory_girl.rb +20 -0
  23. data/lib/rspeckled/plugins/fakeredis.rb +4 -0
  24. data/lib/rspeckled/plugins/features.rb +38 -0
  25. data/lib/rspeckled/plugins/mocks.rb +14 -0
  26. data/lib/rspeckled/plugins/omniauth.rb +45 -0
  27. data/lib/rspeckled/plugins/rails/engine.rb +10 -0
  28. data/lib/rspeckled/plugins/rails/strong_parameters.rb +13 -0
  29. data/lib/rspeckled/plugins/recaptcha.rb +12 -0
  30. data/lib/rspeckled/plugins/referehencible.rb +21 -0
  31. data/lib/rspeckled/plugins/shoulda.rb +40 -0
  32. data/lib/rspeckled/plugins/sidekiq.rb +29 -0
  33. data/lib/rspeckled/plugins/simple_cov.rb +13 -0
  34. data/lib/rspeckled/plugins/singleton.rb +23 -0
  35. data/lib/rspeckled/plugins/stripe.rb +33 -0
  36. data/lib/rspeckled/plugins/test_after_commit.rb +4 -0
  37. data/lib/rspeckled/plugins/timecop.rb +35 -0
  38. data/lib/rspeckled/plugins/vcr.rb +38 -0
  39. data/lib/rspeckled/plugins/webmock.rb +25 -0
  40. data/lib/rspeckled/plugins/wisper.rb +14 -0
  41. data/lib/rspeckled/plugins.rb +25 -0
  42. data/lib/rspeckled/spec_helpers/active_record_basic.rb +4 -0
  43. data/lib/rspeckled/spec_helpers/active_record_connection_setup.rb +25 -0
  44. data/lib/rspeckled/spec_helpers/rails_engine.rb +16 -0
  45. data/lib/rspeckled/support/expectations.rb +6 -0
  46. data/lib/rspeckled/support/failures.rb +5 -0
  47. data/lib/rspeckled/support/focused.rb +6 -0
  48. data/lib/rspeckled/support/formatters.rb +6 -0
  49. data/lib/rspeckled/support/garbage_collection.rb +59 -0
  50. data/lib/rspeckled/support/heroku.rb +1 -0
  51. data/lib/rspeckled/support/i18n.rb +5 -0
  52. data/lib/rspeckled/support/misc.rb +1 -0
  53. data/lib/rspeckled/support/mocks.rb +7 -0
  54. data/lib/rspeckled/support/output.rb +1 -0
  55. data/lib/rspeckled/support/pending.rb +3 -0
  56. data/lib/rspeckled/support/rails.rb +13 -0
  57. data/lib/rspeckled/support/random.rb +3 -0
  58. data/lib/rspeckled/support/selenium.rb +4 -0
  59. data/lib/rspeckled/support.rb +1 -0
  60. data/lib/rspeckled/vcr_matchers/uri_without_trailing_id.rb +37 -0
  61. data/lib/rspeckled/version.rb +3 -0
  62. data/lib/rspeckled.rb +8 -0
  63. data.tar.gz.sig +4 -0
  64. metadata +169 -0
  65. metadata.gz.sig +0 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b32936e000261bcdf6c953a314ccadba88a3f5a5
4
+ data.tar.gz: db33df77c97bce23e4400d7dd8b9f83e45fa5d81
5
+ SHA512:
6
+ metadata.gz: 340aa33af1023306564fff4634e69fd6950aa2d25f980df3af8c840a2137a7292f62ced15bd75fd80b3ee539a18472f3fa4fdb66b4b9f1b556a75ceccf1d0993
7
+ data.tar.gz: 3d23727d2681262209055b1e81efc2ce070857231ef3ab84e8af15bb9bd51f2e85b80174a8ce70689d71e668863d8080f9c7ec35c619794e5ca13b8de4e675bd
checksums.yaml.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ n��8�\��V��񰍰����n����t|��/uw�ӣ9$(G����1��R�W�d���{)�T�h������h!��l��ɲ�^��#�5[�}��A��ʍ5/[��FajV�L{�S)�zo/�jy��+Ҙ�4��dI��T bh@4�Ly�dT"��>���ʓ Զ;t� t}d�B�� i��@sI� p�zr��.��K�X�?ޯ �C6����_ Pz�z1�
2
+ bՄ�I�#�L��X�w8ԁ��"4WuE��
data/LICENSE.txt ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2016 The Grand Design
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,2 @@
1
+ Rspeckled
2
+ ================================================================================
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,3 @@
1
+ def factory_name
2
+ described_class.name.underscore
3
+ end
@@ -0,0 +1,3 @@
1
+ def null_described_class
2
+ "Null#{described_class.name}".constantize
3
+ end
@@ -0,0 +1,5 @@
1
+ def authenticate_api_as(user)
2
+ auth_token = user.respond_to?(:auth_token) ? user.auth_token : user
3
+
4
+ request.env['HTTP_AUTHORIZATION'] = "Token #{auth_token}"
5
+ end
@@ -0,0 +1,3 @@
1
+ require 'rspeckled/helpers/factories'
2
+ require 'rspeckled/helpers/null_objects'
3
+ require 'rspeckled/helpers/session_helpers'
@@ -0,0 +1,24 @@
1
+ module OmniAuth
2
+ module MockAuthentications
3
+ module Ebay
4
+ def self.authentication
5
+ OmniAuth::AuthHash.new(
6
+ 'provider' => 'ebay',
7
+ 'uid' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
8
+ 'info' =>
9
+ {
10
+ 'ebay_id' => 'my_username',
11
+ 'ebay_token' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
12
+ 'email' => 'username@example.com',
13
+ 'full_name' => 'Gorby Thunderhorse',
14
+ 'country' => 'US',
15
+ },
16
+ 'credentials' => {},
17
+ 'extra' => {
18
+ 'internal_return_to' => nil,
19
+ }
20
+ )
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,43 @@
1
+ module OmniAuth
2
+ module MockAuthentications
3
+ module Facebook
4
+ def self.authentication
5
+ OmniAuth::AuthHash.new(
6
+ 'provider' => 'facebook',
7
+ 'uid' => '100002971692646',
8
+ 'credentials' => {
9
+ 'token' => 'my_facebook_token',
10
+ },
11
+ 'info' => {
12
+ 'name' => 'Sharon Letuchysky',
13
+ 'email' => nil,
14
+ 'nickname' => nil,
15
+ 'first_name' => 'Sharon',
16
+ 'last_name' => 'Letuchysky',
17
+ 'location' => nil,
18
+ 'description' => nil,
19
+ 'image' => 'http://graph.facebook.com/100002971692646/picture?type=square',
20
+ 'phone' => nil,
21
+ 'urls' => {
22
+ 'Facebook' => 'http://www.facebook.com/profile.php?id=100002971692646',
23
+ 'Website' => nil,
24
+ },
25
+ },
26
+ 'extra' => {
27
+ 'user_hash' => {
28
+ 'id' => '100002971692646',
29
+ 'name' => 'Sharon Ambiggjcaccg Letuchysky',
30
+ 'first_name' => 'Sharon',
31
+ 'middle_name' => 'Ambiggjcaccg',
32
+ 'last_name' => 'Letuchysky',
33
+ 'link' => 'http://www.facebook.com/profile.php?id=100002971692646',
34
+ 'gender' => 'female',
35
+ 'locale' => 'en_US',
36
+ 'updated_time' => '2011-09-11T17:00:51+0000',
37
+ },
38
+ }
39
+ )
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ module OmniAuth
2
+ module MockAuthentications
3
+ module Twitter
4
+ def self.authentication
5
+ OmniAuth::AuthHash.new(
6
+ 'provider' => 'twitter',
7
+ 'uid' => '100002971692646',
8
+ 'credentials' => {
9
+ 'token' => 'my_twitter_token',
10
+ },
11
+ 'info' => {
12
+ 'name' => 'Sharon Letuchysky',
13
+ 'email' => nil,
14
+ 'nickname' => nil,
15
+ 'first_name' => 'Sharon',
16
+ 'last_name' => 'Letuchysky',
17
+ 'location' => nil,
18
+ 'description' => nil,
19
+ 'image' => 'http://graph.facebook.com/100002971692646/picture?type=square',
20
+ 'phone' => nil,
21
+ 'urls' => {
22
+ 'Facebook' => 'http://www.facebook.com/profile.php?id=100002971692646',
23
+ 'Website' => nil,
24
+ },
25
+ },
26
+ 'extra' => {
27
+ 'user_hash' => {
28
+ 'id' => '100002971692646',
29
+ 'name' => 'Sharon Ambiggjcaccg Letuchysky',
30
+ 'first_name' => 'Sharon',
31
+ 'middle_name' => 'Ambiggjcaccg',
32
+ 'last_name' => 'Letuchysky',
33
+ 'link' => 'http://www.facebook.com/profile.php?id=100002971692646',
34
+ 'gender' => 'female',
35
+ 'locale' => 'en_US',
36
+ 'updated_time' => '2011-09-11T17:00:51+0000',
37
+ },
38
+ }
39
+ )
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1 @@
1
+ Dir[File.expand_path('../omniauth/*.rb', __FILE__)].each { |f| require f }
@@ -0,0 +1,111 @@
1
+ RSpec.configure do |config|
2
+ config.around(:each, :mock_auth => lambda { |v| !!v }) do |example|
3
+ options = example.metadata[:mock_auth]
4
+
5
+ authentication_type = if options.is_a?(Hash) && options[:type]
6
+ options[:type]
7
+ else
8
+ :standard
9
+ end
10
+
11
+ klass = case options
12
+ when TrueClass
13
+ User
14
+ when Hash
15
+ options[:class] || User
16
+ else
17
+ options
18
+ end
19
+
20
+ underscored_class_name = klass.
21
+ name[/(?:.*::)?(\w+)\z/, 1].
22
+ gsub(/([a-z])([A-Z])/, '\1_\2').
23
+ downcase
24
+
25
+ current_class_method = if options.is_a?(Hash) && options[:method]
26
+ options[:method]
27
+ else
28
+ :"current_#{underscored_class_name}"
29
+ end
30
+
31
+ instance = if options.is_a?(Hash) && options[:strategy] == :instance
32
+ klass.new
33
+ else
34
+ FactoryGirl.create(underscored_class_name.to_sym)
35
+ end
36
+
37
+ inferred_auth_method = if options.is_a?(Hash) && options[:authentication_method]
38
+ options[:authentication_method]
39
+ else
40
+ :"authenticate_#{underscored_class_name}!"
41
+ end
42
+
43
+ authentication_controller_class = if example.metadata[:type] == :controller
44
+ described_class
45
+ else
46
+ ApplicationController
47
+ end
48
+
49
+ authentication_controller_instance = authentication_controller_class.new
50
+
51
+ authentication_successful = if options.is_a?(Hash) && options.key?(:status)
52
+ options[:status] == :authorized
53
+ else
54
+ true
55
+ end
56
+
57
+ authentication_result = authentication_successful ? instance : nil
58
+
59
+ if authentication_type == :standard
60
+ authentication_method = if authentication_controller_instance.respond_to?(inferred_auth_method, true)
61
+ inferred_auth_method
62
+ elsif authentication_controller_instance.respond_to?(:authenticate, true)
63
+ :authenticate
64
+ end
65
+
66
+ authentication_controller_class.__send__(:define_method, authentication_method) { authentication_successful }
67
+ authentication_controller_class.__send__(:define_method, current_class_method) { authentication_result }
68
+ authentication_controller_class.__send__(:helper_method, current_class_method)
69
+ example.example_group_instance.class.let(current_class_method) { authentication_result }
70
+
71
+ example.run
72
+
73
+ authentication_controller_class.__send__(:remove_method, current_class_method)
74
+ elsif authentication_type == :json_web_token
75
+ @token_data = if options.is_a?(Hash) && options[:data]
76
+ options[:data]
77
+ else
78
+ [
79
+ {
80
+ 'iss' => 'rspeckled',
81
+ 'own' => instance['account_id'] || instance['id'],
82
+ 'sub' => example.file_path,
83
+ 'aud' => 'rspec',
84
+ 'exp' => 1.day.from_now.utc.to_i,
85
+ 'nbf' => 1.day.ago.utc.to_i,
86
+ 'iat' => Time.now.utc.to_i,
87
+ 'jti' => SecureRandom.uuid,
88
+ 'sid' => instance['account_id'] || instance['id'],
89
+ 'rol' => options[:role] || 'basic',
90
+ },
91
+ {
92
+ 'typ' => 'JWT',
93
+ 'cty' => 'application/json-web-token',
94
+ },
95
+ ]
96
+ end
97
+
98
+ example.example_group_instance.class.let(current_class_method) { authentication_result }
99
+
100
+ example.run
101
+ else
102
+ fail 'You must specify a valid type for the :mock_auth metadata'
103
+ end
104
+
105
+ instance.delete unless options.is_a?(Hash) && options[:strategy] == :instance
106
+ end
107
+
108
+ config.before(:each, :mock_auth => lambda { |v| !!v }) do |_example|
109
+ request.env['X_DECRYPTED_JSON_WEB_TOKEN'] = @token_data
110
+ end
111
+ end
@@ -0,0 +1,25 @@
1
+ ##############################################################################
2
+ # Bullet Plugin
3
+ ##############################################################################
4
+
5
+ begin
6
+ require 'bullet'
7
+
8
+ Bullet.enable = true
9
+ Bullet.bullet_logger = true
10
+ Bullet.raise = true
11
+
12
+ RSpec.configure do |config|
13
+ config.before(:each) do
14
+ Bullet.start_request if Bullet.enable?
15
+ end
16
+
17
+ config.after(:each) do
18
+ if Bullet.enable?
19
+ Bullet.perform_out_of_channel_notifications if Bullet.notification?
20
+ Bullet.end_request
21
+ end
22
+ end
23
+ end
24
+ rescue LoadError
25
+ end
@@ -0,0 +1,34 @@
1
+ ##############################################################################
2
+ # CarrierWave Plugin
3
+ ##############################################################################
4
+
5
+ begin
6
+ require 'carrierwave'
7
+ require 'carrierwave/test/matchers'
8
+
9
+ RSpec.configure do |config|
10
+ config.include CarrierWave::Test::Matchers, :file_attachment => true
11
+ end
12
+
13
+ CarrierWave.configure do |config|
14
+ config.storage = :file
15
+ config.root = File.expand_path('./tmp')
16
+ config.enable_processing = false
17
+ end
18
+
19
+ RSpec.configure do |config|
20
+ config.around(:each, :file_attachment => true) do |example|
21
+ previous_carrierwave_processing_mode = subject.class.enable_processing
22
+ previous_carrierwave_storage_mode = subject.class.storage
23
+
24
+ subject.class.enable_processing = true
25
+ subject.class.storage = :file
26
+
27
+ example.run
28
+
29
+ subject.class.storage = previous_carrierwave_storage_mode
30
+ subject.class.enable_processing = previous_carrierwave_processing_mode
31
+ end
32
+ end
33
+ rescue LoadError
34
+ end
@@ -0,0 +1,8 @@
1
+ begin
2
+ unless RUBY_VERSION.start_with?('1.8')
3
+ require 'codeclimate-test-reporter'
4
+
5
+ CodeClimate::TestReporter.start
6
+ end
7
+ rescue LoadError
8
+ end
@@ -0,0 +1,49 @@
1
+ ##############################################################################
2
+ # Database Cleaner Plugin
3
+ ##############################################################################
4
+
5
+ begin
6
+ require 'database_cleaner'
7
+
8
+ begin
9
+ autodetected = DatabaseCleaner::Base.new.__send__(:autodetect)
10
+ rescue DatabaseCleaner::NoORMDetected
11
+ autodetected = false
12
+ end
13
+
14
+ if autodetected
15
+ RSpec.configure do |config|
16
+ config.before(:suite) do
17
+ DatabaseCleaner.clean_with(:truncation)
18
+ end
19
+
20
+ config.before(:each) do
21
+ DatabaseCleaner.strategy = :transaction
22
+ end
23
+
24
+ config.before(:each, :js => true) do
25
+ DatabaseCleaner.strategy = :truncation
26
+ end
27
+
28
+ config.before(:each) do
29
+ DatabaseCleaner.start
30
+ end
31
+
32
+ config.after(:each) do
33
+ DatabaseCleaner.clean
34
+ end
35
+ end
36
+
37
+ if defined? RSpec::Rails
38
+ RSpec.configure do |config|
39
+ config.use_transactional_fixtures = false
40
+ end
41
+ end
42
+ end
43
+ rescue LoadError
44
+ if defined? RSpec::Rails
45
+ RSpec.configure do |config|
46
+ config.use_transactional_fixtures = true
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,23 @@
1
+ ##############################################################################
2
+ # Devise Plugin
3
+ ##############################################################################
4
+
5
+ begin
6
+ require 'devise'
7
+
8
+ Devise.stretches = 1
9
+
10
+ RSpec.configure do |config|
11
+ config.include Devise::TestHelpers, :type => :controller
12
+ config.include Warden::Test::Helpers, :type => :feature
13
+
14
+ config.before(:all, :type => :feature) do |_example|
15
+ Warden.test_mode!
16
+ end
17
+
18
+ config.before(:each, :type => :controller) do |_example|
19
+ @request.env['devise.mapping'] = Devise.mappings[:user]
20
+ end
21
+ end
22
+ rescue LoadError
23
+ end
@@ -0,0 +1,32 @@
1
+ ##############################################################################
2
+ # Elasticsearch Plugin
3
+ ##############################################################################
4
+
5
+ begin
6
+ require 'elasticsearch-extensions'
7
+
8
+ RSpec.configure do |config|
9
+ config.before(:suite, :elasticsearch => lambda { |v| !!v }) do
10
+ Elasticsearch::Extensions::Test::Cluster.start(:port => 9200) unless Elasticsearch::Extensions::Test::Cluster.running?
11
+ end
12
+
13
+ config.around(:each, :elasticsearch => lambda { |v| !!v }) do |example|
14
+ model = case example.metadata[:elasticsearch]
15
+ when String
16
+ example.metadata[:elasticsearch].constantize
17
+ end
18
+
19
+ model.__elasticsearch__.client.indices.delete :index => '_all'
20
+ model.__elasticsearch__.create_index! :index => model.index_name
21
+
22
+ example.run
23
+
24
+ model.__elasticsearch__.client.indices.delete :index => '_all'
25
+ end
26
+
27
+ config.after(:suite, :elasticsearch => lambda { |v| !!v }) do
28
+ Elasticsearch::Extensions::Test::Cluster.stop(:port => 9200) if Elasticsearch::Extensions::Test::Cluster.running?
29
+ end
30
+ end
31
+ rescue LoadError
32
+ end
@@ -0,0 +1,27 @@
1
+ ##############################################################################
2
+ # Email Plugin
3
+ ##############################################################################
4
+ #
5
+ # The approach to this plugin is twofold. First it uses the excellent email_spec
6
+ # gem to add helpers and matchers to any spec file with :email => true set.
7
+ # Secondly, it will also clear all deliveries from ActionMailer if it is loaded.
8
+ #
9
+ # https://github.com/bmabey/email-spec/
10
+ #
11
+ begin
12
+ require 'email_spec'
13
+
14
+ RSpec.configure do |config|
15
+ config.include EmailSpec::Helpers, :email => true
16
+ config.include EmailSpec::Matchers, :email => true
17
+ end
18
+ rescue LoadError
19
+ end
20
+
21
+ if defined? ActionMailer
22
+ RSpec.configure do |config|
23
+ config.after(:each, :email => true) do
24
+ ActionMailer::Base.deliveries.clear
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ ##############################################################################
2
+ # Factory Girl Plugin
3
+ ##############################################################################
4
+
5
+ begin
6
+ require 'factory_girl'
7
+
8
+ FactoryGirl.definition_file_paths << './spec/factories'
9
+
10
+ if FactoryGirl.configuration.factories.count.zero? &&
11
+ Rails.application.class.name.match(/Dummy/)
12
+
13
+ FactoryGirl.find_definitions
14
+ end
15
+
16
+ RSpec.configure do |config|
17
+ config.include FactoryGirl::Syntax::Methods
18
+ end
19
+ rescue LoadError
20
+ end
@@ -0,0 +1,4 @@
1
+ begin
2
+ require 'fakeredis/rspec'
3
+ rescue LoadError
4
+ end
@@ -0,0 +1,38 @@
1
+ ##############################################################################
2
+ # Features Plugin
3
+ ##############################################################################
4
+ #
5
+ # This plugin enables the feature/scenario/background/given syntax in RSpec
6
+ # without requiring Capybara as a dependency (and may also be used outside of
7
+ # Rails). The contents of this file are taken verbatim from
8
+ #
9
+ # https://github.com/jnicklas/capybara/blob/cd4327857bd3bafa8614b7bffb2886a8ab401953/lib/capybara/rspec/features.rb
10
+ #
11
+ # and should be updated whenever that file is updated.
12
+ #
13
+ module Capybara
14
+ module Features
15
+ def self.included(base)
16
+ base.instance_eval do
17
+ alias_method :background, :before
18
+ alias_method :scenario, :it
19
+ alias_method :xscenario, :xit
20
+ alias_method :given, :let
21
+ alias_method :given!, :let!
22
+ alias_method :feature, :describe
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ def self.feature(*args, &block)
29
+ options = args.last.is_a?(Hash) ? args.pop : {}
30
+ options[:capybara_feature] = true
31
+ options[:type] = :feature
32
+ options[:caller] ||= caller
33
+ args.push(options)
34
+
35
+ describe(*args, &block)
36
+ end
37
+
38
+ RSpec.configuration.include Capybara::Features, :capybara_feature => true
@@ -0,0 +1,14 @@
1
+ RSpec.configure do |config|
2
+ config.around(:each, :verify => false) do |example|
3
+ verify_partial = RSpec::Mocks.configuration.instance_variable_get(:@verify_partial_doubles)
4
+ verify_constant = RSpec::Mocks.configuration.instance_variable_get(:@verify_doubled_constant_names)
5
+
6
+ RSpec::Mocks.configuration.verify_partial_doubles = example.metadata[:verify]
7
+ RSpec::Mocks.configuration.verify_doubled_constant_names = example.metadata[:verify]
8
+
9
+ example.run
10
+
11
+ RSpec::Mocks.configuration.verify_partial_doubles = verify_partial
12
+ RSpec::Mocks.configuration.verify_doubled_constant_names = verify_constant
13
+ end
14
+ end
@@ -0,0 +1,45 @@
1
+ ##############################################################################
2
+ # OmniAuth Plugin
3
+ ##############################################################################
4
+
5
+ begin
6
+ require 'omniauth'
7
+ require 'rspeckled/mock_authentications/omniauth'
8
+
9
+ ###
10
+ # Tell OmniAuth to just return whatever hash we want for each auth type
11
+ #
12
+ OmniAuth.configure do |config|
13
+ config.test_mode = true
14
+ config.mock_auth[:facebook] = OmniAuth::MockAuthentications::Facebook.authentication
15
+ config.mock_auth[:twitter] = OmniAuth::MockAuthentications::Twitter.authentication
16
+ config.mock_auth[:ebay] = OmniAuth::MockAuthentications::Ebay.authentication
17
+ end
18
+
19
+ ###
20
+ # Except we don't want OmniAuth to fake anything when doing live tests
21
+ #
22
+ RSpec.configure do |config|
23
+ config.around(:each, :js => true) do |example|
24
+ previous_omniauth_test_mode = OmniAuth.config.test_mode
25
+ OmniAuth.config.test_mode = false
26
+
27
+ example.metadata.fetch(:mock_oauth, {}).each do |auth_type, auth_hash|
28
+ OmniAuth.config.add_mock(auth_type, auth_hash)
29
+ end
30
+
31
+ example.run
32
+
33
+ OmniAuth.config.test_mode = previous_omniauth_test_mode
34
+ end
35
+
36
+ config.before(:each, :type => :controller, :mock_oauth => lambda { |v| !!v }) do |example|
37
+ request.env['omniauth.auth'] = if example.metadata[:mock_oauth].is_a? Symbol
38
+ OmniAuth.config.mock_auth[example.metadata[:mock_oauth]]
39
+ else
40
+ OmniAuth::AuthHash.new(example.metadata[:mock_oauth])
41
+ end
42
+ end
43
+ end
44
+ rescue LoadError
45
+ end
@@ -0,0 +1,10 @@
1
+ module Rspeckled
2
+ module NamespacedEngineControllerRouteFix
3
+ def self.included(base)
4
+ engine_name = Dir.pwd.split('/').last.camelize
5
+ engine_class = "::#{engine_name}::Engine".constantize
6
+
7
+ base.routes { engine_class.routes }
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ if defined?(ActionController::Parameters)
2
+ always_permitted_parameters = %w{id}
3
+
4
+ if ActionController::Parameters.respond_to?(:always_permitted_parameters)
5
+ ActionController::Parameters.always_permitted_parameters += always_permitted_parameters
6
+ else
7
+ always_permitted_parameters.each do |always_permitted_parameter|
8
+ ActionController::Parameters::NEVER_UNPERMITTED_PARAMS << always_permitted_parameter
9
+ end
10
+ end
11
+
12
+ ActionController::Parameters.action_on_unpermitted_parameters = :raise
13
+ end
@@ -0,0 +1,12 @@
1
+ ##############################################################################
2
+ # Recaptcha Plugin
3
+ ##############################################################################
4
+
5
+ begin
6
+ require 'recaptcha'
7
+
8
+ Recaptcha.configure do |config|
9
+ config.skip_verify_env = ['test']
10
+ end
11
+ rescue LoadError
12
+ end