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") { ...@@ -109,6 +109,7 @@ source_set("unit_tests") {
"//ios/chrome/browser/browser_state:test_support", "//ios/chrome/browser/browser_state:test_support",
"//ios/chrome/browser/infobars", "//ios/chrome/browser/infobars",
"//ios/chrome/browser/infobars:public", "//ios/chrome/browser/infobars:public",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test",
"//ios/chrome/browser/infobars/test", "//ios/chrome/browser/infobars/test",
"//ios/chrome/browser/main:test_support", "//ios/chrome/browser/main:test_support",
"//ios/chrome/browser/overlays", "//ios/chrome/browser/overlays",
......
...@@ -56,8 +56,7 @@ InfobarOverlayRequestFactoryImpl::CreateInfobarRequest( ...@@ -56,8 +56,7 @@ InfobarOverlayRequestFactoryImpl::CreateInfobarRequest(
DCHECK(infobar); DCHECK(infobar);
InfoBarIOS* infobar_ios = static_cast<InfoBarIOS*>(infobar); InfoBarIOS* infobar_ios = static_cast<InfoBarIOS*>(infobar);
FactoryHelper* factory = factory_storages_[infobar_ios->infobar_type()][type]; FactoryHelper* factory = factory_storages_[infobar_ios->infobar_type()][type];
DCHECK(factory); return factory ? factory->CreateInfobarRequest(infobar_ios) : nullptr;
return factory->CreateInfobarRequest(infobar_ios);
} }
void InfobarOverlayRequestFactoryImpl::SetUpFactories( void InfobarOverlayRequestFactoryImpl::SetUpFactories(
......
...@@ -5,14 +5,25 @@ ...@@ -5,14 +5,25 @@
#import "ios/chrome/browser/infobars/overlays/infobar_overlay_request_factory_impl.h" #import "ios/chrome/browser/infobars/overlays/infobar_overlay_request_factory_impl.h"
#include "base/feature_list.h" #include "base/feature_list.h"
#include "base/guid.h"
#include "base/test/scoped_feature_list.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/autofill/core/common/password_form.h"
#include "components/infobars/core/infobar.h" #include "components/infobars/core/infobar.h"
#include "components/infobars/core/infobar_feature.h" #include "components/infobars/core/infobar_feature.h"
#include "components/password_manager/core/browser/mock_password_form_manager_for_ui.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/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/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/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/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/passwords/test/mock_ios_chrome_save_passwords_infobar_delegate.h"
#import "ios/chrome/browser/ui/infobars/infobar_feature.h" #import "ios/chrome/browser/ui/infobars/infobar_feature.h"
...@@ -27,31 +38,43 @@ ...@@ -27,31 +38,43 @@
using infobars::InfoBar; using infobars::InfoBar;
using infobars::InfoBarDelegate; 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. // Test fixture for InfobarOverlayRequestFactoryImpl.
class InfobarOverlayRequestFactoryImplTest : public PlatformTest { class InfobarOverlayRequestFactoryImplTest : public PlatformTest {
public: public:
InfobarOverlayRequestFactoryImplTest() { InfobarOverlayRequestFactoryImplTest()
: prefs_(autofill::test::PrefServiceForTesting()),
card_(base::GenerateGUID(), "https://www.example.com/"),
translate_delegate_factory_("fr", "en") {
feature_list_.InitWithFeatures({kIOSInfobarUIReboot}, feature_list_.InitWithFeatures({kIOSInfobarUIReboot},
{kInfobarUIRebootOnlyiOS13}); {kInfobarUIRebootOnlyiOS13});
} }
InfobarOverlayRequestFactory* factory() { return &factory_; } InfobarOverlayRequestFactory* factory() { return &factory_; }
private: protected:
base::test::ScopedFeatureList feature_list_; base::test::ScopedFeatureList feature_list_;
InfobarOverlayRequestFactoryImpl factory_; 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. // Tests that the factory creates a save passwords infobar request.
TEST_F(InfobarOverlayRequestFactoryImplTest, SavePasswords) { TEST_F(InfobarOverlayRequestFactoryImplTest, SavePasswords) {
FakeInfobarUIDelegate* ui_delegate = [[FakeInfobarUIDelegate alloc] init];
ui_delegate.infobarType = InfobarType::kInfobarTypePasswordSave;
GURL url("https://chromium.test"); GURL url("https://chromium.test");
std::unique_ptr<InfoBarDelegate> delegate = std::unique_ptr<InfoBarDelegate> delegate =
MockIOSChromeSavePasswordInfoBarDelegate::Create(@"username", @"password", MockIOSChromeSavePasswordInfoBarDelegate::Create(@"username", @"password",
url); url);
InfoBarIOS infobar(ui_delegate, std::move(delegate)); InfoBarIOS infobar(InfobarType::kInfobarTypePasswordSave,
std::move(delegate));
// Test banner request creation. // Test banner request creation.
std::unique_ptr<OverlayRequest> banner_request = std::unique_ptr<OverlayRequest> banner_request =
...@@ -64,7 +87,82 @@ TEST_F(InfobarOverlayRequestFactoryImplTest, SavePasswords) { ...@@ -64,7 +87,82 @@ TEST_F(InfobarOverlayRequestFactoryImplTest, SavePasswords) {
factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kModal); factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kModal);
EXPECT_TRUE( EXPECT_TRUE(
modal_request->GetConfig<PasswordInfobarModalOverlayRequestConfig>()); 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 // Test modal request creation.
// InfobarOverlayTypes. 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