public async Task WhenCreatingCustomer_UpdateAppMetadataInAuth0() { //Arrange var stripeCustomerRepositoryMock = new StripeCustomerRepositoryMock(); var stripeCheckoutSessionRepositoryMock = new StripeCheckoutSessionRepositoryMock(); var stripeBillingPortalSessionRepositoryMock = new StripeBillingPortalSessionRepositoryMock(); var userManagementServiceMock = new UserManagementServiceMock(); var priceNameToIdMapper = new DevPriceNameToIdMapper(); StripePaymentService stripePaymentService = new StripePaymentService(stripeCustomerRepositoryMock, stripeCheckoutSessionRepositoryMock, stripeBillingPortalSessionRepositoryMock, userManagementServiceMock, priceNameToIdMapper); var auth0UserId = "google-oauth2|00004"; var name = "Patryk Tester"; var email = "*****@*****.**"; var newCustomer = new CreateCustomerDto(auth0UserId, name, email); //Act var createdCustomer = await stripePaymentService.CreateCustomerAsync(newCustomer); var retrievedCustomer = await stripeCustomerRepositoryMock.GetAsync(createdCustomer.Id); //Assert Assert.NotNull(createdCustomer); Assert.NotNull(retrievedCustomer); Assert.Equal(auth0UserId, retrievedCustomer.Metadata["auth0UserId"]); var auth0User = userManagementServiceMock.Users.First(x => x.UserId == auth0UserId); Assert.Equal(retrievedCustomer.Id, auth0User.AppMetadata.StripeCustomerId); Assert.Null(auth0User.AppMetadata.SubscriptionPlan); }
public async Task <IActionResult> CreateCheckoutSession([FromBody] CreateCheckoutSessionRequestDto req) { var user = await _userManagementService.GetAuth0UserAsync(_jwtToken.UserId); string stripeCustomerId; if (String.IsNullOrEmpty(user.AppMetadata?.StripeCustomerId)) { var newCustomer = new CreateCustomerDto(_jwtToken.UserId, user.Name, user.Email); var customer = await _stripePaymentService.CreateCustomerAsync(newCustomer); stripeCustomerId = customer.Id; } else { var retrievedCustomer = await _stripePaymentService.GetCustomerAsync(user.AppMetadata.StripeCustomerId); if (retrievedCustomer.Subscription == null) { stripeCustomerId = user.AppMetadata.StripeCustomerId; } else { return(BadRequest(new ErrorResponseDto { ErrorMessage = new ErrorMessageDto { Message = "This user already has a subscription.", } })); } } try { CreateCheckoutSessionResponseDto checkoutSessionResponse = await _stripePaymentService.CreateCheckoutSessionAsync(stripeCustomerId, _jwtToken.UserId, req.PriceTier); return(Ok(checkoutSessionResponse)); } catch (StripeException e) { Console.WriteLine(e.StripeError.Message); return(BadRequest(new ErrorResponseDto { ErrorMessage = new ErrorMessageDto { Message = e.StripeError.Message, } })); } }