Commit d9a5175d authored by Mohamad Ahmadi's avatar Mohamad Ahmadi Committed by Commit Bot

[PR] Improved unit tests for the edit mediator classes

Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet
Change-Id: I706b0cfed86e8a8bed4244f44d888b55ae117bb7
Reviewed-on: https://chromium-review.googlesource.com/745831Reviewed-by: default avatarMarc-Antoine Courteau <macourteau@chromium.org>
Commit-Queue: Moe Ahmadi <mahmadi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#512951}
parent 4f8e372b
...@@ -216,6 +216,7 @@ source_set("unit_tests") { ...@@ -216,6 +216,7 @@ source_set("unit_tests") {
"//ios/web/public/test", "//ios/web/public/test",
"//testing/gmock", "//testing/gmock",
"//testing/gtest", "//testing/gtest",
"//third_party/libaddressinput:strings_grit",
"//third_party/ocmock", "//third_party/ocmock",
"//ui/base", "//ui/base",
] ]
......
...@@ -4,13 +4,20 @@ ...@@ -4,13 +4,20 @@
#import "ios/chrome/browser/ui/payments/address_edit_mediator.h" #import "ios/chrome/browser/ui/payments/address_edit_mediator.h"
#include "base/mac/foundation_util.h"
#include "components/autofill/core/browser/autofill_profile.h" #include "components/autofill/core/browser/autofill_profile.h"
#include "components/autofill/core/browser/autofill_test_utils.h" #include "components/autofill/core/browser/autofill_test_utils.h"
#include "components/autofill/core/browser/country_names.h"
#include "components/autofill/core/browser/test_region_data_loader.h"
#include "components/strings/grit/components_strings.h" #include "components/strings/grit/components_strings.h"
#import "ios/chrome/browser/payments/payment_request_unittest_base.h" #import "ios/chrome/browser/payments/payment_request_unittest_base.h"
#import "ios/chrome/browser/ui/autofill/autofill_ui_type.h" #import "ios/chrome/browser/ui/autofill/autofill_ui_type.h"
#import "ios/chrome/browser/ui/payments/payment_request_edit_consumer.h"
#import "ios/chrome/browser/ui/payments/payment_request_editor_field.h" #import "ios/chrome/browser/ui/payments/payment_request_editor_field.h"
#include "ios/chrome/grit/ios_strings.h"
#include "testing/platform_test.h" #include "testing/platform_test.h"
#include "third_party/libaddressinput/messages.h"
#include "third_party/ocmock/OCMock/OCMock.h"
#include "third_party/ocmock/gtest_support.h" #include "third_party/ocmock/gtest_support.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
...@@ -24,12 +31,199 @@ class PaymentRequestAddressEditMediatorTest : public PaymentRequestUnitTestBase, ...@@ -24,12 +31,199 @@ class PaymentRequestAddressEditMediatorTest : public PaymentRequestUnitTestBase,
void SetUp() override { void SetUp() override {
PaymentRequestUnitTestBase::SetUp(); PaymentRequestUnitTestBase::SetUp();
autofill::CountryNames::SetLocaleString("en-US");
CreateTestPaymentRequest(); CreateTestPaymentRequest();
test_region_data_loader_.set_synchronous_callback(true);
payment_request()->SetRegionDataLoader(&test_region_data_loader_);
} }
void TearDown() override { PaymentRequestUnitTestBase::TearDown(); } void TearDown() override { PaymentRequestUnitTestBase::TearDown(); }
autofill::TestRegionDataLoader test_region_data_loader_;
}; };
// Tests that the expected editor fields are created when creating an address.
TEST_F(PaymentRequestAddressEditMediatorTest, TestFieldsWhenCreate) {
id check_block = ^BOOL(id value) {
EXPECT_TRUE([value isKindOfClass:[NSArray class]]);
NSArray* fields = base::mac::ObjCCastStrict<NSArray>(value);
EXPECT_EQ(8U, fields.count);
id field = fields[0];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
EditorField* editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_EQ(AutofillUITypeProfileFullName, editor_field.autofillUIType);
EXPECT_EQ(EditorFieldTypeTextField, editor_field.fieldType);
EXPECT_TRUE([editor_field.label
isEqualToString:l10n_util::GetNSString(
IDS_LIBADDRESSINPUT_RECIPIENT_LABEL)]);
EXPECT_EQ(nil, editor_field.value);
EXPECT_FALSE(editor_field.isRequired);
field = fields[1];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_EQ(AutofillUITypeProfileHomeAddressCountry,
editor_field.autofillUIType);
EXPECT_EQ(EditorFieldTypeSelector, editor_field.fieldType);
EXPECT_TRUE([editor_field.label
isEqualToString:l10n_util::GetNSString(
IDS_LIBADDRESSINPUT_COUNTRY_OR_REGION_LABEL)]);
EXPECT_TRUE([editor_field.value isEqualToString:@"US"]);
EXPECT_TRUE(editor_field.isRequired);
field = fields[2];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_EQ(AutofillUITypeProfileCompanyName, editor_field.autofillUIType);
EXPECT_EQ(EditorFieldTypeTextField, editor_field.fieldType);
EXPECT_TRUE([editor_field.label
isEqualToString:l10n_util::GetNSString(
IDS_LIBADDRESSINPUT_ORGANIZATION_LABEL)]);
EXPECT_EQ(nil, editor_field.value);
EXPECT_FALSE(editor_field.isRequired);
field = fields[3];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_EQ(AutofillUITypeProfileHomeAddressStreet,
editor_field.autofillUIType);
EXPECT_EQ(EditorFieldTypeTextField, editor_field.fieldType);
EXPECT_TRUE([editor_field.label
isEqualToString:l10n_util::GetNSString(
IDS_LIBADDRESSINPUT_ADDRESS_LINE_1_LABEL)]);
EXPECT_EQ(nil, editor_field.value);
EXPECT_TRUE(editor_field.isRequired);
field = fields[4];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_EQ(AutofillUITypeProfileHomeAddressCity,
editor_field.autofillUIType);
EXPECT_EQ(EditorFieldTypeTextField, editor_field.fieldType);
EXPECT_TRUE([editor_field.label
isEqualToString:l10n_util::GetNSString(
IDS_LIBADDRESSINPUT_LOCALITY_LABEL)]);
EXPECT_EQ(nil, editor_field.value);
EXPECT_TRUE(editor_field.isRequired);
field = fields[5];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_EQ(AutofillUITypeProfileHomeAddressState,
editor_field.autofillUIType);
EXPECT_EQ(EditorFieldTypeTextField, editor_field.fieldType);
EXPECT_TRUE([editor_field.label
isEqualToString:l10n_util::GetNSString(IDS_LIBADDRESSINPUT_STATE)]);
EXPECT_TRUE([editor_field.value
isEqualToString:l10n_util::GetNSString(IDS_AUTOFILL_LOADING_REGIONS)]);
EXPECT_TRUE(editor_field.isRequired);
field = fields[6];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_EQ(AutofillUITypeProfileHomeAddressZip, editor_field.autofillUIType);
EXPECT_EQ(EditorFieldTypeTextField, editor_field.fieldType);
EXPECT_TRUE([editor_field.label
isEqualToString:l10n_util::GetNSString(
IDS_LIBADDRESSINPUT_ZIP_CODE_LABEL)]);
EXPECT_EQ(nil, editor_field.value);
EXPECT_TRUE(editor_field.isRequired);
field = fields[7];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_EQ(AutofillUITypeProfileHomePhoneWholeNumber,
editor_field.autofillUIType);
EXPECT_EQ(EditorFieldTypeTextField, editor_field.fieldType);
EXPECT_TRUE([editor_field.label
isEqualToString:l10n_util::GetNSString(IDS_IOS_AUTOFILL_PHONE)]);
EXPECT_EQ(nil, editor_field.value);
EXPECT_TRUE(editor_field.isRequired);
return YES;
};
// Mock the consumer.
id consumer =
[OCMockObject mockForProtocol:@protocol(PaymentRequestEditConsumer)];
[[consumer expect] setEditorFields:[OCMArg checkWithBlock:check_block]];
AddressEditMediator* mediator =
[[AddressEditMediator alloc] initWithPaymentRequest:payment_request()
address:nil];
[mediator setConsumer:consumer];
EXPECT_OCMOCK_VERIFY(consumer);
}
// Tests that the expected editor fields are created when editing an address.
TEST_F(PaymentRequestAddressEditMediatorTest, TestFieldsWhenEdit) {
id check_block = ^BOOL(id value) {
EXPECT_TRUE([value isKindOfClass:[NSArray class]]);
NSArray* fields = base::mac::ObjCCastStrict<NSArray>(value);
EXPECT_EQ(8U, fields.count);
id field = fields[0];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
EditorField* editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_TRUE([editor_field.value isEqualToString:@"John H. Doe"]);
field = fields[1];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_TRUE([editor_field.value isEqualToString:@"US"]);
field = fields[2];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_TRUE([editor_field.value isEqualToString:@"Underworld"]);
field = fields[3];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_TRUE([editor_field.value isEqualToString:@"666 Erebus St.\nApt 8"]);
field = fields[4];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_TRUE([editor_field.value isEqualToString:@"Elysium"]);
field = fields[5];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_TRUE([editor_field.value
isEqualToString:l10n_util::GetNSString(IDS_AUTOFILL_LOADING_REGIONS)]);
field = fields[6];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_TRUE([editor_field.value isEqualToString:@"91111"]);
field = fields[7];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
editor_field = base::mac::ObjCCastStrict<EditorField>(field);
EXPECT_TRUE([editor_field.value isEqualToString:@"+1 650-211-1111"]);
return YES;
};
// Mock the consumer.
id consumer =
[OCMockObject mockForProtocol:@protocol(PaymentRequestEditConsumer)];
[[consumer expect] setEditorFields:[OCMArg checkWithBlock:check_block]];
autofill::AutofillProfile autofill_profile = autofill::test::GetFullProfile();
AddressEditMediator* mediator =
[[AddressEditMediator alloc] initWithPaymentRequest:payment_request()
address:&autofill_profile];
[mediator setConsumer:consumer];
EXPECT_OCMOCK_VERIFY(consumer);
}
// Tests that no validation error should be expected if validating an empty // Tests that no validation error should be expected if validating an empty
// field that is not required. // field that is not required.
TEST_F(PaymentRequestAddressEditMediatorTest, ValidateEmptyField) { TEST_F(PaymentRequestAddressEditMediatorTest, ValidateEmptyField) {
......
...@@ -52,6 +52,7 @@ TEST_F(PaymentRequestContactInfoEditMediatorTest, TestFieldsWhenCreate) { ...@@ -52,6 +52,7 @@ TEST_F(PaymentRequestContactInfoEditMediatorTest, TestFieldsWhenCreate) {
isEqualToString:l10n_util::GetNSString( isEqualToString:l10n_util::GetNSString(
IDS_PAYMENTS_NAME_FIELD_IN_CONTACT_DETAILS)]); IDS_PAYMENTS_NAME_FIELD_IN_CONTACT_DETAILS)]);
EXPECT_EQ(nil, editor_field.value); EXPECT_EQ(nil, editor_field.value);
EXPECT_TRUE(editor_field.isRequired);
field = fields[1]; field = fields[1];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]); EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
...@@ -63,6 +64,7 @@ TEST_F(PaymentRequestContactInfoEditMediatorTest, TestFieldsWhenCreate) { ...@@ -63,6 +64,7 @@ TEST_F(PaymentRequestContactInfoEditMediatorTest, TestFieldsWhenCreate) {
isEqualToString:l10n_util::GetNSString( isEqualToString:l10n_util::GetNSString(
IDS_PAYMENTS_PHONE_FIELD_IN_CONTACT_DETAILS)]); IDS_PAYMENTS_PHONE_FIELD_IN_CONTACT_DETAILS)]);
EXPECT_EQ(nil, editor_field.value); EXPECT_EQ(nil, editor_field.value);
EXPECT_TRUE(editor_field.isRequired);
field = fields[2]; field = fields[2];
EXPECT_TRUE([field isKindOfClass:[EditorField class]]); EXPECT_TRUE([field isKindOfClass:[EditorField class]]);
...@@ -73,6 +75,7 @@ TEST_F(PaymentRequestContactInfoEditMediatorTest, TestFieldsWhenCreate) { ...@@ -73,6 +75,7 @@ TEST_F(PaymentRequestContactInfoEditMediatorTest, TestFieldsWhenCreate) {
isEqualToString:l10n_util::GetNSString( isEqualToString:l10n_util::GetNSString(
IDS_PAYMENTS_EMAIL_FIELD_IN_CONTACT_DETAILS)]); IDS_PAYMENTS_EMAIL_FIELD_IN_CONTACT_DETAILS)]);
EXPECT_EQ(nil, editor_field.value); EXPECT_EQ(nil, editor_field.value);
EXPECT_TRUE(editor_field.isRequired);
return YES; return YES;
}; };
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
@property(nonatomic, strong) @property(nonatomic, strong)
PaymentRequestEditViewController* editViewController; PaymentRequestEditViewController* editViewController;
@property(nonatomic, strong) CreditCardEditViewControllerMediator* mediator; @property(nonatomic, strong) CreditCardEditMediator* mediator;
@end @end
...@@ -62,9 +62,9 @@ ...@@ -62,9 +62,9 @@
_editViewController = [[PaymentRequestEditViewController alloc] init]; _editViewController = [[PaymentRequestEditViewController alloc] init];
[_editViewController setDelegate:self]; [_editViewController setDelegate:self];
_mediator = [[CreditCardEditViewControllerMediator alloc] _mediator =
initWithPaymentRequest:_paymentRequest [[CreditCardEditMediator alloc] initWithPaymentRequest:_paymentRequest
creditCard:_creditCard]; creditCard:_creditCard];
[_mediator setConsumer:_editViewController]; [_mediator setConsumer:_editViewController];
[_editViewController setDataSource:_mediator]; [_editViewController setDataSource:_mediator];
[_editViewController setValidatorDelegate:_mediator]; [_editViewController setValidatorDelegate:_mediator];
......
...@@ -20,7 +20,7 @@ class PaymentRequest; ...@@ -20,7 +20,7 @@ class PaymentRequest;
} // namespace payments } // namespace payments
// Serves as data source for CreditCardEditViewController. // Serves as data source for CreditCardEditViewController.
@interface CreditCardEditViewControllerMediator @interface CreditCardEditMediator
: NSObject<PaymentRequestEditViewControllerDataSource, : NSObject<PaymentRequestEditViewControllerDataSource,
PaymentRequestEditViewControllerValidator> PaymentRequestEditViewControllerValidator>
......
...@@ -72,7 +72,7 @@ bool IsValidCreditCardNumber(const base::string16& card_number, ...@@ -72,7 +72,7 @@ bool IsValidCreditCardNumber(const base::string16& card_number,
} // namespace } // namespace
@interface CreditCardEditViewControllerMediator () @interface CreditCardEditMediator ()
// The PaymentRequest object owning an instance of payments::WebPaymentRequest // The PaymentRequest object owning an instance of payments::WebPaymentRequest
// as provided by the page invoking the Payment Request API. This is a weak // as provided by the page invoking the Payment Request API. This is a weak
...@@ -96,7 +96,7 @@ bool IsValidCreditCardNumber(const base::string16& card_number, ...@@ -96,7 +96,7 @@ bool IsValidCreditCardNumber(const base::string16& card_number,
@end @end
@implementation CreditCardEditViewControllerMediator @implementation CreditCardEditMediator
@synthesize state = _state; @synthesize state = _state;
@synthesize consumer = _consumer; @synthesize consumer = _consumer;
...@@ -293,7 +293,7 @@ bool IsValidCreditCardNumber(const base::string16& card_number, ...@@ -293,7 +293,7 @@ bool IsValidCreditCardNumber(const base::string16& card_number,
} }
// Notify the view controller asynchronously to allow for the view to update. // Notify the view controller asynchronously to allow for the view to update.
__weak CreditCardEditViewControllerMediator* weakSelf = self; __weak CreditCardEditMediator* weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf.consumer setOptions:@[ months, years ] [weakSelf.consumer setOptions:@[ months, years ]
forEditorField:weakSelf.creditCardExpDateField]; forEditorField:weakSelf.creditCardExpDateField];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment