-
Notifications
You must be signed in to change notification settings - Fork 93
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
OCC-63: Separate Stripe payment into a feature so it can be disabled if other payment provider is desired. #373
Merged
Merged
Changes from 162 commits
Commits
Show all changes
171 commits
Select commit
Hold shift + click to select a range
a263c9e
Adding Product List base architecture
barthamark 4f94476
Improving boolean attribute display in cart
porgabi a0725a4
Handling attributes on checkout in ProductAttributeProvider
porgabi d38b6de
Merge remote-tracking branch 'origin/main' into issue/OCC-195
porgabi ea5f7cd
Handling attributes during Order creation
porgabi ac0745f
Fixing Order view
porgabi 0d2698e
Renaming SelectedAttributes property to SelectedTextAttributes
porgabi 4b75d9a
Adding boolean attribute editing capabilities to Order editor
porgabi 2fb6278
Fixing bug with boolean attributes display
porgabi e156707
Constructing actual boolean attributes as well
porgabi d7b1162
Fistfighting analyzer
porgabi d9d1a2c
Adjusting Order editor styling
porgabi 835c985
Adding handling of numeric attributes
porgabi 8e0217a
Improving numeric inputs in Order editor
porgabi 0446f9e
Fixing warning
porgabi ab4d52e
Potentially fixing test
porgabi dbddd71
Extending UI test
porgabi bbd31ce
Merge remote-tracking branch 'origin/main' into issue/OCC-195
porgabi 91ff484
Adding minor improvements
porgabi d39ad72
Improving JSON parsing
porgabi f12e19b
Adding minor fixes
porgabi bc2c82f
Creating navigation extension method
porgabi 85d3127
Fixing string in view
porgabi 20fee84
Replacing SelectedTextAttributes with SelectedAttributes
porgabi 397b385
Create OrchardCore.Commerce.Payment module.
sarahelsaig 6984015
Add separate module to OrchardCore.Commerce.Payment.Stripe.
sarahelsaig f603d11
Move most Stripe files into its own module.
sarahelsaig fd2ce5c
Move PaymentIntent too.
sarahelsaig dcc3e98
Fix some easier errors.
sarahelsaig 3d377b9
Using SelectedAttributes everywhere
porgabi 449f3a2
Moving business logic to service
porgabi 4a4ea09
Warnin't
porgabi 8de65f2
Fixing test
porgabi a07e1e7
Use _productService.GetProductsAsync in CreateOrderLineItemsAsync.
sarahelsaig 1b73cad
Create RequestOptionsService.
sarahelsaig 67fc6a5
Create OrchardCore.Commerce.Abstraction to store some models and inte…
sarahelsaig 04535ca
Some project organization.
sarahelsaig 1aa6f03
Move two view-models and add SKU holder interfaces.
sarahelsaig 5952734
Move more stuff over to abstractions.
sarahelsaig 16ae7cf
More code reorganization.
sarahelsaig 98b0c25
Move serialization to abstraction.
sarahelsaig 39e104b
Resolve non-Payment related errors except ProductAttributeValueConver…
sarahelsaig a27355e
Modular deserializers.
sarahelsaig 7996341
Move CreateOrderLineItemsAsync to ShoppingCartHelpers.
sarahelsaig ec544ea
Working on adding providers
porgabi f8f8a8f
Fixing Order editor; removing unnecessary code
porgabi 8b62b7f
Moving method to service
porgabi b354f97
Make GetPaymentAmount private.
sarahelsaig d48c7ac
Extending providers with new meth
porgabi fe21c3c
Move WebhookController.
sarahelsaig 2eb1cc3
Create StripeController.
sarahelsaig 3e85541
Move order updating from StripePaymentService to regular PaymentService.
sarahelsaig 6a030c9
Abstract CheckoutViewModel.
sarahelsaig 97af57c
Replace InitializePaymentIntentAsync with CreateClientSecretAsync.
sarahelsaig dd09ef3
Move assets to the stripe project.
sarahelsaig 9a3245f
Fix NodeJS Extensions references in csproj.
sarahelsaig 678d229
Move payment-form.scss into Add separate module to OrchardCore.Commer…
sarahelsaig 566c7da
Move FieldsOnlyDisplayManager to ContentFields module.
sarahelsaig e66a6bb
Move PaymentController and PaymentService to the module.
sarahelsaig 839b49b
Move AddressField into ContentFields module.
sarahelsaig e724b70
Extract the UserAddress stuff into an event handler.
sarahelsaig fe4def7
Adding ordering options
barthamark caed1ec
Move commerce-regions.js to ContentFields.
sarahelsaig 231fea6
Externalize OrderContentTypeDefinitionDisplayDriver._excludedShapes.
sarahelsaig 46cfc03
Remove stripe-specific properties from ICheckoutViewModel.
sarahelsaig 3ba1d3b
Adding title filter
barthamark c82fcb9
Abstract stripe data in CheckoutViewModel.
sarahelsaig f0e0bda
Replace StripeCheckout shape usages with a list of provider shapes.
sarahelsaig f06140f
Go back to directly importing PaymentForm after all.
sarahelsaig f7939d9
Wire OrchardCore.Commerce.Payment into OrchardCore.Commerce.
sarahelsaig 26d03e3
Update excludes.
sarahelsaig eafee3a
Add "deserializers" to the allow list.
sarahelsaig 89af8a8
unusing
sarahelsaig 4470357
Fix non-Stripe problems with PaymentController.
sarahelsaig 8349358
Add ProductAttributeProvider name constants.
sarahelsaig 3c73e0b
Minor code cleanup.
sarahelsaig 2be5da6
Merge branch 'issue/OCC-195' into issue/OCC-63
sarahelsaig 1dcf5d4
Post merge fix-up.
sarahelsaig d5e9958
PaymentViewModel
sarahelsaig 2789388
Create shape data in the provider, move Stripe stuff to StripePayment…
sarahelsaig eec6f65
Make `~/checkout/validate` provider-based.
sarahelsaig 8124d18
Namespace fix.
sarahelsaig fa4c7ae
Don't assume default shopping cart ID.
sarahelsaig b7ef8ee
More shopping cart fixes.
sarahelsaig f025989
Set charges in the outer service.
sarahelsaig 315e289
Turn Payment into a record.
sarahelsaig 2d41060
Resolving applied filters from query string
barthamark fa6b87c
Adding UI tests
barthamark b944fc5
Renaming interface and fixing analyzer violations
barthamark 02efae6
Fixing analyzer violation
barthamark bf6946e
Ignoring pager HTML validation error
barthamark 3dae048
Removing unnecessary ContainedPart from products
barthamark 1596bd2
Some more fixes.
sarahelsaig 36ec42b
Add missing dependency.
sarahelsaig 2069800
Add IPaymentProvider.FinalModificationOfOrderAsync().
sarahelsaig 7b59fc7
Move OrderCreatedEvent workflow event into abstraction.
sarahelsaig 6fe3db9
Update inventories using the OrderedAsync event.
sarahelsaig eaa79c2
Save user addresses in the FinalizeAsync event.
sarahelsaig d5b707b
All promotion services should be in the PromotionStartup.
sarahelsaig b434607
Add PromotionOrderEvents.
sarahelsaig 07a144c
Add UserSettingsCheckoutEvents.
sarahelsaig 33cca67
Make Promotion a dependency of Payment.Stripe.
sarahelsaig b5016eb
Add missing Node Extensions files.
sarahelsaig a7bc237
Remove broken project reference.
sarahelsaig f5658cc
Ensure payment view model's data is never null.
sarahelsaig 1522e4f
Fix CreatedFreeAsync.
sarahelsaig 240eb5f
Add missing Node Extensions files.
sarahelsaig f944a1a
Fix warnings.
sarahelsaig ef5b573
Feature setup.
sarahelsaig 509e54e
Don't break with free orders.
sarahelsaig 38ffa71
shoppingCartId nullable
sarahelsaig b594dbf
Minor refactorings
barthamark 1e0c60b
Accepting only one order by value
barthamark f2e9420
Fixing failing UI test
barthamark 69fe906
Update src/Modules/OrchardCore.Commerce/Services/ProductListService.cs
sarahelsaig 70529ca
Merge branch 'issue/OCC-192' into issue/OCC-63
sarahelsaig 419b245
Merge remote-tracking branch 'origin/main' into issue/OCC-63
sarahelsaig ade1d5f
Move Checkout-Stripe to CheckoutStripe.
sarahelsaig 001bfed
Fix wrong data property names.
sarahelsaig 5a55467
Fail early in PaymentConfirmationMiddleware if the payment intent or …
sarahelsaig da7e14a
Throw notification if there is a total in the free order.
sarahelsaig adbe29e
Use UpdateOrderToOrderedAsync in OrderController.
sarahelsaig ad80020
Move IPaymentService to OrchardCore.Commerce.Payment.
sarahelsaig 02a4f01
Return the same way in stripe too.
sarahelsaig cb57bcf
No need for IOrchardHelper.
sarahelsaig deb00d4
Turn StripePaymentService.CheckTotals into an extension method.
sarahelsaig 7cbd15e
Extract reusable parts of CreateOrUpdateOrderFromShoppingCartAsync lo…
sarahelsaig 9d892a6
Handle FrontendException.
sarahelsaig 1a5f995
Merge unnecessary single-use private method.
sarahelsaig bbdabc3
Simplify StripePaymentService constructor.
sarahelsaig 74255fc
Add PaymentIntentPersistence.Remove() method.
sarahelsaig 9b0a7cf
Add dummy provider.
sarahelsaig 859cd3e
Extract payment button into a separate shape.
sarahelsaig 35cb358
Fix PayButton.
sarahelsaig eb6a1c6
Add "Stripe" to the middleware action's name for consistency.
sarahelsaig f17d277
Fix spinner on the wrong button.
sarahelsaig d8427c7
Update payment intent persistence during submit.
sarahelsaig 1654534
Add CreateShoppingCartViewModelAsync extension method.
sarahelsaig 2ba86e7
grammar
sarahelsaig 6031d1d
Add WhereName extension method to payment provider collection.
sarahelsaig e6db61d
Now working dummy provider.
sarahelsaig 5310d8e
Update recipes.
sarahelsaig c974e7a
Code cleanup.
sarahelsaig 11a2ce0
Don't break if the Stripe API key is not configured.
sarahelsaig 4c92d07
Update Stripe docs.
sarahelsaig 41ba340
Add general payment provider documentation.
sarahelsaig f4662ff
Add unit test.
sarahelsaig 5196798
Fix spacing.
sarahelsaig cf131f0
Update excludes.txt.
sarahelsaig 5fc3e19
Fix CartEventsShouldUpdateTableAndAddLineItem.
sarahelsaig ae3c3ae
fallbacks
sarahelsaig bfe87c3
fix paymentRequestUrl
sarahelsaig e355d14
cshtml unusing
sarahelsaig deaa218
Move ContentTypes to Abstractions.
sarahelsaig 6bb37fa
Pluralize OrchardCore.Commerce.Abstraction.
sarahelsaig 264e0e6
Fix namespace.
sarahelsaig 478e9c6
Fix missing constant from unit test.
sarahelsaig fce2334
Fix and DRY ShoppingCartControllerTests.
sarahelsaig 0869c77
Update namespaces.
sarahelsaig 7d0ad36
Early payment intent error handling.
sarahelsaig fa59a8e
Skip charges if there is no PaymentMethod.
sarahelsaig 637f427
Fix Stripe checkout for real now.
sarahelsaig 7e5df7f
Add error message to PaymentConfirmationMiddleware failure.
sarahelsaig 39b5837
Add const for repeated string.
sarahelsaig 99cbe7b
DRY AddNewItemToCart and AddExistingItemToCart tests.
sarahelsaig 0fc0d72
Add warning when no providers are applicable.
sarahelsaig a195ff6
Validate that the Stripe order is not empty.
sarahelsaig b01a686
This didn't work as expected.
sarahelsaig 84f81e5
Fix bug where orderPart.LineItems.SetItems() cleared itself.
sarahelsaig 97e20ca
Fix nuget references.
sarahelsaig 5f34e34
Remove broken usings.
sarahelsaig File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# Payment Providers | ||
|
||
Orchard Core Commerce supports multiple payment providers and allows developers to extend it further with their own. | ||
|
||
## Official payment providers | ||
|
||
Each provider is a stand-alone feature you can turn on or off. | ||
|
||
- [Stripe](stripe-payment.md): A production-ready provider for [stripe.com](https://stripe.com/). | ||
- Dummy: A development-only provider that lets you click through the checkout without going off-site. Mainly used for UI testing. | ||
|
||
## Creating your own | ||
|
||
To create a custom payment provider your code must contain the following: | ||
- An implementation of `IPaymentProvider` registered as a service. | ||
- A shape type `Checkout{provider.Name}`, such as _CheckoutStripe.cshtml_ and _CheckoutDummy.cshtml_. | ||
|
||
The `IPaymentProvider` contains implementable methods used by the `CheckoutController`. To learn more about the individual methods in the interface, check out the individual methods' XML documentation. | ||
|
||
The shape has the payment button that will be displayed on the `~/checkout` screen. It's up to you to include the front-end logic that calls out to your payment processor and to provide a callback URL. For the latter you can use the `~/checkout/callback/{providerName}/{orderId?}` action. It handles some basic state checking and redirection, but otherwise lets you resolve the pending order using `IPaymentProvider.UpdateAndRedirectToFinishedOrderAsync()`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
src/Libraries/OrchardCore.Commerce.Abstractions/Abstractions/ICheckoutEvents.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
using OrchardCore.Commerce.Abstractions.Models; | ||
using System.Threading.Tasks; | ||
|
||
namespace OrchardCore.Commerce.Abstractions.Abstractions; | ||
|
||
/// <summary> | ||
/// Extension points for events related to checkout. | ||
/// </summary> | ||
public interface ICheckoutEvents | ||
{ | ||
/// <summary> | ||
/// Invoked at the start of a new <see cref="OrderPart"/> creation which is used to create the <see | ||
/// cref="ICheckoutViewModel"/>. | ||
/// </summary> | ||
Task OrderCreatingAsync(OrderPart orderPart, string shoppingCartId) => Task.CompletedTask; | ||
} |
21 changes: 21 additions & 0 deletions
21
src/Libraries/OrchardCore.Commerce.Abstractions/Abstractions/ICheckoutViewModel.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
using Microsoft.AspNetCore.Mvc.Rendering; | ||
using OrchardCore.Commerce.MoneyDataType; | ||
using OrchardCore.DisplayManagement; | ||
using System.Collections.Generic; | ||
using System.Diagnostics.CodeAnalysis; | ||
|
||
namespace OrchardCore.Commerce.Abstractions.Abstractions; | ||
|
||
[SuppressMessage( | ||
"StyleCop.CSharp.DocumentationRules", | ||
"SA1600:Elements should be documented", | ||
Justification = "Nothing to say besides what's already on the property names.")] | ||
public interface ICheckoutViewModel : IPaymentViewModel, IShape | ||
{ | ||
string ShoppingCartId { get; } | ||
Amount GrossTotal { get; } | ||
IEnumerable<SelectListItem> Regions { get; set; } | ||
IDictionary<string, IDictionary<string, string>> Provinces { get; } | ||
string UserEmail { get; } | ||
IEnumerable<IShape> CheckoutShapes { get; } | ||
} |
2 changes: 1 addition & 1 deletion
2
...rdCore.Commerce/Abstractions/ILineItem.cs → ...ce.Abstractions/Abstractions/ILineItem.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
27 changes: 27 additions & 0 deletions
27
src/Libraries/OrchardCore.Commerce.Abstractions/Abstractions/IOrderEvents.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
using OrchardCore.Commerce.Abstractions.Models; | ||
using OrchardCore.Commerce.Abstractions.ViewModels; | ||
using OrchardCore.ContentManagement; | ||
using System.Threading.Tasks; | ||
|
||
namespace OrchardCore.Commerce.Abstractions.Abstractions; | ||
|
||
/// <summary> | ||
/// Extension points for events related to orders. | ||
/// </summary> | ||
public interface IOrderEvents | ||
{ | ||
/// <summary> | ||
/// Invoked when a new free (non-payment) order is created. | ||
/// </summary> | ||
Task CreatedFreeAsync(OrderPart orderPart, ShoppingCart cart, ShoppingCartViewModel viewModel) => Task.CompletedTask; | ||
|
||
/// <summary> | ||
/// Invoked when the <paramref name="order"/> is set to the <c>Ordered</c> state. | ||
/// </summary> | ||
Task OrderedAsync(ContentItem order, string shoppingCartId) => Task.CompletedTask; | ||
|
||
/// <summary> | ||
/// Invoked during cleanup after the order has been finalized. | ||
/// </summary> | ||
Task FinalizeAsync(ContentItem order, string shoppingCartId, string paymentProviderName) => Task.CompletedTask; | ||
} |
2 changes: 1 addition & 1 deletion
2
...ardCore.Commerce/Abstractions/IPayment.cs → ...rce.Abstractions/Abstractions/IPayment.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18 changes: 18 additions & 0 deletions
18
src/Libraries/OrchardCore.Commerce.Abstractions/Abstractions/IPaymentViewModel.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
using OrchardCore.Commerce.Abstractions.Models; | ||
using OrchardCore.Commerce.MoneyDataType; | ||
using System.Collections.Generic; | ||
using System.Diagnostics.CodeAnalysis; | ||
|
||
namespace OrchardCore.Commerce.Abstractions.Abstractions; | ||
|
||
[SuppressMessage( | ||
"StyleCop.CSharp.DocumentationRules", | ||
"SA1600:Elements should be documented", | ||
Justification = "Nothing to say besides what's already on the property names.")] | ||
public interface IPaymentViewModel | ||
{ | ||
Amount SingleCurrencyTotal { get; } | ||
Amount NetTotal { get; } | ||
IDictionary<string, object> PaymentProviderData { get; } | ||
OrderPart OrderPart { get; } | ||
} |
2 changes: 1 addition & 1 deletion
2
...IPredefinedValuesProductAttributeValue.cs → ...IPredefinedValuesProductAttributeValue.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
49 changes: 49 additions & 0 deletions
49
...Libraries/OrchardCore.Commerce.Abstractions/Abstractions/IProductAttributeDeserializer.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
using Newtonsoft.Json.Linq; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Text.Json.Nodes; | ||
|
||
namespace OrchardCore.Commerce.Abstractions.Abstractions; | ||
|
||
/// <summary> | ||
/// Deserializes the attribute of the type <see cref="AttributeTypeName"/>. | ||
/// </summary> | ||
public interface IProductAttributeDeserializer | ||
{ | ||
// Not necessary to document as they are not externally accessible. | ||
#pragma warning disable SA1600 // Elements should be documented. | ||
internal static readonly Dictionary<string, IProductAttributeDeserializer> Deserializers = | ||
new(StringComparer.OrdinalIgnoreCase); | ||
|
||
private static readonly object _lock = new(); | ||
#pragma warning restore SA1600 | ||
|
||
/// <summary> | ||
/// Gets the attribute name used to identify this deserializer. | ||
/// </summary> | ||
string AttributeTypeName { get; } | ||
|
||
/// <summary> | ||
/// Deserializes using <c>Newtonsoft.Json</c>. | ||
/// </summary> | ||
IProductAttributeValue Deserialize(string attributeName, JObject attribute); | ||
|
||
/// <summary> | ||
/// Deserializes using <c>System.Text.Json</c>. | ||
/// </summary> | ||
IProductAttributeValue Deserialize(string attributeName, JsonObject attribute); | ||
|
||
/// <summary> | ||
/// Registers serializers used to deserialize product attributes. | ||
/// </summary> | ||
public static void AddSerializers(params IProductAttributeDeserializer[] deserializers) | ||
{ | ||
lock (_lock) | ||
{ | ||
foreach (var deserializer in deserializers) | ||
{ | ||
Deserializers[deserializer.AttributeTypeName] = deserializer; | ||
} | ||
} | ||
} | ||
} |
4 changes: 2 additions & 2 deletions
4
...ce/Abstractions/IProductAttributeValue.cs → ...ns/Abstractions/IProductAttributeValue.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure if this is related to this PR but, I managed to checkout with a product that is 0 in the inventory.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's not related to this PR, but thanks for catching it!
I created a new issue: #375