To resolve the first issue, you can use the User Roles mechanism.
As mentioned in the documentation:
After you create the roles, you can switch between users at any moment except for the role initialization code.
So, you can create two user roles. The first user will add some items to the shopping cart, then you switch the active role to the second user. The second user does not have any items in the shopping cart. Then switch back to the first role. In the end, the first role will be the active and all items in the shopping cart will be restored.
As for your second issue, your scenario is clear. But I think that this case can be tested in one browser. I suppose that you have some REST API which is used for the purchase operation. I think you can emulate the described behavior by sending two similar requests to the API at the same time.
I recommend using TestCafe Client Functions mechanism for these purposes. So, in the Client Function, you can make requests to your REST API twice. Please refer to this article.