From d857a4f8c9adbb0cecbde5919cf78ede19dd5721 Mon Sep 17 00:00:00 2001 From: "emami.s" Date: Wed, 20 May 2026 11:17:44 +0330 Subject: [PATCH 1/6] Add .NET 10 support and update package references Add net10.0 target framework support across Parbad core, ASP.NET Core integration, storage packages, gateway packages, and test projects. Update package references to current stable versions where compatible, while keeping netstandard2.0/netstandard2.1-specific ASP.NET Core and Microsoft.Extensions dependencies on the 2.2 line to preserve legacy consumer compatibility. Use conditional EF Core package references so legacy EntityFrameworkCore storage targets stay on the latest compatible 5.0 patch release and net10.0 uses EF Core 10. Add direct compatibility/security overrides for vulnerable transitive dependencies without moving legacy netstandard dependency groups to modern-only package lines. Update test package references, make previously non-discoverable gateway/core tests executable, and adjust tests for MSTest 4 behavior and net10.0 runtime expectations. Fix net10.0 build issues in cache and Entity Framework Core storage tests, use IWebHostEnvironment for modern ASP.NET Core targets, and remove obsolete test-helper storage usage. Validated with dotnet restore, dotnet build, dotnet test, and vulnerable package checks across all project files. --- .../src/Parbad.AspNetCore.csproj | 5 ++-- ...arbadVirtualGatewayMiddlewareExtensions.cs | 8 +++---- .../FanAva/src/Parbad.Gateway.FanAva.csproj | 2 +- .../tests/Parbad.Gateway.FanAva.Tests.csproj | 12 +++++++++- .../IdPay/src/Parbad.Gateway.IdPay.csproj | 2 +- .../tests/Parbad.Gateway.IdPay.Tests.csproj | 12 +++++++++- .../src/Parbad.Gateway.IranKish.csproj | 2 +- .../Parbad.Gateway.IranKish.Tests.csproj | 12 +++++++++- .../PayIr/src/Parbad.Gateway.PayIr.csproj | 2 +- .../PayPing/src/Parbad.Gateway.PayPing.csproj | 2 +- .../Sepehr/src/Parbad.Gateway.Sepehr.csproj | 2 +- .../YekPay/src/Parbad.Gateway.YekPay.csproj | 2 +- .../src/Parbad.Gateway.ZarinPal.csproj | 2 +- .../Zibal/src/Parbad.Gateway.Zibal.csproj | 2 +- src/Parbad.Mvc/src/Parbad.Mvc.csproj | 2 +- src/Parbad.Owin/src/Parbad.Owin.csproj | 4 ++-- .../Parbad.Storage.Abstractions.csproj | 4 ++-- .../Cache/src/Parbad.Storage.Cache.csproj | 6 ++--- .../tests/DistributedMemoryCacheTests.cs | 4 ++-- .../Cache/tests/MemoryCacheTests.cs | 4 ++-- .../tests/Parbad.Storage.Cache.Tests.csproj | 10 ++++---- .../src/EntityFrameworkCoreStorage.cs | 15 ++++++++++-- .../Parbad.Storage.EntityFrameworkCore.csproj | 10 +++++--- .../tests/EntityFrameworkCoreStorageTests.cs | 4 ++-- ...d.Storage.EntityFrameworkCore.Tests.csproj | 14 +++++------ src/Parbad/src/Parbad.csproj | 8 ++++--- src/Parbad/tests/CallbackUrlTests.cs | 9 ++++++- .../tests/Gateway/Melli/MelliCommonTests.cs | 8 +++++-- src/Parbad/tests/GatewayTransporterTests.cs | 19 ++++++++++++--- src/Parbad/tests/InvoiceBuilderTests.cs | 15 ++++++++---- src/Parbad/tests/MoneyTests.cs | 4 ++-- src/Parbad/tests/Parbad.Tests.csproj | 12 +++++++++- .../GatewayOnResultHelper.cs | 4 ++-- .../GatewayTestHelpers.cs | 2 +- .../Parbad.Tests.Helpers.csproj | 24 ++++--------------- 35 files changed, 162 insertions(+), 87 deletions(-) diff --git a/src/Parbad.AspNetCore/src/Parbad.AspNetCore.csproj b/src/Parbad.AspNetCore/src/Parbad.AspNetCore.csproj index 187016de..f0bb81b1 100644 --- a/src/Parbad.AspNetCore/src/Parbad.AspNetCore.csproj +++ b/src/Parbad.AspNetCore/src/Parbad.AspNetCore.csproj @@ -4,7 +4,7 @@ Parbad.AspNetCore Parbad.AspNetCore 1.5.0 - netstandard2.0;netstandard2.1;netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Sina Soltani Copyright © Sina Soltani 2016 @@ -36,9 +36,10 @@ For more information see: https://www.nuget.org/packages/Parbad/ + - + diff --git a/src/Parbad.AspNetCore/src/VirtualGateway/ParbadVirtualGatewayMiddlewareExtensions.cs b/src/Parbad.AspNetCore/src/VirtualGateway/ParbadVirtualGatewayMiddlewareExtensions.cs index 405b83c8..654287e2 100644 --- a/src/Parbad.AspNetCore/src/VirtualGateway/ParbadVirtualGatewayMiddlewareExtensions.cs +++ b/src/Parbad.AspNetCore/src/VirtualGateway/ParbadVirtualGatewayMiddlewareExtensions.cs @@ -21,9 +21,9 @@ public static IApplicationBuilder UseParbadVirtualGatewayWhenDeveloping(this IAp { if (builder == null) throw new ArgumentNullException(nameof(builder)); -#if NETCOREAPP3_0 || Net_5 || Net_6 || Net_7 || Net_8 - var hostEnvironment = builder.ApplicationServices.GetRequiredService(); - var isDevelopment = Microsoft.Extensions.Hosting.HostEnvironmentEnvExtensions.IsDevelopment(hostEnvironment); +#if NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0_OR_GREATER + var hostEnvironment = builder.ApplicationServices.GetRequiredService(); + var isDevelopment = Microsoft.Extensions.Hosting.HostEnvironmentEnvExtensions.IsDevelopment(hostEnvironment); #else var hostEnvironment = builder.ApplicationServices.GetRequiredService(); var isDevelopment = Hosting.HostingEnvironmentExtensions.IsDevelopment(hostEnvironment); @@ -68,4 +68,4 @@ public static IApplicationBuilder UseParbadVirtualGateway(this IApplicationBuild return builder.Map(options.Value.GatewayPath, applicationBuilder => applicationBuilder.UseMiddleware()); } -} \ No newline at end of file +} diff --git a/src/Parbad.Gateway/FanAva/src/Parbad.Gateway.FanAva.csproj b/src/Parbad.Gateway/FanAva/src/Parbad.Gateway.FanAva.csproj index 2c8c83e5..883efe18 100644 --- a/src/Parbad.Gateway/FanAva/src/Parbad.Gateway.FanAva.csproj +++ b/src/Parbad.Gateway/FanAva/src/Parbad.Gateway.FanAva.csproj @@ -2,7 +2,7 @@ Parbad.Gateway.FanAva - netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 1.4.0 latest Mohammad Mokhtari diff --git a/src/Parbad.Gateway/FanAva/tests/Parbad.Gateway.FanAva.Tests.csproj b/src/Parbad.Gateway/FanAva/tests/Parbad.Gateway.FanAva.Tests.csproj index c78f7f05..9d7af7e3 100644 --- a/src/Parbad.Gateway/FanAva/tests/Parbad.Gateway.FanAva.Tests.csproj +++ b/src/Parbad.Gateway/FanAva/tests/Parbad.Gateway.FanAva.Tests.csproj @@ -1,11 +1,21 @@ - net9.0 + net10.0 latest false + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + diff --git a/src/Parbad.Gateway/IdPay/src/Parbad.Gateway.IdPay.csproj b/src/Parbad.Gateway/IdPay/src/Parbad.Gateway.IdPay.csproj index ed4be312..9861b6e8 100644 --- a/src/Parbad.Gateway/IdPay/src/Parbad.Gateway.IdPay.csproj +++ b/src/Parbad.Gateway/IdPay/src/Parbad.Gateway.IdPay.csproj @@ -1,7 +1,7 @@ - netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 1.6.0 latest Sina Soltani diff --git a/src/Parbad.Gateway/IdPay/tests/Parbad.Gateway.IdPay.Tests.csproj b/src/Parbad.Gateway/IdPay/tests/Parbad.Gateway.IdPay.Tests.csproj index 45d35399..d8572b65 100644 --- a/src/Parbad.Gateway/IdPay/tests/Parbad.Gateway.IdPay.Tests.csproj +++ b/src/Parbad.Gateway/IdPay/tests/Parbad.Gateway.IdPay.Tests.csproj @@ -1,11 +1,21 @@ - net9.0 + net10.0 latest false + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + diff --git a/src/Parbad.Gateway/IranKish/src/Parbad.Gateway.IranKish.csproj b/src/Parbad.Gateway/IranKish/src/Parbad.Gateway.IranKish.csproj index a7b15a9c..6c865165 100644 --- a/src/Parbad.Gateway/IranKish/src/Parbad.Gateway.IranKish.csproj +++ b/src/Parbad.Gateway/IranKish/src/Parbad.Gateway.IranKish.csproj @@ -4,7 +4,7 @@ Parbad.Gateway.IranKish Parbad.Gateway.IranKish 1.3.0 - netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Sina Soltani Copyright © Sina Soltani 2016 diff --git a/src/Parbad.Gateway/IranKish/tests/Parbad.Gateway.IranKish.Tests.csproj b/src/Parbad.Gateway/IranKish/tests/Parbad.Gateway.IranKish.Tests.csproj index b8c73ac9..d81ebfb1 100644 --- a/src/Parbad.Gateway/IranKish/tests/Parbad.Gateway.IranKish.Tests.csproj +++ b/src/Parbad.Gateway/IranKish/tests/Parbad.Gateway.IranKish.Tests.csproj @@ -1,13 +1,23 @@ - net9.0 + net10.0 latest enable enable false + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + diff --git a/src/Parbad.Gateway/PayIr/src/Parbad.Gateway.PayIr.csproj b/src/Parbad.Gateway/PayIr/src/Parbad.Gateway.PayIr.csproj index e7da1289..37dd38b6 100644 --- a/src/Parbad.Gateway/PayIr/src/Parbad.Gateway.PayIr.csproj +++ b/src/Parbad.Gateway/PayIr/src/Parbad.Gateway.PayIr.csproj @@ -4,7 +4,7 @@ Parbad.Gateway.PayIr Parbad.Gateway.PayIr 1.8.0 - netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Sina Soltani Copyright © Sina Soltani 2016 diff --git a/src/Parbad.Gateway/PayPing/src/Parbad.Gateway.PayPing.csproj b/src/Parbad.Gateway/PayPing/src/Parbad.Gateway.PayPing.csproj index 1e2da967..16f434ef 100644 --- a/src/Parbad.Gateway/PayPing/src/Parbad.Gateway.PayPing.csproj +++ b/src/Parbad.Gateway/PayPing/src/Parbad.Gateway.PayPing.csproj @@ -3,7 +3,7 @@ Parbad.Gateway.PayPing Parbad.Gateway.PayPing 1.5.0 - netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Ali Zaferany Copyright © Parbad 2016 diff --git a/src/Parbad.Gateway/Sepehr/src/Parbad.Gateway.Sepehr.csproj b/src/Parbad.Gateway/Sepehr/src/Parbad.Gateway.Sepehr.csproj index 41eebfa2..cbf0d2d8 100644 --- a/src/Parbad.Gateway/Sepehr/src/Parbad.Gateway.Sepehr.csproj +++ b/src/Parbad.Gateway/Sepehr/src/Parbad.Gateway.Sepehr.csproj @@ -4,7 +4,7 @@ Parbad.Gateway.Sepehr Parbad.Gateway.Sepehr 1.7.0 - netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Sina Soltani Copyright © Sina Soltani 2016 diff --git a/src/Parbad.Gateway/YekPay/src/Parbad.Gateway.YekPay.csproj b/src/Parbad.Gateway/YekPay/src/Parbad.Gateway.YekPay.csproj index 2efc9196..5532ac49 100644 --- a/src/Parbad.Gateway/YekPay/src/Parbad.Gateway.YekPay.csproj +++ b/src/Parbad.Gateway/YekPay/src/Parbad.Gateway.YekPay.csproj @@ -4,7 +4,7 @@ Parbad.Gateway.YekPay Parbad.Gateway.YekPay 1.6.0 - netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Sina Soltani Copyright © Sina Soltani 2016 diff --git a/src/Parbad.Gateway/ZarinPal/src/Parbad.Gateway.ZarinPal.csproj b/src/Parbad.Gateway/ZarinPal/src/Parbad.Gateway.ZarinPal.csproj index dfa74fbc..c5330a01 100644 --- a/src/Parbad.Gateway/ZarinPal/src/Parbad.Gateway.ZarinPal.csproj +++ b/src/Parbad.Gateway/ZarinPal/src/Parbad.Gateway.ZarinPal.csproj @@ -4,7 +4,7 @@ Parbad.Gateway.ZarinPal Parbad.Gateway.ZarinPal 1.7.1 - netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net6.0;net7.0;net8;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net6.0;net7.0;net8;net9.0;net10.0 latest Sina Soltani Copyright © Sina Soltani 2016 diff --git a/src/Parbad.Gateway/Zibal/src/Parbad.Gateway.Zibal.csproj b/src/Parbad.Gateway/Zibal/src/Parbad.Gateway.Zibal.csproj index da5c00e3..302e79f9 100644 --- a/src/Parbad.Gateway/Zibal/src/Parbad.Gateway.Zibal.csproj +++ b/src/Parbad.Gateway/Zibal/src/Parbad.Gateway.Zibal.csproj @@ -5,7 +5,7 @@ Parbad.Gateway.Zibal enable 1.4.0 - netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Mohammad Ashrafi Copyright © Sina Soltani 2016 diff --git a/src/Parbad.Mvc/src/Parbad.Mvc.csproj b/src/Parbad.Mvc/src/Parbad.Mvc.csproj index 95f91e78..aef1c42a 100644 --- a/src/Parbad.Mvc/src/Parbad.Mvc.csproj +++ b/src/Parbad.Mvc/src/Parbad.Mvc.csproj @@ -35,7 +35,7 @@ For more information see: https://www.nuget.org/packages/Parbad/ - + diff --git a/src/Parbad.Owin/src/Parbad.Owin.csproj b/src/Parbad.Owin/src/Parbad.Owin.csproj index c5fe1f47..f4a015e1 100644 --- a/src/Parbad.Owin/src/Parbad.Owin.csproj +++ b/src/Parbad.Owin/src/Parbad.Owin.csproj @@ -35,8 +35,8 @@ For more information see: https://www.nuget.org/packages/Parbad/ - - + + diff --git a/src/Parbad.Storage/Abstractions/Parbad.Storage.Abstractions.csproj b/src/Parbad.Storage/Abstractions/Parbad.Storage.Abstractions.csproj index 98e02b90..73c8cf63 100644 --- a/src/Parbad.Storage/Abstractions/Parbad.Storage.Abstractions.csproj +++ b/src/Parbad.Storage/Abstractions/Parbad.Storage.Abstractions.csproj @@ -5,7 +5,7 @@ Parbad.Storage.Abstractions 1.3.0 latest - netstandard2.0;netstandard2.1;netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 enable false true @@ -38,7 +38,7 @@ More information: https://github.com/Sina-Soltani/Parbad - + diff --git a/src/Parbad.Storage/Cache/src/Parbad.Storage.Cache.csproj b/src/Parbad.Storage/Cache/src/Parbad.Storage.Cache.csproj index bc851005..b69e1a67 100644 --- a/src/Parbad.Storage/Cache/src/Parbad.Storage.Cache.csproj +++ b/src/Parbad.Storage/Cache/src/Parbad.Storage.Cache.csproj @@ -4,7 +4,7 @@ Parbad.Storage.Cache 1.5.0 latest - netstandard2.0;netstandard2.1;netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 enable false true @@ -35,14 +35,14 @@ More information: https://github.com/Sina-Soltani/Parbad - + - + diff --git a/src/Parbad.Storage/Cache/tests/DistributedMemoryCacheTests.cs b/src/Parbad.Storage/Cache/tests/DistributedMemoryCacheTests.cs index 23e72085..36283c26 100644 --- a/src/Parbad.Storage/Cache/tests/DistributedMemoryCacheTests.cs +++ b/src/Parbad.Storage/Cache/tests/DistributedMemoryCacheTests.cs @@ -52,9 +52,9 @@ public void Setup() } [TestCleanup] - public ValueTask Cleanup() + public Task Cleanup() { - return _services.DisposeAsync(); + return _services.DisposeAsync().AsTask(); } [TestMethod] diff --git a/src/Parbad.Storage/Cache/tests/MemoryCacheTests.cs b/src/Parbad.Storage/Cache/tests/MemoryCacheTests.cs index 630233b1..53380bca 100644 --- a/src/Parbad.Storage/Cache/tests/MemoryCacheTests.cs +++ b/src/Parbad.Storage/Cache/tests/MemoryCacheTests.cs @@ -52,9 +52,9 @@ public void Setup() } [TestCleanup] - public ValueTask Cleanup() + public Task Cleanup() { - return _services.DisposeAsync(); + return _services.DisposeAsync().AsTask(); } [TestMethod] diff --git a/src/Parbad.Storage/Cache/tests/Parbad.Storage.Cache.Tests.csproj b/src/Parbad.Storage/Cache/tests/Parbad.Storage.Cache.Tests.csproj index ae661946..b6dd9d99 100644 --- a/src/Parbad.Storage/Cache/tests/Parbad.Storage.Cache.Tests.csproj +++ b/src/Parbad.Storage/Cache/tests/Parbad.Storage.Cache.Tests.csproj @@ -1,16 +1,16 @@ - net9.0 + net10.0 latest false - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Parbad.Storage/EntityFrameworkCore/src/EntityFrameworkCoreStorage.cs b/src/Parbad.Storage/EntityFrameworkCore/src/EntityFrameworkCoreStorage.cs index 304c07b8..69455ed5 100644 --- a/src/Parbad.Storage/EntityFrameworkCore/src/EntityFrameworkCoreStorage.cs +++ b/src/Parbad.Storage/EntityFrameworkCore/src/EntityFrameworkCoreStorage.cs @@ -65,6 +65,7 @@ public virtual async Task UpdatePaymentAsync(Payment payment, CancellationToken var record = await Context .Payments + .AsQueryable() .AsNoTracking() .SingleOrDefaultAsync(model => model.Id == payment.Id, cancellationToken); @@ -85,6 +86,7 @@ public virtual async Task DeletePaymentAsync(Payment payment, CancellationToken var record = await Context .Payments + .AsQueryable() .AsNoTracking() .SingleOrDefaultAsync(model => model.Id == payment.Id, cancellationToken); @@ -117,6 +119,7 @@ public virtual async Task UpdateTransactionAsync(Transaction transaction, Cancel var record = await Context .Transactions + .AsQueryable() .SingleOrDefaultAsync(model => model.Id == transaction.Id, cancellationToken); if (record == null) throw new InvalidOperationException($"No transaction records found in database with id {transaction.Id}"); @@ -136,6 +139,7 @@ public virtual async Task DeleteTransactionAsync(Transaction transaction, Cancel var record = await Context .Transactions + .AsQueryable() .SingleOrDefaultAsync(model => model.Id == transaction.Id, cancellationToken); if (record == null) throw new InvalidOperationException($"No transaction records found in database with id {transaction.Id}"); @@ -149,6 +153,7 @@ public virtual async Task DeleteTransactionAsync(Transaction transaction, Cancel public virtual async Task GetPaymentByTrackingNumberAsync(long trackingNumber, CancellationToken cancellationToken = default) { var paymentEntity = await Context.Payments + .AsQueryable() .AsNoTracking() .SingleOrDefaultAsync(payment => payment.TrackingNumber == trackingNumber, cancellationToken); @@ -159,6 +164,7 @@ public virtual async Task DeleteTransactionAsync(Transaction transaction, Cancel public virtual async Task GetPaymentByTokenAsync(string paymentToken, CancellationToken cancellationToken = default) { var paymentEntity = await Context.Payments + .AsQueryable() .AsNoTracking() .SingleOrDefaultAsync(payment => payment.Token == paymentToken, cancellationToken); @@ -168,19 +174,24 @@ public virtual async Task DeleteTransactionAsync(Transaction transaction, Cancel /// public virtual Task DoesPaymentExistAsync(long trackingNumber, CancellationToken cancellationToken = default) { - return Context.Payments.AnyAsync(payment => payment.TrackingNumber == trackingNumber, cancellationToken); + return Context.Payments + .AsQueryable() + .AnyAsync(payment => payment.TrackingNumber == trackingNumber, cancellationToken); } /// public virtual Task DoesPaymentExistAsync(string paymentToken, CancellationToken cancellationToken = default) { - return Context.Payments.AnyAsync(payment => payment.Token == paymentToken, cancellationToken); + return Context.Payments + .AsQueryable() + .AnyAsync(payment => payment.Token == paymentToken, cancellationToken); } /// public virtual Task> GetTransactionsAsync(Payment payment, CancellationToken cancellationToken = default) { return Context.Transactions + .AsQueryable() .Where(transaction => transaction.PaymentId == payment.Id) .AsNoTracking() .Select(Mapper.ToTransactionModel()) diff --git a/src/Parbad.Storage/EntityFrameworkCore/src/Parbad.Storage.EntityFrameworkCore.csproj b/src/Parbad.Storage/EntityFrameworkCore/src/Parbad.Storage.EntityFrameworkCore.csproj index 75ef88b5..c12f971a 100644 --- a/src/Parbad.Storage/EntityFrameworkCore/src/Parbad.Storage.EntityFrameworkCore.csproj +++ b/src/Parbad.Storage/EntityFrameworkCore/src/Parbad.Storage.EntityFrameworkCore.csproj @@ -4,7 +4,7 @@ Parbad.Storage.EntityFrameworkCore 1.6.0 latest - net5;net6;net7;net8.0;net9.0 + net5;net6;net7;net8.0;net9.0;net10.0 enable false true @@ -44,8 +44,12 @@ More information: https://github.com/Sina-Soltani/Parbad - - + + + + + + diff --git a/src/Parbad.Storage/EntityFrameworkCore/tests/EntityFrameworkCoreStorageTests.cs b/src/Parbad.Storage/EntityFrameworkCore/tests/EntityFrameworkCoreStorageTests.cs index e6b48409..cf9086c4 100644 --- a/src/Parbad.Storage/EntityFrameworkCore/tests/EntityFrameworkCoreStorageTests.cs +++ b/src/Parbad.Storage/EntityFrameworkCore/tests/EntityFrameworkCoreStorageTests.cs @@ -54,9 +54,9 @@ public void Setup() } [TestCleanup] - public ValueTask Cleanup() + public Task Cleanup() { - return _context.DisposeAsync(); + return _context.DisposeAsync().AsTask(); } [TestMethod] diff --git a/src/Parbad.Storage/EntityFrameworkCore/tests/Parbad.Storage.EntityFrameworkCore.Tests.csproj b/src/Parbad.Storage/EntityFrameworkCore/tests/Parbad.Storage.EntityFrameworkCore.Tests.csproj index 67d0a9a2..dabb747d 100644 --- a/src/Parbad.Storage/EntityFrameworkCore/tests/Parbad.Storage.EntityFrameworkCore.Tests.csproj +++ b/src/Parbad.Storage/EntityFrameworkCore/tests/Parbad.Storage.EntityFrameworkCore.Tests.csproj @@ -1,18 +1,18 @@ - net9.0 + net10.0 latest false - - - - - - + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Parbad/src/Parbad.csproj b/src/Parbad/src/Parbad.csproj index 78266b8b..32935cb9 100644 --- a/src/Parbad/src/Parbad.csproj +++ b/src/Parbad/src/Parbad.csproj @@ -4,7 +4,7 @@ Parbad Parbad 3.11.3 - netstandard2.0;netstandard2.1;netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0 + netstandard2.0;netstandard2.1;netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Parbad Sina Soltani Parbad is a free, open-source, integrated and extensible library which connects your web applications to online payment gateways. Gateways can be added or developed by you. @@ -38,16 +38,18 @@ More information: https://github.com/Sina-Soltani/Parbad - + + + - + diff --git a/src/Parbad/tests/CallbackUrlTests.cs b/src/Parbad/tests/CallbackUrlTests.cs index 2cd9cf98..68e9bbe5 100644 --- a/src/Parbad/tests/CallbackUrlTests.cs +++ b/src/Parbad/tests/CallbackUrlTests.cs @@ -57,6 +57,13 @@ public void Casted_Value_Must_Be_Equal_With_Url() [TestMethod] public void NonValidUrl_Must_Throw_Exception() { - Assert.ThrowsException(() => new CallbackUrl("abcd")); + try + { + _ = new CallbackUrl("abcd"); + Assert.Fail("Expected CallbackUrlFormatException."); + } + catch (CallbackUrlFormatException) + { + } } } diff --git a/src/Parbad/tests/Gateway/Melli/MelliCommonTests.cs b/src/Parbad/tests/Gateway/Melli/MelliCommonTests.cs index 5e52e1a5..faae1164 100644 --- a/src/Parbad/tests/Gateway/Melli/MelliCommonTests.cs +++ b/src/Parbad/tests/Gateway/Melli/MelliCommonTests.cs @@ -41,10 +41,14 @@ public void Signing_Invalid_RequestData_Must_Throw_Exception() const string data = "test"; - Assert.ThrowsException(() => + try { crypto.Encrypt("test", data); - }); + Assert.Fail("Expected MelliGatewayDataSigningException."); + } + catch (MelliGatewayDataSigningException) + { + } } } } diff --git a/src/Parbad/tests/GatewayTransporterTests.cs b/src/Parbad/tests/GatewayTransporterTests.cs index 2eeebe67..de953624 100644 --- a/src/Parbad/tests/GatewayTransporterTests.cs +++ b/src/Parbad/tests/GatewayTransporterTests.cs @@ -1,6 +1,8 @@ -using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Net.Http.Headers; using Parbad.Internal; +using Parbad.Options; using Parbad.Tests.Helpers; using System.Collections.Generic; using System.Net; @@ -13,6 +15,7 @@ namespace Parbad.Tests public class GatewayTransporterTests { private HttpContext _httpContext; + private ServiceProvider _services; [TestInitialize] public void Setup() @@ -20,6 +23,16 @@ public void Setup() var httpContextAccessor = MockHelpers.MockHttpContextAccessor(); _httpContext = httpContextAccessor.HttpContext; + _services = new ServiceCollection() + .Configure(_ => { }) + .BuildServiceProvider(); + _httpContext.RequestServices = _services; + } + + [TestCleanup] + public Task Cleanup() + { + return _services.DisposeAsync().AsTask(); } [TestMethod] @@ -34,8 +47,8 @@ public async Task Transporter_Redirects_Correctly() await transporter.TransportAsync(); Assert.AreEqual((int)HttpStatusCode.Redirect, _httpContext.Response.StatusCode); - Assert.IsNotNull(_httpContext.Response.Headers[HeaderNames.Location]); - Assert.AreEqual(expectedUrl, _httpContext.Response.Headers[HeaderNames.Location]); + Assert.IsFalse(string.IsNullOrEmpty(_httpContext.Response.Headers[HeaderNames.Location].ToString())); + Assert.AreEqual(expectedUrl, _httpContext.Response.Headers[HeaderNames.Location].ToString()); } [TestMethod] diff --git a/src/Parbad/tests/InvoiceBuilderTests.cs b/src/Parbad/tests/InvoiceBuilderTests.cs index d0678b51..20842701 100644 --- a/src/Parbad/tests/InvoiceBuilderTests.cs +++ b/src/Parbad/tests/InvoiceBuilderTests.cs @@ -23,9 +23,9 @@ public void Setup() } [TestCleanup] - public ValueTask Cleanup() + public Task Cleanup() { - return _services.DisposeAsync(); + return _services.DisposeAsync().AsTask(); } [TestMethod] @@ -100,14 +100,21 @@ public async Task Invoice_Must_Have_The_Expected_AdditionalData() } [TestMethod] - public void Invoice_Must_Throw_Exception_When_Duplicate_AdditionalKey_Is_Added() + public async Task Invoice_Must_Throw_Exception_When_Duplicate_AdditionalKey_Is_Added() { const string key = "key"; _builder.AddProperty(key, ""); _builder.AddProperty(key, ""); - Assert.ThrowsExceptionAsync(() => _builder.BuildAsync()); + try + { + await _builder.BuildAsync(); + Assert.Fail("Expected ArgumentException."); + } + catch (ArgumentException) + { + } } [TestMethod] diff --git a/src/Parbad/tests/MoneyTests.cs b/src/Parbad/tests/MoneyTests.cs index f564a83b..2f489f47 100644 --- a/src/Parbad/tests/MoneyTests.cs +++ b/src/Parbad/tests/MoneyTests.cs @@ -57,8 +57,8 @@ public void Equatable_Works() { var money = new Money(10); - Assert.AreEqual(money, 10L); - Assert.AreEqual(money, 10M); + Assert.AreEqual(10L, (long)money); + Assert.AreEqual(10M, (decimal)money); Assert.AreEqual(money, new Money(10)); } } diff --git a/src/Parbad/tests/Parbad.Tests.csproj b/src/Parbad/tests/Parbad.Tests.csproj index 487bb9b6..9a9f4f33 100644 --- a/src/Parbad/tests/Parbad.Tests.csproj +++ b/src/Parbad/tests/Parbad.Tests.csproj @@ -1,11 +1,21 @@ - net9.0 + net10.0 latest false + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + diff --git a/tests/Parbad.Tests.Helpers/GatewayOnResultHelper.cs b/tests/Parbad.Tests.Helpers/GatewayOnResultHelper.cs index 57d4a019..d1547c3e 100644 --- a/tests/Parbad.Tests.Helpers/GatewayOnResultHelper.cs +++ b/tests/Parbad.Tests.Helpers/GatewayOnResultHelper.cs @@ -78,7 +78,7 @@ public static void OnFetchResult( Assert.AreEqual(GatewayAccount.DefaultName, result.GatewayAccountName); - Assert.AreEqual(result.Amount, expectedAmount); + Assert.AreEqual(expectedAmount, (decimal)result.Amount); Assert.IsFalse(result.IsAlreadyVerified); } @@ -102,7 +102,7 @@ public static void OnVerifyResult( Assert.AreEqual(GatewayAccount.DefaultName, result.GatewayAccountName); - Assert.AreEqual(result.Amount, expectedAmount); + Assert.AreEqual(expectedAmount, (decimal)result.Amount); Assert.IsNotNull(result.TransactionCode); diff --git a/tests/Parbad.Tests.Helpers/GatewayTestHelpers.cs b/tests/Parbad.Tests.Helpers/GatewayTestHelpers.cs index cec48047..cbd0d0e4 100644 --- a/tests/Parbad.Tests.Helpers/GatewayTestHelpers.cs +++ b/tests/Parbad.Tests.Helpers/GatewayTestHelpers.cs @@ -52,7 +52,7 @@ public static async Task TestGatewayAsync( onRequestResult(requestResult); - var storageManager = serviceProvider.GetRequiredService(); + var storageManager = serviceProvider.GetRequiredService(); var payment = await storageManager.GetPaymentByTrackingNumberAsync(requestResult.TrackingNumber); diff --git a/tests/Parbad.Tests.Helpers/Parbad.Tests.Helpers.csproj b/tests/Parbad.Tests.Helpers/Parbad.Tests.Helpers.csproj index 40079985..17d8509f 100644 --- a/tests/Parbad.Tests.Helpers/Parbad.Tests.Helpers.csproj +++ b/tests/Parbad.Tests.Helpers/Parbad.Tests.Helpers.csproj @@ -1,32 +1,18 @@  - netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0 + netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest false - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + + + - - - - - - - - - + From b1c479c55bc47d9d91c1eac033663070cd6a9e1e Mon Sep 17 00:00:00 2001 From: "emami.s" Date: Wed, 20 May 2026 11:29:38 +0330 Subject: [PATCH 2/6] Update package versions and release notes to v3.12.0 Bump version numbers across all Parbad projects for the v3.12.0 release. Update URLs in .csproj files to reference the new release notes. No functional or code changes included; metadata only. --- src/Parbad.AspNetCore/src/Parbad.AspNetCore.csproj | 4 ++-- src/Parbad.Gateway/FanAva/src/Parbad.Gateway.FanAva.csproj | 4 ++-- src/Parbad.Gateway/IdPay/src/Parbad.Gateway.IdPay.csproj | 4 ++-- .../IranKish/src/Parbad.Gateway.IranKish.csproj | 4 ++-- src/Parbad.Gateway/PayIr/src/Parbad.Gateway.PayIr.csproj | 4 ++-- src/Parbad.Gateway/PayPing/src/Parbad.Gateway.PayPing.csproj | 4 ++-- src/Parbad.Gateway/Sepehr/src/Parbad.Gateway.Sepehr.csproj | 4 ++-- src/Parbad.Gateway/YekPay/src/Parbad.Gateway.YekPay.csproj | 4 ++-- .../ZarinPal/src/Parbad.Gateway.ZarinPal.csproj | 4 ++-- src/Parbad.Gateway/Zibal/src/Parbad.Gateway.Zibal.csproj | 4 ++-- src/Parbad.Mvc/src/Parbad.Mvc.csproj | 4 ++-- src/Parbad.Owin/src/Parbad.Owin.csproj | 4 ++-- .../Abstractions/Parbad.Storage.Abstractions.csproj | 4 ++-- src/Parbad.Storage/Cache/src/Parbad.Storage.Cache.csproj | 4 ++-- .../src/Parbad.Storage.EntityFrameworkCore.csproj | 4 ++-- src/Parbad/src/Parbad.csproj | 4 ++-- 16 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/Parbad.AspNetCore/src/Parbad.AspNetCore.csproj b/src/Parbad.AspNetCore/src/Parbad.AspNetCore.csproj index f0bb81b1..b36aaee5 100644 --- a/src/Parbad.AspNetCore/src/Parbad.AspNetCore.csproj +++ b/src/Parbad.AspNetCore/src/Parbad.AspNetCore.csproj @@ -3,7 +3,7 @@ Parbad.AspNetCore Parbad.AspNetCore - 1.5.0 + 1.6.0 netstandard2.0;netstandard2.1;netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Sina Soltani @@ -20,7 +20,7 @@ For more information see: https://www.nuget.org/packages/Parbad/ parbad aspnetcore Payment Gateway Bank Iran Shetab IranKish Mellat Melli Sadad Parsian Pasargad Saman Asan-Pardakht پرداخت درگاه بانک ایران شتاب ایران-کیش ملت ملی سداد پارسیان پاسارگاد سامان آسان-پرداخت true LGPL-3.0-or-later - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.10.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 diff --git a/src/Parbad.Gateway/FanAva/src/Parbad.Gateway.FanAva.csproj b/src/Parbad.Gateway/FanAva/src/Parbad.Gateway.FanAva.csproj index 883efe18..5af53543 100644 --- a/src/Parbad.Gateway/FanAva/src/Parbad.Gateway.FanAva.csproj +++ b/src/Parbad.Gateway/FanAva/src/Parbad.Gateway.FanAva.csproj @@ -3,7 +3,7 @@ Parbad.Gateway.FanAva netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 - 1.4.0 + 1.5.0 latest Mohammad Mokhtari Copyright © Sina Soltani 2016 @@ -15,7 +15,7 @@ true parbad Payment Gateway FanAva پرداخت درگاه بانک فن آوا true - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.11.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 FanAva Gateway for Parbad project. For more information see: https://www.nuget.org/packages/Parbad/ diff --git a/src/Parbad.Gateway/IdPay/src/Parbad.Gateway.IdPay.csproj b/src/Parbad.Gateway/IdPay/src/Parbad.Gateway.IdPay.csproj index 9861b6e8..6e46ac07 100644 --- a/src/Parbad.Gateway/IdPay/src/Parbad.Gateway.IdPay.csproj +++ b/src/Parbad.Gateway/IdPay/src/Parbad.Gateway.IdPay.csproj @@ -2,7 +2,7 @@ netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 - 1.6.0 + 1.7.0 latest Sina Soltani Copyright © Sina Soltani 2016 @@ -14,7 +14,7 @@ true parbad Payment Gateway Bank Iran Shetab idpay پرداخت درگاه بانک ایران شتاب true - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.11.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 IDPay.ir Gateway for Parbad project. For more information see: https://www.nuget.org/packages/Parbad/ diff --git a/src/Parbad.Gateway/IranKish/src/Parbad.Gateway.IranKish.csproj b/src/Parbad.Gateway/IranKish/src/Parbad.Gateway.IranKish.csproj index 6c865165..7812a967 100644 --- a/src/Parbad.Gateway/IranKish/src/Parbad.Gateway.IranKish.csproj +++ b/src/Parbad.Gateway/IranKish/src/Parbad.Gateway.IranKish.csproj @@ -3,7 +3,7 @@ Parbad.Gateway.IranKish Parbad.Gateway.IranKish - 1.3.0 + 1.4.0 netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Sina Soltani @@ -16,7 +16,7 @@ true parbad Payment gateway bank Iran shetab irankish پرداخت درگاه بانک ایران کیش true - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.11.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 IranKish Gateway for Parbad project. For more information see: https://www.nuget.org/packages/Parbad/ diff --git a/src/Parbad.Gateway/PayIr/src/Parbad.Gateway.PayIr.csproj b/src/Parbad.Gateway/PayIr/src/Parbad.Gateway.PayIr.csproj index 37dd38b6..1f2e75ef 100644 --- a/src/Parbad.Gateway/PayIr/src/Parbad.Gateway.PayIr.csproj +++ b/src/Parbad.Gateway/PayIr/src/Parbad.Gateway.PayIr.csproj @@ -3,7 +3,7 @@ Parbad.Gateway.PayIr Parbad.Gateway.PayIr - 1.8.0 + 1.9.0 netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Sina Soltani @@ -16,7 +16,7 @@ true parbad Payment Gateway Bank Iran Shetab pay.ir پرداخت درگاه بانک ایران شتاب پی true - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.11.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 Pay.ir Gateway for Parbad project. For more information see: https://www.nuget.org/packages/Parbad/ diff --git a/src/Parbad.Gateway/PayPing/src/Parbad.Gateway.PayPing.csproj b/src/Parbad.Gateway/PayPing/src/Parbad.Gateway.PayPing.csproj index 16f434ef..f5de6d57 100644 --- a/src/Parbad.Gateway/PayPing/src/Parbad.Gateway.PayPing.csproj +++ b/src/Parbad.Gateway/PayPing/src/Parbad.Gateway.PayPing.csproj @@ -2,7 +2,7 @@ Parbad.Gateway.PayPing Parbad.Gateway.PayPing - 1.5.0 + 1.6.0 netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Ali Zaferany @@ -16,7 +16,7 @@ LGPL-3.0-or-later false true - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.11.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 PayPing Gateway for Parbad project. For more information see: https://github.com/Sina-Soltani/Parbad diff --git a/src/Parbad.Gateway/Sepehr/src/Parbad.Gateway.Sepehr.csproj b/src/Parbad.Gateway/Sepehr/src/Parbad.Gateway.Sepehr.csproj index cbf0d2d8..9c935452 100644 --- a/src/Parbad.Gateway/Sepehr/src/Parbad.Gateway.Sepehr.csproj +++ b/src/Parbad.Gateway/Sepehr/src/Parbad.Gateway.Sepehr.csproj @@ -3,7 +3,7 @@ Parbad.Gateway.Sepehr Parbad.Gateway.Sepehr - 1.7.0 + 1.8.0 netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Sina Soltani @@ -16,7 +16,7 @@ true parbad Payment gateway bank Iran shetab sepehr mabna پرداخت درگاه بانک ایران شتاب سپهر مبنا کارت true - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.11.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 Sepehr Gateway for Parbad project. For more information see: https://www.nuget.org/packages/Parbad/ diff --git a/src/Parbad.Gateway/YekPay/src/Parbad.Gateway.YekPay.csproj b/src/Parbad.Gateway/YekPay/src/Parbad.Gateway.YekPay.csproj index 5532ac49..1c91cf04 100644 --- a/src/Parbad.Gateway/YekPay/src/Parbad.Gateway.YekPay.csproj +++ b/src/Parbad.Gateway/YekPay/src/Parbad.Gateway.YekPay.csproj @@ -3,7 +3,7 @@ Parbad.Gateway.YekPay Parbad.Gateway.YekPay - 1.6.0 + 1.7.0 netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Sina Soltani @@ -16,7 +16,7 @@ true parbad Payment gateway bank Iran shetab yekpay پرداخت درگاه بانک ایران شتاب یک پی true - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.11.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 YekPay Gateway for Parbad project. For more information see: https://www.nuget.org/packages/Parbad/ diff --git a/src/Parbad.Gateway/ZarinPal/src/Parbad.Gateway.ZarinPal.csproj b/src/Parbad.Gateway/ZarinPal/src/Parbad.Gateway.ZarinPal.csproj index c5330a01..97737cf5 100644 --- a/src/Parbad.Gateway/ZarinPal/src/Parbad.Gateway.ZarinPal.csproj +++ b/src/Parbad.Gateway/ZarinPal/src/Parbad.Gateway.ZarinPal.csproj @@ -3,7 +3,7 @@ Parbad.Gateway.ZarinPal Parbad.Gateway.ZarinPal - 1.7.1 + 1.8.0 netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net6.0;net7.0;net8;net9.0;net10.0 latest Sina Soltani @@ -19,7 +19,7 @@ ZarinPal Gateway for Parbad project. For more information see: https://github.com/Sina-Soltani/Parbad - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.11.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 diff --git a/src/Parbad.Gateway/Zibal/src/Parbad.Gateway.Zibal.csproj b/src/Parbad.Gateway/Zibal/src/Parbad.Gateway.Zibal.csproj index 302e79f9..f26caf7a 100644 --- a/src/Parbad.Gateway/Zibal/src/Parbad.Gateway.Zibal.csproj +++ b/src/Parbad.Gateway/Zibal/src/Parbad.Gateway.Zibal.csproj @@ -4,7 +4,7 @@ Parbad.Gateway.Zibal Parbad.Gateway.Zibal enable - 1.4.0 + 1.5.0 netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Mohammad Ashrafi @@ -17,7 +17,7 @@ true parbad Payment Gateway Bank Iran Shetab zibal پرداخت درگاه بانک ایران شتاب زیبال True - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.11.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 Zibal Gateway for Parbad project. For more information see: https://github.com/Sina-Soltani/Parbad diff --git a/src/Parbad.Mvc/src/Parbad.Mvc.csproj b/src/Parbad.Mvc/src/Parbad.Mvc.csproj index aef1c42a..ac5caeb0 100644 --- a/src/Parbad.Mvc/src/Parbad.Mvc.csproj +++ b/src/Parbad.Mvc/src/Parbad.Mvc.csproj @@ -3,7 +3,7 @@ Parbad.Mvc5 Parbad.Mvc5 - 2.3.0 + 2.4.0 net462 9 Sina Soltani @@ -20,7 +20,7 @@ For more information see: https://www.nuget.org/packages/Parbad/ parbad mvc Payment Gateway Bank Iran Shetab IranKish Mellat Melli Sadad Parsian Pasargad Saman Asan-Pardakht پرداخت درگاه بانک ایران شتاب ایران-کیش ملت ملی سداد پارسیان پاسارگاد سامان آسان-پرداخت true LGPL-3.0-or-later - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.9.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 diff --git a/src/Parbad.Owin/src/Parbad.Owin.csproj b/src/Parbad.Owin/src/Parbad.Owin.csproj index f4a015e1..8e0d3696 100644 --- a/src/Parbad.Owin/src/Parbad.Owin.csproj +++ b/src/Parbad.Owin/src/Parbad.Owin.csproj @@ -4,7 +4,7 @@ Parbad.Owin Parbad.Owin net462 - 1.3.0 + 1.4.0 latest Sina Soltani Owin integration for Parbad project. @@ -20,7 +20,7 @@ For more information see: https://www.nuget.org/packages/Parbad/ parbad owin webforms Payment Gateway Bank Iran Shetab IranKish Mellat Melli Sadad Parsian Pasargad Saman Asan-Pardakht پرداخت درگاه بانک ایران شتاب ایران-کیش ملت ملی سداد پارسیان پاسارگاد سامان آسان-پرداخت true LGPL-3.0-or-later - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.9.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 diff --git a/src/Parbad.Storage/Abstractions/Parbad.Storage.Abstractions.csproj b/src/Parbad.Storage/Abstractions/Parbad.Storage.Abstractions.csproj index 73c8cf63..b4c7a103 100644 --- a/src/Parbad.Storage/Abstractions/Parbad.Storage.Abstractions.csproj +++ b/src/Parbad.Storage/Abstractions/Parbad.Storage.Abstractions.csproj @@ -3,7 +3,7 @@ Parbad.Storage.Abstractions Parbad.Storage.Abstractions - 1.3.0 + 1.4.0 latest netstandard2.0;netstandard2.1;netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 enable @@ -20,7 +20,7 @@ More information: https://github.com/Sina-Soltani/Parbad parbad storage true Sina Soltani - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.10.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 diff --git a/src/Parbad.Storage/Cache/src/Parbad.Storage.Cache.csproj b/src/Parbad.Storage/Cache/src/Parbad.Storage.Cache.csproj index b69e1a67..9a648158 100644 --- a/src/Parbad.Storage/Cache/src/Parbad.Storage.Cache.csproj +++ b/src/Parbad.Storage/Cache/src/Parbad.Storage.Cache.csproj @@ -2,7 +2,7 @@ Parbad.Storage.Cache - 1.5.0 + 1.6.0 latest netstandard2.0;netstandard2.1;netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 enable @@ -20,7 +20,7 @@ More information: https://github.com/Sina-Soltani/Parbad true Sina Soltani Parbad.Storage.Cache - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.10.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 diff --git a/src/Parbad.Storage/EntityFrameworkCore/src/Parbad.Storage.EntityFrameworkCore.csproj b/src/Parbad.Storage/EntityFrameworkCore/src/Parbad.Storage.EntityFrameworkCore.csproj index c12f971a..93730d82 100644 --- a/src/Parbad.Storage/EntityFrameworkCore/src/Parbad.Storage.EntityFrameworkCore.csproj +++ b/src/Parbad.Storage/EntityFrameworkCore/src/Parbad.Storage.EntityFrameworkCore.csproj @@ -2,7 +2,7 @@ Parbad.Storage.EntityFrameworkCore - 1.6.0 + 1.7.0 latest net5;net6;net7;net8.0;net9.0;net10.0 enable @@ -20,7 +20,7 @@ More information: https://github.com/Sina-Soltani/Parbad true Sina Soltani Parbad.Storage.EntityframeworkCore - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.10.0 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 diff --git a/src/Parbad/src/Parbad.csproj b/src/Parbad/src/Parbad.csproj index 32935cb9..5be46603 100644 --- a/src/Parbad/src/Parbad.csproj +++ b/src/Parbad/src/Parbad.csproj @@ -3,7 +3,7 @@ Parbad Parbad - 3.11.3 + 3.12.0 netstandard2.0;netstandard2.1;netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 latest Parbad Sina Soltani @@ -23,7 +23,7 @@ More information: https://github.com/Sina-Soltani/Parbad true parbad Payment Gateway virtual virtual-gateway Bank Iran Shetab IranKish Mellat Melli Sadad Parsian Pasargad Saman Asan-Pardakht پرداخت درگاه بانک ایران شتاب ایران-کیش ملت ملی سداد پارسیان پاسارگاد سامان آسان-پرداخت true - https://github.com/Sina-Soltani/Parbad/releases/tag/v3.11.1 + https://github.com/Sina-Soltani/Parbad/releases/tag/v3.12.0 From 279082aa8bb86877bd5027be1d9cb48a65399d82 Mon Sep 17 00:00:00 2001 From: "emami.s" Date: Wed, 20 May 2026 11:47:40 +0330 Subject: [PATCH 3/6] Add cross-framework compatibility test project Add a single multi-targeted framework compatibility test project that runs against every supported .NET Core runtime target from netcoreapp3.0 through net10.0. The project acts as one shared test point for runtime compatibility instead of maintaining separate test projects per framework version. The tests assert that the executing target framework is part of the supported runtime matrix and verify that each runtime-compatible Parbad project assembly can be loaded for that target. Entity Framework Core storage is included only for net5.0 and later because that package does not target netcoreapp3.x. Package references are conditioned by target framework so older runtimes use compatible MSTest/Test SDK assets while net8.0 and newer use the current MSTest 4 stack. The solution file includes the new test project under the existing test solution folder so dotnet test Parbad.sln runs the full compatibility matrix. Reason: this provides an explicit regression check that future target framework or package updates keep the declared .NET Core support matrix buildable and testable. Validated with dotnet restore Parbad.sln, dotnet build tests/Parbad.FrameworkCompatibility.Tests/Parbad.FrameworkCompatibility.Tests.csproj --no-restore -v:q, dotnet test tests/Parbad.FrameworkCompatibility.Tests/Parbad.FrameworkCompatibility.Tests.csproj --no-build --no-restore, and dotnet test Parbad.sln --no-build --no-restore. --- Parbad.sln | 7 ++ .../FrameworkCompatibilityTests.cs | 118 ++++++++++++++++++ ...Parbad.FrameworkCompatibility.Tests.csproj | 60 +++++++++ 3 files changed, 185 insertions(+) create mode 100644 tests/Parbad.FrameworkCompatibility.Tests/FrameworkCompatibilityTests.cs create mode 100644 tests/Parbad.FrameworkCompatibility.Tests/Parbad.FrameworkCompatibility.Tests.csproj diff --git a/Parbad.sln b/Parbad.sln index e4f5c64a..6a0a4470 100644 --- a/Parbad.sln +++ b/Parbad.sln @@ -107,6 +107,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Parbad.Gateway.IranKish", " EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Parbad.Gateway.IranKish.Tests", "src\Parbad.Gateway\IranKish\tests\Parbad.Gateway.IranKish.Tests.csproj", "{8A1C135B-12A5-42AB-A2F2-2660146ACB0C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Parbad.FrameworkCompatibility.Tests", "tests\Parbad.FrameworkCompatibility.Tests\Parbad.FrameworkCompatibility.Tests.csproj", "{60BF4F46-AB43-4164-B55F-229F6FCCE0DC}" +EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution src\Parbad.Shared\Parbad.Shared.projitems*{2e124fc2-6fa6-45e1-9912-edca1c19cef7}*SharedItemsImports = 13 @@ -210,6 +212,10 @@ Global {8A1C135B-12A5-42AB-A2F2-2660146ACB0C}.Debug|Any CPU.Build.0 = Debug|Any CPU {8A1C135B-12A5-42AB-A2F2-2660146ACB0C}.Release|Any CPU.ActiveCfg = Release|Any CPU {8A1C135B-12A5-42AB-A2F2-2660146ACB0C}.Release|Any CPU.Build.0 = Release|Any CPU + {60BF4F46-AB43-4164-B55F-229F6FCCE0DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {60BF4F46-AB43-4164-B55F-229F6FCCE0DC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {60BF4F46-AB43-4164-B55F-229F6FCCE0DC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {60BF4F46-AB43-4164-B55F-229F6FCCE0DC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -258,6 +264,7 @@ Global {9D40B01A-7B71-40F8-8AEC-91C63438DFA0} = {B1447D20-66E0-46FB-B0DB-BCBEBA7B337A} {9252FE79-9908-46C3-AAF2-C5F7426EDF84} = {9D40B01A-7B71-40F8-8AEC-91C63438DFA0} {8A1C135B-12A5-42AB-A2F2-2660146ACB0C} = {9D40B01A-7B71-40F8-8AEC-91C63438DFA0} + {60BF4F46-AB43-4164-B55F-229F6FCCE0DC} = {6BB6AFB4-7951-4435-8C10-95AF86B200F8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {CBDDB699-C14A-4235-B0AE-32725230B4ED} diff --git a/tests/Parbad.FrameworkCompatibility.Tests/FrameworkCompatibilityTests.cs b/tests/Parbad.FrameworkCompatibility.Tests/FrameworkCompatibilityTests.cs new file mode 100644 index 00000000..95a6d766 --- /dev/null +++ b/tests/Parbad.FrameworkCompatibility.Tests/FrameworkCompatibilityTests.cs @@ -0,0 +1,118 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Parbad.FrameworkCompatibility.Tests; + +[TestClass] +public class FrameworkCompatibilityTests +{ + private static readonly string[] ExpectedRuntimeTargets = + [ + "netcoreapp3.0", + "netcoreapp3.1", + "net5.0", + "net6.0", + "net7.0", + "net8.0", + "net9.0", + "net10.0" + ]; + + [TestMethod] + public void Current_runtime_target_is_declared_as_supported() + { + CollectionAssert.Contains(ExpectedRuntimeTargets, CurrentTargetFramework); + } + + [TestMethod] + public void Runtime_compatible_project_assemblies_can_be_loaded() + { + var loadedAssemblies = GetCoveredProjectTypes() + .Select(type => type.Assembly.GetName().Name) + .Distinct() + .OrderBy(name => name) + .ToArray(); + + CollectionAssert.AreEquivalent(GetExpectedProjectAssemblyNames(), loadedAssemblies); + } + + private static Type[] GetCoveredProjectTypes() + { + var types = new List + { + typeof(Parbad.Options.ParbadOptions), + typeof(Parbad.AspNetCore.VirtualGateway.ParbadVirtualGatewayMiddleware), + typeof(Parbad.Storage.Abstractions.IStorage), + typeof(Parbad.Storage.Cache.MemoryCache.MemoryCacheStorageOptions), + typeof(Parbad.Gateway.FanAva.FanAvaGatewayOptions), + typeof(Parbad.Gateway.IdPay.IdPayGatewayOptions), + typeof(Parbad.Gateway.IranKish.IranKishGatewayOptions), + typeof(Parbad.Gateway.PayIr.PayIrGatewayOptions), + typeof(Parbad.Gateway.PayPing.PayPingGatewayOptions), + typeof(Parbad.Gateway.Sepehr.SepehrGatewayOptions), + typeof(Parbad.Gateway.YekPay.YekPayGatewayOptions), + typeof(Parbad.Gateway.ZarinPal.ZarinPalGatewayOptions), + typeof(Parbad.Gateway.Zibal.ZibalGatewayOptions) + }; + +#if NET5_0_OR_GREATER + types.Add(typeof(Parbad.Storage.EntityFrameworkCore.EntityFrameworkCoreStorage)); +#endif + + return types.ToArray(); + } + + private static string[] GetExpectedProjectAssemblyNames() + { + var names = new List + { + "Parbad", + "Parbad.AspNetCore", + "Parbad.Storage.Abstractions", + "Parbad.Storage.Cache", + "Parbad.Gateway.FanAva", + "Parbad.Gateway.IdPay", + "Parbad.Gateway.IranKish", + "Parbad.Gateway.PayIr", + "Parbad.Gateway.PayPing", + "Parbad.Gateway.Sepehr", + "Parbad.Gateway.YekPay", + "Parbad.Gateway.ZarinPal", + "Parbad.Gateway.Zibal" + }; + +#if NET5_0_OR_GREATER + names.Add("Parbad.Storage.EntityFrameworkCore"); +#endif + + return names.OrderBy(name => name).ToArray(); + } + + private static string CurrentTargetFramework + { + get + { +#if NETCOREAPP3_0 + return "netcoreapp3.0"; +#elif NETCOREAPP3_1 + return "netcoreapp3.1"; +#elif NET5_0 + return "net5.0"; +#elif NET6_0 + return "net6.0"; +#elif NET7_0 + return "net7.0"; +#elif NET8_0 + return "net8.0"; +#elif NET9_0 + return "net9.0"; +#elif NET10_0 + return "net10.0"; +#else + return "unknown"; +#endif + } + } +} diff --git a/tests/Parbad.FrameworkCompatibility.Tests/Parbad.FrameworkCompatibility.Tests.csproj b/tests/Parbad.FrameworkCompatibility.Tests/Parbad.FrameworkCompatibility.Tests.csproj new file mode 100644 index 00000000..51beeded --- /dev/null +++ b/tests/Parbad.FrameworkCompatibility.Tests/Parbad.FrameworkCompatibility.Tests.csproj @@ -0,0 +1,60 @@ + + + + netcoreapp3.0;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0 + latest + enable + false + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + + + + + + From 08eab5e4923bfc9356ff84f2887d76e9972597a0 Mon Sep 17 00:00:00 2001 From: "emami.s" Date: Wed, 20 May 2026 12:33:11 +0330 Subject: [PATCH 4/6] Update .NET SDK version to 10.x in Azure Pipelines Upgraded the UseDotNet@2 task in azure-pipelines.yml to use .NET SDK version 10.x instead of 9.x for builds. --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 3586eeea..0ebb89ed 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -22,7 +22,7 @@ steps: displayName: Use Dotnet inputs: packageType: sdk - version: 9.x + version: 10.x - task: NuGetCommand@2 displayName: 'restoring' inputs: From 3ece3aef276a65246a9858d8abd2b8dc55f39817 Mon Sep 17 00:00:00 2001 From: "emami.s" Date: Wed, 20 May 2026 12:41:30 +0330 Subject: [PATCH 5/6] Update Azure Pipelines for improved .NET build process Refactored pipeline YAML to use .NET SDK 10.0.x, added .NET SDK info step, and standardized usage of variables. Optimized restore, build, test, and pack steps with '--no-restore' and '--no-build' flags for better efficiency. Improved formatting and task display names for clarity. --- azure-pipelines.yml | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0ebb89ed..173bfe8f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -13,51 +13,56 @@ variables: projects: 'src/**/*.csproj' steps: -- task: NuGetToolInstaller@1 - displayName: 'Use Nuget' - inputs: - versionSpec: - checkLatest: true - task: UseDotNet@2 - displayName: Use Dotnet + displayName: 'Use Dotnet' inputs: - packageType: sdk - version: 10.x -- task: NuGetCommand@2 + packageType: 'sdk' + version: '10.0.x' + +- script: dotnet --info + displayName: 'Show .NET SDK info' + +- task: DotNetCoreCLI@2 displayName: 'restoring' inputs: command: 'restore' - restoreSolution: '**/*.sln' + projects: '**/*.sln' feedsToUse: 'select' + - task: DotNetCoreCLI@2 displayName: 'building' inputs: command: 'build' - projects: $(projects) - arguments: '-c $(buildConfiguration)' + projects: '$(projects)' + arguments: '-c $(buildConfiguration) --no-restore' + - task: DotNetCoreCLI@2 displayName: 'testing' inputs: command: 'test' projects: '**/*.Tests.csproj' + arguments: '-c $(buildConfiguration) --no-restore' + - task: DotNetCoreCLI@2 displayName: 'packing' condition: eq(variables['build.sourceBranch'], 'refs/heads/dev') inputs: command: 'custom' - projects: $(projects) + projects: '$(projects)' custom: 'pack' arguments: '-c $(buildConfiguration) --no-build -o $(Build.ArtifactStagingDirectory) --version-suffix dev$(Build.BuildNumber)' + - task: DotNetCoreCLI@2 displayName: 'packing' condition: eq(variables['build.sourceBranch'], 'refs/heads/master') inputs: command: 'custom' - projects: $(projects) + projects: '$(projects)' custom: 'pack' arguments: '-c $(buildConfiguration) --no-build -o $(Build.ArtifactStagingDirectory)' + - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'packages' - publishLocation: 'Container' + publishLocation: 'Container' \ No newline at end of file From 5ae2119c5c45d81b6f2a602ade7a7cd98a9e84f8 Mon Sep 17 00:00:00 2001 From: "emami.s" Date: Wed, 20 May 2026 13:07:33 +0330 Subject: [PATCH 6/6] Add support for multiple .NET SDKs and improve test output Added UseDotNet@2 tasks to install .NET SDKs from 3.0 to 10.0 with explicit installation paths. Enhanced the script step to show detailed SDK and runtime info. Increased test output verbosity by adding --verbosity normal to the test step. --- azure-pipelines.yml | 62 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 173bfe8f..26042ecd 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -11,16 +11,70 @@ pool: variables: buildConfiguration: 'release' projects: 'src/**/*.csproj' + dotnetRoot: '$(Agent.ToolsDirectory)/dotnet' steps: - task: UseDotNet@2 - displayName: 'Use Dotnet' + displayName: 'Use .NET Core 3.0 SDK' + inputs: + packageType: 'sdk' + version: '3.0.x' + installationPath: '$(dotnetRoot)' + +- task: UseDotNet@2 + displayName: 'Use .NET Core 3.1 SDK' + inputs: + packageType: 'sdk' + version: '3.1.x' + installationPath: '$(dotnetRoot)' + +- task: UseDotNet@2 + displayName: 'Use .NET 5 SDK' + inputs: + packageType: 'sdk' + version: '5.0.x' + installationPath: '$(dotnetRoot)' + +- task: UseDotNet@2 + displayName: 'Use .NET 6 SDK' + inputs: + packageType: 'sdk' + version: '6.0.x' + installationPath: '$(dotnetRoot)' + +- task: UseDotNet@2 + displayName: 'Use .NET 7 SDK' + inputs: + packageType: 'sdk' + version: '7.0.x' + installationPath: '$(dotnetRoot)' + +- task: UseDotNet@2 + displayName: 'Use .NET 8 SDK' + inputs: + packageType: 'sdk' + version: '8.0.x' + installationPath: '$(dotnetRoot)' + +- task: UseDotNet@2 + displayName: 'Use .NET 9 SDK' + inputs: + packageType: 'sdk' + version: '9.0.x' + installationPath: '$(dotnetRoot)' + +- task: UseDotNet@2 + displayName: 'Use .NET 10 SDK' inputs: packageType: 'sdk' version: '10.0.x' + installationPath: '$(dotnetRoot)' -- script: dotnet --info - displayName: 'Show .NET SDK info' +- script: | + dotnet --info + dotnet --list-sdks + dotnet --list-runtimes + displayName: 'Show .NET SDKs and runtimes' - task: DotNetCoreCLI@2 displayName: 'restoring' @@ -41,7 +95,7 @@ steps: inputs: command: 'test' projects: '**/*.Tests.csproj' - arguments: '-c $(buildConfiguration) --no-restore' + arguments: '-c $(buildConfiguration) --no-restore --verbosity normal' - task: DotNetCoreCLI@2 displayName: 'packing'