diff --git a/app/assets/javascripts/admin/services/enterprise_relationships.js.coffee b/app/assets/javascripts/admin/services/enterprise_relationships.js.coffee index 1e57018e99..52106156da 100644 --- a/app/assets/javascripts/admin/services/enterprise_relationships.js.coffee +++ b/app/assets/javascripts/admin/services/enterprise_relationships.js.coffee @@ -6,7 +6,7 @@ angular.module("ofn.admin").factory 'EnterpriseRelationships', ($http, enterpris 'manage_products' 'edit_profile' 'create_variant_overrides' - 'create_sourced_variants' + 'create_linked_variants' ] constructor: -> @@ -31,4 +31,4 @@ angular.module("ofn.admin").factory 'EnterpriseRelationships', ($http, enterpris when "manage_products" then t('js.services.manage_products') when "edit_profile" then t('js.services.edit_profile') when "create_variant_overrides" then t('js.services.add_products_to_inventory') - when "create_sourced_variants" then t('js.services.create_sourced_variants') + when "create_linked_variants" then t('js.services.create_linked_variants') diff --git a/app/controllers/admin/products_v3_controller.rb b/app/controllers/admin/products_v3_controller.rb index e201643511..80b99aed73 100644 --- a/app/controllers/admin/products_v3_controller.rb +++ b/app/controllers/admin/products_v3_controller.rb @@ -108,14 +108,14 @@ module Admin end # Clone a variant, retaining a link to the "source" - def create_sourced_variant - source_variant = Spree::Variant.find(params[:variant_id]) + def create_linked_variant + linked_variant = Spree::Variant.find(params[:variant_id]) product_index = params[:product_index] - authorize! :create_sourced_variant, source_variant + authorize! :create_linked_variant, linked_variant status = :ok begin - variant = source_variant.create_sourced_variant(spree_current_user) + variant = linked_variant.create_linked_variant(spree_current_user) flash.now[:success] = t('.success') variant_index = "-#{variant.id}" @@ -127,9 +127,9 @@ module Admin respond_with do |format| format.turbo_stream { - locals = { source_variant:, variant:, product_index:, variant_index:, + locals = { linked_variant:, variant:, product_index:, variant_index:, producer_options:, category_options: categories, tax_category_options: } - render :create_sourced_variant, status:, locals: + render :create_linked_variant, status:, locals: } end end diff --git a/app/helpers/admin/products_helper.rb b/app/helpers/admin/products_helper.rb index 18b2f2dda7..8b07a650d9 100644 --- a/app/helpers/admin/products_helper.rb +++ b/app/helpers/admin/products_helper.rb @@ -50,7 +50,7 @@ module Admin def allowed_source_producers @allowed_source_producers ||= OpenFoodNetwork::Permissions.new(spree_current_user) - .enterprises_granting_sourced_variants + .enterprises_granting_linked_variants end end end diff --git a/app/models/spree/ability.rb b/app/models/spree/ability.rb index 2b162f8750..33e6181e50 100644 --- a/app/models/spree/ability.rb +++ b/app/models/spree/ability.rb @@ -215,15 +215,15 @@ module Spree end # An enterprise user can clone if they have been granted permission to the source variant. - # Technically I'd call this permission clone_source_variant, but it would be less confusing to + # Technically I'd call this permission clone_linked_variant, but it would be less confusing to # use the same name as everywhere else. - can [:create_sourced_variant], Spree::Variant do |variant| + can [:create_linked_variant], Spree::Variant do |variant| OpenFoodNetwork::Permissions.new(user). - enterprises_granting_sourced_variants.include? variant.supplier + enterprises_granting_linked_variants.include? variant.supplier end can [:admin, :index, :bulk_update, :destroy, :destroy_variant, :clone, - :create_sourced_variant], :products_v3 + :create_linked_variant], :products_v3 can [:create], Spree::Variant can [:admin, :index, :read, :edit, diff --git a/app/models/spree/variant.rb b/app/models/spree/variant.rb index eb36f6dacc..a57a873d0c 100644 --- a/app/models/spree/variant.rb +++ b/app/models/spree/variant.rb @@ -274,10 +274,10 @@ module Spree end # Clone this variant, retaining a 'source' link to it - def create_sourced_variant(user) - # Owner is my enterprise which has permission to create sourced variants from that supplier + def create_linked_variant(user) + # Owner is my enterprise which has permission to create variants sourced from that supplier owner_id = EnterpriseRelationship.permitted_by(supplier).permitting(user.enterprises) - .with_permission(:create_sourced_variants) + .with_permission(:create_linked_variants) .pick(:child_id) dup.tap do |variant| diff --git a/app/views/admin/products_v3/_variant_row.html.haml b/app/views/admin/products_v3/_variant_row.html.haml index fbd272f2cf..3982046e27 100644 --- a/app/views/admin/products_v3/_variant_row.html.haml +++ b/app/views/admin/products_v3/_variant_row.html.haml @@ -93,7 +93,7 @@ = link_to t('admin.products_page.actions.edit'), edit_admin_product_variant_path(variant.product, variant) - if allowed_source_producers.include?(variant.supplier) - = link_to t('admin.products_page.actions.create_sourced_variant'), admin_create_sourced_variant_path(variant_id: variant.id, product_index:), 'data-turbo-method': :post + = link_to t('admin.products_page.actions.create_linked_variant'), admin_create_linked_variant_path(variant_id: variant.id, product_index:), 'data-turbo-method': :post - if variant.product.variants.size > 1 %a{ "data-controller": "modal-link", "data-action": "click->modal-link#setModalDataSetOnConfirm click->modal-link#open", diff --git a/app/views/admin/products_v3/create_sourced_variant.turbo_stream.haml b/app/views/admin/products_v3/create_linked_variant.turbo_stream.haml similarity index 87% rename from app/views/admin/products_v3/create_sourced_variant.turbo_stream.haml rename to app/views/admin/products_v3/create_linked_variant.turbo_stream.haml index da025462c3..f67d9227d5 100644 --- a/app/views/admin/products_v3/create_sourced_variant.turbo_stream.haml +++ b/app/views/admin/products_v3/create_linked_variant.turbo_stream.haml @@ -1,4 +1,4 @@ --# locals: (variant:, source_variant:, product_index:, variant_index:, producer_options:, category_options:, tax_category_options:) +-# locals: (variant:, linked_variant:, product_index:, variant_index:, producer_options:, category_options:, tax_category_options:) -# Pre-render the form, because you can't do it inside turbo stream block - variant_row = nil - fields_for("products][#{product_index}][variants_attributes", variant, index: variant_index) do |f| @@ -8,7 +8,7 @@ producer_options:, category_options:, tax_category_options:}) -= turbo_stream.after dom_id(source_variant) do += turbo_stream.after dom_id(linked_variant) do %tr.condensed{ id: dom_id(variant), 'data-controller': "variant", 'class': "nested-form-wrapper slide-in" } = variant_row diff --git a/config/locales/en.yml b/config/locales/en.yml index cfd5f8a4bb..d7adcc8183 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -717,7 +717,7 @@ en: delete: Delete remove: Remove preview: Preview - create_sourced_variant: Create sourced variant + create_linked_variant: Create linked variant image: edit: Edit variant_row: @@ -1101,8 +1101,8 @@ en: clone: success: Successfully cloned the product error: Unable to clone the product - create_sourced_variant: - success: "Successfully created sourced variant" + create_linked_variant: + success: "Successfully created linked variant" tag_rules: rules_per_tag: one: "%{tag} has 1 rule" @@ -3906,7 +3906,7 @@ en: manage_products: "manage products" edit_profile: "edit profile" add_products_to_inventory: "add products to inventory" - create_sourced_variants: "create sourced variants [BETA]" + create_linked_variants: "create linked variants [BETA]" resources: could_not_delete_customer: 'Could not delete customer' product_import: diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 079dfee13c..33553f5a51 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -82,7 +82,7 @@ Openfoodnetwork::Application.routes.draw do delete 'products_v3/:id', to: 'products_v3#destroy', as: 'product_destroy' delete 'products_v3/destroy_variant/:id', to: 'products_v3#destroy_variant', as: 'destroy_variant' post 'clone/:id', to: 'products_v3#clone', as: 'clone_product' - post 'products/create_sourced_variant', to: 'products_v3#create_sourced_variant', as: 'create_sourced_variant' + post 'products/create_linked_variant', to: 'products_v3#create_linked_variant', as: 'create_linked_variant' resources :product_preview, only: [:show] resources :variant_overrides do diff --git a/lib/open_food_network/permissions.rb b/lib/open_food_network/permissions.rb index 10f8495e37..0c9d0778f4 100644 --- a/lib/open_food_network/permissions.rb +++ b/lib/open_food_network/permissions.rb @@ -86,8 +86,8 @@ module OpenFoodNetwork managed_and_related_enterprises_granting :manage_products end - def enterprises_granting_sourced_variants - related_enterprises_granting :create_sourced_variants + def enterprises_granting_linked_variants + related_enterprises_granting :create_linked_variants end def manages_one_enterprise? diff --git a/spec/javascripts/unit/admin/services/enterprise_relationships_spec.js.coffee b/spec/javascripts/unit/admin/services/enterprise_relationships_spec.js.coffee index c25764b986..2a5cb5ddf2 100644 --- a/spec/javascripts/unit/admin/services/enterprise_relationships_spec.js.coffee +++ b/spec/javascripts/unit/admin/services/enterprise_relationships_spec.js.coffee @@ -16,4 +16,4 @@ describe "enterprise relationships", -> expect(EnterpriseRelationships.permission_presentation("manage_products")).toEqual "manage products" expect(EnterpriseRelationships.permission_presentation("edit_profile")).toEqual "edit profile" expect(EnterpriseRelationships.permission_presentation("create_variant_overrides")).toEqual "add products to inventory" - expect(EnterpriseRelationships.permission_presentation("create_sourced_variants")).toEqual "create sourced variants [BETA]" + expect(EnterpriseRelationships.permission_presentation("create_linked_variants")).toEqual "create linked variants [BETA]" diff --git a/spec/models/spree/ability_spec.rb b/spec/models/spree/ability_spec.rb index 9f71ac98e1..e9e6986120 100644 --- a/spec/models/spree/ability_spec.rb +++ b/spec/models/spree/ability_spec.rb @@ -364,16 +364,16 @@ RSpec.describe Spree::Ability do for: p2.variants.first) end - describe "create_sourced_variant" do - it "should not be able to create sourced variant without permission" do - is_expected.not_to have_ability([:create_sourced_variant], for: p_related.variants.first) + describe "create_linked_variant" do + it "should not be able to create linked variant without permission" do + is_expected.not_to have_ability([:create_linked_variant], for: p_related.variants.first) end - it "should be able to create sourced variant when granted permission" do + it "should be able to create linked variant when granted permission" do create(:enterprise_relationship, parent: s_related, child: s1, - permissions_list: [:create_sourced_variants]) + permissions_list: [:create_linked_variants]) - is_expected.to have_ability([:create_sourced_variant], for: p_related.variants.first) + is_expected.to have_ability([:create_linked_variant], for: p_related.variants.first) end end @@ -734,16 +734,16 @@ RSpec.describe Spree::Ability do is_expected.to have_ability([:for_order_cycle], for: EnterpriseFee) end - describe "create_sourced_variant" do - it "should not be able to create sourced variant without permission" do - is_expected.not_to have_ability([:create_sourced_variant], for: p_related.variants.first) + describe "create_linked_variant" do + it "should not be able to create linked variant without permission" do + is_expected.not_to have_ability([:create_linked_variant], for: p_related.variants.first) end - it "should be able to create sourced variant when granted permission" do + it "should be able to create linked variant when granted permission" do create(:enterprise_relationship, parent: s_related, child: d1, - permissions_list: [:create_sourced_variants]) + permissions_list: [:create_linked_variants]) - is_expected.to have_ability([:create_sourced_variant], for: p_related.variants.first) + is_expected.to have_ability([:create_linked_variant], for: p_related.variants.first) end end end @@ -822,16 +822,16 @@ RSpec.describe Spree::Ability do is_expected.to have_ability([:admin, :create], for: Voucher) end - describe "create_sourced_variant for own enterprise" do + describe "create_linked_variant for own enterprise" do it "should not be able to create own sourced variant without permission" do - is_expected.not_to have_ability([:create_sourced_variant], for: p1.variants.first) + is_expected.not_to have_ability([:create_linked_variant], for: p1.variants.first) end it "should be able to create own sourced variant when granted self permission" do create(:enterprise_relationship, parent: s1, child: s1, - permissions_list: [:create_sourced_variants]) + permissions_list: [:create_linked_variants]) - is_expected.to have_ability([:create_sourced_variant], for: p1.variants.first) + is_expected.to have_ability([:create_linked_variant], for: p1.variants.first) end end end diff --git a/spec/models/spree/variant_spec.rb b/spec/models/spree/variant_spec.rb index fad05d63bb..1b0bb47acc 100644 --- a/spec/models/spree/variant_spec.rb +++ b/spec/models/spree/variant_spec.rb @@ -1006,28 +1006,28 @@ RSpec.describe Spree::Variant do end end - describe "#create_sourced_variant" do + describe "#create_linked_variant" do let(:user) { create(:user, enterprises: [enterprise]) } let(:supplier) { variant.supplier } let(:enterprise) { create(:enterprise) } - context "with create_sourced_variants permissions on supplier" do + context "with create_linked_variants permissions on supplier" do let!(:enterprise_relationship) { create(:enterprise_relationship, parent: supplier, child: enterprise, - permissions_list: [:create_sourced_variants]) + permissions_list: [:create_linked_variants]) } let(:variant) { create(:variant, price: 10.95, on_demand: false, on_hand: 5) } it "clones the variant, retaining a link to the source" do - sourced_variant = variant.create_sourced_variant(user) + linked_variant = variant.create_linked_variant(user) - expect(sourced_variant.source_variants).to eq [variant] - expect(sourced_variant.owner).to eq enterprise - expect(sourced_variant.price).to eq 10.95 - expect(sourced_variant.on_demand).to eq false - expect(sourced_variant.on_hand).to eq 5 + expect(linked_variant.source_variants).to eq [variant] + expect(linked_variant.owner).to eq enterprise + expect(linked_variant.price).to eq 10.95 + expect(linked_variant.on_demand).to eq false + expect(linked_variant.on_hand).to eq 5 end end end diff --git a/spec/requests/admin/products_v3_spec.rb b/spec/requests/admin/products_v3_spec.rb index 54a854bd1f..de4418458c 100644 --- a/spec/requests/admin/products_v3_spec.rb +++ b/spec/requests/admin/products_v3_spec.rb @@ -60,7 +60,7 @@ RSpec.describe "Admin::ProductsV3" do end end - describe "POST /admin/products/create_sourced_variant" do + describe "POST /admin/products/create_linked_variant" do let(:enterprise) { create(:supplier_enterprise) } let(:user) { create(:user, enterprises: [enterprise]) } @@ -75,24 +75,24 @@ RSpec.describe "Admin::ProductsV3" do params = { variant_id: variant.id, product_index: 1 } expect { - post(admin_create_sourced_variant_path, as: :turbo_stream, params:) + post(admin_create_linked_variant_path, as: :turbo_stream, params:) expect(response).to redirect_to('/unauthorized') }.not_to change { variant.product.variants.count } end - context "With create_sourced_variants permissions on supplier" do + context "With create_linked_variants permissions on supplier" do let!(:enterprise_relationship) { create(:enterprise_relationship, parent: supplier, child: enterprise, - permissions_list: [:create_sourced_variants]) + permissions_list: [:create_linked_variants]) } it "clones the variant, retaining link as source" do params = { variant_id: variant.id, product_index: 1 } expect { - post(admin_create_sourced_variant_path, as: :turbo_stream, params:) + post(admin_create_linked_variant_path, as: :turbo_stream, params:) expect(response).to have_http_status(:ok) expect(response.body).to match "Original variant" # cloned variant name @@ -114,7 +114,7 @@ RSpec.describe "Admin::ProductsV3" do params = { variant_id: variant.id, product_index: 1 } expect { - post(admin_create_sourced_variant_path, as: :turbo_stream, params:) + post(admin_create_linked_variant_path, as: :turbo_stream, params:) expect(response).to have_http_status(:ok) }.to change { variant.product.variants.count }.by(1) diff --git a/spec/system/admin/enterprise_relationships_spec.rb b/spec/system/admin/enterprise_relationships_spec.rb index 3f0525e668..aef6096605 100644 --- a/spec/system/admin/enterprise_relationships_spec.rb +++ b/spec/system/admin/enterprise_relationships_spec.rb @@ -47,7 +47,7 @@ create(:enterprise) uncheck 'to manage products' check 'to edit profile' check 'to add products to inventory' - check 'to create sourced variants' + check 'to create linked variants' select2_select 'Two', from: 'enterprise_relationship_child_id' click_button 'Create' @@ -56,14 +56,14 @@ create(:enterprise) # Permissions appear.. in a different order for some reason. expect_relationship_with_permissions e1, e2, ['to add to order cycle', - 'to create sourced variants [BETA]', + 'to create linked variants [BETA]', 'to add products to inventory', 'to edit profile'] er = EnterpriseRelationship.where(parent_id: e1, child_id: e2).first expect(er).to be_present expect(er.permissions.map(&:name)).to match_array ['add_to_order_cycle', 'edit_profile', 'create_variant_overrides', - 'create_sourced_variants'] + 'create_linked_variants'] end it "attempting to create a relationship with invalid data" do diff --git a/spec/system/admin/products_v3/actions_spec.rb b/spec/system/admin/products_v3/actions_spec.rb index a2d4f64262..a885e166e9 100644 --- a/spec/system/admin/products_v3/actions_spec.rb +++ b/spec/system/admin/products_v3/actions_spec.rb @@ -272,7 +272,7 @@ RSpec.describe 'As an enterprise user, I can perform actions on the products scr end end - describe "Create sourced variant" do + describe "Create linked variant" do let!(:variant) { create(:variant, display_name: "My box", supplier: producer) } @@ -286,11 +286,11 @@ RSpec.describe 'As an enterprise user, I can perform actions on the products scr permissions_list: [:manage_products]) } - context "with create_sourced_variants permission for my, and other's variants" do - it "creates a sourced variant" do + context "with create_linked_variants permission for my, and other's variants" do + it "creates a linked variant" do create(:enterprise_relationship, parent: producer, child: producer, - permissions_list: [:create_sourced_variants]) - enterprise_relationship.permissions.create! name: :create_sourced_variants + permissions_list: [:create_linked_variants]) + enterprise_relationship.permissions.create! name: :create_linked_variants visit admin_products_url @@ -298,39 +298,39 @@ RSpec.describe 'As an enterprise user, I can perform actions on the products scr within row_containing_name("My box") do page.find(".vertical-ellipsis-menu").click - expect(page).to have_link "Create sourced variant" + expect(page).to have_link "Create linked variant" end - # Create variant sourced from my friend + # Create linked variant sourced from my friend within row_containing_name("My friends box") do page.find(".vertical-ellipsis-menu").click - click_link "Create sourced variant" + click_link "Create linked variant" end - expect(page).to have_content "Successfully created sourced variant" + expect(page).to have_content "Successfully created linked variant" within "table.products" do # There are now two copies expect(all_input_values).to match /My friends box.*My friends box/ - # One of them is designated as a source variant + # One of them is designated as a linked variant expect(page).to have_content "🔗" end end end - context "without create_sourced_variants permission" do + context "without create_linked_variants permission" do it "does not show the option in the menu" do visit admin_products_url within row_containing_name("My box") do page.find(".vertical-ellipsis-menu").click - expect(page).not_to have_link "Create sourced variant" + expect(page).not_to have_link "Create linked variant" end within row_containing_name("My friends box") do page.find(".vertical-ellipsis-menu").click - expect(page).not_to have_link "Create sourced variant" + expect(page).not_to have_link "Create linked variant" end end end