chromium/components/autofill/core/browser/payments_suggestion_generator_unittest.cc

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/autofill/core/browser/payments_suggestion_generator.h"

#include <optional>
#include <string>
#include <vector>

#include "base/memory/raw_ptr.h"
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h"
#include "base/test/task_environment.h"
#include "base/time/time.h"
#include "base/uuid.h"
#include "components/autofill/core/browser/autofill_test_utils.h"
#include "components/autofill/core/browser/data_model/autofill_wallet_usage_data.h"
#include "components/autofill/core/browser/data_model/credit_card.h"
#include "components/autofill/core/browser/data_model/credit_card_benefit.h"
#include "components/autofill/core/browser/data_model/iban.h"
#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/metrics/payments/card_metadata_metrics.h"
#include "components/autofill/core/browser/metrics/suggestions_list_metrics.h"
#include "components/autofill/core/browser/mock_autofill_optimization_guide.h"
#include "components/autofill/core/browser/payments/constants.h"
#include "components/autofill/core/browser/payments_data_manager.h"
#include "components/autofill/core/browser/test_autofill_client.h"
#include "components/autofill/core/browser/test_payments_data_manager.h"
#include "components/autofill/core/browser/test_personal_data_manager.h"
#include "components/autofill/core/browser/ui/suggestion.h"
#include "components/autofill/core/browser/ui/suggestion_test_helpers.h"
#include "components/autofill/core/browser/ui/suggestion_type.h"
#include "components/autofill/core/common/autofill_clock.h"
#include "components/autofill/core/common/autofill_constants.h"
#include "components/autofill/core/common/autofill_payments_features.h"
#include "components/autofill/core/common/credit_card_network_identifiers.h"
#include "components/autofill/core/common/form_field_data.h"
#include "components/feature_engagement/public/feature_constants.h"
#include "components/grit/components_scaled_resources.h"
#include "components/strings/grit/components_strings.h"
#include "components/sync/test/test_sync_service.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/abseil-cpp/absl/types/variant.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/mock_resource_bundle_delegate.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/image/image.h"
#include "ui/gfx/image/image_unittest_util.h"
#include "ui/resources/grit/ui_resources.h"

#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS)
#include "ui/native_theme/native_theme.h"  // nogncheck
#endif  // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS)

AreImagesEqual;

