*** Settings ***

Documentation  Test OpenBMC GUI "User management" sub-menu of "Security and access".

Resource        ../../lib/gui_resource.robot

Suite Setup     Launch Browser And Login GUI
Suite Teardown  Suite Teardown Execution
Test Setup      Test Setup Execution

Force Tags      User_Management_Sub_Menu

*** Variables ***


${xpath_user_management_heading}         //h1[text()="User management"]
${xpath_select_user}                     //input[contains(@class,"custom-control-input")]
${xpath_account_policy}                  //button[contains(text(),'Account policy settings')]
${xpath_add_user}                        //button[contains(text(),'Add user')]
${xpath_edit_user}                       //*[@data-test-id='userManagement-tableRowAction-edit-0']
${xpath_delete_user}                     //*[@data-test-id='userManagement-tableRowAction-delete-1']
${xpath_account_status_enabled_button}   //*[@data-test-id='userManagement-radioButton-statusEnabled']
${xpath_account_status_disabled_button}  //*[@data-test-id='userManagement-radioButton-statusDisabled']
${xpath_username_input_button}           //*[@data-test-id='userManagement-input-username']
${xpath_privilege_list_button}           //*[@data-test-id='userManagement-select-privilege']
${xpath_password_input_button}           //*[@data-test-id='userManagement-input-password']
${xpath_password_confirm_button}         //*[@data-test-id='userManagement-input-passwordConfirmation']
${xpath_cancel_button}                   //*[@data-test-id='userManagement-button-cancel']
${xpath_submit_button}                   //*[@data-test-id='userManagement-button-submit']
${xpath_delete_button}                   //button[text()='Delete user']
${xpath_add_user_heading}                //h5[contains(text(),'Add user')]
${xpath_policy_settings_header}          //*[text()="Account policy settings"]
${xpath_auto_unlock}                     //*[@data-test-id='userManagement-radio-automaticUnlock']
${xpath_manual_unlock}                   //*[@data-test-id='userManagement-radio-manualUnlock']
${xpath_max_failed_login}                //*[@data-test-id='userManagement-input-lockoutThreshold']
${test_user_password}                    TestPwd1
${xpath_user_creation_error_message}     //*[contains(text(),'Error creating user')]
${xpath_close_error_message}             //*/*[contains(text(),'Error')]/following-sibling::button
@{username}                              admin_user  readonly_user  disabled_user
@{list_user_privilege}                   Administrator  ReadOnly


*** Test Cases ***

Verify Navigation To User Management Page
    [Documentation]  Verify navigation to user management page.
    [Tags]  Verify_Navigation_To_User_Management_Page

    Page Should Contain Element  ${xpath_user_management_heading}


Verify Existence Of All Sections In User Management Page
    [Documentation]  Verify existence of all sections in user management page.
    [Tags]  Verify_Existence_Of_All_Sections_In_User_Management_Page

    Page should contain  View privilege role descriptions


Verify Existence Of All Input Boxes In User Management Page
    [Documentation]  Verify existence of all sections in user managemnet page.
    [Tags]  Verify_Existence_Of_All_Input_Boxes_In_User_Management_Page

    Page Should Contain Checkbox  ${xpath_select_user}


Verify Existence Of All Buttons In User Management Page
    [Documentation]  Verify existence of all buttons in user management page.
    [Tags]  Verify_Existence_Of_All_Buttons_In_User_Management_Page

    Page should contain Button  ${xpath_account_policy}
    Page should contain Button  ${xpath_add_user}
    Page Should Contain Element  ${xpath_edit_user}
    Page Should Contain Element  ${xpath_delete_user}


Verify Existence Of All Button And Fields In Add User
    [Documentation]  Verify existence of all buttons and fields in add user page.
    [Tags]  Verify_Existence_Of_All_Button_And_Fields_In_Add_User
    [Teardown]  Click Element  ${xpath_cancel_button}

    Click Element  ${xpath_add_user}
    Wait Until Page Contains Element  ${xpath_add_user_heading}
    Page Should Contain Element  ${xpath_account_status_enabled_button}
    Page Should Contain Element  ${xpath_account_status_disabled_button}
    Page Should Contain Element  ${xpath_username_input_button}
    Page Should Contain Element  ${xpath_privilege_list_button}
    Page Should Contain Element  ${xpath_password_input_button}
    Page Should Contain Element  ${xpath_password_confirm_button}
    Page Should Contain Element  ${xpath_cancel_button}
    Page Should Contain Element  ${xpath_submit_button}


