Browse Source

Merge pull request #1019 from colinin/notifications-mapping

feat(notifications): 通知数据应交由具体实现者来处理数据
pull/1050/head
yx lin 1 year ago
committed by GitHub
parent
commit
0d6a79ed74
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 30
      aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/FodyWeavers.xsd
  2. 2
      aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Emailing/LINGYUN/Abp/Notifications/Emailing/AbpNotificationsEmailingModule.cs
  3. 3
      aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/AbpNotificationsSignalRModule.cs
  4. 7
      aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Sms/LINGYUN/Abp/Notifications/Sms/AbpNotificationsSmsModule.cs
  5. 4
      aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Sms/README.md
  6. 5
      aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.WeChat.MiniProgram/LINGYUN/Abp/Notifications/WeChat/MiniProgram/AbpNotificationsWeChatMiniProgramModule.cs
  7. 4
      aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.WeChat.MiniProgram/LINGYUN/Abp/Notifications/WeChat/MiniProgram/AbpNotificationsWeChatMiniProgramOptions.cs
  8. 3
      aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.WeChat.MiniProgram/README.md
  9. 5
      aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/AbpNotificationsPublishOptions.cs
  10. 6
      aspnet-core/services/LY.MicroService.Applications.Single/BackgroundJobs/NotificationPublishJob.cs
  11. 15
      aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/NotificationEventHandler.cs
  12. 2
      aspnet-core/services/LY.MicroService.Applications.Single/Properties/launchSettings.json
  13. 8
      aspnet-core/services/LY.MicroService.Applications.Single/appsettings.Development.json
  14. 6
      aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/BackgroundJobs/NotificationPublishJob.cs
  15. 10
      aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/EventBus/Distributed/NotificationEventHandler.cs
  16. 17
      aspnet-core/tests/LINGYUN.Abp.Notifications.Sms.Tests/LINGYUN/Abp/Notifications/Sms/AbpNotificationsSmsTestsModule.cs
  17. 58
      aspnet-core/tests/LINGYUN.Abp.Notifications.Sms.Tests/LINGYUN/Abp/Notifications/Sms/SmsNotificationDataMapping_Tests.cs
  18. 15
      aspnet-core/tests/LINGYUN.Abp.Notifications.WeChat.MiniProgram.Tests/LINGYUN/Abp/Notifications/WeChat/MiniProgram/AbpNotificationsWeChatMiniProgramTestsModule.cs
  19. 50
      aspnet-core/tests/LINGYUN.Abp.Notifications.WeChat.MiniProgram.Tests/LINGYUN/Abp/Notifications/WeChat/WeChatMiniProgramNotificationDataMapping_Tests.cs

30
aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/FodyWeavers.xsd

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

2
aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Emailing/LINGYUN/Abp/Notifications/Emailing/AbpNotificationsEmailingModule.cs

@ -15,8 +15,6 @@ public class AbpNotificationsEmailingModule : AbpModule
Configure<AbpNotificationsPublishOptions>(options => Configure<AbpNotificationsPublishOptions>(options =>
{ {
options.PublishProviders.Add<EmailingNotificationPublishProvider>(); options.PublishProviders.Add<EmailingNotificationPublishProvider>();
options.NotificationDataMappings
.MappingDefault(EmailingNotificationPublishProvider.ProviderName, data => data);
}); });
} }
} }

3
aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/AbpNotificationsSignalRModule.cs

@ -13,9 +13,6 @@ public class AbpNotificationsSignalRModule : AbpModule
Configure<AbpNotificationsPublishOptions>(options => Configure<AbpNotificationsPublishOptions>(options =>
{ {
options.PublishProviders.Add<SignalRNotificationPublishProvider>(); options.PublishProviders.Add<SignalRNotificationPublishProvider>();
options.NotificationDataMappings
.MappingDefault(SignalRNotificationPublishProvider.ProviderName,
data => data.ToSignalRData());
}); });
} }
} }

7
aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Sms/LINGYUN/Abp/Notifications/Sms/AbpNotificationsSmsModule.cs

