diff --git a/src/CheckoutSdk/Issuing/IIssuingClient.Transactions.cs b/src/CheckoutSdk/Issuing/IIssuingClient.Transactions.cs new file mode 100644 index 00000000..b2f44cdd --- /dev/null +++ b/src/CheckoutSdk/Issuing/IIssuingClient.Transactions.cs @@ -0,0 +1,16 @@ +using Checkout.Issuing.Transactions.Requests.Query; +using Checkout.Issuing.Transactions.Responses.Query; +using System.Threading; +using System.Threading.Tasks; + +namespace Checkout.Issuing +{ + public partial interface IIssuingClient + { + Task GetListTransactions(TransactionsQueryFilter query, + CancellationToken cancellationToken = default); + + Task GetSingleTransaction(string transactionId, + CancellationToken cancellationToken = default); + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/IssuingClient.Base.cs b/src/CheckoutSdk/Issuing/IssuingClient.Base.cs index e72500ac..a98f1878 100644 --- a/src/CheckoutSdk/Issuing/IssuingClient.Base.cs +++ b/src/CheckoutSdk/Issuing/IssuingClient.Base.cs @@ -15,6 +15,7 @@ public partial class IssuingClient : AbstractClient, IIssuingClient private const string AuthorizationPath = "authorizations"; private const string PresentmentsPath = "presentments"; private const string ReversalsPath = "reversals"; + private const string TransactionsPath = "transactions"; public IssuingClient(IApiClient apiClient, CheckoutConfiguration configuration) : base(apiClient, configuration, SdkAuthorizationType.OAuth) diff --git a/src/CheckoutSdk/Issuing/IssuingClient.Transactions.cs b/src/CheckoutSdk/Issuing/IssuingClient.Transactions.cs new file mode 100644 index 00000000..aa5f55ac --- /dev/null +++ b/src/CheckoutSdk/Issuing/IssuingClient.Transactions.cs @@ -0,0 +1,35 @@ +using Checkout.Issuing.Transactions.Requests.Query; +using Checkout.Issuing.Transactions.Responses.Query; +using System.Threading; +using System.Threading.Tasks; + +namespace Checkout.Issuing +{ + public partial class IssuingClient + { + public Task GetListTransactions( + TransactionsQueryFilter query, + CancellationToken cancellationToken = default + ) + { + CheckoutUtils.ValidateParams("query", query); + return ApiClient.Query( + BuildPath(IssuingPath, TransactionsPath), + SdkAuthorization(), + query, + cancellationToken); + } + + public Task GetSingleTransaction( + string transactionId, + CancellationToken cancellationToken = default + ) + { + CheckoutUtils.ValidateParams("transactionId", transactionId); + return ApiClient.Get( + BuildPath(IssuingPath, TransactionsPath, transactionId), + SdkAuthorization(), + cancellationToken); + } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Requests/Query/TransactionsQueryFilter.cs b/src/CheckoutSdk/Issuing/Transactions/Requests/Query/TransactionsQueryFilter.cs new file mode 100644 index 00000000..9f928dd1 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Requests/Query/TransactionsQueryFilter.cs @@ -0,0 +1,23 @@ +using Checkout.Issuing.Transactions.Responses; +using Checkout.Issuing.Transactions.Responses.Query; +using System; + +namespace Checkout.Issuing.Transactions.Requests.Query +{ + public class TransactionsQueryFilter + { + public int? Limit { get; set; } + + public int? Skip { get; set; } + + public string CardholderId { get; set; } + + public string CardId { get; set; } + + public TransactionStatusType? Status { get; set; } + + public DateTime? From { get; set; } + + public DateTime? To { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/Amounts.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/Amounts.cs new file mode 100644 index 00000000..c716d1c9 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/Amounts.cs @@ -0,0 +1,15 @@ +namespace Checkout.Issuing.Transactions.Responses +{ + public class Amounts + { + public TotalHeld TotalHeld { get; set; } + + public TotalAuthorized TotalAuthorized { get; set; } + + public TotalReversed TotalReversed { get; set; } + + public TotalCleared TotalCleared { get; set; } + + public TotalRefunded TotalRefunded { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/Card.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/Card.cs new file mode 100644 index 00000000..d588e1d0 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/Card.cs @@ -0,0 +1,9 @@ +namespace Checkout.Issuing.Transactions.Responses +{ + public class Card + { + public string Id { get; set; } + + public string Network { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/Cardholder.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/Cardholder.cs new file mode 100644 index 00000000..c20f33d6 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/Cardholder.cs @@ -0,0 +1,7 @@ +namespace Checkout.Issuing.Transactions.Responses +{ + public class Cardholder + { + public string Id { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/Client.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/Client.cs new file mode 100644 index 00000000..5b2005c9 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/Client.cs @@ -0,0 +1,7 @@ +namespace Checkout.Issuing.Transactions.Responses +{ + public class Client + { + public string Id { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/DigitalCard.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/DigitalCard.cs new file mode 100644 index 00000000..c6a596c1 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/DigitalCard.cs @@ -0,0 +1,9 @@ +namespace Checkout.Issuing.Transactions.Responses +{ + public class DigitalCard + { + public string Id { get; set; } + + public WalletType? WalletType { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/Entity.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/Entity.cs new file mode 100644 index 00000000..fbf4b666 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/Entity.cs @@ -0,0 +1,7 @@ +namespace Checkout.Issuing.Transactions.Responses +{ + public class Entity + { + public string Id { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/IndicatorType.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/IndicatorType.cs new file mode 100644 index 00000000..28c78372 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/IndicatorType.cs @@ -0,0 +1,36 @@ +using System.Runtime.Serialization; + +namespace Checkout.Issuing.Transactions.Responses +{ + public enum IndicatorType + {[EnumMember(Value = "incremental_preauthorization")] + IncrementalPreauthorization, + + [EnumMember(Value = "deferred_authorization")] + DeferredAuthorization, + + [EnumMember(Value = "preauthorization")] + Preauthorization, + + [EnumMember(Value = "normal_authorization")] + NormalAuthorization, + + [EnumMember(Value = "final_authorization")] + FinalAuthorization, + + [EnumMember(Value = "partial_reversal")] + PartialReversal, + + [EnumMember(Value = "full_reversal")] + FullReversal, + + [EnumMember(Value = "partial_presentment")] + PartialPresentment, + + [EnumMember(Value = "final_presentment")] + FinalPresentment, + + [EnumMember(Value = "unknown")] + Unknown + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/InitiatorType.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/InitiatorType.cs new file mode 100644 index 00000000..40ab0b8b --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/InitiatorType.cs @@ -0,0 +1,22 @@ +using System.Runtime.Serialization; + +namespace Checkout.Issuing.Transactions.Responses +{ + public enum InitiatorType + { + [EnumMember(Value = "cardholder")] + Cardholder, + + [EnumMember(Value = "merchant")] + Merchant, + + [EnumMember(Value = "acquirer")] + Acquirer, + + [EnumMember(Value = "card_network")] + CardNetwork, + + [EnumMember(Value = "issuer")] + Issuer + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/Merchant.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/Merchant.cs new file mode 100644 index 00000000..6ca43a9b --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/Merchant.cs @@ -0,0 +1,17 @@ +namespace Checkout.Issuing.Transactions.Responses +{ + public class Merchant + { + public string Id { get; set; } + + public string Name { get; set; } + + public string City { get; set; } + + public string State { get; set; } + + public string CountryCode { get; set; } + + public string CategoryCode { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/Messages.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/Messages.cs new file mode 100644 index 00000000..034fc317 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/Messages.cs @@ -0,0 +1,28 @@ +using Checkout.Common; +using System; + +namespace Checkout.Issuing.Transactions.Responses +{ + public class Messages + { + public string Id { get; set; } + + public InitiatorType? Initiator { get; set; } + + public Type? Type { get; set; } + + public ResultType? Result { get; set; } + + public bool? IsRelayed { get; set; } + + public IndicatorType? Indicator { get; set; } + + public string DeclinedReason { get; set; } + + public long? BillingAmount { get; set; } + + public Currency? BillingCurrency { get; set; } + + public DateTime? CreatedOn { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/Query/TransactionSingleResponse.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/Query/TransactionSingleResponse.cs new file mode 100644 index 00000000..81ae161a --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/Query/TransactionSingleResponse.cs @@ -0,0 +1,35 @@ +using Checkout.Common; +using System; +using System.Collections.Generic; + +namespace Checkout.Issuing.Transactions.Responses.Query +{ + public class TransactionSingleResponse : Resource + { + public string Id { get; set; } + + public DateTime? CreatedOn { get; set; } + + public TransactionStatusType? Status { get; set; } + + public TransactionType? TransactionType { get; set; } + + public Client Client { get; set; } + + public Entity Entity { get; set; } + + public Card Card { get; set; } + + public DigitalCard DigitalCard { get; set; } + + public Cardholder Cardholder { get; set; } + + public Amounts Amounts { get; set; } + + public Merchant Merchant { get; set; } + + public ReferenceTransaction ReferenceTransaction { get; set; } + + public IList Messages { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/Query/TransactionsListResponse.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/Query/TransactionsListResponse.cs new file mode 100644 index 00000000..3e87fddc --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/Query/TransactionsListResponse.cs @@ -0,0 +1,16 @@ +using Checkout.Common; +using System.Collections.Generic; + +namespace Checkout.Issuing.Transactions.Responses.Query +{ + public class TransactionsListResponse : HttpMetadata + { + public int? Limit { get; set; } + + public int? Skip { get; set; } + + public int? TotalCount { get; set; } + + public IList Data { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/ReferenceTransaction.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/ReferenceTransaction.cs new file mode 100644 index 00000000..e984631a --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/ReferenceTransaction.cs @@ -0,0 +1,9 @@ +namespace Checkout.Issuing.Transactions.Responses +{ + public class ReferenceTransaction + { + public string TransactionId { get; set; } + + public ReferenceType? ReferenceType { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/ReferenceType.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/ReferenceType.cs new file mode 100644 index 00000000..5612864d --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/ReferenceType.cs @@ -0,0 +1,13 @@ +using System.Runtime.Serialization; + +namespace Checkout.Issuing.Transactions.Responses +{ + public enum ReferenceType + { + [EnumMember(Value = "original_mit")] + OriginalMit, + + [EnumMember(Value = "original_recurring")] + OriginalRecurring, + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/ResultType.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/ResultType.cs new file mode 100644 index 00000000..585b0318 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/ResultType.cs @@ -0,0 +1,16 @@ +using System.Runtime.Serialization; + +namespace Checkout.Issuing.Transactions.Responses +{ + public enum ResultType + { + [EnumMember(Value = "approved")] + Approved, + + [EnumMember(Value = "declined")] + Declined, + + [EnumMember(Value = "processed")] + Processed + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/TotalAuthorized.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/TotalAuthorized.cs new file mode 100644 index 00000000..6d8a9d2a --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/TotalAuthorized.cs @@ -0,0 +1,11 @@ +using Checkout.Common; + +namespace Checkout.Issuing.Transactions.Responses +{ + public class TotalAuthorized + { + public long? Amount { get; set; } + + public Currency? Currency { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/TotalCleared.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/TotalCleared.cs new file mode 100644 index 00000000..422a0694 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/TotalCleared.cs @@ -0,0 +1,11 @@ +using Checkout.Common; + +namespace Checkout.Issuing.Transactions.Responses +{ + public class TotalCleared + { + public long? Amount { get; set; } + + public Currency? Currency { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/TotalHeld.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/TotalHeld.cs new file mode 100644 index 00000000..7160a866 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/TotalHeld.cs @@ -0,0 +1,11 @@ +using Checkout.Common; + +namespace Checkout.Issuing.Transactions.Responses +{ + public class TotalHeld + { + public long? Amount { get; set; } + + public Currency? Currency { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/TotalRefunded.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/TotalRefunded.cs new file mode 100644 index 00000000..89452e8c --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/TotalRefunded.cs @@ -0,0 +1,11 @@ +using Checkout.Common; + +namespace Checkout.Issuing.Transactions.Responses +{ + public class TotalRefunded + { + public long? Amount { get; set; } + + public Currency? Currency { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/TotalReversed.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/TotalReversed.cs new file mode 100644 index 00000000..86ff95eb --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/TotalReversed.cs @@ -0,0 +1,11 @@ +using Checkout.Common; + +namespace Checkout.Issuing.Transactions.Responses +{ + public class TotalReversed + { + public long? Amount { get; set; } + + public Currency? Currency { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/TransactionStatusType.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/TransactionStatusType.cs new file mode 100644 index 00000000..4e2725a0 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/TransactionStatusType.cs @@ -0,0 +1,19 @@ +using System.Runtime.Serialization; + +namespace Checkout.Issuing.Transactions.Responses +{ + public enum TransactionStatusType + { + [EnumMember(Value = "authorized")] Authorized, + + [EnumMember(Value = "declined")] Declined, + + [EnumMember(Value = "canceled")] Canceled, + + [EnumMember(Value = "cleared")] Cleared, + + [EnumMember(Value = "refunded")] Refunded, + + [EnumMember(Value = "disputed")] Disputed, + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/TransactionType.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/TransactionType.cs new file mode 100644 index 00000000..a5e64ebd --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/TransactionType.cs @@ -0,0 +1,73 @@ +using System.Runtime.Serialization; + +namespace Checkout.Issuing.Transactions.Responses +{ + public enum TransactionType + { + [EnumMember(Value = "account_funding")] + AccountFunding, + + [EnumMember(Value = "account_transfer")] + AccountTransfer, + + [EnumMember(Value = "atm_installment")] + AtmInstallment, + + [EnumMember(Value = "balance_inquiry")] + BalanceInquiry, + + [EnumMember(Value = "bill_payment")] + BillPayment, + + [EnumMember(Value = "cash_advance")] + CashAdvance, + + [EnumMember(Value = "cashback")] + Cashback, + + [EnumMember(Value = "credit_adjustment")] + CreditAdjustment, + + [EnumMember(Value = "debit_adjustment")] + DebitAdjustment, + + [EnumMember(Value = "original_credit")] + OriginalCredit, + + [EnumMember(Value = "payment_account_inquiry")] + PaymentAccountInquiry, + + [EnumMember(Value = "payment")] + Payment, + + [EnumMember(Value = "pin_change")] + PinChange, + + [EnumMember(Value = "pin_unblock")] + PinUnblock, + + [EnumMember(Value = "purchase_account_inquiry")] + PurchaseAccountInquiry, + + [EnumMember(Value = "purchase")] + Purchase, + + [EnumMember(Value = "quasi_cash")] + QuasiCash, + + [EnumMember(Value = "remittance_funding")] + RemittanceFunding, + + [EnumMember(Value = "remittance_payment")] + RemittancePayment, + + [EnumMember(Value = "unknown")] + Unknown, + + [EnumMember(Value = "withdrawal")] + Withdrawal, + + [EnumMember(Value = "refund")] + Refund + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/Type.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/Type.cs new file mode 100644 index 00000000..33ce6ae2 --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/Type.cs @@ -0,0 +1,34 @@ +using System.Runtime.Serialization; + +namespace Checkout.Issuing.Transactions.Responses +{ + public enum Type + { + [EnumMember(Value = "authorization")] + Authorization, + + [EnumMember(Value = "reversal")] + Reversal, + + [EnumMember(Value = "authorization_advice")] + AuthorizationAdvice, + + [EnumMember(Value = "reversal_advice")] + ReversalAdvice, + + [EnumMember(Value = "presentment")] + Presentment, + + [EnumMember(Value = "authorization_refund")] + AuthorizationRefund, + + [EnumMember(Value = "presentment_refund")] + PresentmentRefund, + + [EnumMember(Value = "presentment_reversed")] + PresentmentReversed, + + [EnumMember(Value = "presentment_reversed_refund")] + PresentmentReversedRefund + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Issuing/Transactions/Responses/WalletType.cs b/src/CheckoutSdk/Issuing/Transactions/Responses/WalletType.cs new file mode 100644 index 00000000..d8b5d6cf --- /dev/null +++ b/src/CheckoutSdk/Issuing/Transactions/Responses/WalletType.cs @@ -0,0 +1,16 @@ +using System.Runtime.Serialization; + +namespace Checkout.Issuing.Transactions.Responses +{ + public enum WalletType + { + [EnumMember(Value = "googlepay")] + Googlepay, + + [EnumMember(Value = "applepay")] + Applepay, + + [EnumMember(Value = "remote_commerce_programs")] + RemoteCommercePrograms, + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/OAuthScope.cs b/src/CheckoutSdk/OAuthScope.cs index 37ed1bac..1bba990e 100644 --- a/src/CheckoutSdk/OAuthScope.cs +++ b/src/CheckoutSdk/OAuthScope.cs @@ -48,6 +48,7 @@ public enum OAuthScope [OAuthScope("issuing:client")] IssuingClient, [OAuthScope("issuing:controls-read")] IssuingControlRead, [OAuthScope("issuing:controls-write")] IssuingControlWrite, + [OAuthScope("issuing:transactions-read")] IssuingTransactionsRead, [OAuthScope("Payment Context")] PaymentContext, } } diff --git a/src/CheckoutSdk/Payments/Ticket.cs b/src/CheckoutSdk/Payments/Ticket.cs index 03526424..a23b600c 100644 --- a/src/CheckoutSdk/Payments/Ticket.cs +++ b/src/CheckoutSdk/Payments/Ticket.cs @@ -7,6 +7,8 @@ public class Ticket public string IssueDate { get; set; } public string IssuingCarrierCode { get; set; } + + public string TravelPackageIndicator { get; set; } public string TravelAgencyName { get; set; } diff --git a/test/CheckoutSdkTest/Issuing/IssuingCommon.cs b/test/CheckoutSdkTest/Issuing/IssuingCommon.cs index 53618b7a..c47f23ae 100644 --- a/test/CheckoutSdkTest/Issuing/IssuingCommon.cs +++ b/test/CheckoutSdkTest/Issuing/IssuingCommon.cs @@ -123,7 +123,7 @@ private static CheckoutApi IssuingCheckoutApi() System.Environment.GetEnvironmentVariable("CHECKOUT_DEFAULT_OAUTH_ISSUING_CLIENT_ID"), System.Environment.GetEnvironmentVariable("CHECKOUT_DEFAULT_OAUTH_ISSUING_CLIENT_SECRET")) .Scopes(OAuthScope.IssuingCard, OAuthScope.IssuingControlRead, OAuthScope.IssuingControlWrite, - OAuthScope.IssuingClient, OAuthScope.Vault) + OAuthScope.IssuingClient, OAuthScope.IssuingTransactionsRead, OAuthScope.Vault) .Environment(Environment.Sandbox) .Build() as CheckoutApi; } diff --git a/test/CheckoutSdkTest/Issuing/Transactions/TransactionsClientTest.cs b/test/CheckoutSdkTest/Issuing/Transactions/TransactionsClientTest.cs new file mode 100644 index 00000000..b537058f --- /dev/null +++ b/test/CheckoutSdkTest/Issuing/Transactions/TransactionsClientTest.cs @@ -0,0 +1,68 @@ +using Checkout.Issuing.Transactions.Requests.Query; +using Checkout.Issuing.Transactions.Responses.Query; +using Moq; +using Shouldly; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace Checkout.Issuing.Transactions +{ + public class TransactionsClientTest : UnitTestFixture + { + private readonly SdkAuthorization _authorization = + new SdkAuthorization(PlatformType.DefaultOAuth, ValidDefaultSk); + + private readonly Mock _apiClient = new Mock(); + private readonly Mock _sdkCredentials = new Mock(PlatformType.DefaultOAuth); + private readonly Mock _httpClientFactory = new Mock(); + private readonly Mock _configuration; + + public TransactionsClientTest() + { + _sdkCredentials.Setup(credentials => credentials.GetSdkAuthorization(SdkAuthorizationType.OAuth)) + .Returns(_authorization); + + _configuration = new Mock(_sdkCredentials.Object, + Environment.Sandbox, _httpClientFactory.Object); + } + + [Fact] + private async Task ShouldGetListTransactions() + { + TransactionsQueryFilter query = new TransactionsQueryFilter(); + TransactionsListResponse response = new TransactionsListResponse(); + + _apiClient.Setup(apiClient => + apiClient.Query("issuing/transactions", _authorization, + query, + CancellationToken.None)) + .ReturnsAsync(() => response); + + IIssuingClient client = new IssuingClient(_apiClient.Object, _configuration.Object); + + TransactionsListResponse result = await client.GetListTransactions(query); + + result.ShouldNotBeNull(); + result.ShouldBeSameAs(response); + } + + [Fact] + private async Task ShouldGetSingleTransaction() + { + TransactionSingleResponse response = new TransactionSingleResponse(); + + _apiClient.Setup(apiClient => + apiClient.Get("issuing/transactions/transaction_id", _authorization, + CancellationToken.None)) + .ReturnsAsync(() => response); + + IIssuingClient client = new IssuingClient(_apiClient.Object, _configuration.Object); + + TransactionSingleResponse result = await client.GetSingleTransaction("transaction_id"); + + result.ShouldNotBeNull(); + result.ShouldBeSameAs(response); + } + } +} \ No newline at end of file diff --git a/test/CheckoutSdkTest/Issuing/Transactions/TransactionsIntegrationTest.cs b/test/CheckoutSdkTest/Issuing/Transactions/TransactionsIntegrationTest.cs new file mode 100644 index 00000000..c66459f6 --- /dev/null +++ b/test/CheckoutSdkTest/Issuing/Transactions/TransactionsIntegrationTest.cs @@ -0,0 +1,49 @@ +using Checkout.Issuing.Transactions.Requests.Query; +using Checkout.Issuing.Transactions.Responses; +using Checkout.Issuing.Transactions.Responses.Query; +using Shouldly; +using System.Threading.Tasks; +using Xunit; + +namespace Checkout.Issuing.Transactions +{ + public class TransactionsIntegrationTest : IssuingCommon + { + [Fact] + private async Task ShouldGetListTransactions() + { + TransactionsQueryFilter query = new TransactionsQueryFilter(); + TransactionsListResponse response = await Api.IssuingClient().GetListTransactions(query); + + response.ShouldNotBeNull(); + response.Limit.ShouldNotBeNull(); + response.Skip.ShouldNotBeNull(); + response.TotalCount.ShouldNotBeNull(); + response.Data.ShouldNotBeNull(); + response.Data.Count.ShouldBePositive(); + } + + [Fact] + private async Task ShouldGetSingleTransaction() + { + TransactionsQueryFilter query = new TransactionsQueryFilter(); + TransactionsListResponse transactions = await Api.IssuingClient().GetListTransactions(query); + + TransactionSingleResponse response = await Api.IssuingClient().GetSingleTransaction(transactions.Data[0].Id); + + response.ShouldNotBeNull(); + response.Id.ShouldNotBeNullOrEmpty(); + response.CreatedOn.ShouldNotBeNull(); + response.Status.ShouldNotBeNull(); + response.TransactionType.ShouldNotBeNull(); + response.Client.ShouldNotBeNull(); + response.Entity.ShouldNotBeNull(); + response.Card.ShouldNotBeNull(); + response.Cardholder.ShouldNotBeNull(); + response.Amounts.ShouldNotBeNull(); + response.Merchant.ShouldNotBeNull(); + response.Messages.ShouldNotBeNull(); + response.Links.ShouldNotBeNull(); + } + } +} \ No newline at end of file