From 0d28c9a56dcd5c539b352a02124c3381f70e8c07 Mon Sep 17 00:00:00 2001 From: Natalie Tay Date: Wed, 13 Mar 2024 17:16:07 +0800 Subject: [PATCH] FIX: Ensure deletion of product upon confirmation (#195) Ensure deletion of product upon confirmation --- ...discourse-subscriptions-products-index.hbs | 2 +- spec/fabricators/customer_fabricator.rb | 2 +- spec/fabricators/product_fabricator.rb | 2 +- .../admin_subscription_product.rb | 28 ++++++++++++++ spec/system/subscription_product_spec.rb | 37 ++++++++++++++++++- 5 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 spec/system/page_objects/admin_subscription_product.rb diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-subscriptions-products-index.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-subscriptions-products-index.hbs index 3e9f654..3b5f5ec 100644 --- a/assets/javascripts/discourse/templates/admin/plugins-discourse-subscriptions-products-index.hbs +++ b/assets/javascripts/discourse/templates/admin/plugins-discourse-subscriptions-products-index.hbs @@ -56,7 +56,7 @@ diff --git a/spec/fabricators/customer_fabricator.rb b/spec/fabricators/customer_fabricator.rb index 9c99c79..c3f9174 100644 --- a/spec/fabricators/customer_fabricator.rb +++ b/spec/fabricators/customer_fabricator.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -Fabricator(:product, from: "DiscourseSubscriptions::Product") +Fabricator(:customer, from: "DiscourseSubscriptions::Customer") diff --git a/spec/fabricators/product_fabricator.rb b/spec/fabricators/product_fabricator.rb index c3f9174..9c99c79 100644 --- a/spec/fabricators/product_fabricator.rb +++ b/spec/fabricators/product_fabricator.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -Fabricator(:customer, from: "DiscourseSubscriptions::Customer") +Fabricator(:product, from: "DiscourseSubscriptions::Product") diff --git a/spec/system/page_objects/admin_subscription_product.rb b/spec/system/page_objects/admin_subscription_product.rb new file mode 100644 index 0000000..b4b55bc --- /dev/null +++ b/spec/system/page_objects/admin_subscription_product.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +module PageObjects + module Pages + class AdminSubscriptionProduct < PageObjects::Pages::Base + PRODUCTS_TABLE_SELECTOR = "table.discourse-patrons-table" + + def visit_products + visit("/admin/plugins/discourse-subscriptions/products") + self + end + + def has_product?(name) + has_css?("table.discourse-patrons-table tr", text: name) + self + end + + def has_number_of_products?(count) + has_css?("table.discourse-patrons-table tr", count:) + self + end + + def click_trash_nth_row(row) + find("table.discourse-patrons-table tr:nth-child(#{row}) button.btn-danger").click() + end + end + end +end diff --git a/spec/system/subscription_product_spec.rb b/spec/system/subscription_product_spec.rb index b16e5ab..10d2d7e 100644 --- a/spec/system/subscription_product_spec.rb +++ b/spec/system/subscription_product_spec.rb @@ -2,9 +2,31 @@ describe "Subscription products", type: :system do fab!(:admin) - fab!(:product) { Fabricate(:product, external_id: "prod_OiKyO6ZMFCIhQa") } + fab!(:product) { Fabricate(:product, external_id: "prod_OiK") } + let(:dialog) { PageObjects::Components::Dialog.new } + let(:product_subscriptions_page) { PageObjects::Pages::AdminSubscriptionProduct.new } - before { SiteSetting.discourse_subscriptions_enabled = true } + before do + SiteSetting.discourse_subscriptions_enabled = true + + SiteSetting.discourse_subscriptions_secret_key = "sk_test_51xuu" + SiteSetting.discourse_subscriptions_public_key = "pk_test_51xuu" + + # # this needs to be stubbed or it will try to make a request to stripe + one_product = { + id: "prod_OiK", + active: true, + name: "Tomtom", + metadata: { + description: "Photos of tomtom", + repurchaseable: true, + }, + } + ::Stripe::Product.stubs(:list).returns({ data: [one_product] }) + ::Stripe::Product.stubs(:delete).returns({ id: "prod_OiK" }) + ::Stripe::Product.stubs(:retrieve).returns(one_product) + ::Stripe::Price.stubs(:list).returns({ data: [] }) + end it "shows the login modal" do visit("/s") @@ -13,4 +35,15 @@ describe "Subscription products", type: :system do expect(page).to have_css(".modal-container .login-modal") end + + it "shows products on the products and allows deletion" do + sign_in(admin) + + product_subscriptions_page.visit_products.has_product?("Tomtom") + + product_subscriptions_page.click_trash_nth_row(1) + dialog.click_yes + + product_subscriptions_page.has_number_of_products?(0) + end end