public virtual async Task <IHttpActionResult> GetRecurringOrderTemplatesPaymentMethodsAsync(GetRecurringOrderTemplatesPaymentMethodsRequest request)
        {
            var recurringOrderScheduleUrl = RecurringScheduleUrlProvider.GetRecurringScheduleDetailsUrl(new GetRecurringScheduleDetailsUrlParam
            {
                CultureInfo         = ComposerContext.CultureInfo,
                RecurringScheduleId = request.Id
            });

            //TODO : MyWalletPRovider when ready

            //var addAddressUrl = MyWalletPRovider.GetAddWAlletUrl(new GetMyAccountUrlParam { CultureInfo = ComposerContext.CultureInfo, ReturnUrl = recurringOrderScheduleUrl });
            //var editAddressBaseUrl = MyWalletPRovider.GetUpdateWAlletBaseUrl(new GetMyAccountUrlParam { CultureInfo = ComposerContext.CultureInfo });

            var param = new GetPaymentProvidersParam
            {
                Scope       = ComposerContext.Scope,
                CultureInfo = ComposerContext.CultureInfo
            };
            var providers = await PaymentViewService.GetPaymentProvidersAsync(param).ConfigureAwait(false);

            var results = await PaymentViewService.GetCustomerPaymentMethodListViewModelAsync(new GetCustomerPaymentMethodListViewModelParam
            {
                CustomerId    = ComposerContext.CustomerId,
                ScopeId       = ComposerContext.Scope,
                CultureInfo   = ComposerContext.CultureInfo,
                ProviderNames = providers.Select(p => p.ProviderName).ToList(),
                //walletUrls
            }).ConfigureAwait(false);

            return(Ok(results));
        }
Beispiel #2
0
        public virtual async Task <IHttpActionResult> UpdateRecurringCartPaymentMethod([FromBody] UpdateRecurringCartPaymentMethodRequest request)
        {
            if (request == null)
            {
                return(BadRequest("Request cannot be null."));
            }

            var param = new GetPaymentProvidersParam
            {
                Scope       = ComposerContext.Scope,
                CultureInfo = ComposerContext.CultureInfo
            };

            var providers = await PaymentViewService.GetPaymentProvidersAsync(param).ConfigureAwait(false);

            var vm = await PaymentViewService.UpdateRecurringOrderCartPaymentMethodAsync(new UpdatePaymentMethodParam
            {
                CartName            = request.CartName,
                CultureInfo         = ComposerContext.CultureInfo,
                CustomerId          = ComposerContext.CustomerId,
                PaymentId           = request.PaymentId.GetValueOrDefault(),
                Scope               = ComposerContext.Scope,
                PaymentMethodId     = request.PaymentMethodId.GetValueOrDefault(),
                PaymentProviderName = request.PaymentProviderName,
                PaymentType         = request.PaymentType,
                ProviderNames       = providers.Select(p => p.ProviderName).ToList(),
                IsAuthenticated     = ComposerContext.IsAuthenticated
            }, RequestUtils.GetBaseUrl(Request).ToString());

            return(Ok(vm));
        }
Beispiel #3
0
        public virtual async Task <IHttpActionResult> GetRecurringCartsPaymentMethodsAsync(GetRecurringCartsPaymentMethodsRequest request)
        {
            var recurringCartUrl = RecurringCartUrlProvider.GetRecurringCartDetailsUrl(new GetRecurringCartDetailsUrlParam
            {
                CultureInfo       = ComposerContext.CultureInfo,
                RecurringCartName = request.CartName
            });

            //TODO : MyWalletPRovider when ready

            //var addAddressUrl = MyWalletPRovider.GetAddWAlletUrl(new GetMyAccountUrlParam { CultureInfo = ComposerContext.CultureInfo, ReturnUrl = recurringOrderScheduleUrl });
            //var editAddressBaseUrl = MyWalletPRovider.GetUpdateWAlletBaseUrl(new GetMyAccountUrlParam { CultureInfo = ComposerContext.CultureInfo });

            //Will need to change Viewmodel returned

            var param = new GetPaymentProvidersParam
            {
                Scope       = ComposerContext.Scope,
                CultureInfo = ComposerContext.CultureInfo
            };
            var providers = await PaymentViewService.GetPaymentProvidersAsync(param).ConfigureAwait(false);

            var results = await PaymentViewService.GetPaymentMethodsAsync(new GetPaymentMethodsParam
            {
                Scope           = ComposerContext.Scope,
                CultureInfo     = ComposerContext.CultureInfo,
                ProviderNames   = providers.Select(p => p.ProviderName).ToList(),
                CartName        = request.CartName,
                CustomerId      = ComposerContext.CustomerId,
                IsAuthenticated = ComposerContext.IsAuthenticated
            });

            return(Ok(results));
        }
