/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.platform.helpers;

/** Helper class for functional tests of Users settings */
public interface IAutoUsersSettingsHelper extends IAppHelper {
    /**
     * Setup expectation: Users setting is open.
     *
     * <p>This method is to add a new user.
     */
    void addUser();

    /**
     * Setup expectation: Users setting is open.
     *
     * <p>This method is to check whether a user is in the current user list.
     *
     * @param userName - the user name of the user
     */
    boolean isUserPresented(String userName);

    /**
     * Setup expectation: Users setting is open.
     *
     * <p>This method is to remove a user by its userID.
     *
     * @param userName - the user name of the user to be removed
     */
    void removeUser(String userName);
}