Verify Existence Of All Buttons And Fields In Account Policy Settings
    [Documentation]  Verify existence of all buttons and fields in account policy settings page.
    [Tags]  Verify_Existence_Of_All_Buttons_And_Fields_In_Account_Policy_Settings
    [Teardown]  Click Element  ${xpath_cancel_button}

    Click Element  ${xpath_account_policy}
    Wait Until Page Contains Element  ${xpath_policy_settings_header}
    Page Should Contain Element  ${xpath_auto_unlock}
    Page Should Contain Element  ${xpath_manual_unlock}
    Page Should Contain Element  ${xpath_max_failed_login}
    Page Should Contain Element  ${xpath_submit_button}
    Page Should Contain Element  ${xpath_cancel_button}


Verify User Access Privilege
    [Documentation]  Create a new user with a privilege and verify that user is created.
    [Tags]  Verify_User_Access_Privilege
    [Teardown]  Delete Users Via Redfish  @{username}
    [Template]  Create User And Verify

    # username       privilege_level  enabled
    ${username}[0]   Administrator    ${True}
    ${username}[1]   ReadOnly         ${True}
    ${username}[2]   Administrator    ${False}


Verify Operator And No Access User Privilege
    [Documentation]  Create users with different access privilege
    ...  and verify that the user is getting created.
    [Tags]  Verify_Operator_And_No_Access_User_Privilege
    [Template]  Create User And Verify

    # username      privilege_level  enabled
    operator_user   Operator         ${True}
    noaccess_user   NoAccess         ${True}


Verify User Account And Properties Saved Through Reboots
    [Documentation]  Verify that user account and properties saved through reboots.
    [Teardown]  Delete Users Via Redfish  my_admin_user
    [Tags]  Verify_User_Account_And_Properties_Saved_Through_Reboots

    # Create an User account.
    Create User And Verify  my_admin_user  Administrator  ${True}

    # Reboot BMC.
    Redfish OBMC Reboot (off)  stack_mode=normal

    Click Element  ${xpath_refresh_button}
    Wait Until Page Contains  my_admin_user  timeout=15


Delete User Account Via GUI
    [Documentation]  Delete user account via GUI.
    [Tags]  Delete_User_Account_Via_GUI

    # Create new user account via GUI.
    Create User And Verify  ${username}[0]  Administrator  ${True}

    # Delete the user created via GUI.
    Delete Users Via GUI  ${username}[0]


Verify Error While Creating Users With Same Name
    [Documentation]  Verify proper error message while creating two user accounts with same username.
    [Tags]  Verify_Error_While_Creating_Users_With_Same_Name
    [Teardown]  Delete Users Via Redfish  ${username}

    # Get random username and user privilege level.
    ${username}=  Generate Random String  8  [LETTERS]
    ${privilege_level}=  Evaluate  random.choice(${list_user_privilege})  random

    # Create new user account.
    Create User And Verify  ${username}  ${privilege_level}  ${True}

    # Expect failure while creating second user account with same username.
    Create User And Verify  ${username}  ${privilege_level}  ${True}  Failure


Test Modifying User Privilege Of Existing User Via GUI
    [Documentation]  Modify user privilege of existing user via GUI and verify the changes using Redfish.
    [Tags]  Test_Modifying_User_Privilege_Of_Existing_User_Via_GUI
    [Teardown]  Delete Users Via Redfish  ${username}

    # Get random username and user privilege level.
    ${username}=  Generate Random String  8  [LETTERS]
    ${privilege_level}=  Evaluate  random.choice(${list_user_privilege})  random

    # Create new user account.
    Create User And Verify  ${username}  ${privilege_level}  ${True}

    # Get user privilege role details distinct from the current ones.
    FOR  ${privilege}  IN  @{list_user_privilege}
      IF  '${privilege}' != '${privilege_level}'
          ${modify_privilege}=  Set Variable  ${privilege}
      END
    END

    # Modify user privilege via GUI.
    Wait Until Keyword Succeeds  30 sec   5 sec  Click Element
    ...  //td[text()='${username}']/following-sibling::*/*/*[@title='Edit user']
    Select From List by Value  ${xpath_privilege_list_button}  ${modify_privilege}

    # Submit changes.
    Click Element  ${xpath_submit_button}

    # Confirm the successful update.
    Wait Until Element Is Visible  ${xpath_success_message}  timeout=30
    Wait Until Element Is Not Visible  ${xpath_success_message}  timeout=30

    # Verify user privilege via Redfish.
    Redfish.Login
    ${resp}=  Redfish.Get  /redfish/v1/AccountService/Accounts/${username}
    Should Be Equal  ${resp.dict["RoleId"]}  ${modify_privilege}
    Redfish.Logout


