diff --git a/.circleci/config.yml b/.circleci/config.yml index 99d13624..591130fb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -10,33 +10,47 @@ orbs: # or goes EOL. solidusio_extensions: solidusio/extensions@volatile -executors: - sqlite: - description: Run specs with an SQLite - docker: - - image: cimg/ruby:2.7-browsers - environment: - RAILS_ENV: test - DB: sqlite - jobs: run-specs-with-postgres: - executor: solidusio_extensions/postgres + executor: + name: solidusio_extensions/postgres + ruby_version: "3.2" + environment: + FRONTEND: "/home/circleci/project/spec/solidus_frontend_app_template.rb" + AUTHENTICATION: "devise" steps: - browser-tools/install-chrome - - solidusio_extensions/run-tests + - checkout + - solidusio_extensions/dependencies + - solidusio_extensions/run-tests-solidus-main + - solidusio_extensions/store-test-results + run-specs-with-mysql: - executor: solidusio_extensions/mysql + executor: + name: solidusio_extensions/mysql + ruby_version: "3.1" + environment: + FRONTEND: "/home/circleci/project/spec/solidus_frontend_app_template.rb" steps: - browser-tools/install-chrome - - solidusio_extensions/run-tests + - checkout + - solidusio_extensions/dependencies + - solidusio_extensions/run-tests-solidus-current + - solidusio_extensions/store-test-results run-specs-with-sqlite: - executor: sqlite + executor: + name: solidusio_extensions/sqlite + ruby_version: "3.0" steps: - browser-tools/install-chrome - - solidusio_extensions/run-tests + - checkout + - solidusio_extensions/dependencies + - solidusio_extensions/run-tests-solidus-older + - solidusio_extensions/store-test-results lint-code: - executor: solidusio_extensions/sqlite-memory + executor: + name: solidusio_extensions/sqlite-memory + ruby_version: "3.0" steps: - solidusio_extensions/lint-code diff --git a/Rakefile b/Rakefile index 5b9a827b..6f70d535 100644 --- a/Rakefile +++ b/Rakefile @@ -6,4 +6,42 @@ ENV['SKIP_SOLIDUS_BOLT'] = 'true' require 'solidus_dev_support/rake_tasks' SolidusDevSupport::RakeTasks.install -task default: 'extension:specs' +# Override the default dummy app generation task to +# make it compatible with all the supported Solidus versions. +Rake::Task['extension:test_app'].clear +task 'extension:test_app' do # rubocop:disable Rails/RakeEnvironment + Spree::DummyGeneratorHelper.inject_extension_requirements = true + + require 'solidus_stripe' + + Rails.env = ENV["RAILS_ENV"] = 'test' + + Spree::DummyGenerator.start ["--lib-name=solidus_stripe"] + + # While the dummy app is generated the current directory + # within ruby is changed to that of the dummy app. + sh({ + 'FRONTEND' => ENV['FRONTEND'] || "#{__dir__}/spec/solidus_frontend_app_template.rb", + }, [ + 'bin/rails', + 'generate', + 'solidus:install', + Dir.pwd, # use the current dir as Rails.root + "--auto-accept", + "--authentication=none", + "--payment-method=none", + "--migrate=false", + "--seed=false", + "--sample=false", + "--user-class=Spree::LegacyUser", + ].shelljoin) + + puts "Setting up dummy database..." + sh "bin/rails db:environment:set RAILS_ENV=test" + sh "bin/rails db:drop db:create db:migrate VERBOSE=false RAILS_ENV=test" + + puts 'Running extension installation generator...' + sh "bin/rails generate solidus_stripe:install --auto-run-migrations" +end + +task default: ['extension:specs'] diff --git a/lib/generators/solidus_stripe/install/install_generator.rb b/lib/generators/solidus_stripe/install/install_generator.rb index 59643de5..7a8f755d 100644 --- a/lib/generators/solidus_stripe/install/install_generator.rb +++ b/lib/generators/solidus_stripe/install/install_generator.rb @@ -14,7 +14,7 @@ def add_migrations end def run_migrations - run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]')) # rubocop:disable Layout/LineLength + run_migrations = options[:auto_run_migrations] || ENV['CI'] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]')) # rubocop:disable Layout/LineLength if run_migrations run 'bin/rails db:migrate' else diff --git a/solidus_stripe.gemspec b/solidus_stripe.gemspec index ea434af8..8fdf4323 100644 --- a/solidus_stripe.gemspec +++ b/solidus_stripe.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.executables = files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.add_dependency 'solidus_core', ['>= 2.3', '< 4'] + spec.add_dependency 'solidus_core', ['>= 3', '< 5'] spec.add_dependency 'solidus_support', '~> 0.8' spec.add_dependency 'activemerchant', '>= 1.105' spec.add_dependency 'rexml' diff --git a/spec/features/stripe_checkout_spec.rb b/spec/features/stripe_checkout_spec.rb index e35ce99e..10a38855 100644 --- a/spec/features/stripe_checkout_spec.rb +++ b/spec/features/stripe_checkout_spec.rb @@ -23,7 +23,7 @@ FactoryBot.create(:product, name: "DL-44") - visit spree.root_path + visit '/' click_link "DL-44" click_button "Add To Cart" @@ -85,7 +85,7 @@ click_button "Place Order" expect(page).to have_content("Your order has been processed successfully") - visit spree.root_path + visit '/' click_link "DL-44" click_button "Add To Cart" @@ -207,7 +207,7 @@ click_button "Place Order" expect(page).to have_content("Your order has been processed successfully") - visit spree.root_path + visit '/' click_link "DL-44" click_button "Add To Cart" @@ -329,7 +329,7 @@ click_button "Place Order" expect(page).to have_content("Your order has been processed successfully") - visit spree.root_path + visit '/' click_link "DL-44" click_button "Add To Cart" diff --git a/spec/models/solidus_stripe/create_intents_payment_service_spec.rb b/spec/models/solidus_stripe/create_intents_payment_service_spec.rb index 4db47bf4..8c541a75 100644 --- a/spec/models/solidus_stripe/create_intents_payment_service_spec.rb +++ b/spec/models/solidus_stripe/create_intents_payment_service_spec.rb @@ -102,7 +102,7 @@ end before do - response = double(success?: true, authorization: payment.response_code) + response = ActiveMerchant::Billing::Response.new(true, nil, {}, authorization: payment.response_code) allow_any_instance_of(Spree::PaymentMethod::StripeCreditCard).to receive(:void) { response } end diff --git a/spec/models/spree/payment_method/stripe_credit_card_spec.rb b/spec/models/spree/payment_method/stripe_credit_card_spec.rb index af3e1c8f..2bb21a02 100644 --- a/spec/models/spree/payment_method/stripe_credit_card_spec.rb +++ b/spec/models/spree/payment_method/stripe_credit_card_spec.rb @@ -262,10 +262,14 @@ end let!(:success_response) do - double('success_response', success?: true, - authorization: '123', - avs_result: { 'code' => 'avs-code' }, - cvv_result: { 'code' => 'cvv-code', 'message' => "CVV Result" }) + ActiveMerchant::Billing::Response.new( + true, + nil, + {}, + avs_result: { 'code' => 'avs-code' }, + cvv_result: 'cvv-code', + authorization: '123', + ) end after do diff --git a/spec/solidus_frontend_app_template.rb b/spec/solidus_frontend_app_template.rb new file mode 100644 index 00000000..a3a3b21e --- /dev/null +++ b/spec/solidus_frontend_app_template.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +create_file "public/robots.txt" +bundle_command "add solidus_frontend --github solidusio/solidus_frontend --branch #{ENV['SOLIDUS_BRANCH'] || 'main'}" +generate "solidus_frontend:install --auto-accept" +empty_directory 'lib/generators/solidus_frontend/install' + +create_file 'lib/generators/solidus_frontend/install/install_generator.rb', <<-CODE + puts "SolidusFrontend::Generators::InstallGenerator was disabled." + module SolidusFrontend + module Generators + class InstallGenerator < Rails::Generators::Base + class_option :auto_accept, type: :boolean, default: false + end + end + end +CODE