@ -20,13 +20,6 @@ public class AbpNotificationsSmsModule : AbpModule
Configure<AbpNotificationsPublishOptions>(options => Configure<AbpNotificationsPublishOptions>(options =>
{ {
options.PublishProviders.Add<SmsNotificationPublishProvider>(); options.PublishProviders.Add<SmsNotificationPublishProvider>();
var smsOptions = preSmsActions.Configure();
options.NotificationDataMappings
.MappingDefault(
SmsNotificationPublishProvider.ProviderName,
data => NotificationData.ToStandardData(smsOptions.TemplateParamsPrefix, data));
}); });
} }
} }

4
aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Sms/README.md

@ -9,10 +9,6 @@
自定义的发送方法可以通过实现 ##ISmsNotificationSender## 接口或重写 ##SmsNotificationSender## 即可 自定义的发送方法可以通过实现 ##ISmsNotificationSender## 接口或重写 ##SmsNotificationSender## 即可
内置了通知数据 NotificationDataMappings 方法
可通过 NotificationDataMappings.MappingAll(SmsNotificationPublishProvider.ProviderName, Func<NotificationData, NotificationData> func) 来自定义规则
## 配置使用 ## 配置使用
* 此配置项将在下一个短信相关大版本移除 * 此配置项将在下一个短信相关大版本移除

5
aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.WeChat.MiniProgram/LINGYUN/Abp/Notifications/WeChat/MiniProgram/AbpNotificationsWeChatMiniProgramModule.cs

@ -21,11 +21,6 @@ public class AbpNotificationsWeChatMiniProgramModule : AbpModule
Configure<AbpNotificationsPublishOptions>(options => Configure<AbpNotificationsPublishOptions>(options =>
{ {
options.PublishProviders.Add<WeChatMiniProgramNotificationPublishProvider>(); options.PublishProviders.Add<WeChatMiniProgramNotificationPublishProvider>();
var wechatOptions = preActions.Configure();
options.NotificationDataMappings
.MappingDefault(WeChatMiniProgramNotificationPublishProvider.ProviderName,
data => NotificationData.ToStandardData(wechatOptions.DefaultMsgPrefix, data));
}); });
} }
} }

4
aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.WeChat.MiniProgram/LINGYUN/Abp/Notifications/WeChat/MiniProgram/AbpNotificationsWeChatMiniProgramOptions.cs

@ -5,10 +5,6 @@
/// </summary> /// </summary>
public class AbpNotificationsWeChatMiniProgramOptions public class AbpNotificationsWeChatMiniProgramOptions
{ {
/// <summary>
/// 默认消息头部标记
/// </summary>
public string DefaultMsgPrefix { get; set; } = "[wmp]";
/// <summary> /// <summary>
/// 默认小程序模板 /// 默认小程序模板
/// </summary> /// </summary>

3
aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.WeChat.MiniProgram/README.md

@ -7,9 +7,6 @@
#### 注意 #### 注意
内置了通知数据 NotificationDataMappings 方法
可通过 NotificationDataMappings.MappingAll(WeChatMiniProgramNotificationPublishProvider.ProviderName, Func<NotificationData, NotificationData> func) 来自定义规则
## 配置使用 ## 配置使用
* 此配置项将在下一个微信相关大版本移除,合并到 LINGYUN.Abp.WeChat.MiniProgram.AbpWeChatMiniProgramOptions * 此配置项将在下一个微信相关大版本移除,合并到 LINGYUN.Abp.WeChat.MiniProgram.AbpWeChatMiniProgramOptions

5
aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/AbpNotificationsPublishOptions.cs

@ -11,10 +11,6 @@ public class AbpNotificationsPublishOptions
/// </summary> /// </summary>
public ITypeList<INotificationPublishProvider> PublishProviders { get; } public ITypeList<INotificationPublishProvider> PublishProviders { get; }
/// <summary> /// <summary>
/// 可以自定义某个通知的格式
/// </summary>
public NotificationDataMappingDictionary NotificationDataMappings { get; }
/// <summary>
/// 过期时间 /// 过期时间
/// 默认60天 /// 默认60天
/// </summary> /// </summary>
@ -29,7 +25,6 @@ public class AbpNotificationsPublishOptions
public AbpNotificationsPublishOptions() public AbpNotificationsPublishOptions()
{ {
PublishProviders = new TypeList<INotificationPublishProvider>(); PublishProviders = new TypeList<INotificationPublishProvider>();
NotificationDataMappings = new NotificationDataMappingDictionary();
ExpirationTime = TimeSpan.FromDays(60); ExpirationTime = TimeSpan.FromDays(60);
DateTimeFormat = DefaultDateTimeFormat; DateTimeFormat = DefaultDateTimeFormat;

6
aspnet-core/services/LY.MicroService.Applications.Single/BackgroundJobs/NotificationPublishJob.cs

@ -31,12 +31,6 @@ public class NotificationPublishJob : AsyncBackgroundJob<NotificationPublishJobA
var notification = await store.GetNotificationOrNullAsync(args.TenantId, args.NotificationId); var notification = await store.GetNotificationOrNullAsync(args.TenantId, args.NotificationId);
notification.Data = NotificationDataSerializer.Serialize(notification.Data); notification.Data = NotificationDataSerializer.Serialize(notification.Data);
var notifacationDataMapping = Options.NotificationDataMappings
.GetMapItemOrDefault(notification.Name, publishProvider.Name);
if (notifacationDataMapping != null)
{
notification.Data = notifacationDataMapping.MappingFunc(notification.Data);
}
await publishProvider.PublishAsync(notification, args.UserIdentifiers); await publishProvider.PublishAsync(notification, args.UserIdentifiers);
} }
} }

