Skip to content

Commit a4e0053

Browse files
committed
Added initial unit tests for Android.
1 parent 82ee541 commit a4e0053

File tree

9 files changed

+303
-19
lines changed

9 files changed

+303
-19
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
android/.gradle
2+
android/.idea
3+
android/android.iml
4+
android/local.properties

.npmignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
azure-pipelines.yml
21
.gitattributes
2+
.gitignore
3+
azure-pipelines.yml
34
sample

android/src/main/java/com/azure/reactnative/notificationhub/NotificationHubUtil.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
import java.util.HashSet;
88
import java.util.Set;
99

10+
import com.facebook.react.bridge.ReactContext;
11+
import com.microsoft.windowsazure.messaging.NotificationHub;
12+
1013
public class NotificationHubUtil {
1114
private static NotificationHubUtil sharedNotificationHubUtilInstance = null;
1215

@@ -24,7 +27,7 @@ public class NotificationHubUtil {
2427
"AzureNotificationHub_Tags";
2528

2629
public static NotificationHubUtil getInstance() {
27-
if(sharedNotificationHubUtilInstance == null) {
30+
if (sharedNotificationHubUtilInstance == null) {
2831
sharedNotificationHubUtilInstance = new NotificationHubUtil();
2932
}
3033
return sharedNotificationHubUtilInstance;
@@ -72,6 +75,11 @@ public void setTags(Context context, String[] tags) {
7275
setPrefSet(context, KEY_FOR_PREFS_TAGS, set);
7376
}
7477

78+
public NotificationHub createNotificationHub(String hubName, String connectionString, ReactContext reactContext) {
79+
NotificationHub hub = new NotificationHub(hubName, connectionString, reactContext);
80+
return hub;
81+
}
82+
7583
private String getPref(Context context, String key) {
7684
SharedPreferences prefs =
7785
context.getSharedPreferences(SHARED_PREFS_NAME, Context.MODE_PRIVATE);

android/src/main/java/com/azure/reactnative/notificationhub/ReactNativeNotificationHubModule.java

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import android.content.Intent;
77
import android.content.IntentFilter;
88
import android.os.Bundle;
9+
910
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
1011

1112
import com.facebook.react.bridge.LifecycleEventListener;
@@ -26,20 +27,27 @@
2627
import com.microsoft.windowsazure.notifications.NotificationsManager;
2728

2829
public class ReactNativeNotificationHubModule extends ReactContextBaseJavaModule implements LifecycleEventListener {
30+
public static final String AZURE_NOTIFICATION_HUB_NAME = "AzureNotificationHub";
2931
public static final String NOTIF_REGISTER_AZURE_HUB_EVENT = "azureNotificationHubRegistered";
3032
public static final String NOTIF_AZURE_HUB_REGISTRATION_ERROR_EVENT = "azureNotificationHubRegistrationError";
3133
public static final String DEVICE_NOTIF_EVENT = "remoteNotificationReceived";
3234

35+
public static final String ERROR_INVALID_ARGUMENTS = "E_INVALID_ARGUMENTS";
36+
public static final String ERROR_INVALID_CONNECTION_STRING = "Connection string cannot be null.";
37+
public static final String ERROR_INVALID_HUBNAME = "Hub name cannot be null.";
38+
public static final String ERROR_INVALID_SENDER_ID = "Sender ID cannot be null.";
39+
public static final String ERROR_PLAY_SERVICES = "E_PLAY_SERVICES";
40+
public static final String ERROR_PLAY_SERVICES_DISABLED = "User must enable Google Play Services.";
41+
public static final String ERROR_PLAY_SERVICES_UNSUPPORTED = "This device is not supported by Google Play Services.";
42+
public static final String ERROR_NOTIFICATION_HUB = "E_NOTIFICATION_HUB";
43+
public static final String ERROR_NOT_REGISTERED = "E_NOT_REGISTERED";
44+
public static final String ERROR_NOT_REGISTERED_DESC = "No registration to Azure Notification Hub.";
45+
3346
private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
3447
private static final int NOTIFICATION_DELAY_ON_START = 3000;
3548

36-
private static final String ERROR_INVALID_ARGUMENTS = "E_INVALID_ARGUMENTS";
37-
private static final String ERROR_PLAY_SERVICES = "E_PLAY_SERVICES";
38-
private static final String ERROR_NOTIFICATION_HUB = "E_NOTIFICATION_HUB";
39-
private static final String ERROR_NOT_REGISTERED = "E_NOT_REGISTERED";
40-
41-
private ReactApplicationContext mReactContext;
42-
private LocalBroadcastReceiver mLocalBroadcastReceiver;
49+
private ReactApplicationContext mReactContext;
50+
private LocalBroadcastReceiver mLocalBroadcastReceiver;
4351

4452
public ReactNativeNotificationHubModule(ReactApplicationContext reactContext) {
4553
super(reactContext);
@@ -53,25 +61,28 @@ public ReactNativeNotificationHubModule(ReactApplicationContext reactContext) {
5361

5462
@Override
5563
public String getName() {
56-
return "AzureNotificationHub";
64+
return AZURE_NOTIFICATION_HUB_NAME;
5765
}
5866

5967
@ReactMethod
6068
public void register(ReadableMap config, Promise promise) {
6169
NotificationHubUtil notificationHubUtil = NotificationHubUtil.getInstance();
6270
String connectionString = config.getString("connectionString");
6371
if (connectionString == null) {
64-
promise.reject(ERROR_INVALID_ARGUMENTS, "Connection string cannot be null.");
72+
promise.reject(ERROR_INVALID_ARGUMENTS, ERROR_INVALID_CONNECTION_STRING);
73+
return;
6574
}
6675

6776
String hubName = config.getString("hubName");
6877
if (hubName == null) {
69-
promise.reject(ERROR_INVALID_ARGUMENTS, "Hub name cannot be null.");
78+
promise.reject(ERROR_INVALID_ARGUMENTS, ERROR_INVALID_HUBNAME);
79+
return;
7080
}
7181

7282
String senderID = config.getString("senderID");
7383
if (senderID == null) {
74-
promise.reject(ERROR_INVALID_ARGUMENTS, "Sender ID cannot be null.");
84+
promise.reject(ERROR_INVALID_ARGUMENTS, ERROR_INVALID_SENDER_ID);
85+
return;
7586
}
7687

7788
String[] tags = null;
@@ -97,9 +108,9 @@ public void register(ReadableMap config, Promise promise) {
97108
getCurrentActivity(),
98109
apiAvailability,
99110
resultCode));
100-
promise.reject(ERROR_PLAY_SERVICES, "User must enable Google Play Services.");
111+
promise.reject(ERROR_PLAY_SERVICES, ERROR_PLAY_SERVICES_DISABLED);
101112
} else {
102-
promise.reject(ERROR_PLAY_SERVICES, "This device is not supported by Google Play Services.");
113+
promise.reject(ERROR_PLAY_SERVICES, ERROR_PLAY_SERVICES_UNSUPPORTED);
103114
}
104115
return;
105116
}
@@ -118,10 +129,11 @@ public void unregister(Promise promise) {
118129
String registrationId = notificationHubUtil.getRegistrationID(reactContext);
119130

120131
if (connectionString == null || hubName == null || registrationId == null) {
121-
promise.reject(ERROR_NOT_REGISTERED, "No registration to Azure Notification Hub.");
132+
promise.reject(ERROR_NOT_REGISTERED, ERROR_NOT_REGISTERED_DESC);
133+
return;
122134
}
123135

124-
NotificationHub hub = new NotificationHub(hubName, connectionString, reactContext);
136+
NotificationHub hub = notificationHubUtil.createNotificationHub(hubName, connectionString, reactContext);
125137
try {
126138
hub.unregister();
127139
notificationHubUtil.setRegistrationID(reactContext, null);
@@ -144,10 +156,15 @@ public void onHostResume() {
144156
}
145157
}
146158
}
159+
147160
@Override
148-
public void onHostPause() {}
161+
public void onHostPause() {
162+
}
163+
149164
@Override
150-
public void onHostDestroy() {}
165+
public void onHostDestroy() {
166+
}
167+
151168
public class LocalBroadcastReceiver extends BroadcastReceiver {
152169
@Override
153170
public void onReceive(Context context, Intent intent) {

android/src/main/java/com/azure/reactnative/notificationhub/ReactNativeNotificationsHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
import android.net.Uri;
1818
import android.os.Build;
1919
import android.os.Bundle;
20+
2021
import androidx.core.app.NotificationCompat;
2122
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
23+
2224
import android.util.Log;
2325

2426
import org.json.JSONArray;

android/src/main/java/com/azure/reactnative/notificationhub/ReactNativeRegistrationIntentService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import android.app.IntentService;
44
import android.content.Intent;
5+
56
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
7+
68
import android.util.Log;
79

810
import com.google.android.gms.tasks.OnSuccessListener;

azure-pipelines.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ steps:
4444
gradleWrapperFile: '../sample/android/gradlew'
4545
tasks: 'assembleRelease'
4646
continueOnError: false
47+
48+
- task: Gradle@2
49+
displayName: 'Running Android unit tests'
50+
inputs:
51+
workingDirectory: '../sample/android'
52+
gradleWrapperFile: '../sample/android/gradlew'
53+
tasks: 'test'
54+
continueOnError: false
4755

4856
- script: |
4957
pod install

sample/android/app/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ dependencies {
184184
implementation project(":react-native-azurenotificationhub") // From node_modules
185185
implementation "com.google.firebase:firebase-messaging:17.6.0"
186186
implementation "com.google.firebase:firebase-core:16.0.8"
187+
implementation "com.microsoft.azure:notification-hubs-android-sdk:0.4@aar"
188+
testImplementation "org.powermock:powermock-api-mockito:1.6.2"
189+
testImplementation "org.powermock:powermock-module-junit4:1.6.2"
187190

188191
if (enableHermes) {
189192
def hermesPath = "../../node_modules/hermes-engine/android/";

0 commit comments

Comments
 (0)