Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FIX: Ensure deletion of product upon confirmation #195

Merged
merged 4 commits into from Mar 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -56,7 +56,7 @@

<DButton
@action={{route-action "destroyProduct"}}
@actionParam="product"
@actionParam={{product}}
@icon="trash-alt"
class="btn-danger btn no-text btn-icon"
/>
Expand Down
2 changes: 1 addition & 1 deletion spec/fabricators/customer_fabricator.rb
@@ -1,3 +1,3 @@
# frozen_string_literal: true

Fabricator(:product, from: "DiscourseSubscriptions::Product")
Fabricator(:customer, from: "DiscourseSubscriptions::Customer")
2 changes: 1 addition & 1 deletion spec/fabricators/product_fabricator.rb
@@ -1,3 +1,3 @@
# frozen_string_literal: true

Fabricator(:customer, from: "DiscourseSubscriptions::Customer")
Fabricator(:product, from: "DiscourseSubscriptions::Product")
28 changes: 28 additions & 0 deletions 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
37 changes: 35 additions & 2 deletions spec/system/subscription_product_spec.rb
Expand Up @@ -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")
Expand All @@ -13,4 +35,15 @@

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