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

Unified Diff: components/autofill/core/browser/full_card_request_unittest.cc

Issue 1899893002: Card unmasking without form filling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moar tests Created 4 years, 8 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: components/autofill/core/browser/full_card_request_unittest.cc
diff --git a/components/autofill/core/browser/full_card_request_unittest.cc b/components/autofill/core/browser/full_card_request_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..ba2e90913894bb1a8ce2df44ef7a5941cc657508
--- /dev/null
+++ b/components/autofill/core/browser/full_card_request_unittest.cc
@@ -0,0 +1,342 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// 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/full_card_request.h"
+
+#include "base/command_line.h"
+#include "base/memory/weak_ptr.h"
+#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/personal_data_manager.h"
+#include "components/autofill/core/browser/test_autofill_client.h"
+#include "components/autofill/core/browser/test_autofill_driver.h"
+#include "net/url_request/url_request_test_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace autofill {
+
+using testing::_;
+
+// The consumer of the full card request API.
+class MockDelegate : public FullCardRequest::Delegate,
+ public base::SupportsWeakPtr<MockDelegate> {
+ public:
+ MOCK_METHOD2(OnFullCardDetails,
+ void(const CreditCard&, const base::string16&));
+ MOCK_METHOD0(OnFullCardError, void());
+};
+
+// The autofill client.
+class MockAutofillClient : public TestAutofillClient {
+ public:
+ MOCK_METHOD3(ShowUnmaskPrompt,
+ void(const CreditCard&,
+ UnmaskCardReason,
+ base::WeakPtr<CardUnmaskDelegate>));
+ MOCK_METHOD1(OnUnmaskVerificationResult,
+ void(AutofillClient::PaymentsRpcResult));
+};
+
+// Test test fixture for full card request.
+class FullCardRequestTest : public testing::Test {
+ public:
+ FullCardRequestTest()
+ : request_context_(new net::TestURLRequestContextGetter(
+ base::ThreadTaskRunnerHandle::Get())),
+ personal_data_("en_US"),
+ request_(request_context_.get(), &autofill_client_, &personal_data_) {
+ // Silence the warning from PaymentsClient about matching sync and Payments
+ // server types.
+ base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+ "sync-url", "https://google.com");
+ }
+
+ ~FullCardRequestTest() override {}
+
+ MockAutofillClient* client() { return &autofill_client_; }
+
+ FullCardRequest* request() { return &request_; }
+
+ CardUnmaskDelegate* ui_delegate() { return (CardUnmaskDelegate*)&request_; }
+
+ payments::PaymentsClientDelegate* server_delegate() {
+ return (payments::PaymentsClientDelegate*)&request_;
+ }
+
+ MockDelegate* delegate() { return &delegate_; }
+
+ private:
+ base::MessageLoop message_loop_;
+ MockAutofillClient autofill_client_;
+ scoped_refptr<net::TestURLRequestContextGetter> request_context_;
+ PersonalDataManager personal_data_;
+ MockDelegate delegate_;
+ FullCardRequest request_;
+};
+
+// Matches the |arg| credit card to the given |record_type| and |card_number|.
+MATCHER_P2(CardMatches, record_type, card_number, "") {
+ return arg.record_type() == record_type &&
+ arg.GetRawInfo(CREDIT_CARD_NUMBER) == base::ASCIIToUTF16(card_number);
+}
+
+// Matches the |arg| credit card to the given |record_type|, card |number|,
+// expiration |month|, and expiration |year|.
+MATCHER_P4(CardMatches, record_type, number, month, year, "") {
+ return arg.record_type() == record_type &&
+ arg.GetRawInfo(CREDIT_CARD_NUMBER) == base::ASCIIToUTF16(number) &&
+ arg.GetRawInfo(CREDIT_CARD_EXP_MONTH) == base::ASCIIToUTF16(month) &&
+ arg.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR) ==
+ base::ASCIIToUTF16(year);
+}
+
+TEST_F(FullCardRequestTest, GetFullCardPanAndCvcForMaskedServerCard) {
+ EXPECT_CALL(
+ *delegate(),
+ OnFullCardDetails(CardMatches(CreditCard::FULL_SERVER_CARD, "4111"),
+ base::ASCIIToUTF16("123")));
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(), OnUnmaskVerificationResult(AutofillClient::SUCCESS));
+
+ request()->GetFullCard(
+ CreditCard(CreditCard::MASKED_SERVER_CARD, "server_id"),
+ AutofillClient::UNMASK_FOR_AUTOFILL, delegate()->AsWeakPtr());
+ CardUnmaskDelegate::UnmaskResponse response;
+ response.cvc = base::ASCIIToUTF16("123");
+ ui_delegate()->OnUnmaskResponse(response);
+ server_delegate()->OnDidGetRealPan(AutofillClient::SUCCESS, "4111");
+ ui_delegate()->OnUnmaskPromptClosed();
+}
+
+TEST_F(FullCardRequestTest, GetFullCardPanAndCvcForLocalCard) {
+ EXPECT_CALL(*delegate(),
+ OnFullCardDetails(CardMatches(CreditCard::LOCAL_CARD, "4111"),
+ base::ASCIIToUTF16("123")));
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(), OnUnmaskVerificationResult(AutofillClient::SUCCESS));
+
+ request()->GetFullCard(CreditCard(base::ASCIIToUTF16("4111"), 12, 2050),
+ AutofillClient::UNMASK_FOR_AUTOFILL,
+ delegate()->AsWeakPtr());
+ CardUnmaskDelegate::UnmaskResponse response;
+ response.cvc = base::ASCIIToUTF16("123");
+ ui_delegate()->OnUnmaskResponse(response);
+ ui_delegate()->OnUnmaskPromptClosed();
+}
+
+TEST_F(FullCardRequestTest, GetFullCardPanAndCvcForFullServerCard) {
+ EXPECT_CALL(
+ *delegate(),
+ OnFullCardDetails(CardMatches(CreditCard::FULL_SERVER_CARD, "4111"),
+ base::ASCIIToUTF16("123")));
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(), OnUnmaskVerificationResult(AutofillClient::SUCCESS));
+
+ CreditCard full_server_card(base::ASCIIToUTF16("4111"), 12, 2050);
+ full_server_card.set_record_type(CreditCard::FULL_SERVER_CARD);
+ request()->GetFullCard(full_server_card, AutofillClient::UNMASK_FOR_AUTOFILL,
+ delegate()->AsWeakPtr());
+ CardUnmaskDelegate::UnmaskResponse response;
+ response.cvc = base::ASCIIToUTF16("123");
+ ui_delegate()->OnUnmaskResponse(response);
+ ui_delegate()->OnUnmaskPromptClosed();
+}
+
+TEST_F(FullCardRequestTest, OneRequestAtATime) {
+ EXPECT_CALL(*delegate(), OnFullCardError());
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(), OnUnmaskVerificationResult(_)).Times(0);
+
+ request()->GetFullCard(
+ CreditCard(CreditCard::MASKED_SERVER_CARD, "server_id_1"),
+ AutofillClient::UNMASK_FOR_AUTOFILL, delegate()->AsWeakPtr());
+ request()->GetFullCard(
+ CreditCard(CreditCard::MASKED_SERVER_CARD, "server_id_2"),
+ AutofillClient::UNMASK_FOR_PAYMENT_REQUEST, delegate()->AsWeakPtr());
+}
+
+TEST_F(FullCardRequestTest, ClosePromptWithoutUserInput) {
+ EXPECT_CALL(*delegate(), OnFullCardError());
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(), OnUnmaskVerificationResult(_)).Times(0);
+
+ request()->GetFullCard(
+ CreditCard(CreditCard::MASKED_SERVER_CARD, "server_id"),
+ AutofillClient::UNMASK_FOR_AUTOFILL, delegate()->AsWeakPtr());
+ ui_delegate()->OnUnmaskPromptClosed();
+}
+
+TEST_F(FullCardRequestTest, EmptyFullPan) {
+ EXPECT_CALL(*delegate(), OnFullCardError());
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(),
+ OnUnmaskVerificationResult(AutofillClient::PERMANENT_FAILURE));
+
+ request()->GetFullCard(
+ CreditCard(CreditCard::MASKED_SERVER_CARD, "server_id"),
+ AutofillClient::UNMASK_FOR_AUTOFILL, delegate()->AsWeakPtr());
+ CardUnmaskDelegate::UnmaskResponse response;
+ response.cvc = base::ASCIIToUTF16("123");
+ ui_delegate()->OnUnmaskResponse(response);
+ server_delegate()->OnDidGetRealPan(AutofillClient::PERMANENT_FAILURE, "");
+ ui_delegate()->OnUnmaskPromptClosed();
+}
+
+TEST_F(FullCardRequestTest, UpdateExpDateForMaskedServerCard) {
+ EXPECT_CALL(*delegate(),
+ OnFullCardDetails(CardMatches(CreditCard::FULL_SERVER_CARD,
+ "4111", "12", "2050"),
+ base::ASCIIToUTF16("123")));
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(), OnUnmaskVerificationResult(AutofillClient::SUCCESS));
+
+ CreditCard masked_server_card(base::ASCIIToUTF16(""), 10, 2000);
+ masked_server_card.set_record_type(CreditCard::MASKED_SERVER_CARD);
+ request()->GetFullCard(masked_server_card,
+ AutofillClient::UNMASK_FOR_AUTOFILL,
+ delegate()->AsWeakPtr());
+ CardUnmaskDelegate::UnmaskResponse response;
+ response.cvc = base::ASCIIToUTF16("123");
+ response.exp_month = base::ASCIIToUTF16("12");
+ response.exp_year = base::ASCIIToUTF16("2050");
+ ui_delegate()->OnUnmaskResponse(response);
+ server_delegate()->OnDidGetRealPan(AutofillClient::SUCCESS, "4111");
+ ui_delegate()->OnUnmaskPromptClosed();
+}
+
+TEST_F(FullCardRequestTest, UpdateExpDateForFullServerCard) {
+ EXPECT_CALL(*delegate(),
+ OnFullCardDetails(CardMatches(CreditCard::FULL_SERVER_CARD,
+ "4111", "12", "2050"),
+ base::ASCIIToUTF16("123")));
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(), OnUnmaskVerificationResult(AutofillClient::SUCCESS));
+
+ CreditCard full_server_card(base::ASCIIToUTF16("4111"), 10, 2000);
+ full_server_card.set_record_type(CreditCard::FULL_SERVER_CARD);
+ request()->GetFullCard(full_server_card, AutofillClient::UNMASK_FOR_AUTOFILL,
+ delegate()->AsWeakPtr());
+ CardUnmaskDelegate::UnmaskResponse response;
+ response.cvc = base::ASCIIToUTF16("123");
+ response.exp_month = base::ASCIIToUTF16("12");
+ response.exp_year = base::ASCIIToUTF16("2050");
+ ui_delegate()->OnUnmaskResponse(response);
+ ui_delegate()->OnUnmaskPromptClosed();
+}
+
+TEST_F(FullCardRequestTest, UpdateExpDateForLocalCard) {
+ EXPECT_CALL(*delegate(), OnFullCardDetails(CardMatches(CreditCard::LOCAL_CARD,
+ "4111", "12", "2050"),
+ base::ASCIIToUTF16("123")));
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(), OnUnmaskVerificationResult(AutofillClient::SUCCESS));
+
+ request()->GetFullCard(CreditCard(base::ASCIIToUTF16("4111"), 10, 2000),
+ AutofillClient::UNMASK_FOR_AUTOFILL,
+ delegate()->AsWeakPtr());
+ CardUnmaskDelegate::UnmaskResponse response;
+ response.cvc = base::ASCIIToUTF16("123");
+ response.exp_month = base::ASCIIToUTF16("12");
+ response.exp_year = base::ASCIIToUTF16("2050");
+ ui_delegate()->OnUnmaskResponse(response);
+ ui_delegate()->OnUnmaskPromptClosed();
+}
+
+TEST_F(FullCardRequestTest, SaveRealPan) {
+ EXPECT_CALL(*delegate(),
+ OnFullCardDetails(CardMatches(CreditCard::FULL_SERVER_CARD,
+ "4111", "12", "2050"),
+ base::ASCIIToUTF16("123")));
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(), OnUnmaskVerificationResult(AutofillClient::SUCCESS));
+
+ request()->GetFullCard(
+ CreditCard(CreditCard::MASKED_SERVER_CARD, "server_id"),
+ AutofillClient::UNMASK_FOR_AUTOFILL, delegate()->AsWeakPtr());
+ CardUnmaskDelegate::UnmaskResponse response;
+ response.cvc = base::ASCIIToUTF16("123");
+ response.exp_month = base::ASCIIToUTF16("12");
+ response.exp_year = base::ASCIIToUTF16("2050");
+ response.should_store_pan = true;
+ ui_delegate()->OnUnmaskResponse(response);
+ server_delegate()->OnDidGetRealPan(AutofillClient::SUCCESS, "4111");
+ ui_delegate()->OnUnmaskPromptClosed();
+}
+
+TEST_F(FullCardRequestTest, UnmaskForPaymentRequest) {
+ EXPECT_CALL(
+ *delegate(),
+ OnFullCardDetails(CardMatches(CreditCard::FULL_SERVER_CARD, "4111"),
+ base::ASCIIToUTF16("123")));
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(), OnUnmaskVerificationResult(AutofillClient::SUCCESS));
+
+ request()->GetFullCard(
+ CreditCard(CreditCard::MASKED_SERVER_CARD, "server_id"),
+ AutofillClient::UNMASK_FOR_AUTOFILL, delegate()->AsWeakPtr());
+ CardUnmaskDelegate::UnmaskResponse response;
+ response.cvc = base::ASCIIToUTF16("123");
+ ui_delegate()->OnUnmaskResponse(response);
+ server_delegate()->OnDidGetRealPan(AutofillClient::SUCCESS, "4111");
+ ui_delegate()->OnUnmaskPromptClosed();
+}
+
+TEST_F(FullCardRequestTest, IsGettingFullCardForMaskedServerCard) {
+ EXPECT_CALL(
+ *delegate(),
+ OnFullCardDetails(CardMatches(CreditCard::FULL_SERVER_CARD, "4111"),
+ base::ASCIIToUTF16("123")));
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(), OnUnmaskVerificationResult(AutofillClient::SUCCESS));
+
+ EXPECT_FALSE(request()->IsGettingFullCard());
+
+ request()->GetFullCard(
+ CreditCard(CreditCard::MASKED_SERVER_CARD, "server_id"),
+ AutofillClient::UNMASK_FOR_AUTOFILL, delegate()->AsWeakPtr());
+
+ EXPECT_TRUE(request()->IsGettingFullCard());
+
+ CardUnmaskDelegate::UnmaskResponse response;
+ response.cvc = base::ASCIIToUTF16("123");
+ ui_delegate()->OnUnmaskResponse(response);
+
+ EXPECT_TRUE(request()->IsGettingFullCard());
+
+ server_delegate()->OnDidGetRealPan(AutofillClient::SUCCESS, "4111");
+
+ EXPECT_FALSE(request()->IsGettingFullCard());
+
+ ui_delegate()->OnUnmaskPromptClosed();
+
+ EXPECT_FALSE(request()->IsGettingFullCard());
+}
+
+TEST_F(FullCardRequestTest, IsGettingFullCardForLocalCard) {
+ EXPECT_CALL(*delegate(),
+ OnFullCardDetails(CardMatches(CreditCard::LOCAL_CARD, "4111"),
+ base::ASCIIToUTF16("123")));
+ EXPECT_CALL(*client(), ShowUnmaskPrompt(_, _, _));
+ EXPECT_CALL(*client(), OnUnmaskVerificationResult(AutofillClient::SUCCESS));
+
+ EXPECT_FALSE(request()->IsGettingFullCard());
+
+ request()->GetFullCard(CreditCard(base::ASCIIToUTF16("4111"), 12, 2050),
+ AutofillClient::UNMASK_FOR_AUTOFILL,
+ delegate()->AsWeakPtr());
+
+ EXPECT_TRUE(request()->IsGettingFullCard());
+
+ CardUnmaskDelegate::UnmaskResponse response;
+ response.cvc = base::ASCIIToUTF16("123");
+ ui_delegate()->OnUnmaskResponse(response);
+
+ EXPECT_FALSE(request()->IsGettingFullCard());
+
+ ui_delegate()->OnUnmaskPromptClosed();
+
+ EXPECT_FALSE(request()->IsGettingFullCard());
+}
+
+} // namespace autofill

Powered by Google App Engine
This is Rietveld 408576698