Skip to content

Commit

Permalink
Introducing product brand using taxon_brand_selector
Browse files Browse the repository at this point in the history
  • Loading branch information
shahmayur001 committed Dec 3, 2024
1 parent 1329331 commit df9499e
Show file tree
Hide file tree
Showing 29 changed files with 158 additions and 46 deletions.
8 changes: 4 additions & 4 deletions admin/spec/features/adjustment_reasons_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@
before do
visit "/admin/adjustment_reasons#{query}"
click_on "Add new"
expect(page).to have_selector("dialog")
expect(page).to have_content("New Adjustment Reason")
expect(page).to be_axe_clean
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down Expand Up @@ -69,12 +69,12 @@
Spree::AdjustmentReason.create(name: "Good Reason", code: 5999)
visit "/admin/adjustment_reasons#{query}"
find_row("Good Reason").click
expect(page).to have_selector("dialog")
expect(page).to have_content("Edit Adjustment Reason")
expect(page).to be_axe_clean
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down
10 changes: 5 additions & 5 deletions admin/spec/features/orders/show_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
expect(page).to have_content("Order R123456789")
open_customer_menu
click_on "Edit billing address"
expect(page).to have_css("dialog", wait: 30)
expect(page).to have_css("dialog", wait: 5)

within("dialog") do
fill_in "Name", with: "John Doe"
Expand All @@ -74,7 +74,7 @@

open_customer_menu
click_on "Edit shipping address"
expect(page).to have_css("dialog", wait: 30)
expect(page).to have_css("dialog", wait: 5)

within("dialog") do
fill_in "Name", with: "Jane Doe"
Expand Down Expand Up @@ -119,18 +119,18 @@
expect(Spree::Order.last.line_items.count).to eq(0)

find("[aria-selected]", text: "Just another product").click
expect(page).to have_content("Variant added to cart successfully", wait: 30)
expect(page).to have_content("Variant added to cart successfully", wait: 5)

expect(Spree::Order.last.line_items.count).to eq(1)
expect(Spree::Order.last.line_items.last.quantity).to eq(1)

fill_in "line_item[quantity]", with: 4
expect(page).to have_content("Quantity updated successfully", wait: 30)
expect(page).to have_content("Quantity updated successfully", wait: 5)

expect(Spree::Order.last.line_items.last.quantity).to eq(4)

accept_confirm("Are you sure?") { click_on "Delete" }
expect(page).to have_content("Line item removed successfully", wait: 30)
expect(page).to have_content("Line item removed successfully", wait: 5)

