mirror of
https://github.com/zhigang1992/react-native-notifications.git
synced 2026-06-11 08:13:28 +08:00
232 lines
8.5 KiB
JavaScript
232 lines
8.5 KiB
JavaScript
"use strict";
|
|
let expect = require("chai").use(require("sinon-chai")).expect;
|
|
import proxyquire from "proxyquire";
|
|
import sinon from "sinon";
|
|
|
|
describe("Notifications-Android > ", () => {
|
|
proxyquire.noCallThru();
|
|
|
|
let refreshTokenStub;
|
|
let getInitialNotificationStub;
|
|
let postLocalNotificationStub;
|
|
let cancelLocalNotificationStub;
|
|
let deviceEventEmitterListenerStub;
|
|
let libUnderTest;
|
|
beforeEach(() => {
|
|
refreshTokenStub = sinon.stub();
|
|
getInitialNotificationStub = sinon.stub();
|
|
postLocalNotificationStub = sinon.stub();
|
|
cancelLocalNotificationStub = sinon.stub();
|
|
deviceEventEmitterListenerStub = sinon.stub();
|
|
|
|
libUnderTest = proxyquire("../index.android", {
|
|
"react-native": {
|
|
NativeModules: {
|
|
WixRNNotifications: {
|
|
refreshToken: refreshTokenStub,
|
|
getInitialNotification: getInitialNotificationStub,
|
|
postLocalNotification: postLocalNotificationStub,
|
|
cancelLocalNotification: cancelLocalNotificationStub
|
|
}
|
|
},
|
|
DeviceEventEmitter: {
|
|
addListener: deviceEventEmitterListenerStub
|
|
}
|
|
},
|
|
"./notification": require("../notification.android")
|
|
});
|
|
});
|
|
|
|
describe("Registration token API", () => {
|
|
it("should assign callback to native event upon listener registration", () => {
|
|
expect(deviceEventEmitterListenerStub).to.not.have.been.called;
|
|
const userListener = () => {};
|
|
|
|
libUnderTest.NotificationsAndroid.setRegistrationTokenUpdateListener(userListener);
|
|
|
|
expect(deviceEventEmitterListenerStub).to.have.been.calledWith("remoteNotificationsRegistered", userListener);
|
|
expect(deviceEventEmitterListenerStub).to.have.been.calledOnce;
|
|
});
|
|
|
|
it("should clear native event listener upon listener deregister", () => {
|
|
expect(deviceEventEmitterListenerStub).to.not.have.been.called;
|
|
const userListener = () => {};
|
|
const nativeListener = {
|
|
remove: sinon.spy()
|
|
};
|
|
deviceEventEmitterListenerStub.returns(nativeListener);
|
|
|
|
libUnderTest.NotificationsAndroid.setRegistrationTokenUpdateListener(userListener);
|
|
libUnderTest.NotificationsAndroid.clearRegistrationTokenUpdateListener();
|
|
|
|
expect(nativeListener.remove).to.have.been.calledOnce;
|
|
});
|
|
|
|
it("shouldn't fail if deregister without registering", () => {
|
|
libUnderTest.NotificationsAndroid.clearRegistrationTokenUpdateListener();
|
|
|
|
expect(deviceEventEmitterListenerStub).to.not.have.been.called;
|
|
});
|
|
});
|
|
|
|
describe("notification-opening API", () => {
|
|
it("should assign callback to native event upon registration", () => {
|
|
expect(deviceEventEmitterListenerStub).to.not.have.been.called;
|
|
const userListenerStub = sinon.stub();
|
|
|
|
libUnderTest.NotificationsAndroid.setNotificationOpenedListener(userListenerStub);
|
|
|
|
expect(deviceEventEmitterListenerStub).to.have.been.calledOnce;
|
|
expect(deviceEventEmitterListenerStub).to.have.been.calledWith("notificationOpened", sinon.match.func);
|
|
});
|
|
|
|
it("should assign a wrapper-callback upon registration", () => {
|
|
expect(deviceEventEmitterListenerStub).to.not.have.been.called;
|
|
const userListenerStub = sinon.stub();
|
|
const notification = { foo: "bar" };
|
|
|
|
libUnderTest.NotificationsAndroid.setNotificationOpenedListener(userListenerStub);
|
|
|
|
expect(userListenerStub).to.not.have.been.called;
|
|
deviceEventEmitterListenerStub.args[0][1](notification);
|
|
expect(userListenerStub).to.have.been.calledOnce;
|
|
expect(userListenerStub.args[0][0].getData()).to.equal(notification);
|
|
});
|
|
|
|
it("should clear native event listener upon listener deregister", () => {
|
|
expect(deviceEventEmitterListenerStub).to.not.have.been.called;
|
|
const userListener = () => {};
|
|
const nativeListener = {
|
|
remove: sinon.spy()
|
|
};
|
|
deviceEventEmitterListenerStub.returns(nativeListener);
|
|
|
|
libUnderTest.NotificationsAndroid.setNotificationOpenedListener(userListener);
|
|
libUnderTest.NotificationsAndroid.clearNotificationOpenedListener();
|
|
|
|
expect(nativeListener.remove).to.have.been.calledOnce;
|
|
});
|
|
|
|
it("shouldn't fail if deregister without registering", () => {
|
|
libUnderTest.NotificationsAndroid.clearNotificationOpenedListener();
|
|
|
|
expect(deviceEventEmitterListenerStub).to.not.have.been.called;
|
|
});
|
|
});
|
|
|
|
describe("notification-receive API", () => {
|
|
it("should assign callback to native event upon registration", () => {
|
|
expect(deviceEventEmitterListenerStub).to.not.have.been.called;
|
|
const userListenerStub = sinon.stub();
|
|
|
|
libUnderTest.NotificationsAndroid.setNotificationReceivedListener(userListenerStub);
|
|
|
|
expect(deviceEventEmitterListenerStub).to.have.been.calledOnce;
|
|
expect(deviceEventEmitterListenerStub).to.have.been.calledWith("notificationReceived", sinon.match.func);
|
|
});
|
|
|
|
it("should assign a wrapper-callback upon registration", () => {
|
|
expect(deviceEventEmitterListenerStub).to.not.have.been.called;
|
|
const userListenerStub = sinon.stub();
|
|
const notification = { foo: "bar" };
|
|
|
|
libUnderTest.NotificationsAndroid.setNotificationReceivedListener(userListenerStub);
|
|
|
|
expect(userListenerStub).to.not.have.been.called;
|
|
deviceEventEmitterListenerStub.args[0][1](notification);
|
|
expect(userListenerStub).to.have.been.calledOnce;
|
|
expect(userListenerStub.args[0][0].getData()).to.equal(notification);
|
|
});
|
|
|
|
it("should clear native event listener upon listener deregister", () => {
|
|
expect(deviceEventEmitterListenerStub).to.not.have.been.called;
|
|
const userListener = () => {};
|
|
const nativeListener = {
|
|
remove: sinon.spy()
|
|
};
|
|
deviceEventEmitterListenerStub.returns(nativeListener);
|
|
|
|
libUnderTest.NotificationsAndroid.setNotificationReceivedListener(userListener);
|
|
libUnderTest.NotificationsAndroid.clearNotificationReceivedListener();
|
|
|
|
expect(nativeListener.remove).to.have.been.calledOnce;
|
|
});
|
|
|
|
it("shouldn't fail if deregister without registering", () => {
|
|
libUnderTest.NotificationsAndroid.clearNotificationReceivedListener();
|
|
|
|
expect(deviceEventEmitterListenerStub).to.not.have.been.called;
|
|
});
|
|
});
|
|
|
|
describe("Notification token", () => {
|
|
it("should refresh notification token upon refreshing request by the user", () => {
|
|
expect(refreshTokenStub).to.not.have.been.called;
|
|
libUnderTest.NotificationsAndroid.refreshToken();
|
|
expect(refreshTokenStub).to.have.been.calledOnce;
|
|
});
|
|
});
|
|
|
|
describe("Initial notification API", () => {
|
|
it("should return initial notification data if available", (done) => {
|
|
expect(getInitialNotificationStub).to.not.have.been.called;
|
|
const rawNotification = {foo: "bar"};
|
|
getInitialNotificationStub.returns(Promise.resolve(rawNotification));
|
|
|
|
libUnderTest.PendingNotifications.getInitialNotification()
|
|
.then((notification) => {
|
|
expect(notification.getData()).to.equal(rawNotification);
|
|
done();
|
|
})
|
|
.catch((err) => done(err));
|
|
});
|
|
|
|
it("should return empty notification if not available", (done) => {
|
|
expect(getInitialNotificationStub).to.not.have.been.called;
|
|
getInitialNotificationStub.returns(Promise.resolve(null));
|
|
|
|
libUnderTest.PendingNotifications.getInitialNotification()
|
|
.then((notification) => {
|
|
expect(notification).to.be.undefined;
|
|
done();
|
|
})
|
|
.catch((err) => done(err));
|
|
});
|
|
|
|
});
|
|
|
|
describe("Local notification", () => {
|
|
const notification = {
|
|
title: "notification-title",
|
|
body: "notification-body"
|
|
};
|
|
|
|
it("should get published when posted manually", () => {
|
|
expect(postLocalNotificationStub).to.not.have.been.called;
|
|
|
|
const id = libUnderTest.NotificationsAndroid.localNotification(notification);
|
|
expect(id).to.not.be.undefined;
|
|
expect(postLocalNotificationStub).to.have.been.calledWith(notification, id);
|
|
});
|
|
|
|
it("should be called with a unique ID", () => {
|
|
expect(postLocalNotificationStub).to.not.have.been.called;
|
|
|
|
const id = libUnderTest.NotificationsAndroid.localNotification(notification);
|
|
const id2 = libUnderTest.NotificationsAndroid.localNotification(notification);
|
|
expect(id).to.not.be.undefined;
|
|
expect(id2).to.not.be.undefined;
|
|
expect(id).to.not.equal(id2);
|
|
});
|
|
|
|
it("should be cancellable with an ID", () => {
|
|
expect(cancelLocalNotificationStub).to.not.have.been.called;
|
|
|
|
libUnderTest.NotificationsAndroid.cancelLocalNotification(666);
|
|
|
|
expect(cancelLocalNotificationStub).to.have.been.calledWith(666);
|
|
});
|
|
});
|
|
|
|
});
|