Beispiel #1
0
        public void Init_UsingValidOptions_CreatesTable(string tablePrefix)
        {
            var expectedTableName = tablePrefix + "PaymentLinks";
            var expectedColumns   = new[]
            {
                nameof(PaymentLink.Id),
                nameof(PaymentLink.Amount),
                nameof(PaymentLink.BankReferenceId),
                nameof(PaymentLink.CreateDate),
                nameof(PaymentLink.Description),
                nameof(PaymentLink.ExpireDays),
                nameof(PaymentLink.FollowId),
                nameof(PaymentLink.ClusterId),
                nameof(PaymentLink.LastCheckForUpdateDate),
                nameof(PaymentLink.PaymentStatus),
                nameof(PaymentLink.ResultDate),
                nameof(PaymentLink.Token),
                nameof(PaymentLink.Url)
            };

            var options = new PardakhtVasetClientOptions();

            options.ConnectionString = ConnectionStrings;
            options.TablePrefix      = tablePrefix;

            var client = new PardakhtVasetClient(options);

            client.Init(null);

            Assert.True(TableExists(expectedTableName));
            Assert.True(ColumnsExists(expectedTableName, expectedColumns));
        }
        public void CreateInstance_WithNoParameterOrInitialization_HasExpectedDefaultValues()
        {
            var options = new PardakhtVasetClientOptions();

            Assert.Null(options.ApiKey);
            Assert.Null(options.ConnectionString);
            Assert.Equal("", options.TablePrefix);
        }
        public void CreateInstance_WithCorrectOptions_CreatesNewInstance()
        {
            var options = new PardakhtVasetClientOptions {
                ApiKey = "my api key", Password = "******", ConnectionString = "my connection string;", TablePrefix = "pv"
            };
            var client = new PardakhtVasetClient(options);

            Assert.NotNull(client);
            Assert.Equal(options.ConnectionString, client.Options.ConnectionString);
            Assert.Equal(options.ApiKey, client.Options.ApiKey);
            Assert.Equal(options.TablePrefix, client.Options.TablePrefix);
        }
        public void OnTick_CheckResultFailsForSomeReason_NotCallingEventNorUpdate()
        {
            var paymentLinkEventCalled = false;
            var options = new PardakhtVasetClientOptions();

            options.ApiKey           = "foo";
            options.Password         = "******";
            options.ConnectionString = "fake connection string";
            options.TablePrefix      = "";

            var mockedRepository = new Mock <IPaymentLinkRepository>();
            var mockedPayRequest = new Mock <IPayRequestV2>();

            var nextPaymentLink = new PaymentLink();

            nextPaymentLink.Amount                 = 26000;
            nextPaymentLink.BankReferenceId        = null;
            nextPaymentLink.CreateDate             = new DateTime(2017, 12, 3);
            nextPaymentLink.Description            = "بابت مانده حساب";
            nextPaymentLink.ExpireDays             = 30;
            nextPaymentLink.FollowId               = "324";
            nextPaymentLink.LastCheckForUpdateDate = new DateTime(2017, 12, 3);
            nextPaymentLink.PaymentStatus          = (int)RequestStatus.Initiated;
            nextPaymentLink.ResultDate             = null;
            nextPaymentLink.Token = "1d372049-17de-4550-aecc-06111fdf2a9b";
            nextPaymentLink.Url   = "https://pardakhtvaset.com/pay?token=1d372049-17de-4550-aecc-06111fdf2a9b";

            mockedRepository.Setup(x => x.GetNextLinkForCheck(It.IsAny <string>())).Returns(nextPaymentLink);

            var fakeEpayResult = new EPayRequestCheckResult();

            fakeEpayResult.BankReferenceId = null;
            fakeEpayResult.RequestStatus   = RequestStatus.Initiated;
            fakeEpayResult.ExceptionType   = ExceptionType.ArgumentException;
            fakeEpayResult.Message         = "some random error message";
            fakeEpayResult.Success         = false;
            fakeEpayResult.VerifyDate      = null;
            mockedPayRequest.Setup(x => x.Check(options.ApiKey, options.Password, nextPaymentLink.Token)).Returns(fakeEpayResult);

            var service = new PaymentLinkNotificationService(options, mockedRepository.Object, mockedPayRequest.Object);

            service.PaymentLinkChanged += (o, e) => paymentLinkEventCalled = true;

            service.OnTick();

            mockedRepository.Verify(x => x.GetNextLinkForCheck(It.IsAny <string>()), Times.Once());
            mockedPayRequest.Verify(x => x.Check(options.ApiKey, options.Password, nextPaymentLink.Token), Times.Once());
            mockedRepository.Verify(x => x.Update(nextPaymentLink), Times.Never());
            Assert.True(paymentLinkEventCalled);
        }
        public void OnTick_WithPaidLinkAndHandlingPaymentLinkEvent_WorksAsExpected()
        {
            var options = new PardakhtVasetClientOptions();

            options.ApiKey           = "foo";
            options.Password         = "******";
            options.ConnectionString = "fake connection string";
            options.TablePrefix      = "";

            var mockedRepository = new Mock <IPaymentLinkRepository>();
            var mockedPayRequest = new Mock <IPayRequestV2>();

            var nextPaymentLink = new PaymentLink();

            nextPaymentLink.Amount                 = 26000;
            nextPaymentLink.BankReferenceId        = null;
            nextPaymentLink.CreateDate             = new DateTime(2017, 12, 3);
            nextPaymentLink.Description            = "بابت مانده حساب";
            nextPaymentLink.ExpireDays             = 30;
            nextPaymentLink.FollowId               = "324";
            nextPaymentLink.LastCheckForUpdateDate = new DateTime(2017, 12, 3);
            nextPaymentLink.PaymentStatus          = (int)RequestStatus.Initiated;
            nextPaymentLink.ResultDate             = null;
            nextPaymentLink.Token = "1d372049-17de-4550-aecc-06111fdf2a9b";
            nextPaymentLink.Url   = "https://pardakhtvaset.com/pay?token=1d372049-17de-4550-aecc-06111fdf2a9b";

            mockedRepository.Setup(x => x.GetNextLinkForCheck(null)).Returns(nextPaymentLink);

            var fakeEpayResult = new EPayRequestCheckResult();

            fakeEpayResult.BankReferenceId = "57430753503405340";
            fakeEpayResult.RequestStatus   = RequestStatus.Paid;
            fakeEpayResult.Success         = true;
            fakeEpayResult.VerifyDate      = new DateTime(2017, 12, 4);
            mockedPayRequest.Setup(x => x.Check(options.ApiKey, options.Password, nextPaymentLink.Token)).Returns(fakeEpayResult);

            var service = new PaymentLinkNotificationService(options, mockedRepository.Object, mockedPayRequest.Object);

            service.PaymentLinkChanged += (o, e) => e.Handled = true;

            service.OnTick();

            mockedRepository.Verify(x => x.GetNextLinkForCheck(It.IsAny <string>()), Times.Once());
            mockedPayRequest.Verify(x => x.Check(options.ApiKey, options.Password, nextPaymentLink.Token), Times.Once());
            mockedRepository.Verify(x => x.Update(nextPaymentLink), Times.Once());
        }
        public void Dispose_WithExistingSubscribers_DisposeWithoutError()
        {
            var options = new PardakhtVasetClientOptions {
                ApiKey = "my api key", Password = "******", ConnectionString = "my connection string;", TablePrefix = "pv"
            };

            var mockedDbInitializer        = new Mock <IDbInitializer>();
            var mockedPaymentRepository    = new Mock <IPaymentLinkRepository>();
            var mockedPaymetRequestFactory = new Mock <IPayRequestFactory>();
            var mockedPayRequest           = new Mock <IPayRequestV2>();

            mockedPaymetRequestFactory.Setup(x => x.CreateV2()).Returns(mockedPayRequest.Object);

            var client = new PardakhtVasetClient(options, mockedDbInitializer.Object, mockedPaymentRepository.Object, mockedPaymetRequestFactory.Object);

            client.PaymentLinkNotificationService.PaymentLinkChanged += (o, e) => { };
            var ex = Record.Exception(() => client.Dispose());

            Assert.Null(ex);
            Assert.NotNull(client);
            mockedPaymentRepository.Verify(x => x.Dispose(), Times.Once);
        }
Beispiel #7
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            var options = new PardakhtVasetClientOptions();

            options.ConnectionString = Settings.Default.ConnectionString;
            options.ApiKey           = Settings.Default.ApiKey;
            options.Password         = Settings.Default.Password;

            options.TablePrefix = "";

            _client = new PardakhtVasetClient(options);
            _client.Init(Settings.Default.ClusterId);

            _client.PaymentLinkNotificationService.PaymentLinkChanged += PaymentLinkNotificationService_PaymentLinkChanged;
            _client.PaymentLinkNotificationService.Start(TimeSpan.FromSeconds(10));

            try
            {
                refreshDataToolStripMenuItem_Click(sender, e);
            }
            catch { }
        }