Commit a8e23490 authored by Chris Lu's avatar Chris Lu Committed by Commit Bot

[ios] Add tests to InfobarOverlayRequestFactoryImplTest

This change also removes a DCHECK since a test is more robust.

Bug: 1030357
Change-Id: I939a4ec7ed4d4e60ef3518d293cd91f4d759c138
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2368141
Auto-Submit: Chris Lu <thegreenfrog@chromium.org>
Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Commit-Queue: Chris Lu <thegreenfrog@chromium.org>
Cr-Commit-Position: refs/heads/master@{#800695}
parent b23deb3d
......@@ -109,6 +109,7 @@ source_set("unit_tests") {
"//ios/chrome/browser/browser_state:test_support",
"//ios/chrome/browser/infobars",
"//ios/chrome/browser/infobars:public",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test",
"//ios/chrome/browser/infobars/test",
"//ios/chrome/browser/main:test_support",
"//ios/chrome/browser/overlays",
......
......@@ -56,8 +56,7 @@ InfobarOverlayRequestFactoryImpl::CreateInfobarRequest(
DCHECK(infobar);
InfoBarIOS* infobar_ios = static_cast<InfoBarIOS*>(infobar);
FactoryHelper* factory = factory_storages_[infobar_ios->infobar_type()][type];
DCHECK(factory);
return factory->CreateInfobarRequest(infobar_ios);
return factory ? factory->CreateInfobarRequest(infobar_ios) : nullptr;
}
void InfobarOverlayRequestFactoryImpl::SetUpFactories(
......
......@@ -5,14 +5,25 @@
#import "ios/chrome/browser/infobars/overlays/infobar_overlay_request_factory_impl.h"
#include "base/feature_list.h"
#include "base/guid.h"
#include "base/test/scoped_feature_list.h"
#include "components/autofill/core/browser/autofill_test_utils.h"
#include "components/autofill/core/browser/data_model/credit_card.h"
#include "components/autofill/core/common/password_form.h"
#include "components/infobars/core/infobar.h"
#include "components/infobars/core/infobar_feature.h"
#include "components/password_manager/core/browser/mock_password_form_manager_for_ui.h"
#include "components/translate/core/browser/mock_translate_infobar_delegate.h"
#include "ios/chrome/browser/infobars/infobar_ios.h"
#include "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_autofill_save_card_infobar_delegate_mobile.h"
#include "ios/chrome/browser/infobars/test/mock_infobar_delegate.h"
#import "ios/chrome/browser/overlays/public/infobar_banner/confirm_infobar_banner_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_banner/save_card_infobar_banner_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_banner/save_password_infobar_banner_overlay.h"
#import "ios/chrome/browser/overlays/public/infobar_banner/translate_infobar_banner_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_modal/password_infobar_modal_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_modal/save_card_infobar_modal_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.h"
#import "ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h"
#import "ios/chrome/browser/passwords/test/mock_ios_chrome_save_passwords_infobar_delegate.h"
#import "ios/chrome/browser/ui/infobars/infobar_feature.h"
......@@ -27,31 +38,43 @@
using infobars::InfoBar;
using infobars::InfoBarDelegate;
using confirm_infobar_overlays::ConfirmBannerRequestConfig;
using save_card_infobar_overlays::SaveCardBannerRequestConfig;
using translate_infobar_overlays::TranslateBannerRequestConfig;
using save_card_infobar_overlays::SaveCardModalRequestConfig;
using translate_infobar_overlays::TranslateModalRequestConfig;
// Test fixture for InfobarOverlayRequestFactoryImpl.
class InfobarOverlayRequestFactoryImplTest : public PlatformTest {
public:
InfobarOverlayRequestFactoryImplTest() {
InfobarOverlayRequestFactoryImplTest()
: prefs_(autofill::test::PrefServiceForTesting()),
card_(base::GenerateGUID(), "https://www.example.com/"),
translate_delegate_factory_("fr", "en") {
feature_list_.InitWithFeatures({kIOSInfobarUIReboot},
{kInfobarUIRebootOnlyiOS13});
}
InfobarOverlayRequestFactory* factory() { return &factory_; }
private:
protected:
base::test::ScopedFeatureList feature_list_;
InfobarOverlayRequestFactoryImpl factory_;
std::unique_ptr<PrefService> prefs_;
autofill::CreditCard card_;
std::unique_ptr<InfoBarIOS> infobar_;
translate::testing::MockTranslateInfoBarDelegateFactory
translate_delegate_factory_;
};
// Tests that the factory creates a save passwords infobar request.
TEST_F(InfobarOverlayRequestFactoryImplTest, SavePasswords) {
FakeInfobarUIDelegate* ui_delegate = [[FakeInfobarUIDelegate alloc] init];
ui_delegate.infobarType = InfobarType::kInfobarTypePasswordSave;
GURL url("https://chromium.test");
std::unique_ptr<InfoBarDelegate> delegate =
MockIOSChromeSavePasswordInfoBarDelegate::Create(@"username", @"password",
url);
InfoBarIOS infobar(ui_delegate, std::move(delegate));
InfoBarIOS infobar(InfobarType::kInfobarTypePasswordSave,
std::move(delegate));
// Test banner request creation.
std::unique_ptr<OverlayRequest> banner_request =
......@@ -64,7 +87,82 @@ TEST_F(InfobarOverlayRequestFactoryImplTest, SavePasswords) {
factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kModal);
EXPECT_TRUE(
modal_request->GetConfig<PasswordInfobarModalOverlayRequestConfig>());
}
// Tests that the factory creates an update passwords infobar request.
TEST_F(InfobarOverlayRequestFactoryImplTest, UpdatePasswords) {
GURL url("https://chromium.test");
std::unique_ptr<InfoBarDelegate> delegate =
MockIOSChromeSavePasswordInfoBarDelegate::Create(@"username", @"password",
url);
InfoBarIOS infobar(InfobarType::kInfobarTypePasswordUpdate,
std::move(delegate));
// Test banner request creation.
std::unique_ptr<OverlayRequest> banner_request =
factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kBanner);
EXPECT_TRUE(banner_request
->GetConfig<SavePasswordInfobarBannerOverlayRequestConfig>());
// Test modal request creation.
std::unique_ptr<OverlayRequest> modal_request =
factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kModal);
EXPECT_TRUE(
modal_request->GetConfig<PasswordInfobarModalOverlayRequestConfig>());
}
// Tests that the factory creates an confirm infobar request.
TEST_F(InfobarOverlayRequestFactoryImplTest, Confirm) {
GURL url("https://chromium.test");
std::unique_ptr<MockInfobarDelegate> delegate =
std::make_unique<MockInfobarDelegate>();
InfoBarIOS infobar(InfobarType::kInfobarTypeConfirm, std::move(delegate));
// Test banner request creation.
std::unique_ptr<OverlayRequest> banner_request =
factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kBanner);
EXPECT_TRUE(banner_request->GetConfig<ConfirmBannerRequestConfig>());
// TODO(crbug.com/1033154): Add additional tests for other
// InfobarOverlayTypes.
// Test modal request creation.
std::unique_ptr<OverlayRequest> modal_request =
factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kModal);
EXPECT_FALSE(modal_request);
}
// Tests that the factory creates a save card request.
TEST_F(InfobarOverlayRequestFactoryImplTest, SaveCard) {
GURL url("https://chromium.test");
InfoBarIOS infobar(InfobarType::kInfobarTypeSaveCard,
MockAutofillSaveCardInfoBarDelegateMobileFactory::
CreateMockAutofillSaveCardInfoBarDelegateMobileFactory(
false, prefs_.get(), card_));
// Test banner request creation.
std::unique_ptr<OverlayRequest> banner_request =
factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kBanner);
EXPECT_TRUE(banner_request->GetConfig<SaveCardBannerRequestConfig>());
// Test modal request creation.
std::unique_ptr<OverlayRequest> modal_request =
factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kModal);
EXPECT_TRUE(modal_request->GetConfig<SaveCardModalRequestConfig>());
}
// Tests that the factory creates a translate request.
TEST_F(InfobarOverlayRequestFactoryImplTest, Translate) {
GURL url("https://chromium.test");
InfoBarIOS infobar(
InfobarType::kInfobarTypeTranslate,
translate_delegate_factory_.CreateMockTranslateInfoBarDelegate(
translate::TranslateStep::TRANSLATE_STEP_BEFORE_TRANSLATE));
// Test banner request creation.
std::unique_ptr<OverlayRequest> banner_request =
factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kBanner);
EXPECT_TRUE(banner_request->GetConfig<TranslateBannerRequestConfig>());
// Test modal request creation.
std::unique_ptr<OverlayRequest> modal_request =
factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kModal);
EXPECT_TRUE(modal_request->GetConfig<TranslateModalRequestConfig>());
}
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