15
aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/NotificationEventHandler.cs

@ -413,12 +413,15 @@ namespace LY.MicroService.Applications.Single.EventBus.Distributed
try try
{ {
Logger.LogDebug($"Sending notification with provider {provider.Name}"); Logger.LogDebug($"Sending notification with provider {provider.Name}");
var notifacationDataMapping = Options.NotificationDataMappings
.GetMapItemOrDefault(provider.Name, notificationInfo.Name); // 2024-10-10: 框架层面应该取消通知数据转换,而是交给提供商来实现
if (notifacationDataMapping != null) //var notifacationDataMapping = Options.NotificationDataMappings
{ // .GetMapItemOrDefault(provider.Name, notificationInfo.Name);
notificationInfo.Data = notifacationDataMapping.MappingFunc(notificationInfo.Data); //if (notifacationDataMapping != null)
} //{
// notificationInfo.Data = notifacationDataMapping.MappingFunc(notificationInfo.Data);
//}
// 发布 // 发布
await provider.PublishAsync(notificationInfo, subscriptionUsers); await provider.PublishAsync(notificationInfo, subscriptionUsers);

2
aspnet-core/services/LY.MicroService.Applications.Single/Properties/launchSettings.json

@ -14,7 +14,7 @@
"launchBrowser": false, "launchBrowser": false,
"applicationUrl": "http://0.0.0.0:30001", "applicationUrl": "http://0.0.0.0:30001",
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Production"
} }
} }
} }

8
aspnet-core/services/LY.MicroService.Applications.Single/appsettings.Development.json

@ -127,6 +127,14 @@
"Configuration": "127.0.0.1,defaultDatabase=15", "Configuration": "127.0.0.1,defaultDatabase=15",
"InstanceName": "LINGYUN.Abp.Application" "InstanceName": "LINGYUN.Abp.Application"
}, },
"Features": {
"Validation": {
"Redis": {
"Configuration": "127.0.0.1,defaultDatabase=13",
"InstanceName": "LINGYUN.Abp.Application"
}
}
},
"AuthServer": { "AuthServer": {
"UseOpenIddict": true, "UseOpenIddict": true,
"Authority": "http://127.0.0.1:30001/", "Authority": "http://127.0.0.1:30001/",

6
aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/BackgroundJobs/NotificationPublishJob.cs

@ -34,12 +34,6 @@ public class NotificationPublishJob : AsyncBackgroundJob<NotificationPublishJobA
var notification = await store.GetNotificationOrNullAsync(args.TenantId, args.NotificationId); var notification = await store.GetNotificationOrNullAsync(args.TenantId, args.NotificationId);
notification.Data = NotificationDataSerializer.Serialize(notification.Data); notification.Data = NotificationDataSerializer.Serialize(notification.Data);
var notifacationDataMapping = Options.NotificationDataMappings
.GetMapItemOrDefault(notification.Name, publishProvider.Name);
if (notifacationDataMapping != null)
{
notification.Data = notifacationDataMapping.MappingFunc(notification.Data);
}
await publishProvider.PublishAsync(notification, args.UserIdentifiers); await publishProvider.PublishAsync(notification, args.UserIdentifiers);
} }
} }

