Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Testing, Static Analysis, Code Formatting #814

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
root: true,
extends: ['@cordova/eslint-config/node', 'prettier'],
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
};
27 changes: 27 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Test

on:
pull_request:
branches: "**"

jobs:
build:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: "[Setup] Node"
uses: actions/setup-node@v3
with:
node-version: 16
- name: "[Setup] Dependencies"
run: yarn
- name: "[Test] Linting"
run: yarn lint
- name: "[Test] SDK Unit Tests"
run: yarn test
- name: Unit tests results
if: failure()
uses: actions/upload-artifact@v3
with:
name: unit-tests-results
path: .
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
node_modules
dist
coverage
6 changes: 6 additions & 0 deletions .prettierrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
bracketSpacing: true,
jsxBracketSameLine: true,
singleQuote: true,
trailingComma: 'all',
};
5 changes: 5 additions & 0 deletions __test__/index.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
describe('Test for initial jest setup.', () => {
test('two plus two is four', () => {
expect(2 + 2).toBe(4);
});
});
20 changes: 18 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,24 @@
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
"prepare": "yarn run build",
"build": "tsc"
"prepare": "install-peers && yarn run build",
"build": "tsc",
"lint": "eslint src www --ext .js,.jsx,.ts,.tsx; prettier --check src www __test__" ,
"test": "tsc && jest --coverage"
},
"devDependencies": {
"@cordova/eslint-config": "^4.0.0",
"@typescript-eslint/eslint-plugin": "^5.36.1",
"@typescript-eslint/parser": "^5.36.1",
"eslint": "^8.23.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.0.1",
"install-peers-cli": "^2.2.0",
"jest": "^29.0.1",
"prettier": "^2.7.1",
"typescript": "^4.8.2"
},
"keywords": [
"push",
Expand Down
139 changes: 87 additions & 52 deletions src/windows/OneSignalPushProxy.js
Original file line number Diff line number Diff line change
@@ -1,88 +1,123 @@
/* global OneSignalSDK_WP_WNS_WRTC, Windows, WinJS */

var OneSignal_launchString = "";
var OneSignal_JSBridge = new OneSignalSDK_WP_WNS_WRTC.WinJSBridge();
var OneSignal_app_id = null;
var OneSignal_opened_callback = null;
let OneSignal_launchString = '';
const OneSignal_JSBridge = new OneSignalSDK_WP_WNS_WRTC.WinJSBridge();
let OneSignal_app_id = null;
let OneSignal_opened_callback = null;

// Process launch args from cold start
launchArgs = require('cordova/platform').activationContext;
const launchArgs = require('cordova/platform').activationContext;
if (launchArgs) {
if (launchArgs.type === "activated" && launchArgs.args != "")
OneSignal_launchString = launchArgs.args;
if (launchArgs.type === 'activated' && launchArgs.args !== '')
OneSignal_launchString = launchArgs.args;
}

// Process launch args from warn start
function onActivatedHandler(args) {
if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch)
OneSignal_JSBridge.init(OneSignal_app_id, args.detail.arguments);
if (
args.detail.kind ===
Windows.ApplicationModel.Activation.ActivationKind.launch
)
OneSignal_JSBridge.init(OneSignal_app_id, args.detail.arguments);
}
WinJS.Application.addEventListener("activated", onActivatedHandler, false);
WinJS.Application.addEventListener('activated', onActivatedHandler, false);

const cordova = require('cordova'); // eslint-disable-line no-unused-vars
const OneSignal = require('./OneSignal'); // eslint-disable-line no-unused-vars

var cordova = require('cordova'),
OneSignal = require('./OneSignal');