Test Modifying User Account Status Of Existing User Via GUI
    [Documentation]  Test modifying user account status of existing user via GUI and verify changes using Redfish.
    [Tags]  Test_Modifying_User_Account_Status_Of_Existing_User_Via_GUI
    [Teardown]  Delete Users Via Redfish  ${username}

    # Get random username, user privilege level and account status.
    ${username}=  Generate Random String  8  [LETTERS]
    ${privilege_level}=  Evaluate  random.choice(${list_user_privilege})  random
    ${initial_account_status}=  Evaluate  random.choice([True, False])  random

    # Create new user account.
    Create User And Verify  ${username}  ${privilege_level}  ${initial_account_status}

    # Modify user account status via GUI.
    Wait Until Keyword Succeeds  30 sec   5 sec  Click Element
    ...  //td[text()='${username}']/following-sibling::*/*/*[@title='Edit user']
    Wait Until Element Is Visible  ${xpath_submit_button}  timeout=30

    # Switch the user account status to its opposite state.
    IF  ${initial_account_status} == ${True}
        Click Element At Coordinates  ${xpath_account_status_disabled_button}  0  0
    ELSE
        Click Element At Coordinates  ${xpath_account_status_enabled_button}  0  0
    END

    # Submit changes.
    Click Element  ${xpath_submit_button}

    # Confirm the successful update.
    Wait Until Element Is Visible  ${xpath_success_message}  timeout=30
    Wait Until Element Is Not Visible  ${xpath_success_message}  timeout=60

    # Verify account status via Redfish.
    IF  ${initial_account_status} == ${True}
        ${status}=  Run Keyword And Return Status  Redfish.Login  ${username}  ${test_user_password}
        Should Be Equal  ${status}  ${False}
    ELSE
        ${status}=  Run Keyword And Return Status  Redfish.Login  ${username}  ${test_user_password}
        Should Be Equal  ${status}  ${True}
    END


Test Modifying User Password Of Existing User Via GUI
    [Documentation]  Modify user password of existing user via GUI and verify changes using Redfish.
    [Tags]  Test_Modifying_User_Password_Of_Existing_User_Via_GUI
    [Teardown]  Delete Users Via Redfish  ${username}

    # Get random username, user privilege level and account status.
    ${username}=  Generate Random String  8  [LETTERS]
    ${privilege_level}=  Evaluate  random.choice(${list_user_privilege})  random
    ${initial_account_status}=  Evaluate  random.choice([True, False])  random

    # Initialize the new password for the account.
    ${new_password}=  Set Variable  Testpassword1

    # Create new user account.
    Create User And Verify  ${username}  ${privilege_level}  ${initial_account_status}

    # Wait for newly created user to appear on the page.
    Wait Until Element Is Visible  //td[text()='${username}']

    # Modify user password via GUI.
    Click Element  //td[text()='${username}']/following-sibling::*/*/*[@title='Edit user']
    Input Text  ${xpath_password_input_button}  ${new_password}
    Input Text  ${xpath_password_confirm_button}  ${new_password}

    # Submit changes.
    Click Element  ${xpath_submit_button}

    # Confirm the successful update.
    Wait Until Element Is Visible  ${xpath_success_message}  timeout=30
    Wait Until Element Is Not Visible  ${xpath_success_message}  timeout=60

    # Verify changes via Redfish.
    ${status}=  Run Keyword And Return Status  Redfish.Login  ${username}  ${new_password}
    Should Be Equal  ${status}  ${True}


*** Keywords ***

