blob: 26a197f8d158728fa0d977c0f65bb8459be7c4b2 [file] [log] [blame]
// Copyright 2017 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.
#import "ios/chrome/browser/ui/payments/shipping_address_selection_mediator.h"
#include "base/mac/foundation_util.h"
#include "components/autofill/core/browser/autofill_profile.h"
#include "components/autofill/core/browser/autofill_test_utils.h"
#import "ios/chrome/browser/payments/payment_request_unittest_base.h"
#import "ios/chrome/browser/payments/payment_request_util.h"
#import "ios/chrome/browser/ui/payments/cells/autofill_profile_item.h"
#include "testing/platform_test.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
using ::payment_request_util::GetNameLabelFromAutofillProfile;
using ::payment_request_util::GetShippingAddressLabelFromAutofillProfile;
using ::payment_request_util::GetPhoneNumberLabelFromAutofillProfile;
using ::payment_request_util::GetAddressNotificationLabelFromAutofillProfile;
} // namespace
class PaymentRequestShippingAddressSelectionMediatorTest
: public PaymentRequestUnitTestBase,
public PlatformTest {
protected:
void SetUp() override { PaymentRequestUnitTestBase::SetUp(); }
void TearDown() override { PaymentRequestUnitTestBase::TearDown(); }
};
// Tests that the expected selectable items are created and that the index of
// the selected item is properly set.
TEST_F(PaymentRequestShippingAddressSelectionMediatorTest,
TestSelectableItems) {
AddAutofillProfile(autofill::test::GetFullProfile());
AddAutofillProfile(autofill::test::GetFullProfile2());
CreateTestPaymentRequest();
ShippingAddressSelectionMediator* mediator =
[[ShippingAddressSelectionMediator alloc]
initWithPaymentRequest:payment_request()];
NSArray<CollectionViewItem*>* selectable_items = [mediator selectableItems];
ASSERT_EQ(2U, selectable_items.count);
// The first item must be selected.
EXPECT_EQ(0U, mediator.selectedItemIndex);
CollectionViewItem* item_1 = [[mediator selectableItems] objectAtIndex:0];
DCHECK([item_1 isKindOfClass:[AutofillProfileItem class]]);
AutofillProfileItem* profile_item_1 =
base::mac::ObjCCastStrict<AutofillProfileItem>(item_1);
EXPECT_TRUE([profile_item_1.name
isEqualToString:GetNameLabelFromAutofillProfile(
*payment_request()->shipping_profiles()[0])]);
EXPECT_TRUE([profile_item_1.address
isEqualToString:GetShippingAddressLabelFromAutofillProfile(
*payment_request()->shipping_profiles()[0])]);
EXPECT_TRUE([profile_item_1.phoneNumber
isEqualToString:GetPhoneNumberLabelFromAutofillProfile(
*payment_request()->shipping_profiles()[0])]);
EXPECT_EQ(nil, profile_item_1.notification);
EXPECT_TRUE(profile_item_1.complete);
CollectionViewItem* item_2 = [[mediator selectableItems] objectAtIndex:1];
DCHECK([item_2 isKindOfClass:[AutofillProfileItem class]]);
AutofillProfileItem* profile_item_2 =
base::mac::ObjCCastStrict<AutofillProfileItem>(item_2);
EXPECT_TRUE([profile_item_2.name
isEqualToString:GetNameLabelFromAutofillProfile(
*payment_request()->shipping_profiles()[1])]);
EXPECT_TRUE([profile_item_2.address
isEqualToString:GetShippingAddressLabelFromAutofillProfile(
*payment_request()->shipping_profiles()[1])]);
EXPECT_TRUE([profile_item_2.phoneNumber
isEqualToString:GetPhoneNumberLabelFromAutofillProfile(
*payment_request()->shipping_profiles()[1])]);
EXPECT_EQ(nil, profile_item_2.notification);
EXPECT_TRUE(profile_item_2.complete);
}
// Tests that the index of the selected item is as expected when there is no
// shipping profile.
TEST_F(PaymentRequestShippingAddressSelectionMediatorTest, TestNoItems) {
CreateTestPaymentRequest();
ShippingAddressSelectionMediator* mediator =
[[ShippingAddressSelectionMediator alloc]
initWithPaymentRequest:payment_request()];
NSArray<CollectionViewItem*>* selectable_items = [mediator selectableItems];
ASSERT_EQ(0U, selectable_items.count);
// The selected item index must be invalid.
EXPECT_EQ(NSUIntegerMax, mediator.selectedItemIndex);
}
// Tests that the expected selectable items are created and the index of the
// selected item is as expected when there is no selected shipping profile.
TEST_F(PaymentRequestShippingAddressSelectionMediatorTest, TestNoSelectedItem) {
AddAutofillProfile(autofill::test::GetIncompleteProfile1());
AddAutofillProfile(autofill::test::GetIncompleteProfile2());
CreateTestPaymentRequest();
ShippingAddressSelectionMediator* mediator =
[[ShippingAddressSelectionMediator alloc]
initWithPaymentRequest:payment_request()];
NSArray<CollectionViewItem*>* selectable_items = [mediator selectableItems];
ASSERT_EQ(2U, selectable_items.count);
// The selected item index must be invalid.
EXPECT_EQ(NSUIntegerMax, mediator.selectedItemIndex);
CollectionViewItem* item_1 = [[mediator selectableItems] objectAtIndex:0];
DCHECK([item_1 isKindOfClass:[AutofillProfileItem class]]);
AutofillProfileItem* profile_item_1 =
base::mac::ObjCCastStrict<AutofillProfileItem>(item_1);
EXPECT_FALSE([profile_item_1.notification isEqualToString:@""]);
EXPECT_FALSE(profile_item_1.complete);
CollectionViewItem* item_2 = [[mediator selectableItems] objectAtIndex:0];
DCHECK([item_2 isKindOfClass:[AutofillProfileItem class]]);
AutofillProfileItem* profile_item_2 =
base::mac::ObjCCastStrict<AutofillProfileItem>(item_2);
EXPECT_FALSE([profile_item_2.notification isEqualToString:@""]);
EXPECT_FALSE(profile_item_2.complete);
}