module.exports = {
init: function(successCallback, errorCallback, params) {
init: function (successCallback, errorCallback, params) {
OneSignal_app_id = params[0];

OneSignal_JSBridge.addEventListener("notificationopened", function (e) {
var additionalData = e.additionalData;

if (additionalData != null)
additionalData = JSON.parse(e.additionalData);
OneSignal_JSBridge.addEventListener('notificationopened', function (e) {
let additionalData = e.additionalData;

var newData = { message: e.message, additionalData: additionalData, isActive: e.isActive };
OneSignal_opened_callback(newData, { keepCallback: true });
if (additionalData !== null)
additionalData = JSON.parse(e.additionalData);

const newData = {
message: e.message,
additionalData: additionalData,
isActive: e.isActive,
};
OneSignal_opened_callback(newData, { keepCallback: true });
});

OneSignal_JSBridge.init(OneSignal_app_id, OneSignal_launchString);
},

sendTags: function (successCallback, errorCallback, params) {
OneSignal_JSBridge.sendtags(JSON.stringify(params[0]));
OneSignal_JSBridge.sendtags(JSON.stringify(params[0]));
},

getTags: function (successCallback, errorCallback, params) {
OneSignal_JSBridge.addEventListener("gettagsevent", function (e) {
successCallback(JSON.parse(e.tags));
});
OneSignal_JSBridge.gettags();
OneSignal_JSBridge.addEventListener('gettagsevent', function (e) {
successCallback(JSON.parse(e.tags));
});
OneSignal_JSBridge.gettags();
},

getIds: function (successCallback, errorCallback, params) {
OneSignal_JSBridge.addEventListener("idsavailableevent", function (e) {
successCallback({ userId: e.userId, pushToken: e.pushToken });
});
OneSignal_JSBridge.addEventListener('idsavailableevent', function (e) {
successCallback({ userId: e.userId, pushToken: e.pushToken });
});

OneSignal_JSBridge.getids();
OneSignal_JSBridge.getids();
},

deleteTags: function (successCallback, errorCallback, params) {
OneSignal_JSBridge.deletetags(JSON.stringify(params));
OneSignal_JSBridge.deletetags(JSON.stringify(params));
},

setNotificationOpenedHandler:function (successCallback, errorCallback, params) {
OneSignal_opened_callback = successCallback;
setNotificationOpenedHandler: function (
successCallback,
errorCallback,
params,
) {
OneSignal_opened_callback = successCallback;
},

// Native SDK does not support these functions.
setNotificationReceivedHandler: function (successCallback, errorCallback, params) { },
registerForPushNotifications: function (successCallback, errorCallback, params) { },
enableVibrate: function (successCallback, errorCallback, params) { },
enableSound: function (successCallback, errorCallback, params) { },
enableNotificationsWhenActive: function (successCallback, errorCallback, params) { },
enableInAppAlertNotification: function (successCallback, errorCallback, params) { },
setSubscription: function (successCallback, errorCallback, params) { },
postNotification: function (successCallback, errorCallback, params) { },
promptLocation: function (successCallback, errorCallback, params) { },
syncHashedEmail: function (successCallback, errorCallback, params) { },
setLogLevel: function (successCallback, errorCallback, params) { },
promptForPushNotificationsWithUserResponse: function (successCallback, errorCallback, params) { },
addPermissionObserver: function (successCallback, errorCallback, params) { },
addSubscriptionObserver: function (successCallback, errorCallback, params) { },
setInFocusDisplaying: function (successCallback, errorCallback, params) { },
getPermissionSubscriptionState: function (successCallback, errorCallback, params) { }
setNotificationReceivedHandler: function (
successCallback,
errorCallback,
params,
) {},
registerForPushNotifications: function (
successCallback,
errorCallback,
params,
) {},
enableVibrate: function (successCallback, errorCallback, params) {},
enableSound: function (successCallback, errorCallback, params) {},
enableNotificationsWhenActive: function (
successCallback,
errorCallback,
params,
) {},
enableInAppAlertNotification: function (
successCallback,
errorCallback,
params,
) {},
setSubscription: function (successCallback, errorCallback, params) {},
postNotification: function (successCallback, errorCallback, params) {},
promptLocation: function (successCallback, errorCallback, params) {},
syncHashedEmail: function (successCallback, errorCallback, params) {},
setLogLevel: function (successCallback, errorCallback, params) {},
promptForPushNotificationsWithUserResponse: function (
successCallback,
errorCallback,
params,
) {},
addPermissionObserver: function (successCallback, errorCallback, params) {},
addSubscriptionObserver: function (successCallback, errorCallback, params) {},
setInFocusDisplaying: function (successCallback, errorCallback, params) {},
getPermissionSubscriptionState: function (
successCallback,
errorCallback,
params,
) {},
};

require("cordova/exec/proxy").add("OneSignalPush", module.exports);
require('cordova/exec/proxy').add('OneSignalPush', module.exports);
50 changes: 31 additions & 19 deletions www/NotificationReceivedEvent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,39 @@ import OSNotification from './OSNotification';
declare let cordova: any;

export default class NotificationReceivedEvent {
private notification: OSNotification;
private notification: OSNotification;

constructor(receivedEvent: OSNotification) {
this.notification = new OSNotification(receivedEvent);
}

complete(notification?: OSNotification): void {
if (!notification) {
// if the notificationReceivedEvent is null, we want to call the native-side
// complete/completion with null to silence the notification
cordova.exec(function(){}, function(){}, "OneSignalPush", "completeNotification", [this.notification.notificationId, false]);
return;
}
constructor(receivedEvent: OSNotification) {
this.notification = new OSNotification(receivedEvent);
}

// if the notificationReceivedEvent is not null, we want to pass the specific event
// future: Android side: make the notification modifiable
// iOS & Android: the notification id is associated with the native-side complete handler / completion block
cordova.exec(function(){}, function(){}, "OneSignalPush", "completeNotification", [this.notification.notificationId, true]);
complete(notification?: OSNotification): void {
if (!notification) {
// if the notificationReceivedEvent is null, we want to call the native-side
// complete/completion with null to silence the notification
cordova.exec(
function () {},
function () {},
'OneSignalPush',
'completeNotification',
[this.notification.notificationId, false],
);
return;
}

getNotification(): OSNotification {
return this.notification;
}
// if the notificationReceivedEvent is not null, we want to pass the specific event
// future: Android side: make the notification modifiable
// iOS & Android: the notification id is associated with the native-side complete handler / completion block
cordova.exec(
function () {},
function () {},
'OneSignalPush',
'completeNotification',
[this.notification.notificationId, true],
);
}

getNotification(): OSNotification {
return this.notification;
}
}
Loading