10
aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/EventBus/Distributed/NotificationEventHandler.cs

@ -418,16 +418,6 @@ namespace LY.MicroService.RealtimeMessage.EventBus.Distributed
try try
{ {
Logger.LogDebug($"Sending notification with provider {provider.Name}"); Logger.LogDebug($"Sending notification with provider {provider.Name}");
if (notificationInfo.Type != NotificationType.ServiceCallback)
{
var notifacationDataMapping = Options.NotificationDataMappings
.GetMapItemOrDefault(provider.Name, notificationInfo.Name);
if (notifacationDataMapping != null)
{
notificationInfo.Data = notifacationDataMapping.MappingFunc(notificationInfo.Data);
}
}
// 发布 // 发布
await provider.PublishAsync(notificationInfo, subscriptionUsers); await provider.PublishAsync(notificationInfo, subscriptionUsers);

17
aspnet-core/tests/LINGYUN.Abp.Notifications.Sms.Tests/LINGYUN/Abp/Notifications/Sms/AbpNotificationsSmsTestsModule.cs

@ -11,7 +11,7 @@ namespace LINGYUN.Abp.Notifications.Sms
{ {
public override void PreConfigureServices(ServiceConfigurationContext context) public override void PreConfigureServices(ServiceConfigurationContext context)
{ {
// 改变默认数据前缀方法 // �ı�Ĭ������ǰ׺����
PreConfigure<AbpNotificationsSmsOptions>(options => PreConfigure<AbpNotificationsSmsOptions>(options =>
{ {
options.TemplateParamsPrefix = "[sms-override]"; options.TemplateParamsPrefix = "[sms-override]";
@ -20,22 +20,9 @@ namespace LINGYUN.Abp.Notifications.Sms
public override void ConfigureServices(ServiceConfigurationContext context) public override void ConfigureServices(ServiceConfigurationContext context)
{ {
// 自定义数据处理方法 // �Զ������ݴ�������
Configure<AbpNotificationOptions>(options => Configure<AbpNotificationOptions>(options =>
{ {
// 这条通知返回标准化的通知
options.NotificationDataMappings
.Mapping(
SmsNotificationPublishProvider.ProviderName,
NotificationsTestsNames.Test2,
data => NotificationData.ToStandardData(data));
// 这条通知不做任何处理
options.NotificationDataMappings
.Mapping(
SmsNotificationPublishProvider.ProviderName,
NotificationsTestsNames.Test3,
data => data);
}); });
} }
} }

58
aspnet-core/tests/LINGYUN.Abp.Notifications.Sms.Tests/LINGYUN/Abp/Notifications/Sms/SmsNotificationDataMapping_Tests.cs

@ -30,53 +30,53 @@ namespace LINGYUN.Abp.Notifications.Sms
[Fact] [Fact]
public void Mapping_Sms_Notification_Data_Test() public void Mapping_Sms_Notification_Data_Test()
{ {
var mappingSmsItem = NotificationOptions // var mappingSmsItem = NotificationOptions
.NotificationDataMappings // .NotificationDataMappings
.GetMapItemOrDefault(SmsNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test1); // .GetMapItemOrDefault(SmsNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test1);
mappingSmsItem.ShouldNotBeNull(); // mappingSmsItem.ShouldNotBeNull();
var mappingSmsData = mappingSmsItem.MappingFunc(_notificationData); // var mappingSmsData = mappingSmsItem.MappingFunc(_notificationData);
mappingSmsData.TryGetData("phoneNumber").ShouldNotBeNull(); // mappingSmsData.TryGetData("phoneNumber").ShouldNotBeNull();
mappingSmsData.TryGetData("phoneNumber").ToString().ShouldBe("13800138000"); // mappingSmsData.TryGetData("phoneNumber").ToString().ShouldBe("13800138000");
mappingSmsData.TryGetData("template").ShouldNotBeNull(); // mappingSmsData.TryGetData("template").ShouldNotBeNull();
mappingSmsData.TryGetData("template").ToString().ShouldBe("SM_202011250901"); // mappingSmsData.TryGetData("template").ToString().ShouldBe("SM_202011250901");
// 按照预定义规则,这条数据被丢弃 // // 按照预定义规则,这条数据被丢弃
mappingSmsData.TryGetData("otherDataKey").ShouldBeNull(); // mappingSmsData.TryGetData("otherDataKey").ShouldBeNull();
} }
[Fact] [Fact]
public void Mapping_Standard_Notification_Data_Test() public void Mapping_Standard_Notification_Data_Test()
{ {
var mappingStandardItem = NotificationOptions // var mappingStandardItem = NotificationOptions
.NotificationDataMappings // .NotificationDataMappings
.GetMapItemOrDefault(SmsNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test2); // .GetMapItemOrDefault(SmsNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test2);
var mappingStandardData = mappingStandardItem.MappingFunc(_notificationData); // var mappingStandardData = mappingStandardItem.MappingFunc(_notificationData);
// 按照自定义规则,其他数据被丢弃 // // 按照自定义规则,其他数据被丢弃
mappingStandardData.TryGetData("phoneNumber").ShouldBeNull(); // mappingStandardData.TryGetData("phoneNumber").ShouldBeNull();
mappingStandardData.TryGetData("template").ShouldBeNull(); // mappingStandardData.TryGetData("template").ShouldBeNull();
mappingStandardData.TryGetData("otherDataKey").ShouldBeNull(); // mappingStandardData.TryGetData("otherDataKey").ShouldBeNull();
mappingStandardData.ExtraProperties.Count.ShouldBe(6); // mappingStandardData.ExtraProperties.Count.ShouldBe(6);
} }
[Fact] [Fact]
public void Mapping_Origin_Notification_Data_Test() public void Mapping_Origin_Notification_Data_Test()
{ {
var mappingOriginItem = NotificationOptions // var mappingOriginItem = NotificationOptions
.NotificationDataMappings // .NotificationDataMappings
.GetMapItemOrDefault(SmsNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test3); // .GetMapItemOrDefault(SmsNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test3);
var mappingOriginData = mappingOriginItem.MappingFunc(_notificationData); // var mappingOriginData = mappingOriginItem.MappingFunc(_notificationData);
// 按照自定义规则,所有数据被保留 // // 按照自定义规则,所有数据被保留
mappingOriginData.TryGetData(NotificationSmsOptions.TemplateParamsPrefix + "phoneNumber").ShouldNotBeNull(); // mappingOriginData.TryGetData(NotificationSmsOptions.TemplateParamsPrefix + "phoneNumber").ShouldNotBeNull();
mappingOriginData.TryGetData(NotificationSmsOptions.TemplateParamsPrefix + "template").ShouldNotBeNull(); // mappingOriginData.TryGetData(NotificationSmsOptions.TemplateParamsPrefix + "template").ShouldNotBeNull();
mappingOriginData.TryGetData("otherDataKey").ShouldNotBeNull(); // mappingOriginData.TryGetData("otherDataKey").ShouldNotBeNull();
mappingOriginData.ExtraProperties.Count.ShouldBe(9); // mappingOriginData.ExtraProperties.Count.ShouldBe(9);
} }
} }
} }

15
aspnet-core/tests/LINGYUN.Abp.Notifications.WeChat.MiniProgram.Tests/LINGYUN/Abp/Notifications/WeChat/MiniProgram/AbpNotificationsWeChatMiniProgramTestsModule.cs

@ -19,22 +19,9 @@ namespace LINGYUN.Abp.Notifications.WeChat.MiniProgram
public override void ConfigureServices(ServiceConfigurationContext context) public override void ConfigureServices(ServiceConfigurationContext context)
{ {
// 自定义数据处理方法 // �Զ������ݴ�������
Configure<AbpNotificationsPublishOptions>(options => Configure<AbpNotificationsPublishOptions>(options =>
{ {
// 这条通知返回标准化的通知
options.NotificationDataMappings
.Mapping(
WeChatMiniProgramNotificationPublishProvider.ProviderName,
NotificationsTestsNames.Test2,
data => NotificationData.ToStandardData(data));
// 这条通知不做任何处理
options.NotificationDataMappings
.Mapping(
WeChatMiniProgramNotificationPublishProvider.ProviderName,
NotificationsTestsNames.Test3,
data => data);
}); });
} }
} }

50
aspnet-core/tests/LINGYUN.Abp.Notifications.WeChat.MiniProgram.Tests/LINGYUN/Abp/Notifications/WeChat/WeChatMiniProgramNotificationDataMapping_Tests.cs

@ -30,48 +30,48 @@ namespace LINGYUN.Abp.Notifications.WeChat.MiniProgram
[Fact] [Fact]
public void Mapping_WeChatMiniProgram_Notification_Data_Test() public void Mapping_WeChatMiniProgram_Notification_Data_Test()
{ {
var mappingOpenIdItem = NotificationsPublishOptions // var mappingOpenIdItem = NotificationsPublishOptions
.NotificationDataMappings // .NotificationDataMappings
.GetMapItemOrDefault(WeChatMiniProgramNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test1); // .GetMapItemOrDefault(WeChatMiniProgramNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test1);
mappingOpenIdItem.ShouldNotBeNull(); // mappingOpenIdItem.ShouldNotBeNull();
var mappingOpenIdData = mappingOpenIdItem.MappingFunc(_notificationData); // var mappingOpenIdData = mappingOpenIdItem.MappingFunc(_notificationData);
mappingOpenIdData.TryGetData("openid").ShouldNotBeNull(); // mappingOpenIdData.TryGetData("openid").ShouldNotBeNull();
mappingOpenIdData.TryGetData("openid").ToString().ShouldBe("TEST"); // mappingOpenIdData.TryGetData("openid").ToString().ShouldBe("TEST");
// 按照预定义规则,这条数据被丢弃 // // 按照预定义规则,这条数据被丢弃
mappingOpenIdData.TryGetData("otherDataKey").ShouldBeNull(); // mappingOpenIdData.TryGetData("otherDataKey").ShouldBeNull();
} }
[Fact] [Fact]
public void Mapping_Standard_Notification_Data_Test() public void Mapping_Standard_Notification_Data_Test()
{ {
var mappingStandardItem = NotificationsPublishOptions // var mappingStandardItem = NotificationsPublishOptions
.NotificationDataMappings // .NotificationDataMappings
.GetMapItemOrDefault(WeChatMiniProgramNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test2); // .GetMapItemOrDefault(WeChatMiniProgramNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test2);
var mappingStandardData = mappingStandardItem.MappingFunc(_notificationData); // var mappingStandardData = mappingStandardItem.MappingFunc(_notificationData);
// 按照自定义规则,其他数据被丢弃 // // 按照自定义规则,其他数据被丢弃
mappingStandardData.TryGetData("openid").ShouldBeNull(); // mappingStandardData.TryGetData("openid").ShouldBeNull();
mappingStandardData.TryGetData("otherDataKey").ShouldBeNull(); // mappingStandardData.TryGetData("otherDataKey").ShouldBeNull();
mappingStandardData.ExtraProperties.Count.ShouldBe(6); // mappingStandardData.ExtraProperties.Count.ShouldBe(6);
} }
[Fact] [Fact]
public void Mapping_Origin_Notification_Data_Test() public void Mapping_Origin_Notification_Data_Test()
{ {
var mappingOriginItem = NotificationsPublishOptions // var mappingOriginItem = NotificationsPublishOptions
.NotificationDataMappings // .NotificationDataMappings
.GetMapItemOrDefault(WeChatMiniProgramNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test3); // .GetMapItemOrDefault(WeChatMiniProgramNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test3);
var mappingOriginData = mappingOriginItem.MappingFunc(_notificationData); // var mappingOriginData = mappingOriginItem.MappingFunc(_notificationData);
// 按照自定义规则,所有数据被保留 // // 按照自定义规则,所有数据被保留
mappingOriginData.TryGetData(NotificationWeChatMiniProgramOptions.DefaultMsgPrefix + "openid").ShouldNotBeNull(); // mappingOriginData.TryGetData(NotificationWeChatMiniProgramOptions.DefaultMsgPrefix + "openid").ShouldNotBeNull();
mappingOriginData.TryGetData("otherDataKey").ShouldNotBeNull(); // mappingOriginData.TryGetData("otherDataKey").ShouldNotBeNull();
mappingOriginData.ExtraProperties.Count.ShouldBe(8); // mappingOriginData.ExtraProperties.Count.ShouldBe(8);
} }
} }
} }

Loading…
Cancel
Save