From 89df1e68f72b9d2093cc4fdfb6b3b8c5be964d4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sinan=20=C3=96zt=C3=BCrk?= Date: Fri, 16 Feb 2024 23:30:35 +0300 Subject: [PATCH 01/13] add test to remember-me.service and fix return value in service --- .../src/lib/services/remember-me.service.ts | 2 +- .../src/lib/tests/remember-me.service.spec.ts | 71 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 npm/ng-packs/packages/oauth/src/lib/tests/remember-me.service.spec.ts diff --git a/npm/ng-packs/packages/oauth/src/lib/services/remember-me.service.ts b/npm/ng-packs/packages/oauth/src/lib/services/remember-me.service.ts index 84d40d982a..ed938c5107 100644 --- a/npm/ng-packs/packages/oauth/src/lib/services/remember-me.service.ts +++ b/npm/ng-packs/packages/oauth/src/lib/services/remember-me.service.ts @@ -17,7 +17,7 @@ export class RememberMeService { } get() { - return Boolean(JSON.parse(this.localStorageService.getItem(this.#rememberMe))); + return Boolean(JSON.parse(this.localStorageService.getItem(this.#rememberMe) || 'false')); } getFromToken(accessToken: string) { diff --git a/npm/ng-packs/packages/oauth/src/lib/tests/remember-me.service.spec.ts b/npm/ng-packs/packages/oauth/src/lib/tests/remember-me.service.spec.ts new file mode 100644 index 0000000000..0ef7116e92 --- /dev/null +++ b/npm/ng-packs/packages/oauth/src/lib/tests/remember-me.service.spec.ts @@ -0,0 +1,71 @@ +import { SpectatorService, SpyObject, createServiceFactory } from "@ngneat/spectator/jest"; +import { RememberMeService } from "../services/remember-me.service"; +import { AbpLocalStorageService } from "@abp/ng.core"; + + + +describe('RememberMeService', () => { + const key = 'remember_me'; + let spectator: SpectatorService; + let rememberMeService: RememberMeService; + let abpLocalStorageService: SpyObject; + + const createService = createServiceFactory({ + service: RememberMeService, + mocks: [AbpLocalStorageService] + }); + + + beforeEach(() => { + spectator = createService(); + rememberMeService = spectator.inject(RememberMeService); + abpLocalStorageService = spectator.inject(AbpLocalStorageService); + }); + + it('should be created', () => { + expect(1).toBe(1); + expect(rememberMeService).toBeTruthy(); + expect(abpLocalStorageService).toBeTruthy(); + }); + + it('should set remember me', () => { + rememberMeService.set(true); + expect(abpLocalStorageService.setItem).toHaveBeenCalledWith(key, 'true'); + expect(abpLocalStorageService.setItem).toHaveBeenCalledTimes(1); + }); + + it('should remove remember me', () => { + rememberMeService.remove(); + expect(abpLocalStorageService.removeItem).toHaveBeenCalledWith(key); + expect(abpLocalStorageService.removeItem).toBeCalledTimes(1); + }); + + it('if notting has ben setted, it should return false value', () => { + expect(rememberMeService.get()).toBe(false); + }); + + it('should return true value', () => { + abpLocalStorageService.getItem.mockReturnValueOnce('true'); + expect(rememberMeService.get()).toBe(true); + }); + + it('should return false value', () => { + abpLocalStorageService.getItem.mockReturnValueOnce('false'); + expect(rememberMeService.get()).toBe(false); + }); + + it('should return true when parsed token is setted to true', () => { + const data = { "remember_me": "True" }; + const base64_encoded = btoa(JSON.stringify(data)); + const tokenWithValueTrue = "random." + base64_encoded + ".random"; + expect(rememberMeService.getFromToken(tokenWithValueTrue)).toBe(true); + }); + + it('should return false when value is not setted(undefined)', () => { + const data = {}; + const base64_encoded = btoa(JSON.stringify(data)); + const tokenWithValueTrue = "random." + base64_encoded + ".random"; + expect(rememberMeService.getFromToken(tokenWithValueTrue)).toBe(false); + }); + +}); \ No newline at end of file From 07bdf2e16b1c50b7f3bb0cc6de4ff49300951a06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sinan=20=C3=96zt=C3=BCrk?= Date: Sat, 17 Feb 2024 01:36:36 +0300 Subject: [PATCH 02/13] fix loader bar --- .../theme-shared/src/lib/tests/loader-bar.component.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts index db468c4a6d..e2904e33f1 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts @@ -7,6 +7,7 @@ import { LoaderBarComponent } from '../components/loader-bar/loader-bar.componen describe('LoaderBarComponent', () => { let spectator: Spectator; + let router: Router; const events$ = new Subject(); const createComponent = createComponentFactory({ From 853b7290d97c4a11fbdfd542e5e4b31d9d50453a Mon Sep 17 00:00:00 2001 From: Salih Date: Fri, 23 Feb 2024 09:18:12 +0300 Subject: [PATCH 03/13] update --- .../Commercial/Localization/Resources/en.json | 3 ++- .../Commercial/Localization/Resources/tr.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 4c7c9ffec3..e4ede27a0f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1180,6 +1180,7 @@ "ReturnOfInvestmentPageAbout": "This page covers the fundamental steps of developing a software solution and explains how the ABP.IO Platform reduces your development costs at each step.", "LearnMore": "Learn More", "ReturnOfInvestment": "Return of Investment", - "ReturnOfInvestment_Description": "Learn how to reduce your development costs by more than %50." + "ReturnOfInvestment_Description": "Learn how to reduce your development costs by more than %50.", + "SpecialDiscount": "Special Discount" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json index d11e461116..24bf8cfac3 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json @@ -615,7 +615,7 @@ "TotalDeveloperPrice": "Toplam Geliştirici Fiyatı", "Purchase_PricePerDeveloper": "{0} geliştirici başına", "Purchase_IncludedDeveloperInfo": "{0} {1} dahil.", - "Purchase_LicenseExtraDeveloperPurchaseMessage": "{0} lisansı {1} geliştirici(ler) içerir. Şimdi veya daha sonra ek geliştiriciler ekleyebilirsiniz.", + "Purchase_LicenseExtraDeveloperPurchaseMessage": "{0} lisansı {1} geliştirici içerir. Şimdi veya daha sonra ek geliştirici ekleyebilirsiniz.", "StartupTemplates_Page_Title": "ABP Başlangıç Şablonları", "StartupTemplates_Page_Description": "ABP Commercial, her düzeyde karmaşıklığa sahip projeler oluşturmanıza olanak tanır. Önceden oluşturulmuş iki ana başlangıç projesi sunar. Gereksinimlerinize yakın olanı seçebilir ve bunun üzerine kendi özel projenizi oluşturabilirsiniz.", "MicroserviceStartupSolutionForDotnet": ".NET için Mikroservis Başlatma Projesi", From 0f4c5dd57f5811fa889088405cbe2bd45f79bf34 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Fri, 23 Feb 2024 11:01:06 +0300 Subject: [PATCH 04/13] Fix code-block in Tenant-Management.md --- docs/en/Modules/Tenant-Management.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Modules/Tenant-Management.md b/docs/en/Modules/Tenant-Management.md index 0d43c5e31e..6245db82c8 100644 --- a/docs/en/Modules/Tenant-Management.md +++ b/docs/en/Modules/Tenant-Management.md @@ -56,7 +56,7 @@ This module defines the following ETOs (Event Transfer Objects) to allow you to **Example: Get notified when a new tenant has been created** -``` +```cs public class MyHandler : IDistributedEventHandler>, ITransientDependency @@ -131,4 +131,4 @@ ABP Framework allows to use *database per tenant* approach that allows a tenant ## See Also * [Multi-Tenancy](../Multi-Tenancy.md) -* [ABP Commercial SaaS Module](https://docs.abp.io/en/commercial/latest/modules/saas) \ No newline at end of file +* [ABP Commercial SaaS Module](https://docs.abp.io/en/commercial/latest/modules/saas) From 92b3adf5a47ccfef2a3d73d9d6b4d6437bac9f8d Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 23 Feb 2024 17:44:47 +0800 Subject: [PATCH 05/13] Add `AbpUnitTestSqliteConnection` for unit test. Resolve #19065 --- .../Sqlite/AbpUnitTestSqliteConnection.cs | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/Sqlite/AbpUnitTestSqliteConnection.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/Sqlite/AbpUnitTestSqliteConnection.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/Sqlite/AbpUnitTestSqliteConnection.cs new file mode 100644 index 0000000000..f33f31ded3 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/Sqlite/AbpUnitTestSqliteConnection.cs @@ -0,0 +1,52 @@ +using System.Threading; +using Microsoft.Data.Sqlite; +using Volo.Abp.Threading; + +namespace Volo.Abp.EntityFrameworkCore.Sqlite; + +/// +/// This class is for unit testing purposes. +/// It prevents exceptions in concurrent testing because Sqlite is not thread-safe. +/// +public class AbpUnitTestSqliteConnection : SqliteConnection +{ + public AbpUnitTestSqliteConnection(string connectionString) + : base(connectionString) + { + } + + public override SqliteCommand CreateCommand() + { + return new AbpSqliteCommand + { + Connection = this, + CommandTimeout = DefaultTimeout, + Transaction = Transaction + }; + } +} + +internal class AbpSqliteCommand : SqliteCommand +{ + private readonly static SemaphoreSlim SyncSemaphore = new SemaphoreSlim(1, 1); + + public override SqliteConnection? Connection + { + get => base.Connection; + set + { + using (SyncSemaphore.Lock()) + { + base.Connection = value; + } + } + } + + protected override void Dispose(bool disposing) + { + using (SyncSemaphore.Lock()) + { + base.Dispose(disposing); + } + } +} From 34d1ea3d9875a4011cbd57e77cd0dcad819f1c8a Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 23 Feb 2024 17:46:45 +0800 Subject: [PATCH 06/13] Update AbpUnitTestSqliteConnection.cs --- .../Sqlite/AbpUnitTestSqliteConnection.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/Sqlite/AbpUnitTestSqliteConnection.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/Sqlite/AbpUnitTestSqliteConnection.cs index f33f31ded3..e3b0dd7e30 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/Sqlite/AbpUnitTestSqliteConnection.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/Sqlite/AbpUnitTestSqliteConnection.cs @@ -28,14 +28,14 @@ public class AbpUnitTestSqliteConnection : SqliteConnection internal class AbpSqliteCommand : SqliteCommand { - private readonly static SemaphoreSlim SyncSemaphore = new SemaphoreSlim(1, 1); + private readonly static SemaphoreSlim Semaphore = new SemaphoreSlim(1, 1); public override SqliteConnection? Connection { get => base.Connection; set { - using (SyncSemaphore.Lock()) + using (Semaphore.Lock()) { base.Connection = value; } @@ -44,7 +44,7 @@ internal class AbpSqliteCommand : SqliteCommand protected override void Dispose(bool disposing) { - using (SyncSemaphore.Lock()) + using (Semaphore.Lock()) { base.Dispose(disposing); } From 2c5ed8dd631d03f9b181709f48dd829a9d8eca54 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 23 Feb 2024 17:48:57 +0800 Subject: [PATCH 07/13] Use `AbpUnitTestSqliteConnection` instead of `SqliteConnection`. --- .../Volo/Abp/Auditing/AbpAuditingTestModule.cs | 2 +- .../Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs | 2 +- .../Volo/Abp/Account/AbpAccountApplicationTestModule.cs | 2 +- .../AbpAuditLoggingEntityFrameworkCoreTestModule.cs | 2 +- .../AbpBackgroundJobsEntityFrameworkCoreTestModule.cs | 2 +- .../BlobStoringDatabaseEntityFrameworkCoreTestModule.cs | 2 +- .../BloggingEntityFrameworkCoreTestModule.cs | 2 +- .../EntityFrameworkCore/CmsKitEntityFrameworkCoreTestModule.cs | 2 +- .../EntityFrameworkCore/DocsEntityFrameworkCoreTestModule.cs | 2 +- .../AbpFeatureManagementEntityFrameworkCoreTestModule.cs | 2 +- .../AbpIdentityEntityFrameworkCoreTestModule.cs | 2 +- .../AbpIdentityServerTestEntityFrameworkCoreModule.cs | 2 +- .../OpenIddictEntityFrameworkCoreTestModule.cs | 2 +- .../AbpSettingManagementEntityFrameworkCoreTestModule.cs | 2 +- .../AbpTenantManagementEntityFrameworkCoreTestModule.cs | 2 +- .../MyProjectNameEntityFrameworkCoreTestModule.cs | 2 +- .../MyProjectNameEntityFrameworkCoreTestModule.cs | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestModule.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestModule.cs index 3a21cfaf5a..c753d65d07 100644 --- a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestModule.cs +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestModule.cs @@ -62,7 +62,7 @@ public class AbpAuditingTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); using (var context = new AbpAuditingTestDbContext(new DbContextOptionsBuilder() diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs index f23ac14fda..7db3130827 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs @@ -93,7 +93,7 @@ public class AbpEntityFrameworkCoreTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); using (var context = new TestMigrationsDbContext(new DbContextOptionsBuilder().UseSqlite(connection).Options)) diff --git a/modules/account/test/Volo.Abp.Account.Application.Tests/Volo/Abp/Account/AbpAccountApplicationTestModule.cs b/modules/account/test/Volo.Abp.Account.Application.Tests/Volo/Abp/Account/AbpAccountApplicationTestModule.cs index 100087f1fb..2a6c932753 100644 --- a/modules/account/test/Volo.Abp.Account.Application.Tests/Volo/Abp/Account/AbpAccountApplicationTestModule.cs +++ b/modules/account/test/Volo.Abp.Account.Application.Tests/Volo/Abp/Account/AbpAccountApplicationTestModule.cs @@ -44,7 +44,7 @@ public class AbpAccountApplicationTestModule : AbpModule } private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new IdentityDbContext( diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingEntityFrameworkCoreTestModule.cs b/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingEntityFrameworkCoreTestModule.cs index bb8570d253..42d246625e 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingEntityFrameworkCoreTestModule.cs +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingEntityFrameworkCoreTestModule.cs @@ -31,7 +31,7 @@ public class AbpAuditLoggingEntityFrameworkCoreTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new AbpAuditLoggingDbContext( diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/Volo/Abp/BackgroundJobs/EntityFrameworkCore/AbpBackgroundJobsEntityFrameworkCoreTestModule.cs b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/Volo/Abp/BackgroundJobs/EntityFrameworkCore/AbpBackgroundJobsEntityFrameworkCoreTestModule.cs index a642ddc227..c19016d0d0 100644 --- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/Volo/Abp/BackgroundJobs/EntityFrameworkCore/AbpBackgroundJobsEntityFrameworkCoreTestModule.cs +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/Volo/Abp/BackgroundJobs/EntityFrameworkCore/AbpBackgroundJobsEntityFrameworkCoreTestModule.cs @@ -31,7 +31,7 @@ public class AbpBackgroundJobsEntityFrameworkCoreTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new BackgroundJobsDbContext( diff --git a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreTestModule.cs b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreTestModule.cs index 082b1640b7..6250a3f9d2 100644 --- a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreTestModule.cs +++ b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreTestModule.cs @@ -28,7 +28,7 @@ public class BlobStoringDatabaseEntityFrameworkCoreTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new BlobStoringDbContext( diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/EntityFrameworkCore/BloggingEntityFrameworkCoreTestModule.cs b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/EntityFrameworkCore/BloggingEntityFrameworkCoreTestModule.cs index 0a27448f6e..498e8e7ab6 100644 --- a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/EntityFrameworkCore/BloggingEntityFrameworkCoreTestModule.cs +++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo/Blogging/EntityFrameworkCore/BloggingEntityFrameworkCoreTestModule.cs @@ -33,7 +33,7 @@ namespace Volo.Blogging.EntityFrameworkCore private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); var options = new DbContextOptionsBuilder().UseSqlite(connection).Options; diff --git a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/CmsKitEntityFrameworkCoreTestModule.cs b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/CmsKitEntityFrameworkCoreTestModule.cs index 9b7fee252a..139e4bdce9 100644 --- a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/CmsKitEntityFrameworkCoreTestModule.cs +++ b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/CmsKitEntityFrameworkCoreTestModule.cs @@ -30,7 +30,7 @@ public class CmsKitEntityFrameworkCoreTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new CmsKitDbContext( diff --git a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/DocsEntityFrameworkCoreTestModule.cs b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/DocsEntityFrameworkCoreTestModule.cs index eb3a5ae5bd..fe3e32291f 100644 --- a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/DocsEntityFrameworkCoreTestModule.cs +++ b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/DocsEntityFrameworkCoreTestModule.cs @@ -30,7 +30,7 @@ namespace Volo.Docs.EntityFrameworkCore private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new DocsDbContext( diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/Volo/Abp/FeatureManagement/EntityFrameworkCore/AbpFeatureManagementEntityFrameworkCoreTestModule.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/Volo/Abp/FeatureManagement/EntityFrameworkCore/AbpFeatureManagementEntityFrameworkCoreTestModule.cs index 3329f1dba6..242cf75233 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/Volo/Abp/FeatureManagement/EntityFrameworkCore/AbpFeatureManagementEntityFrameworkCoreTestModule.cs +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/Volo/Abp/FeatureManagement/EntityFrameworkCore/AbpFeatureManagementEntityFrameworkCoreTestModule.cs @@ -36,7 +36,7 @@ public class AbpFeatureManagementEntityFrameworkCoreTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new FeatureManagementDbContext( diff --git a/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreTestModule.cs b/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreTestModule.cs index beb2797ea9..f0d1966bd0 100644 --- a/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreTestModule.cs +++ b/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreTestModule.cs @@ -35,7 +35,7 @@ public class AbpIdentityEntityFrameworkCoreTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new IdentityDbContext( diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestEntityFrameworkCoreModule.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestEntityFrameworkCoreModule.cs index 6e934d1d8c..e6711fc180 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestEntityFrameworkCoreModule.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestEntityFrameworkCoreModule.cs @@ -40,7 +40,7 @@ public class AbpIdentityServerTestEntityFrameworkCoreModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new IdentityDbContext( diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo/Abp/OpenIddict/EntityFrameworkCore/OpenIddictEntityFrameworkCoreTestModule.cs b/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo/Abp/OpenIddict/EntityFrameworkCore/OpenIddictEntityFrameworkCoreTestModule.cs index b7bf216098..c47ecc7996 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo/Abp/OpenIddict/EntityFrameworkCore/OpenIddictEntityFrameworkCoreTestModule.cs +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo/Abp/OpenIddict/EntityFrameworkCore/OpenIddictEntityFrameworkCoreTestModule.cs @@ -37,7 +37,7 @@ public class OpenIddictEntityFrameworkCoreTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new IdentityDbContext( diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/Volo/Abp/SettingManagement/EntityFrameworkCore/AbpSettingManagementEntityFrameworkCoreTestModule.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/Volo/Abp/SettingManagement/EntityFrameworkCore/AbpSettingManagementEntityFrameworkCoreTestModule.cs index 9a2c51853e..58df348af7 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/Volo/Abp/SettingManagement/EntityFrameworkCore/AbpSettingManagementEntityFrameworkCoreTestModule.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/Volo/Abp/SettingManagement/EntityFrameworkCore/AbpSettingManagementEntityFrameworkCoreTestModule.cs @@ -33,7 +33,7 @@ public class AbpSettingManagementEntityFrameworkCoreTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new SettingManagementDbContext( diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementEntityFrameworkCoreTestModule.cs b/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementEntityFrameworkCoreTestModule.cs index 9358a42216..336fbb228f 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementEntityFrameworkCoreTestModule.cs +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementEntityFrameworkCoreTestModule.cs @@ -37,7 +37,7 @@ public class AbpTenantManagementEntityFrameworkCoreTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new TenantManagementDbContext( diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs index 1804d8cff7..b316391b5f 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs @@ -59,7 +59,7 @@ public class MyProjectNameEntityFrameworkCoreTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); var options = new DbContextOptionsBuilder() diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs index 7abdfb25f8..aed68ef88c 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs @@ -33,7 +33,7 @@ public class MyProjectNameEntityFrameworkCoreTestModule : AbpModule private static SqliteConnection CreateDatabaseAndGetConnection() { - var connection = new SqliteConnection("Data Source=:memory:"); + var connection = new AbpUnitTestSqliteConnection("Data Source=:memory:"); connection.Open(); new MyProjectNameDbContext( From f239163a9c845bf3473e8a954ed01a5836132f82 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 23 Feb 2024 19:06:09 +0800 Subject: [PATCH 08/13] Update BlobStoringDatabaseEntityFrameworkCoreTestModule.cs --- .../BlobStoringDatabaseEntityFrameworkCoreTestModule.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreTestModule.cs b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreTestModule.cs index 6250a3f9d2..1f5bb843f0 100644 --- a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreTestModule.cs +++ b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreTestModule.cs @@ -2,6 +2,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage; +using Volo.Abp.EntityFrameworkCore.Sqlite; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.Modularity; From c4cf58f673f1cb95614feceb77bfe931969bda83 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 23 Feb 2024 21:03:35 +0800 Subject: [PATCH 09/13] Add `AbpEntityFrameworkCoreSqliteModule ` to `BlobStoringDatabaseEntityFrameworkCoreTestModule`. --- .../BlobStoringDatabaseEntityFrameworkCoreTestModule.cs | 3 ++- ...o.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreTestModule.cs b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreTestModule.cs index 1f5bb843f0..038ca5874d 100644 --- a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreTestModule.cs +++ b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/EntityFrameworkCore/BlobStoringDatabaseEntityFrameworkCoreTestModule.cs @@ -10,7 +10,8 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore; [DependsOn( typeof(BlobStoringDatabaseTestBaseModule), - typeof(BlobStoringDatabaseEntityFrameworkCoreModule) + typeof(BlobStoringDatabaseEntityFrameworkCoreModule), + typeof(AbpEntityFrameworkCoreSqliteModule) )] public class BlobStoringDatabaseEntityFrameworkCoreTestModule : AbpModule { diff --git a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj index 59db9b77df..b48e29993d 100644 --- a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj +++ b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj @@ -11,6 +11,7 @@ + From 61181850c9e0fe43bb064d23746d4d0194509ad9 Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Fri, 23 Feb 2024 16:53:21 +0300 Subject: [PATCH 10/13] Update config.yml --- .github/ISSUE_TEMPLATE/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 8da2082360..2261ab7bab 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -2,7 +2,7 @@ blank_issues_enabled: true contact_links: - name: Issue with ABP Commercial url: https://support.abp.io/QA/Questions - about: Please open issues relating to ABP Commercial in support.abp.io. + about: Please open ABP Commercial related issues at https://support.abp.io. - name: Ask a question (community support) url: https://stackoverflow.com/questions/tagged/abp about: Ask a question that will be answered by the ABP community From f2591e9c5bb7435622f625b474962831cf8daf27 Mon Sep 17 00:00:00 2001 From: Rafael Gonzales Date: Sat, 24 Feb 2024 08:12:15 -0500 Subject: [PATCH 11/13] Avoid classes if input is hidden --- .../Form/AbpInputTagHelperService.cs | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index 37343b72ed..e9cbd0a997 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -54,19 +54,22 @@ public class AbpInputTagHelperService : AbpTagHelperService output.TagMode = TagMode.StartTagAndEndTag; output.TagName = "div"; LeaveOnlyGroupAttributes(context, output); - if (TagHelper.FloatingLabel && !isCheckBox) + if (!IsOutputHidden(output)) { - output.Attributes.AddClass("form-floating"); - } - if (TagHelper.AddMarginBottomClass) - { - output.Attributes.AddClass(isCheckBox ? "mb-2" : "mb-3"); - } - if (isCheckBox) - { - output.Attributes.AddClass("custom-checkbox"); - output.Attributes.AddClass("custom-control"); - output.Attributes.AddClass("form-check"); + if (TagHelper.FloatingLabel && !isCheckBox) + { + output.Attributes.AddClass("form-floating"); + } + if (TagHelper.AddMarginBottomClass) + { + output.Attributes.AddClass(isCheckBox ? "mb-2" : "mb-3"); + } + if (isCheckBox) + { + output.Attributes.AddClass("custom-checkbox"); + output.Attributes.AddClass("custom-control"); + output.Attributes.AddClass("form-check"); + } } output.Content.AppendHtml(innerHtml); } @@ -263,7 +266,7 @@ public class AbpInputTagHelperService : AbpTagHelperService } protected virtual async Task GetLabelAsHtmlAsync(TagHelperContext context, TagHelperOutput output, TagHelperOutput inputTag, bool isCheckbox) - { + { if (IsOutputHidden(inputTag) || TagHelper.SuppressLabel) { return string.Empty; From 6c9e70990b5cc50722f8d71fb04ca479d1e5bd8b Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 26 Feb 2024 10:49:28 +0800 Subject: [PATCH 12/13] Pass `JsonSerializerOptions` when serializing the `enum`. --- .../AbpStringToEnumConverter.cs | 8 +++++++- .../Volo/Abp/Json/AbpStringToEnum_Tests.cs | 19 ++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpStringToEnumConverter.cs b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpStringToEnumConverter.cs index 9b20a4aa09..ac6208f47b 100644 --- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpStringToEnumConverter.cs +++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpStringToEnumConverter.cs @@ -11,6 +11,8 @@ public class AbpStringToEnumConverter : JsonConverter private JsonSerializerOptions? _readJsonSerializerOptions; + private JsonSerializerOptions? _writeJsonSerializerOptions; + public AbpStringToEnumConverter() : this(namingPolicy: null, allowIntegerValues: true) { @@ -39,7 +41,11 @@ public class AbpStringToEnumConverter : JsonConverter public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options) { - JsonSerializer.Serialize(writer, value); + _writeJsonSerializerOptions ??= JsonSerializerOptionsHelper.Create(options, x => + x == this || + x.GetType() == typeof(AbpStringToEnumFactory)); + + JsonSerializer.Serialize(writer, value, _writeJsonSerializerOptions); } public override T ReadAsPropertyName(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpStringToEnum_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpStringToEnum_Tests.cs index 8d00afd109..3996ddafe5 100644 --- a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpStringToEnum_Tests.cs +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpStringToEnum_Tests.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text.Json; +using System.Text.Json.Serialization; using Shouldly; using Volo.Abp.Json.SystemTextJson.JsonConverters; using Xunit; @@ -53,10 +54,26 @@ public class AbpStringToEnum_Tests var testClassJson = JsonSerializer.Serialize(new TestClass() { Day = DayOfWeek.Monday - }); + }, options); testClassJson.ShouldBe("{\"Day\":1}"); + options = new JsonSerializerOptions() + { + Converters = + { + new AbpStringToEnumFactory(), + new JsonStringEnumConverter() + } + }; + + testClassJson = JsonSerializer.Serialize(new TestClass() + { + Day = DayOfWeek.Monday + }, options); + + testClassJson.ShouldBe("{\"Day\":\"Monday\"}"); + testClassJson = JsonSerializer.Serialize(new Dictionary { {DayOfWeek.Monday, "Mo"} From 98c9c538c666d09d2b49ae39711c1f32d15cc7ae Mon Sep 17 00:00:00 2001 From: Salih Date: Mon, 26 Feb 2024 12:23:42 +0300 Subject: [PATCH 13/13] Add new localizations --- .../AbpIoLocalization/Base/Localization/Resources/en.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index 33138747c8..fe174120d4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -239,6 +239,12 @@ "Trainings": "Trainings", "MeetTheABPCommunity": "Meet the ABP Community", "DisplayName:CommunityIndexPagePoll": "Community Index Page Poll", - "ReturnOfInvestment": "Return Of Investment" + "ReturnOfInvestment": "Return Of Investment", + "PromotionalOffers": "Promotional Offers", + "PromotionalOffersDefinition": "Discounts, seasonal campaigns, etc.", + "EventsDefinition": "Community Talks, Webinars, ABP .NET Conference, etc.", + "ReleaseNotesDefinition": "ABP.IO Platform releases, new products, etc.", + "Newsletter": "Newsletter", + "NewsletterDefinition": "Blog posts, community news, etc." } } \ No newline at end of file