expect(Spree::Order.last.line_items.count).to eq(0)
expect(page).to be_axe_clean
Expand Down
8 changes: 4 additions & 4 deletions admin/spec/features/refund_reasons_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@
before do
visit "/admin/refund_reasons/#{query}"
click_on "Add new"
expect(page).to have_selector("dialog")
expect(page).to have_content("New Refund Reason")
expect(page).to be_axe_clean
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down Expand Up @@ -66,12 +66,12 @@
Spree::RefundReason.create(name: "Return process")
visit "/admin/refund_reasons#{query}"
find_row("Return process").click
expect(page).to have_selector("dialog")
expect(page).to have_content("Edit Refund Reason")
expect(page).to be_axe_clean
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down
8 changes: 4 additions & 4 deletions admin/spec/features/return_reasons_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@
before do
visit "/admin/return_reasons#{query}"
click_on "Add new"
expect(page).to have_selector("dialog")
expect(page).to have_content("New Return Reason")
expect(page).to be_axe_clean
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down Expand Up @@ -68,12 +68,12 @@
Spree::ReturnReason.create(name: "Good Reason")
visit "/admin/return_reasons#{query}"
find_row("Good Reason").click
expect(page).to have_selector("dialog")
expect(page).to have_content("Edit Return Reason")
expect(page).to be_axe_clean
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down
8 changes: 4 additions & 4 deletions admin/spec/features/roles_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,12 @@
before do
visit "/admin/roles#{query}"
click_on "Add new"
expect(page).to have_selector("dialog")
expect(page).to have_content("New Role")
expect(page).to be_axe_clean
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down Expand Up @@ -121,14 +121,14 @@
Spree::Role.create(name: "Reviewer", permission_sets: [settings_edit_permission])
visit "/admin/roles#{query}"
find_row("Reviewer").click
expect(page).to have_selector("dialog")
expect(page).to have_content("Edit Role")
expect(page).to be_axe_clean
expect(Spree::Role.find_by(name: "Reviewer").permission_set_ids)
.to contain_exactly(settings_edit_permission.id)
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down
8 changes: 4 additions & 4 deletions admin/spec/features/shipping_categories_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@
before do
visit "/admin/shipping_categories#{query}"
click_on "Add new"
expect(page).to have_selector("dialog")
expect(page).to have_content("New Shipping Category")
expect(page).to be_axe_clean
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down Expand Up @@ -66,12 +66,12 @@
Spree::ShippingCategory.create(name: "Letter Mail")
visit "/admin/shipping_categories#{query}"
find_row("Letter Mail").click
expect(page).to have_selector("dialog")
expect(page).to have_content("Edit Shipping Category")
expect(page).to be_axe_clean
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down
8 changes: 4 additions & 4 deletions admin/spec/features/store_credit_reasons_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@
before do
visit "/admin/store_credit_reasons#{query}"
click_on "Add new"
expect(page).to have_selector("dialog")
expect(page).to have_content("New Store Credit Reason")
expect(page).to be_axe_clean
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down Expand Up @@ -66,12 +66,12 @@
Spree::StoreCreditReason.create(name: "New Customer Reward")
visit "/admin/store_credit_reasons#{query}"
find_row("New Customer Reward").click
expect(page).to have_selector("dialog")
expect(page).to have_content("Edit Store Credit Reason")
expect(page).to be_axe_clean
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down
4 changes: 2 additions & 2 deletions admin/spec/features/tax_categories_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@
before do
visit "/admin/tax_categories#{query}"
click_on "Add new"
expect(page).to have_selector("dialog")
expect(page).to have_content("New Tax Category")
expect(page).to be_axe_clean
end

it "opens a modal" do
expect(page).to have_selector("dialog")
it "closing the modal keeps query params" do
within("dialog") { click_on "Cancel" }
expect(page).not_to have_selector("dialog")
expect(page.current_url).to include(query)
Expand Down
4 changes: 4 additions & 0 deletions core/app/models/spree/product.rb
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,10 @@ def gallery
@gallery ||= Spree::Config.product_gallery_class.new(self)
end

def brand
Spree::Config.brand_selector_class.new(self).call
end

private

def any_variants_not_track_inventory?
Expand Down
22 changes: 22 additions & 0 deletions core/app/models/spree/taxon_brand_selector.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# frozen_string_literal: true

module Spree
class TaxonBrandSelector
BRANDS_TAXONOMY_NAME = "Brands"

def initialize(product)
@product = product
end

def call
product.taxons
.joins(:taxonomy)
.where(spree_taxonomies: { name: BRANDS_TAXONOMY_NAME })
.first
end

private

attr_reader :product
end
end
3 changes: 3 additions & 0 deletions core/config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1075,6 +1075,8 @@ en:
billing: Billing
billing_address: Billing Address
both: Both
brand: Brand
brands: Brands
calculated_reimbursements: Calculated Reimbursements
calculator: Calculator
calculator_settings_warning: If you are changing the calculator type or preference source, you must save first before you can edit the calculator settings
Expand Down Expand Up @@ -2097,6 +2099,7 @@ en:
scope: Scope
search: Search
search_results: Search results for '%{keywords}'
search_results_all: Show all results for '%{keywords}'
searching: Searching
secure_connection_type: Secure Connection Type
security_settings: Security Settings
Expand Down
7 changes: 7 additions & 0 deletions core/lib/spree/app_configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -522,6 +522,13 @@ def payment_canceller
# Spree::StoreCreditPrioritizer.
class_name_attribute :store_credit_prioritizer_class, default: 'Spree::StoreCreditPrioritizer'