namespace autofill {

namespace {

ElementsAre;
Field;
IsEmpty;
Matcher;
UnorderedElementsAre;
UnorderedElementsAreArray;

constexpr auto kDefaultTriggerSource =;

Matcher<Suggestion> EqualLabels(
    const std::vector<std::vector<Suggestion::Text>>& suggestion_objects) {}

Matcher<Suggestion> EqualLabels(
    const std::vector<std::vector<std::u16string>>& labels) {}

#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS)
Matcher<Suggestion> EqualsFieldByFieldFillingSuggestion(
    SuggestionType id,
    const std::u16string& main_text,
    FieldType field_by_field_filling_type_used,
    const Suggestion::Payload& payload,
    const std::vector<std::vector<Suggestion::Text>>& labels = {}
#endif  // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS)

Matcher<Suggestion> EqualsIbanSuggestion(
    const std::u16string& identifier_string,
    const Suggestion::Payload& payload,
    const std::u16string& nickname) {}

#if !BUILDFLAG(IS_IOS)
Matcher<Suggestion> EqualsUndoAutofillSuggestion() {}
#endif

Matcher<Suggestion> EqualsManagePaymentsMethodsSuggestion(bool with_gpay_logo) {}

// Checks that `arg` contains necessary credit card footer suggestions. `arg`
// has to be of type std::vector<Suggestion>.
MATCHER_P(ContainsCreditCardFooterSuggestions, with_gpay_logo, "") {}

}  // namespace

// TODO(crbug.com/40176273): Move GetSuggestionsForCreditCard tests and
// BrowserAutofillManagerTestForSharingNickname here from
// browser_autofill_manager_unittest.cc.
class PaymentsSuggestionGeneratorTest : public testing::Test {};

#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS)
// TODO(crbug.com/325646493): Clean up
// PaymentsSuggestionGeneratorTest.AutofillCreditCardBenefitsLabelTest setup and
// parameters.
// Params:
// 1. Function reference to call which creates the appropriate credit card
// benefit for the unittest.
// 2. Issuer ID which is set for the credit card with benefits.
class AutofillCreditCardBenefitsLabelTest
    : public PaymentsSuggestionGeneratorTest,
      public ::testing::WithParamInterface<
          std::tuple<base::FunctionRef<CreditCardBenefit()>, std::string>> {};

INSTANTIATE_TEST_SUITE_P();

// Checks that for FPAN suggestions that the benefit description is displayed.
TEST_P(AutofillCreditCardBenefitsLabelTest, BenefitSuggestionLabel_Fpan) {}

// Checks that feature_for_iph is set to display the credit card benefit IPH for
// FPAN suggestions with benefits labels.
TEST_P(AutofillCreditCardBenefitsLabelTest,
       BenefitSuggestionFeatureForIph_Fpan) {}

// Checks that feature_for_iph is set to display the virtual card IPH for
// virtual card suggestions with benefits labels.
TEST_P(AutofillCreditCardBenefitsLabelTest,
       BenefitSuggestionFeatureForIph_VirtualCard) {}

// Checks that for virtual cards suggestion the benefit description is shown
// with a virtual card label appended.
TEST_P(AutofillCreditCardBenefitsLabelTest,
       BenefitSuggestionLabel_VirtualCard) {}

// Checks that for credit card suggestions with eligible benefits, the
// instrument id of the credit card is marked in the MetadataLoggingContext.
TEST_P(AutofillCreditCardBenefitsLabelTest,
       BenefitSuggestionLabel_MetadataLoggingContext) {}

// Checks that for credit card suggestions with eligible benefits, the
// instrument id of the credit card is marked in the MetadataLoggingContext. The
// instrument ids should also be available when the benefit flags are disabled.
TEST_P(AutofillCreditCardBenefitsLabelTest,
       BenefitSuggestionLabel_MetadataLoggingContext_FlagsDisabled) {}

// Checks that the merchant benefit description is not displayed for suggestions
// where the webpage's URL is different from the benefit's applicable URL.
TEST_P(AutofillCreditCardBenefitsLabelTest,
       BenefitSuggestionLabelNotDisplayed_MerchantUrlIsDifferent) {}

// Checks that the category benefit description is not displayed for suggestions
// where the webpage's category in the optimization guide is different from the
// benefit's applicable category.
TEST_P(AutofillCreditCardBenefitsLabelTest,
       BenefitSuggestionLabelNotDisplayed_CategoryIsDifferent) {}

// Checks that the benefit description is not displayed when benefit suggestions
// are disabled for the given card and url.
TEST_P(AutofillCreditCardBenefitsLabelTest,
       BenefitSuggestionLabelNotDisplayed_BlockedUrl) {}

#endif  // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS)

// Tests the scenario when:
// - autofill is triggered from the context menu on a field which is classified
// as a credit card field;
// - there is no card which has values to fill the respective field (or the
// field is a CVC which cannot be filled this way).
// In this scenario, suggestions should look the same as the ones for an
// unclassified field.
TEST_F(PaymentsSuggestionGeneratorTest,
       NoCreditCardsHaveValuesForClassifiedField_PaymentsManualFallback) {}

TEST_F(PaymentsSuggestionGeneratorTest,
       RemoveExpiredCreditCardsNotUsedSinceTimestamp) {}

// Tests that credit card suggestions are not subject to prefix matching for the
// credit card number if `kAutofillDontPrefixMatchCreditCardNumbersOrCvcs` is
// enabled.
TEST_F(PaymentsSuggestionGeneratorTest,
       NoPrefixMatchingForCreditCardsIfFeatureIsTurnedOn) {}

// Tests that credit card suggestions are not subject to prefix matching for the
// CVC if `kAutofillDontPrefixMatchCreditCardNumbersOrCvcs` is enabled.
TEST_F(PaymentsSuggestionGeneratorTest,
       NoPrefixMatchingForCvcsIfFeatureIsTurnedOn) {}

// Tests that all the credit card suggestions are shown when a credit card field
// was autofilled and focused. Given that `kAutofillEnablePaymentsFieldSwapping`
// and `kAutofillDontPrefixMatchCreditCardNumbersOrCvcs` are enabled.
TEST_F(PaymentsSuggestionGeneratorTest, PaymentsFieldSwapping) {}

TEST_F(PaymentsSuggestionGeneratorTest,
       ManualFallback_UnusedExpiredCardsAreNotSuppressed) {}

TEST_F(PaymentsSuggestionGeneratorTest, GetServerCardForLocalCard) {}

// The suggestions of credit cards with card linked offers are moved to the
// front. This test checks that the order of the other cards remains stable.
TEST_F(PaymentsSuggestionGeneratorTest,
       GetSuggestionsForCreditCards_StableSortBasedOnOffer) {}

// Ensures we appropriately generate suggestions for virtual cards on a
// standalone CVC field.
TEST_F(PaymentsSuggestionGeneratorTest,
       GetSuggestionsForVirtualCardStandaloneCvc) {}

#if !BUILDFLAG(IS_IOS)
TEST_F(PaymentsSuggestionGeneratorTest,
       GetSuggestionsForVirtualCardStandaloneCvc_UndoAutofill) {}
#endif

// Ensures we appropriately generate suggestions for credit saved with CVC.
TEST_F(PaymentsSuggestionGeneratorTest, GetCardSuggestionsWithCvc) {}

// Verifies that the GPay logo is set correctly.
TEST_F(PaymentsSuggestionGeneratorTest, ShouldDisplayGpayLogo) {}

TEST_F(PaymentsSuggestionGeneratorTest, NoSuggestionsWhenNoUserData) {}

TEST_F(PaymentsSuggestionGeneratorTest, ShouldShowScanCreditCard) {}

TEST_F(PaymentsSuggestionGeneratorTest, ShouldShowCardsFromAccount) {}

#if !BUILDFLAG(IS_IOS)
TEST_F(PaymentsSuggestionGeneratorTest,
       FieldWasAutofilled_UndoAutofillOnCreditCardForm) {}
#endif

// Test that the virtual card option is shown when all of the prerequisites are
// met.
TEST_F(PaymentsSuggestionGeneratorTest, ShouldShowVirtualCardOption) {}

// Test that the virtual card option is shown when the autofill optimization
// guide is not present.
TEST_F(PaymentsSuggestionGeneratorTest,
       ShouldShowVirtualCardOption_AutofillOptimizationGuideNotPresent) {}

// Test that the virtual card option is shown even if the merchant is opted-out
// of virtual cards.
TEST_F(PaymentsSuggestionGeneratorTest,
       ShouldShowVirtualCardOption_InDisabledStateForOptedOutMerchants) {}

// Test that the virtual card option is not shown if the merchant is opted-out
// of virtual cards.
TEST_F(PaymentsSuggestionGeneratorTest,
       ShouldNotShowVirtualCardOption_MerchantOptedOutOfVirtualCards) {}

// Test that the virtual card option is not shown if the server card we might be
// showing a virtual card option for is not enrolled into virtual card.
TEST_F(PaymentsSuggestionGeneratorTest,
       ShouldNotShowVirtualCardOption_ServerCardNotEnrolledInVirtualCard) {}

// Test that the virtual card option is not shown for a local card with no
// server card duplicate.
TEST_F(PaymentsSuggestionGeneratorTest,
       ShouldNotShowVirtualCardOption_LocalCardWithoutServerCardDuplicate) {}

TEST_F(PaymentsSuggestionGeneratorTest, GetLocalIbanSuggestions) {}

TEST_F(PaymentsSuggestionGeneratorTest, GetServerIbanSuggestions) {}

TEST_F(PaymentsSuggestionGeneratorTest, GetLocalAndServerIbanSuggestions) {}

TEST_F(PaymentsSuggestionGeneratorTest,
       GetPromoCodeSuggestionsFromPromoCodeOffers_ValidPromoCodes) {}

TEST_F(PaymentsSuggestionGeneratorTest,
       GetPromoCodeSuggestionsFromPromoCodeOffers_InvalidPromoCodeURL) {}

// This class helps test the credit card contents that are displayed in
// Autofill suggestions. It covers suggestions on Desktop/Android dropdown,
// and on Android keyboard accessory.
class AutofillCreditCardSuggestionContentTest
    : public PaymentsSuggestionGeneratorTest {};

// Verify that the suggestion's texts are populated correctly for a virtual card
// suggestion when the cardholder name field is focused.
TEST_F(AutofillCreditCardSuggestionContentTest,
       CreateCreditCardSuggestion_VirtualCardMetadata_NameField) {}

// Verify that the suggestion's texts are populated correctly for a virtual card
// suggestion when the card number field is focused.
TEST_F(AutofillCreditCardSuggestionContentTest,
       CreateCreditCardSuggestion_VirtualCardMetadata_NumberField) {}

// Verify that the suggestion's texts are populated correctly for a masked
// server card suggestion when the cardholder name field is focused.
TEST_F(AutofillCreditCardSuggestionContentTest,
       CreateCreditCardSuggestion_MaskedServerCardMetadata_NameField) {}

// Verify that the suggestion's texts are populated correctly for a masked
// server card suggestion when the card number field is focused.
TEST_F(AutofillCreditCardSuggestionContentTest,
       CreateCreditCardSuggestion_MaskedServerCardMetadata_NumberField) {}

#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS)
// Verify that the suggestion's texts are populated correctly for a masked
// server card suggestion when payments manual fallback is triggered.
TEST_F(AutofillCreditCardSuggestionContentTest,
       CreateCreditCardSuggestion_ManualFallback) {}

// Verify that the virtual credit card suggestion has the correct
// `Suggestion::type, AX label and is selectable.
TEST_F(AutofillCreditCardSuggestionContentTest,
       CreateCreditCardSuggestion_ManualFallback_VirtualCreditCard) {}

// Verify that the virtual credit card suggestion has the correct labels.
TEST_F(AutofillCreditCardSuggestionContentTest,
       CreateCreditCardSuggestion_ManualFallback_VirtualCreditCard_Labels) {}

// Verify that the virtual credit card suggestion has no nested suggestions.
TEST_F(
    AutofillCreditCardSuggestionContentTest,
    CreateCreditCardSuggestion_ManualFallback_VirtualCreditCard_NestedSuggestions) {}

// Verify that the nested suggestion's texts are populated correctly for a
// masked server card suggestion when payments manual fallback is triggered.
TEST_F(AutofillCreditCardSuggestionContentTest,
       CreateCreditCardSuggestion_ManualFallback_NestedSuggestions) {}

// Verify that the nested suggestion's texts are populated correctly for a
// credit card with no expiry date set.
TEST_F(
    AutofillCreditCardSuggestionContentTest,
    CreateCreditCardSuggestion_ManualFallback_NoExpiryDate_NestedSuggestions) {}

// Verify that the nested suggestion's texts are populated correctly for a
// credit card with no cardholder name and credit card number.
TEST_F(
    AutofillCreditCardSuggestionContentTest,
    CreateCreditCardSuggestion_ManualFallback_NoNameAndNumber_NestedSuggestions) {}

// Verify nested suggestions of the expiry date suggestion.
TEST_F(AutofillCreditCardSuggestionContentTest,
       CreateCreditCardSuggestion_ManualFallback_NestedExpiryDateSuggestions) {}

// Verify that manual fallback credit card suggestions are not filtered.
TEST_F(AutofillCreditCardSuggestionContentTest,
       GetSuggestionsForCreditCards_ManualFallbackSuggestionsNotFiltered) {}
#endif  // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS)

// Verify that the suggestion's texts are populated correctly for a local and
// server card suggestion when the CVC field is focused.
TEST_F(AutofillCreditCardSuggestionContentTest,
       GetSuggestionsForCreditCards_CvcField) {}

// Verify that the suggestion's texts are populated correctly for a duplicate
// local and server card suggestion when the CVC field is focused.
TEST_F(AutofillCreditCardSuggestionContentTest,
       GetSuggestionsForCreditCards_Duplicate_CvcField) {}

// Verify that the FPAN and VCN suggestion's texts are populated correctly for a
// enrolled card when the CVC field is focused.
TEST_F(AutofillCreditCardSuggestionContentTest,
       GetSuggestionsForCreditCards_VirtualCard_CvcField) {}

// Verify that the FPAN and VCN suggestion's texts are populated correctly for a
// enrolled card when the CVC field is focused.
TEST_F(AutofillCreditCardSuggestionContentTest,
       GetSuggestionsForCreditCards_VirtualCard_Duplicate_CvcField) {}

#if BUILDFLAG(IS_IOS)
TEST_F(AutofillCreditCardSuggestionContentTest,
       GetSuggestionsForCreditCards_LargeKeyboardAccessoryFormat) {
  // Enable formatting for large keyboard accessories.
  autofill_client()->set_format_for_large_keyboard_accessory(true);

  CreditCard server_card = CreateServerCard();

  const std::u16string obfuscated_number =
      CreditCard::GetObfuscatedStringForCardDigits(/*obfuscation_length=*/2, u"1111");
  const std::u16string name_full =
      server_card.GetRawInfo(CREDIT_CARD_NAME_FULL);
  const std::u16string exp_date =
      server_card.GetRawInfo(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR);
  const std::u16string card_type = server_card.GetRawInfo(CREDIT_CARD_TYPE);
  const std::u16string type_and_number =
      base::StrCat({card_type, u"  ", obfuscated_number});

  Suggestion card_number_field_suggestion = CreateCreditCardSuggestionForTest(
      server_card, *autofill_client(), CREDIT_CARD_NUMBER,
      /*virtual_card_option=*/false,
      /*card_linked_offer_available=*/false);

  // From the credit card number field, the suggestion should show the card type
  // and number and the label should show the expiration date.
  EXPECT_EQ(card_number_field_suggestion.main_text.value, type_and_number);
  EXPECT_THAT(card_number_field_suggestion, EqualLabels({{exp_date}}));

  card_number_field_suggestion = CreateCreditCardSuggestionForTest(
      server_card, *autofill_client(), CREDIT_CARD_NAME_FULL,
      /*virtual_card_option=*/false,
      /*card_linked_offer_available=*/false);

  // From the credit card name field, the suggestion should show the full name
  // and the label should show the card type and number.
  EXPECT_EQ(card_number_field_suggestion.main_text.value,
            base::StrCat({name_full}));
  EXPECT_THAT(card_number_field_suggestion, EqualLabels({{type_and_number}}));

  card_number_field_suggestion = CreateCreditCardSuggestionForTest(
      server_card, *autofill_client(), CREDIT_CARD_EXP_MONTH,
      /*virtual_card_option=*/false,
      /*card_linked_offer_available=*/false);

  // From a credit card expiry field, the suggestion should show the expiration
  // date and the label should show the card type and number.
  EXPECT_EQ(card_number_field_suggestion.main_text.value,
            base::StrCat({exp_date}));
  EXPECT_THAT(card_number_field_suggestion, EqualLabels({{type_and_number}}));

  server_card.set_record_type(CreditCard::RecordType::kVirtualCard);
  card_number_field_suggestion = CreateCreditCardSuggestionForTest(
      server_card, *autofill_client(), CREDIT_CARD_NUMBER,
      /*virtual_card_option=*/true,
      /*card_linked_offer_available=*/false);

  // From a virtual credit card, the suggestion should show the card name and
  // the label should show the card's virtual status, type and number.
  EXPECT_EQ(card_number_field_suggestion.main_text.value,
            base::StrCat({server_card.CardNameForAutofillDisplay(
                server_card.nickname())}));
  EXPECT_THAT(
      card_number_field_suggestion,
      EqualLabels({{l10n_util::GetStringUTF16(
                        IDS_AUTOFILL_VIRTUAL_CARD_SUGGESTION_OPTION_VALUE) +
                    u" • " + card_type + u" " + obfuscated_number}}));
}

#endif  // BUILDFLAG(IS_IOS)

// The boolean param denotes if merchant has opted out of VCN.
class AutofillCreditCardSuggestionContentVcnMerchantOptOutTest
    : public AutofillCreditCardSuggestionContentTest,
      public testing::WithParamInterface<bool> {};

INSTANTIATE_TEST_SUITE_P();

// Verify that the suggestion's texts are populated correctly for a virtual
// card suggestion when the cardholder name field is focused based on if
// merchant accepts virtual cards.
TEST_P(
    AutofillCreditCardSuggestionContentVcnMerchantOptOutTest,
    CreateCreditCardSuggestion_VirtualCardMetadata_MerchantOptOut_NameField) {}

// Verify that the suggestion's texts are populated correctly for a virtual
// card suggestion when the card number field is focused based on if
// merchant accepts virtual cards.
TEST_P(
    AutofillCreditCardSuggestionContentVcnMerchantOptOutTest,
    CreateCreditCardSuggestion_VirtualCardMetadata_MerchantOptOut_NumberField) {}

class PaymentsSuggestionGeneratorTestForMetadata
    : public PaymentsSuggestionGeneratorTest,
      public testing::WithParamInterface<std::tuple<bool, bool, bool>> {};

INSTANTIATE_TEST_SUITE_P();

TEST_P(PaymentsSuggestionGeneratorTestForMetadata,
       CreateCreditCardSuggestion_ServerCard) {}

TEST_P(PaymentsSuggestionGeneratorTestForMetadata,
       CreateCreditCardSuggestion_LocalCard_NoServerDuplicate) {}

TEST_P(PaymentsSuggestionGeneratorTestForMetadata,
       CreateCreditCardSuggestion_LocalCard_ServerDuplicate) {}

// Verifies that the `metadata_logging_context` is correctly set.
TEST_P(PaymentsSuggestionGeneratorTestForMetadata,
       GetSuggestionsForCreditCards_MetadataLoggingContext) {}

// TODO(crbug.com/332595462): Improve card art url unittest coverage to include
// potential edge cases.
//  Verifies that the custom icon is set correctly. The card art should be shown
//  when the metadata card art flag is enabled. Capital One virtual card icon is
//  an exception which should only and always be shown for virtual cards.
TEST_P(PaymentsSuggestionGeneratorTestForMetadata,
       GetSuggestionsForCreditCards_CustomCardIcon) {}

class PaymentsSuggestionGeneratorTestForOffer
    : public PaymentsSuggestionGeneratorTest,
      public testing::WithParamInterface<bool> {};

INSTANTIATE_TEST_SUITE_P();

// Test to make sure the suggestion gets populated with the right content if the
// card has card linked offer available.
TEST_P(PaymentsSuggestionGeneratorTestForOffer,
       CreateCreditCardSuggestion_ServerCardWithOffer) {}

// Test to make sure the suggestion gets populated with the right content if the
// card has card linked offer available.
TEST_P(PaymentsSuggestionGeneratorTestForOffer,
       CreateCreditCardSuggestion_ServerCardWithOffer_MetadataEnabled) {}

// Tests suggestions with the new ranking algorithm experiment for Autofill
// suggestions enabled.
class PaymentsSuggestionGeneratorTestWithNewSuggestionRankingAlgorithm
    : public PaymentsSuggestionGeneratorTest {};

// Tests that the ranking differences are appropriately set when suggestions are
// generated.
TEST_F(PaymentsSuggestionGeneratorTestWithNewSuggestionRankingAlgorithm,
       GetSuggestionsForCreditCards_SuggestionRankingContext) {}

// Checks that the suggestion ranking context is empty if the ranking experiment
// is disabled.
TEST_F(
    PaymentsSuggestionGeneratorTest,
    GetSuggestionsForCreditCards_SuggestionRankingContext_ExperimentDisabled) {}

TEST_F(
    PaymentsSuggestionGeneratorTestWithNewSuggestionRankingAlgorithm,
    GetSuggestionsForCreditCards_SuggestionRankingContext_NoRankingDifference) {}

class AutofillCreditCardSuggestionContentForTouchToFillTest
    : public AutofillCreditCardSuggestionContentTest,
      public testing::WithParamInterface<bool> {};

INSTANTIATE_TEST_SUITE_P();

// Verify that the suggestion's `main_text` and `minor_text` are populated
// correctly for both the virtual card and the real card. Furthermore, it
// verifies that if the merchant has opted out of VCN, `apply_deactivated_style`
// is set only for the virtual card, not for the real card.
TEST_P(AutofillCreditCardSuggestionContentForTouchToFillTest,
       GetCreditCardSuggestionsForTouchToFill_MainTextMinorTextMerchantOptOut) {}

TEST_P(AutofillCreditCardSuggestionContentForTouchToFillTest,
       GetCreditCardSuggestionsForTouchToFill_Labels) {}

}  // namespace autofill