diff --git a/.vscode/cspell.json b/.vscode/cspell.json index a9244f667f22..25d4002597ed 100644 --- a/.vscode/cspell.json +++ b/.vscode/cspell.json @@ -127,7 +127,8 @@ "Usuk", "USUK", "Vertica", - "westus" + "westus", + "Xiaomi" ], "allowCompoundWords": true, "overrides": [ diff --git a/sdk/notificationhubs/notification-hubs/CHANGELOG.md b/sdk/notificationhubs/notification-hubs/CHANGELOG.md index 0f730876f344..29a02f6890e7 100644 --- a/sdk/notificationhubs/notification-hubs/CHANGELOG.md +++ b/sdk/notificationhubs/notification-hubs/CHANGELOG.md @@ -1,6 +1,13 @@ # Release History -## 1.0.0 (2023-02-16) +## 1.0.0-beta.9 (Unreleased) + +### Features Added + +- Added Xiaomi support with the following: + - `XiaomiRegistrationDescription` and `XiaomiTemplateRegistrationDescription` for registrations with associated factory methods. + - `XiaomiInstallation` for installation operations and associated factory methods. + - `XiaomiNotification` for notification send support and associated factory methods. ### Bugs Fixed diff --git a/sdk/notificationhubs/notification-hubs/README.md b/sdk/notificationhubs/notification-hubs/README.md index f983f3bb530e..de7785b395b0 100644 --- a/sdk/notificationhubs/notification-hubs/README.md +++ b/sdk/notificationhubs/notification-hubs/README.md @@ -1,6 +1,6 @@ # Azure Notification Hubs SDK for JavaScript -Azure Notification Hubs provide a scaled-out push engine that enables you to send notifications to any platform (Apple, Amazon Kindle, Android, Baidu, Web, Windows, etc.) from any back-end (cloud or on-premises). Notification Hubs works well for both enterprise and consumer scenarios. Here are a few example scenarios: +Azure Notification Hubs provide a scaled-out push engine that enables you to send notifications to any platform (Apple, Amazon Kindle, Android, Baidu, Xiaomi, Web, Windows, etc.) from any back-end (cloud or on-premises). Notification Hubs works well for both enterprise and consumer scenarios. Here are a few example scenarios: - Send breaking news notifications to millions with low latency. - Send location-based coupons to interested user segments. diff --git a/sdk/notificationhubs/notification-hubs/package.json b/sdk/notificationhubs/notification-hubs/package.json index 0ada2b6ced43..ab0c79764c5d 100644 --- a/sdk/notificationhubs/notification-hubs/package.json +++ b/sdk/notificationhubs/notification-hubs/package.json @@ -1,6 +1,6 @@ { "name": "@azure/notification-hubs", - "version": "1.0.0", + "version": "1.0.0-beta.9", "description": "Azure Notification Hubs SDK for JavaScript", "sdk-type": "client", "main": "dist/index.js", diff --git a/sdk/notificationhubs/notification-hubs/review/notification-hubs.api.md b/sdk/notificationhubs/notification-hubs/review/notification-hubs.api.md index 504d044895e0..090be135c97f 100644 --- a/sdk/notificationhubs/notification-hubs/review/notification-hubs.api.md +++ b/sdk/notificationhubs/notification-hubs/review/notification-hubs.api.md @@ -367,6 +367,18 @@ export function createWindowsTileNotification(notification: NotificationCommon): // @public export function createWindowsToastNotification(notification: NotificationCommon): WindowsNotification; +// @public +export function createXiaomiInstallation(installation: DeviceTokenInstallation): XiaomiInstallation; + +// @public +export function createXiaomiNotification(notification: NotificationCommon): XiaomiNotification; + +// @public +export function createXiaomiRegistrationDescription(description: XiaomiRegistrationDescriptionCommon): XiaomiRegistrationDescription; + +// @public +export function createXiaomiTemplateRegistrationDescription(description: XiaomiTemplateRegistrationDescriptionCommon): XiaomiTemplateRegistrationDescription; + // @public export interface DeviceTokenInstallation extends InstallationCommon { pushChannel: string; @@ -472,7 +484,7 @@ export interface GcmTemplateRegistrationDescriptionCommon extends GcmRegistratio } // @public -export type Installation = AppleInstallation | AdmInstallation | BaiduInstallation | BrowserInstallation | FcmLegacyInstallation | WindowsInstallation; +export type Installation = AppleInstallation | AdmInstallation | BaiduInstallation | BrowserInstallation | FcmLegacyInstallation | XiaomiInstallation | WindowsInstallation; // @public export interface InstallationCommon { @@ -533,7 +545,7 @@ export interface MpnsTemplateRegistrationDescriptionCommon extends MpnsRegistrat } // @public -export type Notification = AppleNotification | AdmNotification | BaiduNotification | BrowserNotification | FcmLegacyNotification | WindowsNotification | TemplateNotification; +export type Notification = AppleNotification | AdmNotification | BaiduNotification | BrowserNotification | FcmLegacyNotification | XiaomiNotification | WindowsNotification | TemplateNotification; // @public export interface NotificationCommon { @@ -559,6 +571,7 @@ export interface NotificationDetails { tags?: string; targetPlatforms?: string; wnsOutcomeCounts?: NotificationOutcome[]; + xiaomiOutcomeCounts?: NotificationOutcome[]; } // @public @@ -690,10 +703,10 @@ export interface PolledOperationOptions extends OperationOptions { export type PushHandle = BrowserPushChannel | string; // @public -export type RegistrationChannel = AdmRegistrationChannel | AppleRegistrationChannel | BaiduRegistrationChannel | BrowserRegistrationChannel | FirebaseLegacyRegistrationChannel | WindowsRegistrationChannel; +export type RegistrationChannel = AdmRegistrationChannel | AppleRegistrationChannel | BaiduRegistrationChannel | BrowserRegistrationChannel | FirebaseLegacyRegistrationChannel | XiaomiRegistrationChannel | WindowsRegistrationChannel; // @public -export type RegistrationDescription = AdmRegistrationDescription | AdmTemplateRegistrationDescription | AppleRegistrationDescription | AppleTemplateRegistrationDescription | BaiduRegistrationDescription | BaiduTemplateRegistrationDescription | BrowserRegistrationDescription | BrowserTemplateRegistrationDescription | GcmRegistrationDescription | GcmTemplateRegistrationDescription | MpnsRegistrationDescription | MpnsTemplateRegistrationDescription | WindowsRegistrationDescription | WindowsTemplateRegistrationDescription; +export type RegistrationDescription = AdmRegistrationDescription | AdmTemplateRegistrationDescription | AppleRegistrationDescription | AppleTemplateRegistrationDescription | BaiduRegistrationDescription | BaiduTemplateRegistrationDescription | BrowserRegistrationDescription | BrowserTemplateRegistrationDescription | GcmRegistrationDescription | GcmTemplateRegistrationDescription | MpnsRegistrationDescription | MpnsTemplateRegistrationDescription | XiaomiRegistrationDescription | XiaomiTemplateRegistrationDescription | WindowsRegistrationDescription | WindowsTemplateRegistrationDescription; // @public export interface RegistrationDescriptionCommon { @@ -729,7 +742,7 @@ export interface RegistrationResult { } // @public -export type RegistrationType = "Adm" | "AdmTemplate" | "Apple" | "AppleTemplate" | "Baidu" | "BaiduTemplate" | "Browser" | "BrowserTemplate" | "Gcm" | "GcmTemplate" | "Mpns" | "MpnsTemplate" | "Windows" | "WindowsTemplate"; +export type RegistrationType = "Adm" | "AdmTemplate" | "Apple" | "AppleTemplate" | "Baidu" | "BaiduTemplate" | "Browser" | "BrowserTemplate" | "Gcm" | "GcmTemplate" | "Mpns" | "MpnsTemplate" | "Xiaomi" | "XiaomiTemplate" | "Windows" | "WindowsTemplate"; // @public export interface ScheduleNotificationOptions extends OperationOptions { @@ -801,6 +814,41 @@ export interface WindowsTemplateRegistrationDescriptionCommon extends WindowsReg wnsHeaders?: Record; } +// @public +export interface XiaomiInstallation extends DeviceTokenInstallation { + platform: "xiaomi"; +} + +// @public +export interface XiaomiNotification extends JsonNotification { + platform: "xiaomi"; +} + +// @public +export interface XiaomiRegistrationChannel { + kind: "xiaomi"; + xiaomiRegistrationId: string; +} + +// @public +export interface XiaomiRegistrationDescription extends XiaomiRegistrationDescriptionCommon { + kind: "Xiaomi"; +} + +// @public +export interface XiaomiRegistrationDescriptionCommon extends RegistrationDescriptionCommon { + xiaomiRegistrationId: string; +} + +// @public +export interface XiaomiTemplateRegistrationDescription extends XiaomiTemplateRegistrationDescriptionCommon { + kind: "XiaomiTemplate"; +} + +// @public +export interface XiaomiTemplateRegistrationDescriptionCommon extends XiaomiRegistrationDescriptionCommon, TemplateRegistrationDescription { +} + // (No @packageDocumentation comment for this package) ``` diff --git a/sdk/notificationhubs/notification-hubs/src/models/installation.ts b/sdk/notificationhubs/notification-hubs/src/models/installation.ts index 59186add3260..19f1b2253300 100644 --- a/sdk/notificationhubs/notification-hubs/src/models/installation.ts +++ b/sdk/notificationhubs/notification-hubs/src/models/installation.ts @@ -136,6 +136,30 @@ export function createFcmLegacyInstallation( }; } +/** + * Represents a Xiaomi based installation. + */ +export interface XiaomiInstallation extends DeviceTokenInstallation { + /** + * The platform for the installation. + */ + platform: "xiaomi"; +} + +/** + * Creates a Xiaomi based installation. + * @param installation - A partial installation used to create the Xiaomi installation. + * @returns The newly created Xiaomi installation. + */ +export function createXiaomiInstallation( + installation: DeviceTokenInstallation +): XiaomiInstallation { + return { + ...installation, + platform: "xiaomi", + }; +} + /** * Represents a Windows Notification Services (WNS) based installation. */ @@ -223,6 +247,7 @@ export type Installation = | BaiduInstallation | BrowserInstallation | FcmLegacyInstallation + | XiaomiInstallation | WindowsInstallation; /** diff --git a/sdk/notificationhubs/notification-hubs/src/models/notification.ts b/sdk/notificationhubs/notification-hubs/src/models/notification.ts index fc95702a2657..c7ba6e7eb1d3 100644 --- a/sdk/notificationhubs/notification-hubs/src/models/notification.ts +++ b/sdk/notificationhubs/notification-hubs/src/models/notification.ts @@ -133,7 +133,7 @@ export interface FcmLegacyNotification extends JsonNotification { /** * Creates a notification to send to Firebase. * @param notification - A partial message used to create a message for Firebase. - * @returns A newly created Firebase. + * @returns A newly created Firebase notification. */ export function createFcmLegacyNotification( notification: NotificationCommon @@ -145,6 +145,29 @@ export function createFcmLegacyNotification( }; } +/** + * Represents a Xiaomi push notification. + */ +export interface XiaomiNotification extends JsonNotification { + /** + * The platform for the push notification. + */ + platform: "xiaomi"; +} + +/** + * Creates a notification to send to Xiaomi. + * @param notification - A partial message used to create a message for Xiaomi. + * @returns A newly created Xiaomi notification. + */ +export function createXiaomiNotification(notification: NotificationCommon): XiaomiNotification { + return { + ...notification, + platform: "xiaomi", + contentType: Constants.JSON_CONTENT_TYPE, + }; +} + /** * Represents a template based push notification. */ @@ -289,5 +312,6 @@ export type Notification = | BaiduNotification | BrowserNotification | FcmLegacyNotification + | XiaomiNotification | WindowsNotification | TemplateNotification; diff --git a/sdk/notificationhubs/notification-hubs/src/models/notificationDetails.ts b/sdk/notificationhubs/notification-hubs/src/models/notificationDetails.ts index 8f890f02c912..e687962c0d84 100644 --- a/sdk/notificationhubs/notification-hubs/src/models/notificationDetails.ts +++ b/sdk/notificationhubs/notification-hubs/src/models/notificationDetails.ts @@ -112,6 +112,11 @@ export interface NotificationDetails { * Web Push outcome counts per state. */ browserOutcomeCounts?: NotificationOutcome[]; + + /** + * Xiaomi outcome counts per state. + */ + xiaomiOutcomeCounts?: NotificationOutcome[]; } /** diff --git a/sdk/notificationhubs/notification-hubs/src/models/registration.ts b/sdk/notificationhubs/notification-hubs/src/models/registration.ts index a23f62f958df..0a774ec39967 100644 --- a/sdk/notificationhubs/notification-hubs/src/models/registration.ts +++ b/sdk/notificationhubs/notification-hubs/src/models/registration.ts @@ -17,6 +17,8 @@ export type RegistrationType = | "GcmTemplate" | "Mpns" | "MpnsTemplate" + | "Xiaomi" + | "XiaomiTemplate" | "Windows" | "WindowsTemplate"; @@ -558,6 +560,72 @@ export function createWindowsTemplateRegistrationDescription( }; } +/** + * Represents a Xiaomi registration description. + */ +export interface XiaomiRegistrationDescriptionCommon extends RegistrationDescriptionCommon { + /** + * The Xiaomi registration ID. + */ + xiaomiRegistrationId: string; +} + +/** + * Represents a Xiaomi registration description. + */ +export interface XiaomiRegistrationDescription extends XiaomiRegistrationDescriptionCommon { + /** + * The kind of the registration. + */ + kind: "Xiaomi"; +} + +/** + * Creates a Xiaomi registration description. + * @param description - A partial Xiaomi registration description. + * @returns A created Xiaomi registration description. + */ +export function createXiaomiRegistrationDescription( + description: XiaomiRegistrationDescriptionCommon +): XiaomiRegistrationDescription { + return { + ...description, + kind: "Xiaomi", + }; +} + +/** + * Represents a Xiaomi template registration. + */ +export interface XiaomiTemplateRegistrationDescriptionCommon + extends XiaomiRegistrationDescriptionCommon, + TemplateRegistrationDescription {} + +/** + * Represents a Windows Notification Services (WNS) template registration. + */ +export interface XiaomiTemplateRegistrationDescription + extends XiaomiTemplateRegistrationDescriptionCommon { + /** + * The kind of the registration. + */ + kind: "XiaomiTemplate"; +} + +/** + * Creates a Xiaomi template registration description. + * @param description - A partial Xiaomi template registration description. + * @returns A created Xiaomi template registration description. + */ +export function createXiaomiTemplateRegistrationDescription( + description: XiaomiTemplateRegistrationDescriptionCommon +): XiaomiTemplateRegistrationDescription { + return { + ...description, + kind: "XiaomiTemplate", + }; +} + /** * Describes the types of registration descriptions. */ @@ -574,6 +642,8 @@ export type RegistrationDescription = | GcmTemplateRegistrationDescription | MpnsRegistrationDescription | MpnsTemplateRegistrationDescription + | XiaomiRegistrationDescription + | XiaomiTemplateRegistrationDescription | WindowsRegistrationDescription | WindowsTemplateRegistrationDescription; @@ -673,6 +743,20 @@ export interface WindowsRegistrationChannel { kind: "windows"; } +/** + * Describes an Xiaomi Registration channel query. + */ +export interface XiaomiRegistrationChannel { + /** + * The Xiaomi registration ID. + */ + xiaomiRegistrationId: string; + /** + * The kind of the registration channel. + */ + kind: "xiaomi"; +} + /** * Describes a Registration query. */ @@ -682,4 +766,5 @@ export type RegistrationChannel = | BaiduRegistrationChannel | BrowserRegistrationChannel | FirebaseLegacyRegistrationChannel + | XiaomiRegistrationChannel | WindowsRegistrationChannel; diff --git a/sdk/notificationhubs/notification-hubs/src/serializers/notificationDetailsSerializer.ts b/sdk/notificationhubs/notification-hubs/src/serializers/notificationDetailsSerializer.ts index 1beca38e956b..f1d4f308774c 100644 --- a/sdk/notificationhubs/notification-hubs/src/serializers/notificationDetailsSerializer.ts +++ b/sdk/notificationhubs/notification-hubs/src/serializers/notificationDetailsSerializer.ts @@ -39,6 +39,11 @@ export async function parseNotificationDetails(bodyText: string): Promise ) => MpnsTemplateRegistrationDescription; + /** + * @internal + * Creates a Xiaomi registration description from the incoming parsed XML. + */ + createXiaomiRegistrationDescription: ( + rawRegistrationDescription: Record + ) => XiaomiRegistrationDescription; + /** + * @internal + * Creates a Xiaomi template registration description from the incoming parsed XML. + */ + createXiaomiTemplateRegistrationDescription: ( + rawRegistrationDescription: Record + ) => XiaomiTemplateRegistrationDescription; /** * @internal * Creates a Windows Notification Services (WNS) registration description from the incoming parsed XML. @@ -375,6 +391,37 @@ export const registrationDescriptionParser: RegistrationDescriptionParser = { }; }, + /** + * @internal + * Creates a Xiaomi registration description from incoming XML property bag. + */ + createXiaomiRegistrationDescription( + rawRegistrationDescription: Record + ): XiaomiRegistrationDescription { + return { + xiaomiRegistrationId: getString( + rawRegistrationDescription["XiaomiRegistrationId"], + "xiaomiRegistrationId" + ), + ...createRegistrationDescription(rawRegistrationDescription), + kind: "Xiaomi", + }; + }, + + /** + * @internal + * Creates a Xiaomi template registration description from incoming XML property bag. + */ + createXiaomiTemplateRegistrationDescription( + rawRegistrationDescription: Record + ): XiaomiTemplateRegistrationDescription { + return { + ...this.createXiaomiRegistrationDescription(rawRegistrationDescription), + ...createTemplateRegistrationDescription(rawRegistrationDescription), + kind: "XiaomiTemplate", + }; + }, + /** * @internal * Creates a Windows registration description from incoming XML property bag. @@ -542,6 +589,20 @@ export interface RegistrationDescriptionSerializer { serializeMpnsTemplateRegistrationDescription( description: Omit ): Record; + /** + * @internal + * Serializes a Xiaomi registration description into an XML object for serialization. + */ + serializeXiaomiRegistrationDescription( + description: Omit + ): Record; + /** + * @internal + * Serializes a Xiaomi template registration description into an XML object for serialization. + */ + serializeXiaomiTemplateRegistrationDescription( + description: Omit + ): Record; /** * @internal * Serializes a Windows Notification Services (WNS) registration description into an XML object for serialization. @@ -773,6 +834,32 @@ export const registrationDescriptionSerializer: RegistrationDescriptionSerialize }; }, + /** + * @internal + * Serializes an existing Xiaomi registration description to an object for serialization. + */ + serializeXiaomiRegistrationDescription( + description: Omit + ): Record { + return { + ...serializeRegistrationDescription(description), + XiaomiRegistrationId: getString(description.xiaomiRegistrationId, "xiaomiRegistrationId"), + }; + }, + + /** + * @internal + * Serializes an existing Xiaomi template registration description to an object for serialization. + */ + serializeXiaomiTemplateRegistrationDescription( + description: Omit + ): Record { + return { + ...this.serializeXiaomiRegistrationDescription(description), + ...serializeTemplateRegistrationDescription(description), + }; + }, + /** * @internal * Serializes an existing Windows registration description to an object for serialization. diff --git a/sdk/notificationhubs/notification-hubs/src/utils/constants.ts b/sdk/notificationhubs/notification-hubs/src/utils/constants.ts index 17565392a212..b99e567bb54b 100644 --- a/sdk/notificationhubs/notification-hubs/src/utils/constants.ts +++ b/sdk/notificationhubs/notification-hubs/src/utils/constants.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -export const SDK_VERSION: string = "1.0.0"; +export const SDK_VERSION: string = "1.0.0-beta.9"; export const JSON_CONTENT_TYPE = "application/json;charset=utf-8"; export const XML_CONTENT_TYPE = "application/xml"; diff --git a/sdk/notificationhubs/notification-hubs/test/internal/unit/registrationSerializer.spec.ts b/sdk/notificationhubs/notification-hubs/test/internal/unit/registrationSerializer.spec.ts index 5522ac1038e6..9ccc58e7e128 100644 --- a/sdk/notificationhubs/notification-hubs/test/internal/unit/registrationSerializer.spec.ts +++ b/sdk/notificationhubs/notification-hubs/test/internal/unit/registrationSerializer.spec.ts @@ -14,6 +14,8 @@ import { GcmTemplateRegistrationDescription, MpnsRegistrationDescription, MpnsTemplateRegistrationDescription, + XiaomiRegistrationDescription, + XiaomiTemplateRegistrationDescription, WindowsRegistrationDescription, WindowsTemplateRegistrationDescription, createAdmRegistrationDescription, @@ -26,6 +28,8 @@ import { createBrowserTemplateRegistrationDescription, createFcmLegacyRegistrationDescription, createFcmLegacyTemplateRegistrationDescription, + createXiaomiRegistrationDescription, + createXiaomiTemplateRegistrationDescription, createWindowsRegistrationDescription, createWindowsTemplateRegistrationDescription, } from "../../../src/models/registration.js"; @@ -35,7 +39,7 @@ import { } from "../../../src/serializers/registrationSerializer.js"; import { assert } from "@azure/test-utils"; -const ADM_REGISTEATION = ` +const ADM_REGISTRATION = ` @@ -199,6 +203,29 @@ const MPNS_TEMPLATE_REGISTRATION = ` `; +const XIAOMI_REGISTRATION = ` + + + + myTag,myOtherTag + {Registration Id} + {Xiaomi Registration Id} + + +`; + +const XIAOMI_TEMPLATE_REGISTRATION = ` + + + + myTag,myOtherTag + {Xiaomi Registration Id} + {Registration Id} + + + +`; + const WNS_REGISTRATION = ` @@ -235,7 +262,7 @@ const WINDOWS_TEMPLATE_REGISTRATION = ` describe("parseRegistrationEntry", () => { it("should parse an Amazon Device Messaging registration description", async () => { const registration = (await registrationDescriptionParser.parseRegistrationEntry( - ADM_REGISTEATION + ADM_REGISTRATION )) as AdmRegistrationDescription; assert.equal(registration.kind, "Adm"); @@ -381,6 +408,29 @@ describe("parseRegistrationEntry", () => { assert.equal(registration.mpnsHeaders!["X-NotificationClass"], "[batching interval]"); }); + it("should parse an Xiaomi registration description", async () => { + const registration = (await registrationDescriptionParser.parseRegistrationEntry( + XIAOMI_REGISTRATION + )) as XiaomiRegistrationDescription; + + assert.equal(registration.kind, "Xiaomi"); + assert.equal(registration.registrationId, "{Registration Id}"); + assert.equal(registration.xiaomiRegistrationId, "{Xiaomi Registration Id}"); + assert.deepEqual(registration.tags, ["myTag", "myOtherTag"]); + }); + + it("should parse an Xiaomi template registration description", async () => { + const registration = (await registrationDescriptionParser.parseRegistrationEntry( + XIAOMI_TEMPLATE_REGISTRATION + )) as XiaomiTemplateRegistrationDescription; + + assert.equal(registration.kind, "XiaomiTemplate"); + assert.equal(registration.registrationId, "{Registration Id}"); + assert.equal(registration.xiaomiRegistrationId, "{Xiaomi Registration Id}"); + assert.deepEqual(registration.tags, ["myTag", "myOtherTag"]); + assert.equal(registration.bodyTemplate, "{Template for the body}"); + }); + it("should parse an Windows registration description", async () => { const registration = (await registrationDescriptionParser.parseRegistrationEntry( WNS_REGISTRATION @@ -740,6 +790,42 @@ describe("serializeRegistrationDescription", () => { assert.isTrue(xml.indexOf("") !== -1); }); + it("should serialize an XiaomiRegistrationDescription", () => { + const registration = createXiaomiRegistrationDescription({ + xiaomiRegistrationId: "{Xiaomi Registration ID}", + tags: ["myTag", "myOtherTag"], + }); + + const xml = registrationDescriptionSerializer.serializeRegistrationDescription(registration); + + assert.isTrue(xml.indexOf("{Xiaomi Registration ID}") !== -1 + ); + assert.isTrue(xml.indexOf("myTag,myOtherTag") !== -1); + assert.isTrue(xml.indexOf("") !== -1); + }); + + it("should serialize an XiaomiTemplateRegistrationDescription", () => { + const registration = createXiaomiTemplateRegistrationDescription({ + xiaomiRegistrationId: "{Xiaomi Registration ID}", + tags: ["myTag", "myOtherTag"], + bodyTemplate: "{Template for the body}", + }); + + const xml = registrationDescriptionSerializer.serializeRegistrationDescription(registration); + + assert.isTrue(xml.indexOf("{Xiaomi Registration ID}") !== -1 + ); + assert.isTrue(xml.indexOf("myTag,myOtherTag") !== -1); + assert.isTrue( + xml.indexOf("") !== -1 + ); + assert.isTrue(xml.indexOf("") !== -1); + }); + it("should serialize an WindowsRegistrationDescription", () => { const registration = createWindowsRegistrationDescription({ channelUri: "https://www.microsoft.com/", diff --git a/sdk/notificationhubs/notification-hubs/test/public/unit/installation.spec.ts b/sdk/notificationhubs/notification-hubs/test/public/unit/installation.spec.ts index e92482cff117..aed6cb8b8a5b 100644 --- a/sdk/notificationhubs/notification-hubs/test/public/unit/installation.spec.ts +++ b/sdk/notificationhubs/notification-hubs/test/public/unit/installation.spec.ts @@ -7,6 +7,7 @@ import { createBaiduInstallation, createBrowserInstallation, createFcmLegacyInstallation, + createXiaomiInstallation, createWindowsInstallation, } from "../../../src/models/installation.js"; import { assert } from "@azure/test-utils"; @@ -85,6 +86,19 @@ describe("createFcmLegacyInstallation", () => { }); }); +describe("createXiaomiInstallation", () => { + it("should set the default properties", () => { + const installation = createXiaomiInstallation({ + installationId: "abc123", + pushChannel: "zxy321", + }); + + assert.equal(installation.installationId, "abc123"); + assert.equal(installation.pushChannel, "zxy321"); + assert.equal(installation.platform, "xiaomi"); + }); +}); + describe("createWindowsInstallation", () => { it("should set the default properties", () => { const installation = createWindowsInstallation({ diff --git a/sdk/notificationhubs/notification-hubs/test/public/unit/notification.spec.ts b/sdk/notificationhubs/notification-hubs/test/public/unit/notification.spec.ts index b1a2f25fd63c..57795d35b103 100644 --- a/sdk/notificationhubs/notification-hubs/test/public/unit/notification.spec.ts +++ b/sdk/notificationhubs/notification-hubs/test/public/unit/notification.spec.ts @@ -9,6 +9,7 @@ import { createBrowserNotification, createFcmLegacyNotification, createTemplateNotification, + createXiaomiNotification, createWindowsBadgeNotification, createWindowsRawNotification, createWindowsTileNotification, @@ -88,6 +89,18 @@ describe("createTemplateNotification", () => { }); }); +describe("createXiaomiNotification", () => { + it("should create a Xiaomi message with defaults", () => { + const notification = createXiaomiNotification({ + body: `{"data":{"message":"Hello}}`, + }); + + assert.equal(notification.contentType, Constants.JSON_CONTENT_TYPE); + assert.equal(notification.platform, "xiaomi"); + assert.equal(notification.body, `{"data":{"message":"Hello}}`); + }); +}); + describe("createWindowsBadgeNotification", () => { it("should create a badge Windows message with defaults", () => { const notification = createWindowsBadgeNotification({