# Allows finding brand for product.
#
# @!attribute [rw] brand_selector_class
# @return [Class] a class with the same public interfaces as
# Spree::TaxonBrandSelector.
class_name_attribute :brand_selector_class, default: 'Spree::TaxonBrandSelector'

# @!attribute [rw] taxon_image_style_default
#
# Defines which style to default to when style is not provided
Expand Down
46 changes: 46 additions & 0 deletions core/spec/models/spree/taxon_brand_selector_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# frozen_string_literal: true

require 'rails_helper'

RSpec.describe Spree::TaxonBrandSelector, type: :model do
let(:taxonomy) { create(:taxonomy, name: "Brands") }
let(:taxon) { create(:taxon, taxonomy: taxonomy, name: "Brand A") }
let(:product) { create(:product, taxons: [taxon]) }

subject { described_class.new(product) }

describe "#call" do
context "when the product has a taxon under the 'Brands' taxonomy" do
it "returns the first taxon under 'Brands'" do
expect(subject.call).to eq(taxon)
end
end

context "when the product has multiple taxons under the 'Brands' taxonomy" do
let(:taxon_b) { create(:taxon, taxonomy: taxonomy, name: "Brand B") }
before { product.taxons << taxon_b }

it "returns the first taxon under 'Brands'" do
expect(subject.call).to eq(taxon)
end
end

context "when the product does not have a taxon under the 'Brands' taxonomy" do
let(:other_taxonomy) { create(:taxonomy, name: "Categories") }
let(:other_taxon) { create(:taxon, taxonomy: other_taxonomy, name: "Category A") }
let(:product) { create(:product, taxons: [other_taxon]) }

it "returns nil" do
expect(subject.call).to be_nil
end
end

context "when the product has no taxons" do
let(:product) { create(:product) }

it "returns nil" do
expect(subject.call).to be_nil
end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@
visit "/admin/promotions"
expect(page).to have_content("My active Promotion")
click_on "Draft"
expect(page).to have_content("My draft Promotion", wait: 30)
expect(page).to have_content("My draft Promotion", wait: 5)
click_on "Future"
expect(page).to have_content("My future Promotion", wait: 30)
expect(page).to have_content("My future Promotion", wait: 5)
click_on "Expired"
expect(page).to have_content("My expired Promotion", wait: 30)
expect(page).to have_content("My expired Promotion", wait: 5)
click_on "All"
expect(page).to have_content("My active Promotion", wait: 30)
expect(page).to have_content("My active Promotion", wait: 5)
expect(page).to have_content("My draft Promotion")
expect(page).to have_content("My future Promotion")
expect(page).to have_content("My expired Promotion")
Expand Down
2 changes: 1 addition & 1 deletion promotions/app/models/solidus_promotions/promotion.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class Promotion < Spree::Base
belongs_to :original_promotion, class_name: "Spree::Promotion", optional: true
has_many :benefits, class_name: "SolidusPromotions::Benefit", dependent: :destroy
has_many :conditions, through: :benefits
has_many :codes, class_name: "SolidusPromotions::PromotionCode", dependent: :destroy
has_many :codes, class_name: "SolidusPromotions::PromotionCode", dependent: :destroy, inverse_of: :promotion
has_many :code_batches, class_name: "SolidusPromotions::PromotionCodeBatch", dependent: :destroy
has_many :order_promotions, class_name: "SolidusPromotions::OrderPromotion", dependent: :destroy

Expand Down
Loading

0 comments on commit df9499e

Please sign in to comment.