Skip to content

Commit

Permalink
Set up testing using RSpec and test against dummy app
Browse files Browse the repository at this point in the history
  • Loading branch information
vernondegoede committed Mar 21, 2018
1 parent d8aaa4f commit cc0706f
Show file tree
Hide file tree
Showing 10 changed files with 138 additions and 20 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@
# rspec failure tracking
.rspec_status
.idea/
*.gem
*.gem
spec/dummy
46 changes: 45 additions & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ PATH
mollie-api-ruby (~> 3.1, >= 3.1.3)
spree_backend (>= 3.1.0, < 4.0)
spree_core (>= 3.1.0, < 4.0)
spree_extension
spree_frontend (>= 3.1.0, < 4.0)

GEM
Expand Down Expand Up @@ -73,22 +74,35 @@ GEM
rails (>= 4.1, < 5.2)
carmen (1.0.2)
activesupport (>= 3.0.0)
childprocess (0.9.0)
ffi (~> 1.0, >= 1.0.11)
cldr-plurals-runtime-rb (1.0.1)
climate_control (0.2.0)
cocaine (0.5.8)
climate_control (>= 0.0.3, < 1.0)
coffee-rails (4.2.2)
coffee-script (>= 2.2.0)
railties (>= 4.0.0)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.12.2)
concurrent-ruby (1.0.5)
crass (1.0.3)
css_parser (1.6.0)
addressable
database_cleaner (1.6.2)
deface (1.3.0)
nokogiri (~> 1.6)
polyglot
rails (>= 4.1)
rainbow (>= 2.1.0)
diff-lcs (1.3)
docile (1.3.0)
erubi (1.7.1)
execjs (2.7.0)
factory_bot (4.8.2)
activesupport (>= 3.0.0)
ffaker (2.8.1)
ffi (1.9.23)
friendly_id (5.2.3)
Expand All @@ -105,6 +119,7 @@ GEM
thor (>= 0.14, < 2.0)
jquery-ui-rails (6.0.1)
railties (>= 3.2.16)
json (2.1.0)
kaminari (1.0.1)
activesupport (>= 4.1.0)
kaminari-actionview (= 1.0.1)
Expand Down Expand Up @@ -135,10 +150,11 @@ GEM
money (~> 6.9)
money (6.10.1)
i18n (>= 0.6.4, < 1.0)
mysql2 (0.4.10)
nio4r (2.3.0)
nokogiri (1.8.2)
mini_portile2 (~> 2.3.0)
paperclip (5.2.0)
paperclip (5.1.0)
activemodel (>= 4.2.0)
activesupport (>= 4.2.0)
cocaine (~> 0.5.5)
Expand Down Expand Up @@ -220,13 +236,28 @@ GEM
rspec-mocks (~> 3.7.0)
rspec-support (~> 3.7.0)
rspec-support (3.7.1)
rubyzip (1.2.1)
sass (3.5.5)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
sass-rails (5.0.7)
railties (>= 4.0.0, < 6)
sass (~> 3.1)
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
select2-rails (3.5.9.1)
thor (~> 0.14)
selenium-webdriver (3.11.0)
childprocess (~> 0.5)
rubyzip (~> 1.2)
simplecov (0.16.1)
docile (~> 1.1)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.2)
spree_api (3.4.4)
rabl (~> 0.13.1)
spree_core (= 3.4.4)
Expand Down Expand Up @@ -261,6 +292,8 @@ GEM
state_machines-activerecord (~> 0.5)
stringex
twitter_cldr (~> 4.3)
spree_extension (0.0.5)
activerecord (>= 4.2)
spree_frontend (3.4.4)
bootstrap-sass (>= 3.3.5.1, < 3.4)
canonical-rails (~> 0.2.0)
Expand All @@ -274,6 +307,7 @@ GEM
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
sqlite3 (1.3.13)
state_machines (0.5.0)
state_machines-activemodel (0.5.0)
activemodel (>= 4.1, < 5.2)
Expand All @@ -284,6 +318,7 @@ GEM
stringex (2.8.4)
thor (0.20.0)
thread_safe (0.3.6)
tilt (2.0.8)
twitter_cldr (4.4.3)
camertron-eprun
cldr-plurals-runtime-rb (~> 1.0)
Expand All @@ -304,11 +339,20 @@ PLATFORMS

DEPENDENCIES
bundler (~> 1.16)
coffee-rails
database_cleaner
factory_bot
ffaker
mollie-api-ruby (~> 3.1.3)
mysql2
rake (~> 10.0)
rspec (~> 3.0)
rspec-rails (~> 3.7.2)
sass-rails
selenium-webdriver
simplecov
spree_mollie_gateway!
sqlite3

BUNDLED WITH
1.16.1
23 changes: 19 additions & 4 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,21 @@
require "bundler/gem_tasks"
require "rspec/core/rake_task"
require 'bundler'
Bundler::GemHelper.install_tasks

RSpec::Core::RakeTask.new(:spec)
require 'rspec/core/rake_task'
require 'spree/testing_support/extension_rake'

task :default => :spec
RSpec::Core::RakeTask.new

task :default do
if Dir['spec/dummy'].empty?
Rake::Task[:test_app].invoke
Dir.chdir('../../')
end
Rake::Task[:spec].invoke
end

