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); }
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 { } }