Beispiel #4
0
        public void When_Passing_Empty_CultureInfo_SHOULD_throw_ArgumentException()
        {
            // arrange
            var param = new GetPaymentProvidersParam
            {
                Scope       = GetRandom.String(32),
                CultureInfo = null,
            };
            var service = _container.CreateInstance <PaymentViewService>();

            ConfigureEmptyProviders();

            // act & assert
            Assert.ThrowsAsync <ArgumentException>(() => service.GetPaymentProvidersAsync(param));
        }
Beispiel #5
0
        public virtual ActionResult CheckoutPayment()
        {
            var checkoutPaymentViewModel = new CheckoutPaymentViewModel
            {
                IsLoading = true
            };

            var getPaymentProvidersParam = new GetPaymentProvidersParam
            {
                Scope       = ComposerContext.Scope,
                CultureInfo = ComposerContext.CultureInfo
            };

            checkoutPaymentViewModel.Context.Add("PaymentProviders", PaymentViewService.GetPaymentProvidersAsync(getPaymentProvidersParam).Result.ToList());

            return(View("CheckoutPaymentContainer", checkoutPaymentViewModel));
        }
Beispiel #6
0
        public async Task WHEN_Passing_Valid_Parameters_SHOULD_Succeed()
        {
            // arrange
            var param = new GetPaymentProvidersParam
            {
                Scope       = GetRandom.String(32),
                CultureInfo = CultureInfo.InvariantCulture,
            };
            var service = _container.CreateInstance <PaymentViewService>();

            ConfigureDefaultProviders(param);

            // act
            var result = await service.GetPaymentProvidersAsync(param);

            // assert
            result.Should().HaveCount(1);
        }
Beispiel #7
0
        public async Task WHEN_Provider_Not_Active_SHOULD_Filter_out_value()
        {
            // arrange
            var param = new GetPaymentProvidersParam
            {
                Scope       = GetRandom.String(32),
                CultureInfo = CultureInfo.InvariantCulture,
            };
            var service = _container.CreateInstance <PaymentViewService>();

            var(provider, _)  = ConfigureDefaultProviders(param);
            provider.IsActive = false;

            // act
            var result = await service.GetPaymentProvidersAsync(param);

            // assert
            result.Should().HaveCount(0);
        }
Beispiel #8
0
        public async Task WHEN_Culture_not_supported_SHOULD_Filter_out_value()
        {
            // arrange
            var param = new GetPaymentProvidersParam
            {
                Scope       = GetRandom.String(32),
                CultureInfo = new CultureInfo("en-US"),
            };
            var service = _container.CreateInstance <PaymentViewService>();

            var(_, paymentProvider)             = ConfigureDefaultProviders(param);
            paymentProvider.SupportedCultureIds = "ua-UK";

            // act
            var result = await service.GetPaymentProvidersAsync(param);

            // assert
            result.Should().HaveCount(0);
        }
Beispiel #9
0
        private (Provider provider, PaymentProvider paymentProvider) ConfigureDefaultProviders(GetPaymentProvidersParam param)
        {
            var localPaymentProvider = new FakePaymentProvider();

            _paymentProviderMoq
            .Setup(q => q.ResolveAllProviders())
            .Returns(new List <IPaymentProvider> {
                localPaymentProvider
            });

            var id = Guid.NewGuid();

            var provider = new Provider
            {
                Id = id,
                ImplementationTypeName = localPaymentProvider.ProviderType,
                IsActive = true,
            };

            var paymentProvider = new PaymentProvider
            {
                Id = id,
                SupportedCultureIds = param.CultureInfo.Name,
            };

            _paymentRepoMoq
            .Setup(q => q.GetProviders(It.IsAny <string>(), ProviderType.Payment))
            .ReturnsAsync(new List <Provider>
            {
                provider
            });


            _paymentRepoMoq
            .Setup(q => q.GetPaymentProviders(It.IsAny <string>()))
            .ReturnsAsync(new List <PaymentProvider>
            {
                paymentProvider,
            });

            return(provider, paymentProvider);
        }
