Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1392)

Unified Diff: chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java

Issue 2793573002: [Payments] Use <meta-data> tag instead of intent filter data to detect supported payment methods. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
index 4e3734b88f73f4716b54d879cfd40dcc4278d21d..7497da40f97f3f1ad8d6b9c146fe28fe99551699 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
@@ -10,7 +10,6 @@ import android.content.pm.PackageInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.Signature;
-import android.net.Uri;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -36,6 +35,9 @@ import java.util.Set;
@RunWith(RobolectricTestRunner.class)
@Config(sdk = 21, manifest = Config.NONE)
public class AndroidPaymentAppFinderTest {
+ private static final IntentArgumentMatcher sPayIntentArgumentMatcher =
+ new IntentArgumentMatcher(new Intent("org.chromium.intent.action.PAY"));
+
public AndroidPaymentAppFinderTest() {}
/**
@@ -79,11 +81,10 @@ public class AndroidPaymentAppFinderTest {
}
@Test
- public void testQueryBasicCardsWithoutApps() {
+ public void testQueryWithoutApps() {
PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
- ArgumentMatchers.argThat(new IntentArgumentMatcher(
- new Intent(AndroidPaymentAppFinder.ACTION_PAY_BASIC_CARD)))))
+ ArgumentMatchers.argThat(sPayIntentArgumentMatcher)))
.thenReturn(new ArrayList<ResolveInfo>());
Set<String> methodNames = new HashSet<>();
methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD);
@@ -93,35 +94,40 @@ public class AndroidPaymentAppFinderTest {
Mockito.mock(PaymentManifestDownloader.class),
Mockito.mock(PaymentManifestParser.class), packageManagerDelegate, callback);
+ Mockito.verify(packageManagerDelegate, Mockito.never())
+ .getStringArrayMetaData(ArgumentMatchers.anyString(), ArgumentMatchers.anyString());
+ Mockito.verify(packageManagerDelegate, Mockito.never())
+ .getStringMetaData(ArgumentMatchers.anyString(), ArgumentMatchers.anyString());
Mockito.verify(callback, Mockito.never())
.onPaymentAppCreated(Mockito.any(PaymentApp.class));
Mockito.verify(callback).onAllPaymentAppsCreated();
}
@Test
- public void testQueryBasicCardsWithTwoApps() {
+ public void testQueryWithoutMetaData() {
List<ResolveInfo> activities = new ArrayList<>();
ResolveInfo alicePay = new ResolveInfo();
alicePay.activityInfo = new ActivityInfo();
alicePay.activityInfo.packageName = "com.alicepay.app";
alicePay.activityInfo.name = "com.alicepay.app.WebPaymentActivity";
activities.add(alicePay);
- ResolveInfo bobPay = new ResolveInfo();
- bobPay.activityInfo = new ActivityInfo();
- bobPay.activityInfo.packageName = "com.bobpay.app";
- bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity";
- activities.add(bobPay);
+
PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
- Mockito.when(packageManagerDelegate.getAppLabel(Mockito.any(ResolveInfo.class)))
- .thenReturn("A non-empty label");
Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
- ArgumentMatchers.argThat(new IntentArgumentMatcher(
- new Intent(AndroidPaymentAppFinder.ACTION_PAY_BASIC_CARD)))))
+ ArgumentMatchers.argThat(sPayIntentArgumentMatcher)))
.thenReturn(activities);
- Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent(
- ArgumentMatchers.argThat(new IntentArgumentMatcher(
- new Intent(AndroidPaymentAppFinder.ACTION_IS_READY_TO_PAY)))))
- .thenReturn(new ArrayList<ResolveInfo>());
+ Mockito.when(packageManagerDelegate.getStringArrayMetaData(
+ ArgumentMatchers.matches("com.alicepay.app"),
+ ArgumentMatchers.matches(
+ AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES)))
+ .thenReturn(null);
+ Mockito.when(packageManagerDelegate.getStringMetaData(
+ ArgumentMatchers.matches("com.alicepay.app"),
+ ArgumentMatchers.matches(
+ AndroidPaymentAppFinder
+ .META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME)))
+ .thenReturn(null);
+
Set<String> methodNames = new HashSet<>();
methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD);
PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallback.class);
@@ -130,22 +136,38 @@ public class AndroidPaymentAppFinderTest {
Mockito.mock(PaymentManifestDownloader.class),
Mockito.mock(PaymentManifestParser.class), packageManagerDelegate, callback);
- Mockito.verify(callback).onPaymentAppCreated(
- ArgumentMatchers.argThat(Matches.paymentAppIdentifier("com.alicepay.app")));
- Mockito.verify(callback).onPaymentAppCreated(
- ArgumentMatchers.argThat(Matches.paymentAppIdentifier("com.bobpay.app")));
+ Mockito.verify(callback, Mockito.never())
+ .onPaymentAppCreated(Mockito.any(PaymentApp.class));
Mockito.verify(callback).onAllPaymentAppsCreated();
}
@Test
- public void testQueryBobPayWithoutApps() {
- Intent bobPayIntent = new Intent("org.chromium.intent.action.PAY");
- bobPayIntent.setData(Uri.parse("https://bobpay.com"));
+ public void testQueryWithUnsupportedPaymentMethod() {
+ List<ResolveInfo> activities = new ArrayList<>();
+ ResolveInfo alicePay = new ResolveInfo();
+ alicePay.activityInfo = new ActivityInfo();
+ alicePay.activityInfo.packageName = "com.alicepay.app";
+ alicePay.activityInfo.name = "com.alicepay.app.WebPaymentActivity";
+ activities.add(alicePay);
+
PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
- Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(bobPayIntent))
- .thenReturn(new ArrayList<ResolveInfo>());
+ Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
+ ArgumentMatchers.argThat(sPayIntentArgumentMatcher)))
+ .thenReturn(activities);
+ Mockito.when(packageManagerDelegate.getStringArrayMetaData(
+ ArgumentMatchers.matches("com.alicepay.app"),
+ ArgumentMatchers.matches(
+ AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES)))
+ .thenReturn(null);
+ Mockito.when(packageManagerDelegate.getStringMetaData(
+ ArgumentMatchers.matches("com.alicepay.app"),
+ ArgumentMatchers.matches(
+ AndroidPaymentAppFinder
+ .META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME)))
+ .thenReturn("https://bobpay.com");
+
Set<String> methodNames = new HashSet<>();
- methodNames.add("https://bobpay.com");
+ methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD);
PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallback.class);
AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodNames, false,
@@ -158,6 +180,70 @@ public class AndroidPaymentAppFinderTest {
}
@Test
+ public void testQueryBasicCardsWithTwoApps() {
+ List<ResolveInfo> activities = new ArrayList<>();
+ ResolveInfo alicePay = new ResolveInfo();
+ alicePay.activityInfo = new ActivityInfo();
+ alicePay.activityInfo.packageName = "com.alicepay.app";
+ alicePay.activityInfo.name = "com.alicepay.app.WebPaymentActivity";
+ activities.add(alicePay);
+ ResolveInfo bobPay = new ResolveInfo();
+ bobPay.activityInfo = new ActivityInfo();
+ bobPay.activityInfo.packageName = "com.bobpay.app";
+ bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity";
+ activities.add(bobPay);
+
+ PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
+ Mockito.when(packageManagerDelegate.getAppLabel(Mockito.any(ResolveInfo.class)))
+ .thenReturn("A non-empty label");
+ Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
+ ArgumentMatchers.argThat(sPayIntentArgumentMatcher)))
+ .thenReturn(activities);
+ Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent(
+ ArgumentMatchers.argThat(new IntentArgumentMatcher(
+ new Intent(AndroidPaymentAppFinder.ACTION_IS_READY_TO_PAY)))))
+ .thenReturn(new ArrayList<ResolveInfo>());
+ Mockito.when(packageManagerDelegate.getStringArrayMetaData(
+ ArgumentMatchers.matches("com.alicepay.app"),
+ ArgumentMatchers.matches(
+ AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES)))
+ .thenReturn(new String[] {
+ "https://alicepay.com", AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD});
+ Mockito.when(packageManagerDelegate.getStringMetaData(
+ ArgumentMatchers.matches("com.alicepay.app"),
+ ArgumentMatchers.matches(
+ AndroidPaymentAppFinder
+ .META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME)))
+ .thenReturn("https://alicepay.com");
+ Mockito.when(packageManagerDelegate.getStringArrayMetaData(
+ ArgumentMatchers.matches("com.bobpay.app"),
+ ArgumentMatchers.matches(
+ AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES)))
+ .thenReturn(new String[] {
+ "https://bobpay.com", AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD});
+ Mockito.when(packageManagerDelegate.getStringMetaData(
+ ArgumentMatchers.matches("com.bobpay.app"),
+ ArgumentMatchers.matches(
+ AndroidPaymentAppFinder
+ .META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME)))
+ .thenReturn("https://bobpay.com");
+
+ Set<String> methodNames = new HashSet<>();
+ methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD);
+ PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallback.class);
+
+ AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodNames, false,
+ Mockito.mock(PaymentManifestDownloader.class),
+ Mockito.mock(PaymentManifestParser.class), packageManagerDelegate, callback);
+
+ Mockito.verify(callback).onPaymentAppCreated(
+ ArgumentMatchers.argThat(Matches.paymentAppIdentifier("com.alicepay.app")));
+ Mockito.verify(callback).onPaymentAppCreated(
+ ArgumentMatchers.argThat(Matches.paymentAppIdentifier("com.bobpay.app")));
+ Mockito.verify(callback).onAllPaymentAppsCreated();
+ }
+
+ @Test
public void testQueryBobPayWithOneAppThatHasIsReadyToPayService() {
List<ResolveInfo> activities = new ArrayList<>();
ResolveInfo bobPay = new ResolveInfo();
@@ -165,14 +251,25 @@ public class AndroidPaymentAppFinderTest {
bobPay.activityInfo.packageName = "com.bobpay.app";
bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity";
activities.add(bobPay);
- Intent bobPayIntent = new Intent("org.chromium.intent.action.PAY");
- bobPayIntent.setData(Uri.parse("https://bobpay.com"));
+
PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
Mockito.when(packageManagerDelegate.getAppLabel(Mockito.any(ResolveInfo.class)))
.thenReturn("A non-empty label");
Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
- ArgumentMatchers.argThat(new IntentArgumentMatcher(bobPayIntent))))
+ ArgumentMatchers.argThat(sPayIntentArgumentMatcher)))
.thenReturn(activities);
+ Mockito.when(packageManagerDelegate.getStringArrayMetaData(
+ ArgumentMatchers.matches("com.bobpay.app"),
+ ArgumentMatchers.matches(
+ AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES)))
+ .thenReturn(new String[] {
+ "https://bobpay.com", AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD});
+ Mockito.when(packageManagerDelegate.getStringMetaData(
+ ArgumentMatchers.matches("com.bobpay.app"),
+ ArgumentMatchers.matches(
+ AndroidPaymentAppFinder
+ .META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME)))
+ .thenReturn("https://bobpay.com");
List<ResolveInfo> services = new ArrayList<>();
ResolveInfo isBobPayReadyToPay = new ResolveInfo();
@@ -182,7 +279,7 @@ public class AndroidPaymentAppFinderTest {
services.add(isBobPayReadyToPay);
Intent isReadyToPayIntent = new Intent(AndroidPaymentAppFinder.ACTION_IS_READY_TO_PAY);
Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent(
- ArgumentMatchers.argThat(new IntentArgumentMatcher(isReadyToPayIntent))))
+ ArgumentMatchers.argThat(new IntentArgumentMatcher(isReadyToPayIntent))))
.thenReturn(services);
PackageInfo bobPayPackageInfo = new PackageInfo();

Powered by Google App Engine
This is Rietveld 408576698