From cc0706f50f0b476886940a5f53f15933047bd3f5 Mon Sep 17 00:00:00 2001 From: Vernon de Goede Date: Wed, 21 Mar 2018 17:36:16 +0100 Subject: [PATCH] Set up testing using RSpec and test against dummy app --- .gitignore | 3 +- Gemfile.lock | 46 ++++++++++++++++++- Rakefile | 23 ++++++++-- app/models/spree/gateway/mollie_gateway.rb | 21 ++++++--- app/models/spree/user_decorator.rb | 4 +- ...41_add_mollie_customer_id_to_spree_user.rb | 3 +- lib/spree_mollie_gateway/engine.rb | 10 +++- spec/models/mollie/client_spec.rb | 6 +++ spec/spec_helper.rb | 32 +++++++++++-- spree_mollie_gateway.gemspec | 10 ++++ 10 files changed, 138 insertions(+), 20 deletions(-) create mode 100644 spec/models/mollie/client_spec.rb diff --git a/.gitignore b/.gitignore index 6549325..a5130b1 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ # rspec failure tracking .rspec_status .idea/ -*.gem \ No newline at end of file +*.gem +spec/dummy \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index a5f6d15..8029963 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -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 @@ -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) @@ -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) @@ -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) @@ -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) @@ -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) @@ -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) @@ -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) @@ -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 diff --git a/Rakefile b/Rakefile index b7e9ed5..03cef38 100644 --- a/Rakefile +++ b/Rakefile @@ -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 \ No newline at end of file diff --git a/app/models/spree/gateway/mollie_gateway.rb b/app/models/spree/gateway/mollie_gateway.rb index 4e88129..173ce9f 100644 --- a/app/models/spree/gateway/mollie_gateway.rb +++ b/app/models/spree/gateway/mollie_gateway.rb @@ -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 @@ -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 @@ -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}", diff --git a/app/models/spree/user_decorator.rb b/app/models/spree/user_decorator.rb index 6693b3b..5701c4a 100644 --- a/app/models/spree/user_decorator.rb +++ b/app/models/spree/user_decorator.rb @@ -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 diff --git a/db/migrate/20180301084841_add_mollie_customer_id_to_spree_user.rb b/db/migrate/20180301084841_add_mollie_customer_id_to_spree_user.rb index 9f37f87..4c94722 100644 --- a/db/migrate/20180301084841_add_mollie_customer_id_to_spree_user.rb +++ b/db/migrate/20180301084841_add_mollie_customer_id_to_spree_user.rb @@ -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 diff --git a/lib/spree_mollie_gateway/engine.rb b/lib/spree_mollie_gateway/engine.rb index 995492e..de5b8b2 100644 --- a/lib/spree_mollie_gateway/engine.rb +++ b/lib/spree_mollie_gateway/engine.rb @@ -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) diff --git a/spec/models/mollie/client_spec.rb b/spec/models/mollie/client_spec.rb new file mode 100644 index 0000000..748a0c7 --- /dev/null +++ b/spec/models/mollie/client_spec.rb @@ -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 \ No newline at end of file diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a80620e..ea67c03 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -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! diff --git a/spree_mollie_gateway.gemspec b/spree_mollie_gateway.gemspec index d90497c..1083d95 100644 --- a/spree_mollie_gateway.gemspec +++ b/spree_mollie_gateway.gemspec @@ -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