Beispiel #10
0
        /// <summary>
        /// Gets an enumeration of all available payment providers.
        /// </summary>
        /// <param name="param">Parameters used to retrieve the payment providers.</param>
        /// <returns></returns>
        public virtual async Task <IEnumerable <PaymentProviderViewModel> > GetPaymentProvidersAsync(GetPaymentProvidersParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage(nameof(param.CultureInfo)), nameof(param));
            }
            if (param.Scope == null)
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage(nameof(param.Scope)), nameof(param));
            }

            var providers = PaymentProviderFactory.ResolveAllProviders();

            providers = await FilterAvailablePaymentProviders(param, providers).ConfigureAwait(false);

            var viewModels = new List <PaymentProviderViewModel>();

            foreach (var paymentProvider in providers)
            {
                var vm = MapPaymentProviderViewModel(paymentProvider, param.CultureInfo);
                viewModels.Add(vm);
            }

            return(viewModels);
        }
Beispiel #11
0
        protected virtual async Task <IEnumerable <IPaymentProvider> > FilterAvailablePaymentProviders(GetPaymentProvidersParam param, IEnumerable <IPaymentProvider> providers)
        {
            var availablePaymentProvidersTask = PaymentRepository.GetPaymentProviders(param.Scope).ConfigureAwait(false);
            var availableProvidersTask        = PaymentRepository.GetProviders(param.Scope, ProviderType.Payment);
            var availablePaymentProviders     = await availablePaymentProvidersTask;
            var availableProviders            = await availableProvidersTask;

            var result = new List <IPaymentProvider>();

            foreach (var provider in providers)
            {
                var availableProvider = availableProviders
                                        .Where(p => p.ImplementationTypeName.Equals(provider.ProviderType, StringComparison.OrdinalIgnoreCase))
                                        .Where(p => p.IsActive)
                                        .FirstOrDefault();

                if (availableProvider == null)
                {
                    continue;
                }

                var availablePaymentProvider = availablePaymentProviders
                                               .Where(p => p.Id == availableProvider.Id)
                                               .FirstOrDefault();

                if (availablePaymentProvider == null)
                {
                    continue;
                }

                var supportedCultureIds = availablePaymentProvider.SupportedCultureIds.Split(',').Select(c => c.Trim());
                if (!supportedCultureIds.Any(c => c.Equals(param.CultureInfo.Name, StringComparison.OrdinalIgnoreCase)))
                {
                    continue;
                }

                result.Add(provider);
            }

            return(result);
        }
Beispiel #12
0
        protected virtual async Task <IEnumerable <IPaymentProvider> > FilterAvailablePaymentProviders(GetPaymentProvidersParam param, IEnumerable <IPaymentProvider> providers)
        {
            var availablePaymentProvidersTask = PaymentRepository.GetPaymentProviders(param.Scope).ConfigureAwait(false);
            var availableProvidersTask        = PaymentRepository.GetProviders(param.Scope, ProviderType.Payment);

            var availablePaymentProviders = await availablePaymentProvidersTask;
            var availableProviders        = await availableProvidersTask;

            var availableProvidersDic = new Dictionary <string, Overture.ServiceModel.Providers.Provider>(StringComparer.OrdinalIgnoreCase);

            foreach (var el in availableProviders)
            {
                if (!el.IsActive || availableProvidersDic.ContainsKey(el.ImplementationTypeName))
                {
                    continue;
                }

                availableProvidersDic.Add(el.ImplementationTypeName, el);
            }

            var availablePaymentProvidersDic = new Dictionary <Guid, Overture.ServiceModel.Providers.PaymentProvider>();

            foreach (var el in availablePaymentProviders)
            {
                if (availablePaymentProvidersDic.ContainsKey(el.Id))
                {
                    continue;
                }

                availablePaymentProvidersDic.Add(el.Id, el);
            }

            var result = new List <IPaymentProvider>();

            foreach (var provider in providers)
            {
                availableProvidersDic.TryGetValue(provider.ProviderType, out var availableProvider);
                if (availableProvider == null)
                {
                    continue;
                }

                availablePaymentProvidersDic.TryGetValue(availableProvider.Id, out var availablePaymentProvider);
                if (availablePaymentProvider == null)
                {
                    continue;
                }

                var supportedCultureIds = availablePaymentProvider.SupportedCultureIds.Split(',').Select(c => c.Trim());

                if (!supportedCultureIds.Any(c => c.Equals(param.CultureInfo.Name, StringComparison.OrdinalIgnoreCase)))
                {
                    continue;
                }

                result.Add(provider);
            }

            return(result);
        }