desc 'Generates a dummy app for testing'
task :test_app do
ENV['LIB_NAME'] = 'spree_mollie_gateway'
Rake::Task['extension:test_app'].invoke
end
21 changes: 14 additions & 7 deletions app/models/spree/gateway/mollie_gateway.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ class Gateway::MollieGateway < PaymentMethod

has_many :spree_mollie_payment_sources, class_name: 'Spree::MolliePaymentSource'

# Only enable one-click payments if spree_auth_devise is installed
def self.allow_one_click_payments?
Gem.loaded_specs.has_key?('spree_auth_devise')
end

def payment_source_class
Spree::MolliePaymentSource
end
Expand Down Expand Up @@ -98,13 +103,15 @@ def prepare_payment_params(money_in_cents, source, gateway_options)
})
end

mollie_customer_id = Spree::User.find(customer_id).mollie_customer_id
if Spree::Gateway::MollieGateway.allow_one_click_payments?
mollie_customer_id = Spree.user_class.find(customer_id).try(:mollie_customer_id)

# Allow one-click payments by passing Mollie customer ID.
if mollie_customer_id.present?
order_params.merge! ({
customerId: customer_id
})
# Allow one-click payments by passing Mollie customer ID.
if mollie_customer_id.present?
order_params.merge! ({
customerId: customer_id
})
end
end
end

Expand All @@ -118,7 +125,7 @@ def credit(credit_cents, payment_id, options)

begin
amount = credit_cents / 100.0
refund = Mollie::Payment::Refund.create(
Mollie::Payment::Refund.create(
payment_id: payment_id,
amount: amount,
description: "Refund Spree Order ID: #{order_number}",
Expand Down
4 changes: 3 additions & 1 deletion app/models/spree/user_decorator.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
Spree::User.class_eval do
Spree.user_class.class_eval do
after_create :create_mollie_customer

def create_mollie_customer
# Don't create Mollie customers is spree_auth_devise is not installed.
return unless defined? Spree::User
mollie_gateway = Spree::PaymentMethod.find_by_type 'Spree::Gateway::MollieGateway'
mollie_customer = mollie_gateway.create_customer(self)
update mollie_customer_id: mollie_customer.id
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
class AddMollieCustomerIdToSpreeUser < ActiveRecord::Migration[5.1]
def change
add_column :spree_users, :mollie_customer_id, :string
return unless Spree::Gateway::MollieGateway.allow_one_click_payments?
add_column Spree.user_class.table_name, :mollie_customer_id, :string
end
end
10 changes: 8 additions & 2 deletions lib/spree_mollie_gateway/engine.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
require 'mollie-api-ruby'

module SpreeMollieGateway
class Engine < ::Rails::Engine
require 'spree/core'
require 'mollie-api-ruby'

isolate_namespace SpreeMollieGateway

config.autoload_paths += %W(#{config.root}/lib)

# Use rspec for tests
config.generators do |g|
g.test_framework :rspec
end

def self.activate
Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c|
Rails.configuration.cache_classes ? require(c) : load(c)
Expand Down
6 changes: 6 additions & 0 deletions spec/models/mollie/client_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
require 'spec_helper'

RSpec.describe Mollie::Client, :type => :model do
it 'is sets the correct API key'
it 'set the correct version string'
end
32 changes: 29 additions & 3 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,37 @@
require 'bundler/setup'
require 'action_controller/railtie'
require 'spree_mollie_gateway'
# require 'bundler/setup'
# require 'action_controller/railtie'

# Configure Rails Environment
ENV['RAILS_ENV'] = 'test'

require File.expand_path('../dummy/config/environment.rb', __FILE__)

require 'rspec/rails'
require 'database_cleaner'

# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }

# Requires factories and other useful helpers defined in spree_core.
require 'spree/testing_support/authorization_helpers'
require 'spree/testing_support/controller_requests'
require 'spree/testing_support/url_helpers'
require 'spree/testing_support/factories'
require 'spree/testing_support/order_walkthrough'

RSpec.configure do |config|
# Enable flags like --only-failures and --next-failure
config.example_status_persistence_file_path = ".rspec_status"

# Ensure Suite is set to use transactions for speed.
config.before :suite do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with :truncation
end

config.color = true

# Disable RSpec exposing methods globally on `Module` and `main`
config.disable_monkey_patching!

Expand Down
10 changes: 10 additions & 0 deletions spree_mollie_gateway.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,21 @@ Gem::Specification.new do |spec|
spec.add_dependency 'spree_core', spree_version
spec.add_dependency 'spree_backend', spree_version
spec.add_dependency 'spree_frontend', spree_version
spec.add_dependency 'spree_extension'

spec.add_development_dependency 'factory_bot'
spec.add_development_dependency 'bundler', '~> 1.16'
spec.add_development_dependency 'rake', '~> 10.0'
spec.add_development_dependency 'rspec', '~> 3.0'
spec.add_development_dependency 'rspec-rails', '~> 3.7.2'
spec.add_development_dependency 'ffaker'
spec.add_development_dependency 'sass-rails'
spec.add_development_dependency 'selenium-webdriver'
spec.add_development_dependency 'simplecov'
spec.add_development_dependency 'sqlite3'
spec.add_development_dependency 'mysql2'
spec.add_development_dependency 'coffee-rails'
spec.add_development_dependency 'database_cleaner'

spec.add_runtime_dependency 'mollie-api-ruby', '~> 3.1', '>= 3.1.3'
end

0 comments on commit cc0706f

Please sign in to comment.