diff --git a/.circleci/config.yml b/.circleci/config.yml index 12bb10ef..eb47bec3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,6 +1,9 @@ version: 2.1 orbs: + # Required for feature specs. + browser-tools: circleci/browser-tools@1.1 + # Always take the latest version of the orb, this allows us to # run specs against Solidus supported versions only without the need # to change this configuration every time a Solidus version is released @@ -8,28 +11,63 @@ orbs: solidusio_extensions: solidusio/extensions@volatile jobs: - run-specs-with-postgres: - executor: solidusio_extensions/postgres + run-specs: + parameters: + solidus: + type: string + default: main + db: + type: string + default: "postgres" + ruby: + type: string + default: "3.2" + executor: + name: solidusio_extensions/<< parameters.db >> + ruby_version: << parameters.ruby >> steps: - - solidusio_extensions/run-tests - run-specs-with-mysql: - executor: solidusio_extensions/mysql + - checkout + - browser-tools/install-chrome + - solidusio_extensions/run-tests-solidus-<< parameters.solidus >> + + lint-code: + executor: + name: solidusio_extensions/sqlite + ruby_version: "3.1" steps: - - solidusio_extensions/run-tests + - solidusio_extensions/lint-code workflows: "Run specs on supported Solidus versions": jobs: - - run-specs-with-postgres - - run-specs-with-mysql - "Weekly run specs against master": + - run-specs: + name: &name "run-specs-solidus-<< matrix.solidus >>-ruby-<< matrix.ruby >>-db-<< matrix.db >>" + matrix: + parameters: { solidus: ["main"], ruby: ["3.2"], db: ["postgres"] } + - run-specs: + name: *name + matrix: + parameters: { solidus: ["current"], ruby: ["3.1"], db: ["mysql"] } + - run-specs: + name: *name + matrix: + parameters: { solidus: ["older"], ruby: ["3.0"], db: ["sqlite"] } + - lint-code + + "Weekly run specs against main": triggers: - schedule: cron: "0 0 * * 4" # every Thursday filters: branches: only: - - master + - main jobs: - - run-specs-with-postgres - - run-specs-with-mysql + - run-specs: + name: *name + matrix: + parameters: { solidus: ["main"], ruby: ["3.2"], db: ["postgres"] } + - run-specs: + name: *name + matrix: + parameters: { solidus: ["current"], ruby: ["3.1"], db: ["mysql"] } diff --git a/.github/stale.yml b/.github/stale.yml index d9f65632..0d0b1c99 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -1,17 +1 @@ -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 60 -# Number of days of inactivity before a stale issue is closed -daysUntilClose: 7 -# Issues with these labels will never be considered stale -exemptLabels: - - pinned - - security -# Label to use when marking an issue as stale -staleLabel: wontfix -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false \ No newline at end of file +_extends: .github diff --git a/.github_changelog_generator b/.github_changelog_generator new file mode 100644 index 00000000..eac09621 --- /dev/null +++ b/.github_changelog_generator @@ -0,0 +1,2 @@ +issues=false +exclude-labels=infrastructure diff --git a/.gitignore b/.gitignore index bcd4aea4..1ba20966 100644 --- a/.gitignore +++ b/.gitignore @@ -8,9 +8,14 @@ .sass-cache coverage Gemfile.lock +Gemfile-local tmp nbproject pkg *.swp spec/dummy spec/examples.txt +/sandbox +.rvmrc +.ruby-version +.ruby-gemset diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 481a0327..92aa12ec 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,47 +1,59 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2020-01-21 11:29:49 +0100 using RuboCop version 0.76.0. +# on 2025-01-11 17:52:21 UTC using RuboCop version 1.70.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of RuboCop, may require this file to be generated again. -# Offense count: 3 -# Cop supports --auto-correct. +# Offense count: 9 +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle, IndentationWidth. # SupportedStyles: with_first_argument, with_fixed_indentation -Layout/AlignArguments: +Layout/ArgumentAlignment: Exclude: - 'config/initializers/ransack.rb' - 'spec/features/admin/gift_cards_spec.rb' # Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyleAlignWith, AutoCorrect, Severity. +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyleAlignWith, Severity. # SupportedStylesAlignWith: start_of_line, def Layout/DefEndAlignment: Exclude: - 'app/controllers/spree/api/gift_cards_controller.rb' -# Offense count: 4 +# Offense count: 3 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AllowedMethods, AllowedPatterns. Lint/AmbiguousBlockAssociation: Exclude: - - 'spec/models/spree/order_contents_spec.rb' - 'spec/models/spree/virtual_gift_card_spec.rb' # Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). Lint/AmbiguousOperator: Exclude: - 'lib/solidus_virtual_gift_card/engine.rb' # Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AutoCorrect. Lint/UselessAssignment: Exclude: - 'spec/models/spree/order_contents_spec.rb' +# Offense count: 3 +# Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers, AllowedPatterns. +# SupportedStyles: snake_case, normalcase, non_integer +# AllowedIdentifiers: capture3, iso8601, rfc1123_date, rfc822, rfc2822, rfc3339, x86_64 +Naming/VariableNumber: + Exclude: + - 'spec/models/spree/line_item_spec.rb' + - 'spec/models/spree/order_spec.rb' + # Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: AutoCorrect. +# This cop supports unsafe autocorrection (--autocorrect-all). Performance/TimesMap: Exclude: - 'app/models/spree/redemption_code_generator.rb' @@ -54,7 +66,7 @@ RSpec/AnyInstance: - 'spec/features/admin/products_card_spec.rb' # Offense count: 45 -# Configuration parameters: Prefixes. +# Configuration parameters: Prefixes, AllowedPatterns. # Prefixes: when, with, without RSpec/ContextWording: Exclude: @@ -67,6 +79,7 @@ RSpec/ContextWording: - 'spec/models/spree/virtual_gift_card_spec.rb' # Offense count: 1 +# Configuration parameters: IgnoredMetadata. RSpec/DescribeClass: Exclude: - 'spec/lib/tasks/send_gift_card_emails_spec.rb' @@ -98,12 +111,17 @@ RSpec/MessageSpies: EnforcedStyle: receive # Offense count: 17 -# Configuration parameters: AggregateFailuresByDefault. RSpec/MultipleExpectations: Max: 6 +# Offense count: 42 +# Configuration parameters: AllowSubject. +RSpec/MultipleMemoizedHelpers: + Max: 14 + # Offense count: 100 -# Configuration parameters: IgnoreSharedExamples. +# Configuration parameters: EnforcedStyle, IgnoreSharedExamples. +# SupportedStyles: always, named_only RSpec/NamedSubject: Exclude: - 'spec/controllers/spree/admin/gift_cards_controller_spec.rb' @@ -118,14 +136,30 @@ RSpec/NamedSubject: - 'spec/models/spree/virtual_gift_card_spec.rb' # Offense count: 31 +# Configuration parameters: AllowedGroups. RSpec/NestedGroups: Max: 6 +# Offense count: 2 +RSpec/RepeatedExampleGroupBody: + Exclude: + - 'spec/models/spree/virtual_gift_card_spec.rb' + # Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AutoCorrect. RSpec/ScatteredLet: Exclude: - 'spec/controllers/spree/api/gift_cards_controller_spec.rb' +# Offense count: 12 +RSpec/StubbedMock: + Exclude: + - 'spec/controllers/spree/admin/gift_cards_controller_spec.rb' + - 'spec/lib/tasks/send_gift_card_emails_spec.rb' + - 'spec/models/spree/order_spec.rb' + - 'spec/models/spree/virtual_gift_card_spec.rb' + # Offense count: 6 # Configuration parameters: IgnoreNameless, IgnoreSymbolicNames. RSpec/VerifiedDoubles: @@ -136,13 +170,14 @@ RSpec/VerifiedDoubles: # Offense count: 1 # Configuration parameters: Include. -# Include: db/migrate/*.rb +# Include: db/**/*.rb Rails/CreateTableWithTimestamps: Exclude: - 'db/migrate/20140623152903_create_virtual_gift_card.rb' # Offense count: 6 -# Configuration parameters: EnforcedStyle. +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle, AllowToTime. # SupportedStyles: strict, flexible Rails/Date: Exclude: @@ -152,23 +187,22 @@ Rails/Date: - 'spec/models/spree/order_contents_spec.rb' # Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: Include. -# Include: app/models/**/*.rb -Rails/FindBy: - Exclude: - - 'app/models/spree/virtual_gift_card.rb' - -# Offense count: 1 +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: Include. # Include: app/**/*.rb, config/**/*.rb, db/**/*.rb, lib/**/*.rb Rails/Output: Exclude: - 'lib/generators/solidus_virtual_gift_card/install/install_generator.rb' +# Offense count: 2 +# This cop supports unsafe autocorrection (--autocorrect-all). +Rails/ReflectionClassName: + Exclude: + - 'app/models/spree/virtual_gift_card.rb' + # Offense count: 3 -# Configuration parameters: Blacklist, Whitelist. -# Blacklist: decrement!, decrement_counter, increment!, increment_counter, toggle!, touch, update_all, update_attribute, update_column, update_columns, update_counters +# Configuration parameters: ForbiddenMethods, AllowedMethods. +# ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, insert, insert!, insert_all, insert_all!, toggle!, touch, touch_all, update_all, update_attribute, update_column, update_columns, update_counters, upsert, upsert_all Rails/SkipsModelValidations: Exclude: - 'db/migrate/20151111211220_backfill_inventory_units_on_gift_card.rb' @@ -176,8 +210,8 @@ Rails/SkipsModelValidations: - 'spec/features/admin/gift_cards_spec.rb' # Offense count: 5 -# Cop supports --auto-correct. -# Configuration parameters: AutoCorrect, EnforcedStyle. +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle. # SupportedStyles: nested, compact Style/ClassAndModuleChildren: Exclude: @@ -188,15 +222,16 @@ Style/ClassAndModuleChildren: - 'app/models/spree/virtual_gift_card.rb' # Offense count: 4 -# Configuration parameters: MinBodyLength. +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: MinBodyLength, AllowConsecutiveConditionals. Style/GuardClause: Exclude: - 'app/controllers/spree/admin/gift_cards_controller.rb' - 'app/decorators/models/solidus_virtual_gift_card/spree/order_contents_decorator.rb' -# Offense count: 41 -# Cop supports --auto-correct. -# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns. +# Offense count: 24 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns, SplitStrings. # URISchemes: http, https -Metrics/LineLength: +Layout/LineLength: Max: 170 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..a5b4323a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,3 @@ +# Changelog + +See https://github.com/solidusio-contrib/solidus_virtual_gift_card/releases or OLD_CHANGELOG.md for older versions. diff --git a/Gemfile b/Gemfile index c7ff389c..d910773f 100644 --- a/Gemfile +++ b/Gemfile @@ -3,38 +3,46 @@ source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } -branch = ENV.fetch('SOLIDUS_BRANCH', 'master') -solidus_git, solidus_frontend_git = if (branch == 'master') || (branch >= 'v3.2') - %w[solidusio/solidus solidusio/solidus_frontend] - else - %w[solidusio/solidus] * 2 - end -gem 'solidus', github: solidus_git, branch: branch -gem 'solidus_frontend', github: solidus_frontend_git, branch: branch +branch = ENV.fetch('SOLIDUS_BRANCH', 'main') +gem 'solidus', github: 'solidusio/solidus', branch: branch + +# The solidus_frontend gem has been pulled out since v3.2 +if branch >= 'v3.2' + gem 'solidus_frontend' +elsif branch == 'main' + gem 'solidus_frontend', github: 'solidusio/solidus_frontend' +else + gem 'solidus_frontend', github: 'solidusio/solidus', branch: branch +end # Needed to help Bundler figure out how to resolve dependencies, # otherwise it takes forever to resolve them. # See https://github.com/bundler/bundler/issues/6677 gem 'rails', '>0.a' -# Provides basic authentication functionality for testing parts of your engine -gem 'solidus_auth_devise' - -case ENV['DB'] +case ENV.fetch('DB', nil) when 'mysql' gem 'mysql2' when 'postgresql' gem 'pg' else - gem 'sqlite3' + gem 'sqlite3', '~> 1.4' end group :test do gem 'rails-controller-testing' end +# While we still support Ruby < 3 we need to workaround a limitation in +# the 'async' gem that relies on the latest ruby, since RubyGems doesn't +# resolve gems based on the required ruby version. +gem 'async', '< 3' if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3') + gemspec # Use a local Gemfile to include development dependencies that might not be -# relevant for the project or for other contributors, e.g.: `gem 'pry-debug'`. -send :eval_gemfile, 'Gemfile-local' if File.exist? 'Gemfile-local' +# relevant for the project or for other contributors, e.g. pry-byebug. +# +# We use `send` instead of calling `eval_gemfile` to work around an issue with +# how Dependabot parses projects: https://github.com/dependabot/dependabot-core/issues/1658. +send(:eval_gemfile, 'Gemfile-local') if File.exist? 'Gemfile-local' diff --git a/Rakefile b/Rakefile index c08aa468..a6562a8d 100644 --- a/Rakefile +++ b/Rakefile @@ -1,5 +1,6 @@ # frozen_string_literal: true +require "bundler/gem_tasks" require 'solidus_dev_support/rake_tasks' SolidusDevSupport::RakeTasks.install diff --git a/app/assets/javascripts/spree/backend/solidus_virtual_gift_card.js b/app/assets/javascripts/spree/backend/solidus_virtual_gift_card.js new file mode 100644 index 00000000..103cdc70 --- /dev/null +++ b/app/assets/javascripts/spree/backend/solidus_virtual_gift_card.js @@ -0,0 +1,2 @@ +// Placeholder manifest file. +// the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/backend/all.js' diff --git a/app/assets/javascripts/spree/frontend/solidus_virtual_gift_card.js b/app/assets/javascripts/spree/frontend/solidus_virtual_gift_card.js index e69de29b..9b2fd60c 100644 --- a/app/assets/javascripts/spree/frontend/solidus_virtual_gift_card.js +++ b/app/assets/javascripts/spree/frontend/solidus_virtual_gift_card.js @@ -0,0 +1,2 @@ +// Placeholder manifest file. +// the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/frontend/all.js' diff --git a/app/assets/stylesheets/spree/backend/solidus_virtual_gift_card.css b/app/assets/stylesheets/spree/backend/solidus_virtual_gift_card.css index e69de29b..e3c23662 100644 --- a/app/assets/stylesheets/spree/backend/solidus_virtual_gift_card.css +++ b/app/assets/stylesheets/spree/backend/solidus_virtual_gift_card.css @@ -0,0 +1,4 @@ +/* +Placeholder manifest file. +the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/backend/all.css' +*/ diff --git a/app/assets/stylesheets/spree/frontend/solidus_virtual_gift_card.css b/app/assets/stylesheets/spree/frontend/solidus_virtual_gift_card.css index e69de29b..da236237 100644 --- a/app/assets/stylesheets/spree/frontend/solidus_virtual_gift_card.css +++ b/app/assets/stylesheets/spree/frontend/solidus_virtual_gift_card.css @@ -0,0 +1,4 @@ +/* +Placeholder manifest file. +the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/frontend/all.css' +*/ diff --git a/app/controllers/spree/admin/gift_cards_controller.rb b/app/controllers/spree/admin/gift_cards_controller.rb index 746031f8..697bcf64 100644 --- a/app/controllers/spree/admin/gift_cards_controller.rb +++ b/app/controllers/spree/admin/gift_cards_controller.rb @@ -50,7 +50,7 @@ def deactivate def send_email @gift_card.send_email - redirect_to :back + redirect_back(fallback_location: admin_orders_path) end private @@ -74,7 +74,7 @@ def load_order end def load_user - @user = Spree::User.find(params[:user_id]) + @user = Spree.user_class.find(params[:user_id]) end def gift_card_params diff --git a/app/decorators/models/solidus_virtual_gift_card/spree/line_item_decorator.rb b/app/decorators/models/solidus_virtual_gift_card/spree/line_item_decorator.rb index 4e278348..01adf4a8 100644 --- a/app/decorators/models/solidus_virtual_gift_card/spree/line_item_decorator.rb +++ b/app/decorators/models/solidus_virtual_gift_card/spree/line_item_decorator.rb @@ -7,8 +7,6 @@ def self.prepended(base) base.class_eval do has_many :gift_cards, class_name: 'Spree::VirtualGiftCard', dependent: :destroy delegate :gift_card?, :gift_card, to: :product - - self.whitelisted_ransackable_associations += %w[order] end end @@ -20,6 +18,10 @@ def gift_card_details gift_cards.map(&:details) end + def self.ransackable_associations(auth_object = nil) + super + %w[order] + end + ::Spree::LineItem.prepend self end end diff --git a/app/decorators/models/solidus_virtual_gift_card/spree/order_decorator.rb b/app/decorators/models/solidus_virtual_gift_card/spree/order_decorator.rb index 4851af88..91730045 100644 --- a/app/decorators/models/solidus_virtual_gift_card/spree/order_decorator.rb +++ b/app/decorators/models/solidus_virtual_gift_card/spree/order_decorator.rb @@ -22,7 +22,7 @@ def gift_card_match(line_item, options) end end - def finalize! + def finalize super inventory_units = self.inventory_units gift_cards.each_with_index do |gift_card, index| @@ -31,6 +31,8 @@ def finalize! end def send_gift_card_emails + return unless SolidusVirtualGiftCard.configuration.send_gift_card_emails + gift_cards.each do |gift_card| if gift_card.send_email_at.nil? || gift_card.send_email_at <= DateTime.now gift_card.send_email diff --git a/app/models/spree/virtual_gift_card.rb b/app/models/spree/virtual_gift_card.rb index 74e598cb..65a66f63 100644 --- a/app/models/spree/virtual_gift_card.rb +++ b/app/models/spree/virtual_gift_card.rb @@ -4,8 +4,8 @@ class Spree::VirtualGiftCard < Spree::Base include ActiveSupport::NumberHelper belongs_to :store_credit, class_name: 'Spree::StoreCredit', optional: true - belongs_to :purchaser, class_name: 'Spree::User', optional: true - belongs_to :redeemer, class_name: 'Spree::User', optional: true + belongs_to :purchaser, class_name: Spree::UserClassHandle.new, optional: true + belongs_to :redeemer, class_name: Spree::UserClassHandle.new, optional: true belongs_to :line_item, class_name: 'Spree::LineItem', optional: true belongs_to :inventory_unit, class_name: 'Spree::InventoryUnit', optional: true has_one :order, through: :line_item @@ -18,8 +18,13 @@ class Spree::VirtualGiftCard < Spree::Base scope :by_redemption_code, ->(redemption_code) { where(redemption_code: redemption_code) } scope :purchased, -> { where(redeemable: true) } - self.whitelisted_ransackable_associations = %w[line_item order] - self.whitelisted_ransackable_attributes = %w[redemption_code recipient_email sent_at send_email_at] + def self.ransackable_associations(_auth_object = nil) + %w[line_item order] + end + + def self.ransackable_attributes(_auth_object = nil) + %w[redemption_code recipient_email sent_at send_email_at] + end ransacker :sent_at do Arel.sql('date(sent_at)') @@ -49,7 +54,7 @@ def redeem(redeemer) end def make_redeemable!(purchaser:, inventory_unit:) - update!(redeemable: true, purchaser: purchaser, inventory_unit: inventory_unit, redemption_code: (redemption_code || generate_unique_redemption_code)) + update!(redeemable: true, purchaser: purchaser, inventory_unit: inventory_unit, redemption_code: redemption_code || generate_unique_redemption_code) end def deactivate diff --git a/app/overrides/admin_gift_card_order_confirmation.rb b/app/overrides/admin_gift_card_order_confirmation.rb deleted file mode 100644 index 55993053..00000000 --- a/app/overrides/admin_gift_card_order_confirmation.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -Deface::Override.new( - virtual_path: 'spree/admin/orders/confirm', - name: 'add_gift_cards_to_admin_order_confirmation', - insert_before: '#order-total', - partial: 'spree/admin/orders/confirmation_gift_card_details' -) diff --git a/app/overrides/admin_item_view_gift_card_codes.rb b/app/overrides/admin_item_view_gift_card_codes.rb deleted file mode 100644 index b249c9d7..00000000 --- a/app/overrides/admin_item_view_gift_card_codes.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -Deface::Override.new( - virtual_path: 'spree/admin/orders/confirm/_shipment_manifest', - name: 'add_gift_cards_to_admin_confirm', - insert_bottom: '.item-name', - partial: 'spree/admin/orders/shipments_gift_card_details', -) - -Deface::Override.new( - virtual_path: 'spree/admin/orders/_shipment_manifest', - name: 'admin_item_view_gift_card_codes', - insert_bottom: '.item-name', - partial: 'spree/admin/orders/shipments_gift_card_details', -) - -Deface::Override.new( - virtual_path: 'spree/admin/orders/_carton_manifest', - name: 'admin_item_view_gift_card_codes', - insert_bottom: '.item-name', - partial: 'spree/admin/orders/shipments_gift_card_details', -) diff --git a/app/overrides/admin_user_sidebar_store_credits.rb b/app/overrides/admin_user_sidebar_store_credits.rb deleted file mode 100644 index e2a7d8aa..00000000 --- a/app/overrides/admin_user_sidebar_store_credits.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -Deface::Override.new( - virtual_path: 'spree/admin/users/_tabs', - name: 'admin_user_sidebar_store_credits', - insert_bottom: "[data-hook='admin_user_tab_options']", - partial: 'spree/admin/users/gift_card_tabs' -) diff --git a/app/overrides/admin_user_sub_menu.rb b/app/overrides/admin_user_sub_menu.rb deleted file mode 100644 index a987db9c..00000000 --- a/app/overrides/admin_user_sub_menu.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -Deface::Override.new( - virtual_path: 'spree/admin/shared/_tabs', - name: 'admin_user_sub_menu_index', - replace: "erb[loud]:contains('BackendConfiguration::USER_TABS')", - text: <<~ERB) - <%= tab *Spree::BackendConfiguration::USER_TABS, url: spree.admin_users_path, icon: 'user' do %> - <%- render "spree/admin/users/sub_menu" %> - <%- end %> - ERB diff --git a/app/overrides/solidus_virtual_gift_card/admin_gift_card_order_confirmation.rb b/app/overrides/solidus_virtual_gift_card/admin_gift_card_order_confirmation.rb new file mode 100644 index 00000000..4db13386 --- /dev/null +++ b/app/overrides/solidus_virtual_gift_card/admin_gift_card_order_confirmation.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module SolidusVirtualGiftCard + module AdminGiftCardOrderConfirmation + Rails.logger.debug("Deface override applied for gift card details.") + Deface::Override.new( + virtual_path: 'spree/admin/orders/_order_details', + name: 'add_gift_cards_to_admin_order_confirmation', + insert_before: "[data-hook='order_details_total']", + partial: 'spree/admin/orders/confirmation_gift_card_details' + ) + end +end diff --git a/app/overrides/solidus_virtual_gift_card/admin_item_view_gift_card_codes.rb b/app/overrides/solidus_virtual_gift_card/admin_item_view_gift_card_codes.rb new file mode 100644 index 00000000..8f2a399f --- /dev/null +++ b/app/overrides/solidus_virtual_gift_card/admin_item_view_gift_card_codes.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +module SolidusVirtualGiftCard + module AdminItemViewGiftCardCodes + Deface::Override.new( + virtual_path: 'spree/admin/orders/confirm/_shipment_manifest', + name: 'add_gift_cards_to_admin_confirm', + insert_bottom: '.item-name', + partial: 'spree/admin/orders/shipments_gift_card_details', + ) + + Deface::Override.new( + virtual_path: 'spree/admin/orders/_shipment_manifest', + name: 'admin_item_view_gift_card_codes', + insert_bottom: '.item-name', + partial: 'spree/admin/orders/shipments_gift_card_details', + ) + + Deface::Override.new( + virtual_path: 'spree/admin/orders/_carton_manifest', + name: 'admin_item_view_gift_card_codes', + insert_bottom: '.item-name', + partial: 'spree/admin/orders/shipments_gift_card_details', + ) + end +end diff --git a/app/overrides/solidus_virtual_gift_card/admin_user_sidebar_store_credits.rb b/app/overrides/solidus_virtual_gift_card/admin_user_sidebar_store_credits.rb new file mode 100644 index 00000000..249f5fd0 --- /dev/null +++ b/app/overrides/solidus_virtual_gift_card/admin_user_sidebar_store_credits.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module SolidusVirtualGiftCard + module AdminUserSidebarStoreCredits + Deface::Override.new( + virtual_path: 'spree/admin/users/_tabs', + name: 'admin_user_sidebar_store_credits', + insert_bottom: "[data-hook='admin_user_tab_options']", + partial: 'spree/admin/users/gift_card_tabs' + ) + end +end diff --git a/app/views/spree/admin/gift_cards/_lookup_form.html.erb b/app/views/spree/admin/gift_cards/_lookup_form.html.erb index 2e18ab69..1bf7aa34 100644 --- a/app/views/spree/admin/gift_cards/_lookup_form.html.erb +++ b/app/views/spree/admin/gift_cards/_lookup_form.html.erb @@ -20,7 +20,7 @@
<%= label_tag nil, "Order Number" %> - <%= f.text_field :line_item_order_number_cont, size: 25 %> + <%= f.text_field :order_number_cont, size: 25 %>
diff --git a/app/views/spree/admin/orders/_confirmation_gift_card_details.html.erb b/app/views/spree/admin/orders/_confirmation_gift_card_details.html.erb index cea77d87..ccf1d3fb 100644 --- a/app/views/spree/admin/orders/_confirmation_gift_card_details.html.erb +++ b/app/views/spree/admin/orders/_confirmation_gift_card_details.html.erb @@ -1,50 +1,51 @@ -
- - <%= I18n.t('spree.gift_cards_details') %> +
+ + <%= I18n.t('spree.admin.tab.gift_cards') %> -
- - - - - - - - - +
+ + + + + + + + + + + + + + + + - - - - - - - + + <% @order.line_items.flat_map(&:gift_cards).each do |gift_card| %> + + + + + + + + + <% end %> + +
<%= I18n.t('spree.admin.gift_cards.recipient_email') %><%= I18n.t('spree.admin.gift_cards.recipient_name') %><%= I18n.t('spree.admin.gift_cards.purchaser_name') %><%= I18n.t('spree.admin.gift_cards.gift_message') %><%= I18n.t('spree.admin.gift_cards.send_email_at') %>
<%= I18n.t('spree.recipient_email') %><%= I18n.t('spree.recipient_name') %><%= I18n.t('spree.purchaser_name') %><%= I18n.t('spree.gift_message') %><%= I18n.t('spree.send_email_at') %>
+ <%= gift_card.recipient_email || "n/a" %> + + <%= gift_card.recipient_name || "n/a" %> + + <%= gift_card.purchaser_name || "n/a" %> + + <%= gift_card.gift_message || "n/a" %> + + <%= gift_card.formatted_send_email_at || "Immediately" %> + + <%= link_to '', edit_admin_order_gift_card_path(@order, gift_card), :class => 'fa fa-edit no-text with-tip', :title => I18n.t('spree.actions.edit') %> +
+
- - <% @order.line_items.flat_map(&:gift_cards).each do |gift_card| %> - - - <%= gift_card.recipient_email || "n/a" %> - - - <%= gift_card.recipient_name || "n/a" %> - - - <%= gift_card.purchaser_name || "n/a" %> - - - <%= gift_card.gift_message || "n/a" %> - - - <%= gift_card.formatted_send_email_at || "Immediately" %> - - - <%= link_to '', edit_admin_order_gift_card_path(@order, gift_card), :class => 'fa fa-edit no-text with-tip', :title => I18n.t('spree.actions.edit') %> - - - <% end %> - - diff --git a/bin/rails b/bin/rails index c535fd20..6dbbbc36 100755 --- a/bin/rails +++ b/bin/rails @@ -1,15 +1,7 @@ #!/usr/bin/env ruby -# frozen_string_literal: true - -app_root = 'spec/dummy' - -unless File.exist? "#{app_root}/bin/rails" - system "bin/rake", app_root or begin # rubocop:disable Style/AndOr - warn "Automatic creation of the dummy app failed" - exit 1 - end +if %w[g generate].include? ARGV.first + exec "#{__dir__}/rails-engine", *ARGV +else + exec "#{__dir__}/rails-sandbox", *ARGV end - -Dir.chdir app_root -exec 'bin/rails', *ARGV diff --git a/bin/rails-engine b/bin/rails-engine new file mode 100755 index 00000000..7396e899 --- /dev/null +++ b/bin/rails-engine @@ -0,0 +1,13 @@ +#!/usr/bin/env ruby +# This command will automatically be run when you run "rails" with Rails gems +# installed from the root of your application. + +ENGINE_ROOT = File.expand_path('..', __dir__) +ENGINE_PATH = File.expand_path('../lib/solidus_virtual_gift_card/engine', __dir__) + +# Set up gems listed in the Gemfile. +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) +require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) + +require 'rails/all' +require 'rails/engine/commands' diff --git a/bin/rails-sandbox b/bin/rails-sandbox new file mode 100755 index 00000000..ad2df04d --- /dev/null +++ b/bin/rails-sandbox @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby + +app_root = 'sandbox' + +unless File.exist? "#{app_root}/bin/rails" + warn 'Creating the sandbox app...' + Dir.chdir "#{__dir__}/.." do + system "#{__dir__}/sandbox" or begin + warn 'Automatic creation of the sandbox app failed' + exit 1 + end + end +end + +Dir.chdir app_root +exec 'bin/rails', *ARGV diff --git a/bin/rake b/bin/rake new file mode 100755 index 00000000..1e6eacd3 --- /dev/null +++ b/bin/rake @@ -0,0 +1,7 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("rake", "rake") diff --git a/bin/sandbox b/bin/sandbox new file mode 100755 index 00000000..bef1956a --- /dev/null +++ b/bin/sandbox @@ -0,0 +1,77 @@ +#!/usr/bin/env bash + +set -e +test -z "${DEBUG+empty_string}" || set -x + +test "$DB" = "sqlite" && export DB="sqlite3" + +if [ -z "$PAYMENT_METHOD" ] +then + PAYMENT_METHOD="none" +fi + +if [ -z "$SOLIDUS_BRANCH" ] +then + echo "~~> Use 'export SOLIDUS_BRANCH=[main|v4.0|...]' to control the Solidus branch" + SOLIDUS_BRANCH="main" +fi +echo "~~> Using branch $SOLIDUS_BRANCH of solidus" + +extension_name="solidus_virtual_gift_card" + +# Stay away from the bundler env of the containing extension. +function unbundled { + ruby -rbundler -e' + Bundler.with_unbundled_env {system *ARGV}' -- \ + env BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES=true $@ +} + +echo "~~~> Removing the old sandbox" +rm -rf ./sandbox + +echo "~~~> Creating a pristine Rails app" +rails_version=`bundle exec ruby -e'require "rails"; puts Rails.version'` +rails _${rails_version}_ new sandbox \ + --database="${DB:-sqlite3}" \ + --skip-git \ + --skip-keeps \ + --skip-rc \ + --skip-bootsnap \ + --skip-test + +if [ ! -d "sandbox" ]; then + echo 'sandbox rails application failed' + exit 1 +fi + +echo "~~~> Adding solidus (with i18n) to the Gemfile" +cd ./sandbox +cat <> Gemfile +gem 'solidus', github: 'solidusio/solidus', branch: '$SOLIDUS_BRANCH' +gem 'rails-i18n' +gem 'solidus_i18n' +gem 'solidus_auth_devise' + +gem '$extension_name', path: '..' + +group :test, :development do + platforms :mri do + gem 'pry-byebug' + end +end +RUBY + +unbundled bundle install --gemfile Gemfile + +unbundled bundle exec rake db:drop db:create + +unbundled bundle exec rails generate solidus:install \ + --auto-accept \ + $@ + +unbundled bundle exec rails generate solidus:auth:install --auto-run-migrations +unbundled bundle exec rails generate ${extension_name}:install --auto-run-migrations + +echo +echo "๐Ÿš€ Sandbox app successfully created for $extension_name!" +echo "๐Ÿงช This app is intended for test purposes." diff --git a/bin/setup b/bin/setup index 40d7811d..67d91932 100755 --- a/bin/setup +++ b/bin/setup @@ -5,4 +5,4 @@ set -vx gem install bundler --conservative bundle update -bundle exec rake clobber +bin/rake clobber diff --git a/config/initializers/add_gift_card_to_menu.rb b/config/initializers/add_gift_card_to_menu.rb new file mode 100644 index 00000000..92cfbbec --- /dev/null +++ b/config/initializers/add_gift_card_to_menu.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +Rails.application.config.to_prepare do + Spree::Backend::Config.configure do |config| + config.menu_items = config.menu_items.map do |item| + if item.label.to_sym == :users + # The API of the MenuItem class changes in Solidus 4.2.0 + if item.respond_to?(:children) + unless item.children.any? { |child| child.label == :gift_cards } + item.children << Spree::BackendConfiguration::MenuItem.new( + label: :gift_cards, + condition: -> { can?(:display, Spree::VirtualGiftCard) }, + url: -> { Spree::Core::Engine.routes.url_helpers.admin_gift_cards_path }, + match_path: /gift_cards/ + ) + end + else + item.sections << :gift_cards + end + end + item + end + end +end diff --git a/config/locales/en.yml b/config/locales/en.yml index 92045709..00890be1 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -18,6 +18,7 @@ en: redeem_gift_card: "Redeem Gift Card" redeemed_gift_card: "Redeemed Gift Card" redemption_code: "Redemption Code" + send_email_at: "Send Email At" errors: not_found: "Gift card was not found" please_try_again: "Please try again" diff --git a/config/routes.rb b/config/routes.rb index 953b3a0c..22248dcb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,6 +2,8 @@ Spree::Core::Engine.routes.draw do namespace :admin do + resources :gift_cards, only: [:index] + resources :users, only: [] do resources :gift_cards, only: [] do collection do diff --git a/lib/generators/solidus_virtual_gift_card/install/install_generator.rb b/lib/generators/solidus_virtual_gift_card/install/install_generator.rb index a522a1e0..9af12295 100644 --- a/lib/generators/solidus_virtual_gift_card/install/install_generator.rb +++ b/lib/generators/solidus_virtual_gift_card/install/install_generator.rb @@ -4,33 +4,36 @@ module SolidusVirtualGiftCard module Generators class InstallGenerator < Rails::Generators::Base class_option :auto_run_migrations, type: :boolean, default: false + source_root File.expand_path('templates', __dir__) + + def self.exit_on_failure? + true + end + + def copy_initializer + template 'initializer.rb', 'config/initializers/solidus_virtual_gift_card.rb' + end def add_javascripts - append_file( - 'vendor/assets/javascripts/spree/backend/all.js', - "//= require spree/backend/solidus_virtual_gift_card\n" - ) + append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/solidus_virtual_gift_card\n" + append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/solidus_virtual_gift_card\n" end - def include_seed_data - append_file 'db/seeds.rb', <<~SEEDS - \n - SolidusVirtualGiftCard::Engine.load_seed if defined?(SolidusVirtualGiftCard::Engine) - SEEDS + def add_stylesheets + inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/solidus_virtual_gift_card\n", before: %r{\*/}, verbose: true + inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/solidus_virtual_gift_card\n", before: %r{\*/}, verbose: true end def add_migrations - run 'bundle exec rake railties:install:migrations FROM=solidus_virtual_gift_card' + run 'bin/rails railties:install:migrations FROM=solidus_virtual_gift_card' end def run_migrations - run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?( - ask('Would you like to run the migrations now? [Y/n]') - ) + run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]')) if run_migrations - run 'bundle exec rake db:migrate' + run 'bin/rails db:migrate' else - puts 'Skipping rake db:migrate, don\'t forget to run it!' + puts 'Skipping bin/rails db:migrate, don\'t forget to run it!' end end end diff --git a/lib/generators/solidus_virtual_gift_card/install/templates/initializer.rb b/lib/generators/solidus_virtual_gift_card/install/templates/initializer.rb new file mode 100644 index 00000000..7e9f5814 --- /dev/null +++ b/lib/generators/solidus_virtual_gift_card/install/templates/initializer.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +SolidusVirtualGiftCard.configure do |config| + # Enable or disable sending gift card email notifications + # Set to `true` to allow emails to be sent, or `false` to disable them + config.send_gift_card_emails = true +end diff --git a/lib/solidus_virtual_gift_card.rb b/lib/solidus_virtual_gift_card.rb index d25f1ee2..538035eb 100644 --- a/lib/solidus_virtual_gift_card.rb +++ b/lib/solidus_virtual_gift_card.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true -require 'solidus_core' -require 'solidus_support' - +require 'solidus_virtual_gift_card/configuration' require 'solidus_virtual_gift_card/version' require 'solidus_virtual_gift_card/engine' diff --git a/lib/solidus_virtual_gift_card/configuration.rb b/lib/solidus_virtual_gift_card/configuration.rb new file mode 100644 index 00000000..3b2872a3 --- /dev/null +++ b/lib/solidus_virtual_gift_card/configuration.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module SolidusVirtualGiftCard + class Configuration + attr_accessor :send_gift_card_emails + + def initialize(send_gift_card_emails: true) + @send_gift_card_emails = send_gift_card_emails + end + end + + class << self + def configuration + @configuration ||= Configuration.new + end + + def configure + yield(configuration) + end + end +end diff --git a/lib/solidus_virtual_gift_card/engine.rb b/lib/solidus_virtual_gift_card/engine.rb index 382958bc..c9fefc53 100644 --- a/lib/solidus_virtual_gift_card/engine.rb +++ b/lib/solidus_virtual_gift_card/engine.rb @@ -1,20 +1,23 @@ # frozen_string_literal: true -require 'spree/core' +require 'solidus_core' +require 'solidus_support' module SolidusVirtualGiftCard class Engine < Rails::Engine include SolidusSupport::EngineExtensions isolate_namespace ::Spree + engine_name 'solidus_virtual_gift_card' + # 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| + Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')).sort.each do |c| Rails.configuration.cache_classes ? require(c) : load(c) end end diff --git a/solidus_virtual_gift_card.gemspec b/solidus_virtual_gift_card.gemspec index f8379740..f5caa727 100644 --- a/solidus_virtual_gift_card.gemspec +++ b/solidus_virtual_gift_card.gemspec @@ -1,39 +1,43 @@ # frozen_string_literal: true -$:.push File.expand_path('lib', __dir__) -require 'solidus_virtual_gift_card/version' - -Gem::Specification.new do |s| - s.platform = Gem::Platform::RUBY - s.name = 'solidus_virtual_gift_card' - s.version = SolidusVirtualGiftCard::VERSION - s.summary = "Virtual gift card for purchase, drops into the user's account as store credit" - s.description = s.summary - - s.required_ruby_version = '>= 2.4.0' - - s.author = 'Solidus Team' - s.email = 'contact@solidus.io' - s.homepage = 'https://github.com/solidusio-contrib/solidus_virtual_gift_card' - s.license = 'BSD-3-Clause' - - s.files = Dir.chdir(File.expand_path(__dir__)) do - `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } - end - s.test_files = Dir['spec/**/*'] - s.bindir = "exe" - s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) } - s.require_paths = ["lib"] - - if s.respond_to?(:metadata) - s.metadata["homepage_uri"] = s.homepage if s.homepage - s.metadata["source_code_uri"] = s.homepage if s.homepage +require_relative 'lib/solidus_virtual_gift_card/version' + +Gem::Specification.new do |spec| + spec.name = 'solidus_virtual_gift_card' + spec.version = SolidusVirtualGiftCard::VERSION + spec.authors = ['Solidus Team'] + spec.email = 'contact@solidus.io' + + spec.summary = "Virtual gift card for purchase, drops into the user's account as store credit" + spec.description = "Virtual gift card for purchase, drops into the user's account as store credit" + spec.homepage = 'https://github.com/solidusio-contrib/solidus_virtual_gift_card' + spec.license = 'BSD-3-Clause' + + spec.metadata['homepage_uri'] = spec.homepage + spec.metadata['source_code_uri'] = 'https://github.com/solidusio-contrib/solidus_virtual_gift_card' + spec.metadata['changelog_uri'] = 'https://github.com/DanielePalombo/solidus_virtual_gift_card/blob/main/CHANGELOG.md' + + spec.required_ruby_version = Gem::Requirement.new('>= 2.5', '< 4') + + # Specify which files should be added to the gem when it is released. + # The `git ls-files -z` loads the files in the RubyGem that have been added into git. + files = Dir.chdir(__dir__) { `git ls-files -z`.split("\x0") } + + spec.files = files.grep_v(%r{^(test|spec|features)/}) + spec.test_files = files.grep(%r{^(test|spec|features)/}) + spec.bindir = "exe" + spec.executables = files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.require_paths = ["lib"] + + if spec.respond_to?(:metadata) + spec.metadata["homepage_uri"] = spec.homepage if spec.homepage + spec.metadata["source_code_uri"] = spec.homepage if spec.homepage end - s.add_dependency 'deface' - s.add_dependency 'coffee-rails' - s.add_dependency 'solidus_core', ['>= 2.0.0', '< 4'] - s.add_dependency 'solidus_support', '~> 0.5' + spec.add_dependency 'coffee-rails' + spec.add_dependency 'deface' + spec.add_dependency 'solidus_core', ['>= 2.0.0', '< 5'] + spec.add_dependency 'solidus_support', '~> 0.5' - s.add_development_dependency 'solidus_dev_support' + spec.add_development_dependency 'solidus_dev_support', '~> 2.10' end diff --git a/spec/features/admin/gift_cards_spec.rb b/spec/features/admin/gift_cards_spec.rb index 42097d2d..ceb613a1 100644 --- a/spec/features/admin/gift_cards_spec.rb +++ b/spec/features/admin/gift_cards_spec.rb @@ -29,7 +29,9 @@ it "can edit recipient information and send email date" do visit spree.edit_admin_order_path(order) - click_link("Edit Details") + within('fieldset[data-hook="gift-card"]') do + click_link("Edit") + end fill_in "virtual_gift_card_recipient_name", with: new_recipient_name fill_in "virtual_gift_card_recipient_email", with: new_recipient_email @@ -68,7 +70,7 @@ it "can lookup gift card by order number" do visit spree.admin_gift_cards_path - fill_in "q[line_item_order_number_cont]", with: order.number + fill_in "q[order_number_cont]", with: order.number click_on "Lookup Gift Card" expect(page).to have_content(gift_card.purchaser.email) diff --git a/spec/models/spree/order_contents_spec.rb b/spec/models/spree/order_contents_spec.rb index c1c24f91..ee90d261 100644 --- a/spec/models/spree/order_contents_spec.rb +++ b/spec/models/spree/order_contents_spec.rb @@ -29,19 +29,19 @@ subject { order_contents.add(variant, quantity, options) } it 'creates a line item' do - expect { subject }.to change { Spree::LineItem.count }.by(1) + expect { subject }.to change(Spree::LineItem, :count).by(1) end context 'with a gift card product' do before { variant.product.update(gift_card: true) } it 'creates a line item' do - expect { subject }.to change { Spree::LineItem.count }.by(1) + expect { subject }.to change(Spree::LineItem, :count).by(1) end context 'with a single gift card' do it 'creates a gift card' do - expect { subject }.to change { Spree::VirtualGiftCard.count }.by(1) + expect { subject }.to change(Spree::VirtualGiftCard, :count).by(1) gift_card = Spree::VirtualGiftCard.last expect(gift_card.recipient_name).to eq(recipient_name) expect(gift_card.recipient_email).to eq(recipient_email) @@ -75,7 +75,7 @@ let(:quantity) { 2 } it 'creates two gift cards' do - expect { subject }.to change { Spree::VirtualGiftCard.count }.by(2) + expect { subject }.to change(Spree::VirtualGiftCard, :count).by(2) end end @@ -122,7 +122,7 @@ context 'with a non gift card product' do it 'does not create a gift card' do - expect { subject }.not_to change { Spree::VirtualGiftCard.count } + expect { subject }.not_to change(Spree::VirtualGiftCard, :count) end end end @@ -134,7 +134,7 @@ before { order_contents.add(variant, quantity, options) } it 'deletes a line item' do - expect { subject }.to change { Spree::LineItem.count }.by(-1) + expect { subject }.to change(Spree::LineItem, :count).by(-1) end end @@ -149,11 +149,11 @@ end it 'deletes a line item' do - expect { subject }.to change { Spree::LineItem.count }.by(-1) + expect { subject }.to change(Spree::LineItem, :count).by(-1) end it 'deletes a gift card' do - expect { subject }.to change { Spree::VirtualGiftCard.count }.by(-1) + expect { subject }.to change(Spree::VirtualGiftCard, :count).by(-1) end end @@ -165,7 +165,7 @@ end it 'deletes two gift cards' do - expect { subject }.to change { Spree::VirtualGiftCard.count }.by(-2) + expect { subject }.to change(Spree::VirtualGiftCard, :count).by(-2) end end @@ -219,11 +219,11 @@ end it 'removes the line item with the correct variant' do - expect { subject }.to change { Spree::LineItem.count }.by(-1) + expect { subject }.to change(Spree::LineItem, :count).by(-1) end it 'removes the gift card' do - expect { subject }.to change { Spree::VirtualGiftCard.count }.by(-1) + expect { subject }.to change(Spree::VirtualGiftCard, :count).by(-1) end end end @@ -247,7 +247,7 @@ let(:quantity) { '4' } it 'creates new gift cards' do - expect { subject }.to change { Spree::VirtualGiftCard.count }.by(2) + expect { subject }.to change(Spree::VirtualGiftCard, :count).by(2) end end @@ -256,7 +256,7 @@ let(:quantity) { '1' } it 'destroys gift cards' do - expect { subject }.to change { Spree::VirtualGiftCard.count }.by(-1) + expect { subject }.to change(Spree::VirtualGiftCard, :count).by(-1) end end @@ -264,7 +264,7 @@ let(:quantity) { '0' } it 'destroys gift cards' do - expect { subject }.to change { Spree::VirtualGiftCard.count }.by(-2) + expect { subject }.to change(Spree::VirtualGiftCard, :count).by(-2) end end end diff --git a/spec/models/spree/order_spec.rb b/spec/models/spree/order_spec.rb index 3c65d613..a7c2060d 100644 --- a/spec/models/spree/order_spec.rb +++ b/spec/models/spree/order_spec.rb @@ -3,9 +3,9 @@ require 'spec_helper' describe Spree::Order do - describe '#finalize!' do + describe '#finalize' do context 'the order contains gift cards and transitions to complete' do - subject { order.finalize! } + subject { order.finalize } let(:gift_card) { create(:virtual_gift_card) } let(:order) { create(:order_with_line_items, state: 'complete', line_items: [gift_card.line_item]) } diff --git a/spec/models/spree/virtual_gift_card_spec.rb b/spec/models/spree/virtual_gift_card_spec.rb index 2005f33b..8c5a4d22 100644 --- a/spec/models/spree/virtual_gift_card_spec.rb +++ b/spec/models/spree/virtual_gift_card_spec.rb @@ -90,7 +90,7 @@ end it 'creates a reimbursement' do - expect { subject }.to change { Spree::Reimbursement.count }.by(1) + expect { subject }.to change(Spree::Reimbursement, :count).by(1) end it 'returns true' do @@ -304,7 +304,7 @@ end it 'sets the admin as the store credit event originator' do - expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1) + expect { subject }.to change(Spree::StoreCreditEvent, :count).by(1) expect(Spree::StoreCreditEvent.last.originator).to eq gift_card end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2de8d229..cc5e58fb 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,24 +1,32 @@ # frozen_string_literal: true # Configure Rails Environment -ENV['RAILS_ENV'] ||= 'test' +ENV['RAILS_ENV'] = 'test' # Run Coverage report require 'solidus_dev_support/rspec/coverage' -require File.expand_path('dummy/config/environment.rb', __dir__) +# Create the dummy app if it's still missing. +dummy_env = "#{__dir__}/dummy/config/environment.rb" +system 'bin/rake extension:test_app' unless File.exist? dummy_env +require dummy_env # Requires factories and other useful helpers defined in spree_core. require 'solidus_dev_support/rspec/feature_helper' # 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 } +Dir["#{__dir__}/support/**/*.rb"].sort.each { |f| require f } -# require 'solidus_virtual_gift_card/testing_support/factories' +# Requires factories defined in Solidus core and this extension. +# See: lib/solidus_virtual_gift_card/testing_support/factories.rb SolidusDevSupport::TestingSupport::Factories.load_for(SolidusVirtualGiftCard::Engine) RSpec.configure do |config| config.infer_spec_type_from_file_location! config.use_transactional_fixtures = false + + if Spree.solidus_gem_version < Gem::Version.new('2.11') + config.extend Spree::TestingSupport::AuthorizationHelpers::Request, type: :system + end end