|
65 | 65 | import com.onesignal.OSSubscriptionStateChanges;
|
66 | 66 | import com.onesignal.OneSignal;
|
67 | 67 | import com.onesignal.OneSignal.ChangeTagsUpdateHandler;
|
| 68 | +import com.onesignal.OneSignal.OSSetLanguageCompletionHandler; |
| 69 | +import com.onesignal.OneSignal.OSLanguageError; |
68 | 70 | import com.onesignal.OneSignalPackagePrivateHelper;
|
69 | 71 | import com.onesignal.OneSignalShadowPackageManager;
|
70 | 72 | import com.onesignal.PermissionsActivity;
|
@@ -2775,6 +2777,68 @@ public void testSetLanguageOnSession() throws Exception {
|
2775 | 2777 | assertEquals("fr", lastRequest.payload.getString("language"));
|
2776 | 2778 | }
|
2777 | 2779 |
|
| 2780 | + private static class TestSetLanguageHandler implements OSSetLanguageCompletionHandler { |
| 2781 | + private AtomicBoolean succeeded = new AtomicBoolean(false); |
| 2782 | + private AtomicBoolean failed = new AtomicBoolean(false); |
| 2783 | + |
| 2784 | + @Override |
| 2785 | + public void onSuccess(String results) { succeeded.set(true); } |
| 2786 | + |
| 2787 | + @Override |
| 2788 | + public void onFailure(OSLanguageError error) { failed.set(true); } |
| 2789 | + |
| 2790 | + boolean getSucceeded() { return succeeded.get(); } |
| 2791 | + |
| 2792 | + boolean getFailed() { return failed.get(); } |
| 2793 | + } |
| 2794 | + |
| 2795 | + // Tests to make sure the onSuccess handler works |
| 2796 | + @Test |
| 2797 | + public void shouldSetLanguageWithResponse() throws Exception { |
| 2798 | + OneSignalInit(); |
| 2799 | + threadAndTaskWait(); |
| 2800 | + |
| 2801 | + TestSetLanguageHandler handler = new TestSetLanguageHandler(); |
| 2802 | + |
| 2803 | + OneSignal.setLanguage("fr", handler); |
| 2804 | + |
| 2805 | + threadAndTaskWait(); |
| 2806 | + |
| 2807 | + assertTrue(handler.getSucceeded()); |
| 2808 | + |
| 2809 | + // now test to make sure the handler still fires for a call to |
| 2810 | + // setLanguage() that doesn't modify existing language (no JSON delta) |
| 2811 | + |
| 2812 | + handler = new TestSetLanguageHandler(); |
| 2813 | + |
| 2814 | + OneSignal.setLanguage("es", handler); |
| 2815 | + |
| 2816 | + threadAndTaskWait(); |
| 2817 | + |
| 2818 | + assertTrue(handler.getSucceeded()); |
| 2819 | + } |
| 2820 | + |
| 2821 | + // Tests to make sure that the onFailure callback works |
| 2822 | + @Test |
| 2823 | + public void shouldFailToSetLanguageWithResponse() throws Exception { |
| 2824 | + TestSetLanguageHandler handler = new TestSetLanguageHandler(); |
| 2825 | + |
| 2826 | + OneSignalInit(); |
| 2827 | + threadAndTaskWait(); |
| 2828 | + |
| 2829 | + ShadowOneSignalRestClient.failMethod = "players"; |
| 2830 | + ShadowOneSignalRestClient.failHttpCode = 403; |
| 2831 | + ShadowOneSignalRestClient.setNextFailureJSONResponse(new JSONObject() {{ |
| 2832 | + put("tags", "error"); |
| 2833 | + }}); |
| 2834 | + |
| 2835 | + // Should fail because players call failed with tags |
| 2836 | + OneSignal.setLanguage("fr", handler); |
| 2837 | + threadAndTaskWait(); |
| 2838 | + |
| 2839 | + assertTrue(handler.getFailed()); |
| 2840 | + } |
| 2841 | + |
2778 | 2842 | /**
|
2779 | 2843 | * Similar workflow to testLocationPermissionPromptWithPrivacyConsent()
|
2780 | 2844 | * We want to provide consent but make sure that session time tracking works properly
|
|
0 commit comments