blob: 5760bf219c64c22c481588c8eeeb268cf6c26e7b [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/authentication/ui_bundled/separate_profiles_util.h"
#import "base/strings/sys_string_conversions.h"
#import "base/test/ios/wait_util.h"
#import "ios/chrome/browser/authentication/account_menu/public/account_menu_constants.h"
#import "ios/chrome/browser/authentication/ui_bundled/history_sync/pref_names.h"
#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h"
#import "ios/chrome/browser/first_run/ui_bundled/first_run_constants.h"
#import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_constants.h"
#import "ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_table_view_controller_constants.h"
#import "ios/chrome/browser/signin/model/fake_system_identity.h"
#import "ios/chrome/grit/ios_strings.h"
#import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
#import "ios/testing/earl_grey/earl_grey_test.h"
#import "ui/base/l10n/l10n_util.h"
id<GREYMatcher> IdentityDiscMatcher() {
return grey_accessibilityID(kNTPFeedHeaderIdentityDisc);
}
id<GREYMatcher> AccountMenuMatcher() {
return grey_accessibilityID(kAccountMenuTableViewId);
}
id<GREYMatcher> SignOutSnackbarLabelMatcher() {
NSString* snackbarLabel = l10n_util::GetNSString(
IDS_IOS_GOOGLE_ACCOUNT_SETTINGS_SIGN_OUT_SNACKBAR_MESSAGE);
return grey_accessibilityLabel(snackbarLabel);
}
void TapIdentityDisc() {
[ChromeEarlGrey
waitForSufficientlyVisibleElementWithMatcher:IdentityDiscMatcher()];
[[EarlGrey selectElementWithMatcher:IdentityDiscMatcher()]
performAction:grey_tap()];
}
void OpenAccountMenu() {
TapIdentityDisc();
// Ensure the Account Menu is displayed.
[ChromeEarlGrey
waitForSufficientlyVisibleElementWithMatcher:AccountMenuMatcher()];
}
void OpenManageAccountsView() {
OpenAccountMenu();
// Tap on the Ellipsis button.
[[EarlGrey
selectElementWithMatcher:grey_accessibilityID(
kAccountMenuSecondaryActionMenuButtonId)]
performAction:grey_tap()];
// Tap on Manage accounts.
[[EarlGrey
selectElementWithMatcher:grey_allOf(
grey_text(l10n_util::GetNSString(
IDS_IOS_ACCOUNT_MENU_EDIT_ACCOUNT_LIST)),
grey_interactable(), nil)]
performAction:grey_tap()];
// Checks the manage accounts view is shown.
[[EarlGrey selectElementWithMatcher:grey_accessibilityID(
kSettingsEditAccountListTableViewId)]
assertWithMatcher:grey_sufficientlyVisible()];
}
void SignoutFromAccountMenu() {
OpenAccountMenu();
// Tap in Sign out.
[[EarlGrey selectElementWithMatcher:grey_accessibilityID(
kAccountMenuSignoutButtonId)]
performAction:grey_tap()];
// Dismiss the signout snackbar.
[ChromeEarlGrey
waitForUIElementToAppearWithMatcher:SignOutSnackbarLabelMatcher()
timeout:base::test::ios::
kWaitForUIElementTimeout];
[[EarlGrey selectElementWithMatcher:SignOutSnackbarLabelMatcher()]
performAction:grey_tap()];
}
void WaitForEnterpriseOnboardingScreen() {
// Wait for the enterprise onboarding screen for `kWaitForActionTimeout`
// seconds.
ConditionBlock enterpriseOnboardingCondition = ^{
NSError* error;
[[EarlGrey selectElementWithMatcher:ManagedProfileCreationScreenMatcher()]
assertWithMatcher:grey_sufficientlyVisible()
error:&error];
return error == nil;
};
GREYAssert(base::test::ios::WaitUntilConditionOrTimeout(
base::test::ios::kWaitForActionTimeout,
enterpriseOnboardingCondition),
@"Enterprise onboarding didn't appear.");
}
id<GREYMatcher> SigninScreenMatcher() {
return grey_accessibilityID(
first_run::kFirstRunSignInScreenAccessibilityIdentifier);
}
id<GREYMatcher> ManagedProfileCreationScreenMatcher() {
return grey_accessibilityID(
kManagedProfileCreationScreenAccessibilityIdentifier);
}
id<GREYMatcher> BrowsingDataManagementScreenMatcher() {
return grey_accessibilityID(
kBrowsingDataManagementScreenAccessibilityIdentifier);
}
id<GREYMatcher> HistoryScreenMatcher() {
return grey_accessibilityID(kHistorySyncViewAccessibilityIdentifier);
}
id<GREYMatcher> DefaultBrowserScreenMatcher() {
return grey_accessibilityID(
first_run::kFirstRunDefaultBrowserScreenAccessibilityIdentifier);
}
id<GREYMatcher> AccountMenuSecondaryAccountsButtonMatcher() {
return grey_accessibilityID(kAccountMenuSecondaryAccountButtonId);
}
id<GREYMatcher> ContinueButtonWithIdentityMatcher(
FakeSystemIdentity* fakeIdentity) {
NSString* buttonTitle = l10n_util::GetNSStringF(
IDS_IOS_FIRST_RUN_SIGNIN_CONTINUE_AS,
base::SysNSStringToUTF16(fakeIdentity.userGivenName));
id<GREYMatcher> matcher =
grey_allOf(grey_accessibilityLabel(buttonTitle),
grey_accessibilityTrait(UIAccessibilityTraitStaticText),
grey_sufficientlyVisible(), nil);
return matcher;
}
void ClearHistorySyncPrefs() {
[ChromeEarlGrey clearUserPrefWithName:history_sync_prefs::
kHistorySyncSuccessiveDeclineCount];
[ChromeEarlGrey clearUserPrefWithName:history_sync_prefs::
kHistorySyncLastDeclinedTimestamp];
}