Create User And Verify
    [Documentation]  Create a user with given user name and privilege and verify that the
    ...  user is created successfully via GUI and Redfish.
    [Arguments]  ${user_name}  ${user_privilege}  ${enabled}  ${expected_status}=Success

    # Description of argument(s):
    # user_name           The name of the user to be created (e.g. "test", "robert", etc.).
    # user_privilege      Privilege of the user.
    # enabled             If the user is enabled (e.g True if enabled, False if disabled).
    # expected_status     Expected status of user creation (e.g. Success, Failure).

    Click Element  ${xpath_add_user}
    Wait Until Page Contains Element  ${xpath_add_user_heading}

    # Select disabled radio button if user needs to be disabled
    Run Keyword If  ${enabled} == ${False}
    ...  Click Element At Coordinates  ${xpath_account_status_disabled_button}  0  0

    # Input username, password and privilege.
    Input Text  ${xpath_username_input_button}  ${user_name}
    Select From List by Value  ${xpath_privilege_list_button}  ${user_privilege}

    Input Text  ${xpath_password_input_button}  ${test_user_password}

    Input Text  ${xpath_password_confirm_button}  ${test_user_password}

    # Submit.
    Click Element  ${xpath_submit_button}

    # Proceed with future steps based on the expected execution status.
    IF  '${expected_status}' == 'Success'
        Wait Until Element Is Visible  ${xpath_success_message}  timeout=30

        # Refresh page and check new user is available.
        Wait Until Page Contains Element  ${xpath_add_user}
        Click Element  ${xpath_refresh_button}
        Wait Until Element Is Not Visible   ${xpath_page_loading_progress_bar}  timeout=30
        Wait Until Page Contains  ${user_name}  timeout=15

        # Cross check the privilege of newly added user via Redfish.
        Redfish.Login
        ${user_priv_redfish}=  Redfish_Utils.Get Attribute
        ...  /redfish/v1/AccountService/Accounts/${user_name}  RoleId
        Should Be Equal  ${user_privilege}  ${user_priv_redfish}
        Redfish.Logout

        # Check enable/disable status for user.
        ${status}=  Run Keyword And Return Status  Redfish.Login  ${user_name}  ${test_user_password}
        Run Keyword If  ${enabled} == ${False}
        ...  Should Be Equal  ${status}  ${False}
        ...  ELSE  Should Be Equal  ${status}  ${True}
        Redfish.Logout

    ELSE IF   '${expected_status}' == 'Failure'
        Wait Until Element Is Visible  ${xpath_user_creation_error_message}  timeout=60

        # Close error message popup.
        Click Element  ${xpath_close_error_message}
        Wait Until Element Is Not Visible  ${xpath_user_creation_error_message}  timeout=60
    END


Test Setup Execution
    [Documentation]  Do test case setup tasks.

    # Navigate to https://xx.xx.xx.xx/#/access-control/user-management  user management page.

    Click Element  ${xpath_secuity_and_accesss_menu}
    Click Element  ${xpath_user_management_sub_menu}
    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  user-management
    Wait Until Element Is Not Visible   ${xpath_page_loading_progress_bar}  timeout=30


Delete Users Via Redfish
    [Documentation]  Delete given users using Redfish.
    [Arguments]  @{user_list}
    # Description of argument(s):
    # user_list          List of user name to be deleted.

    FOR  ${user}  IN  @{user_list}
      Redfish.Login
      Redfish.Delete  /redfish/v1/AccountService/Accounts/${user}
      Redfish.Logout
    END


Delete Users Via GUI
    [Documentation]  Delete given users via GUI.
    [Arguments]  @{user_list}
    # Description of argument(s):
    # user_list          List of user name to be deleted.

    FOR  ${user}  IN  @{user_list}
      Wait Until Keyword Succeeds  30 sec  5 sec  Click Element
      ...  //td[text()='${user}']/following-sibling::*/*/*[@title='Delete user']
      Wait Until Keyword Succeeds  30 sec  5 sec  Click Element  ${xpath_delete_button}
      Wait Until Element Is Visible  ${xpath_success_message}  timeout=30
      Wait Until Element Is Not Visible  ${xpath_success_message}  timeout=60
    END


Suite Teardown Execution
    [Documentation]  Do suite teardown tasks.

    Run Keyword And Ignore Error  Logout GUI
    Close Browser
    Redfish.Logout
