*** Settings ***

Documentation  Test OpenBMC GUI "Manage user account" sub-menu  of
...            "Users".

Resource        ../../lib/resource.robot

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


*** Variables ***

${xpath_input_username}               //input[@name='UserName']
${xpath_input_password}               //input[@name='Password']
${xpath_input_retype_password}        //input[@name='VerifyPassword']
${xpath_input_user_role}              //select[@id='role']
${xpath_input_enabled_checkbox}       //label[@for="user-manage__enabled"]
${xpath_input_lockout_time}           //input[@id='lockoutTime']
${xpath_input_failed_login_attempts}  //input[@id='lockoutThreshold']
${xpath_select_manage_users}          //a[contains(text(), "Manage user account")]
${xpath_select_users}                 //button[contains(@class, "users")]
${xpath_save_setting_button}          //button[text() ="Save settings"]
${xpath_create_user_button}           //button[text() ="Create user"]
${xpath_edit_button}                  //button[text() ="Edit"]
${xpath_delete_button}                //button[text() ="Delete"]
${label}                              //label[@class="control-check"]
${xpath_edit_save_button}             //*[@id="user-accounts"]/form/section/div[7]/button[2]
&{user_password}                      testUser1=testUserPwd1  root=0penBmc
&{action_msg_relation}                add=User has been created successfully
                  ...                 modify=User has been updated successfully
                  ...                 add_dup=Username exists
&{user_invalid_password}              root=rootPwd1



*** Test Cases ***

Verify Existence Of All Section In User Page
    [Documentation]  Verify existence of all sections in user page..
    [Tags]  Verify_Existence_Of_All_Section_In_User_Page

    Page should contain  User account properties
    Page should contain  User account information
    Page should contain  User account settings


Verify Existence Of All Input Boxes In User Page
    [Documentation]  Verify existence of all input boxes in user page.
    [Tags]  Verify_Existence_Of_All_Input_Boxes_In_User_Page

    # Input boxes under user account settings
    Page Should Contain Element  ${xpath_input_username}
    Page Should Contain Element  ${xpath_input_password}
    Page Should Contain Element  ${xpath_input_retype_password}
    Page Should Contain Element  ${xpath_input_user_role}
    Page Should Contain Element  ${xpath_input_enabled_checkbox}

    # Input boxes under user account properties
    Page Should Contain Element  ${xpath_input_lockout_time}
    Page Should Contain Element  ${xpath_input_failed_login_attempts}


Verify Existence Of All Button In User Page
    [Documentation]  Verify existence of all button in user page.
    [Tags]  Verify_Existence_Of_All_Button_In_User_Page

    # Buttons under user account properties
    Page Should Contain Element  ${xpath_save_setting_button}

    # Buttons under user account settings
    Page Should Contain Element  ${xpath_create_user_button}

    # Buttons under user account properties
    Page Should Contain Element  ${xpath_edit_button}
    Page Should Contain Element  ${xpath_delete_button}

Verify Error When Duplicate User Is Created
    [Documentation]  Verify error when duplicate user is created.
    [Tags]  Verify_Error_When_Duplicate_User_Is_Created
    [Setup]  Delete Given Users

    Add Or Modify User  root  &{user_password}[root]  action=add_dup

Delete User And Verify
    [Documentation]  Delete user and verify.
    [Tags]  Delete_User_And_Verify
    [Setup]  Delete Given Users

    Add Or Modify User  testUser1  &{user_password}[testUser1]
    Delete Given Users  delete_user=testUser1
    Page Should Not Contain  testUser1

Verify Invalid Password Error
    [Documentation]  Verify the error message when user logs in with invalid password.
    [Tags]  Verify_Invalid_Password_Error
    [Setup]  Delete Given Users
    [Teardown]  Login OpenBMC GUI

    LogOut OpenBMC GUI
    Login And Verify Message  root  &{user_invalid_password}[root]  Invalid username or password

*** Keywords ***

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

    Click Button  ${xpath_select_users}
    Sleep  2s
    Wait Until Page Contains Element  ${xpath_select_manage_users}
    Click Element  ${xpath_select_manage_users}
    Wait Until Page Contains  User account information

Add Or Modify User
   [Documentation]  Creates or edits user.
   [Arguments]  ${username}  ${password}  ${role}=Administrator  ${enabled}=${True}
   ...          ${action}=add
   # Description of argument(s):
   # username  Name of the user to be created.
   # role      Role of the new user.
   # enabled   If True, User is enabled (Default), False, User is disabled.
   # action    add - Creates a new user.
   #           modify - Edits an existing user.
   #           add_dup - Tries to add a duplicate user and verifies the error message.

   Run Keyword If  '${action}' == 'add' or '${action}' == 'add_dup'
              ...  Input Text  ${xpath_input_username}  ${username}
   Input Password  ${xpath_input_password}  ${password}
   Input Password  ${xpath_input_retype_password}  ${password}
   Log  ${role}
   Select From List By Value  ${xpath_input_user_role}  ${role}
   Run Keyword If  '${enabled}' == 'True'  Click Element  ${xpath_input_enabled_checkbox}
   Run Keyword If  '${action}' == 'modify'
   ...  Click Button  ${xpath_edit_save_button}
   ...  ELSE  Click Button  ${xpath_create_user_button}
   Capture Page Screenshot
   Page Should Contain  &{action_msg_relation}[${action}]

Delete Given Users
   [Documentation]  Deletes users based on the input.
   [Arguments]  ${delete_user}=nonRoot
   # Description of argument(s):
   # delete_user  values - nonRoot/username
   #              If nonRoot - Deletes all non-root users,
   #                 username - Deletes the given user.

   Wait Until Page Contains  root
   Run Keyword If  '${delete_user}' != 'nonRoot'  Page Should Contain  ${delete_user}
   # Row id that gets deleted in every iteration.
   ${deleting_row_id}=  Set Variable  1
   :FOR  ${row}  IN RANGE  1  16
   \    ${xpath_user}=  Set Variable  //*[@id="user-accounts"]/div[4]/div[2]/div[${deleting_row_id}]/div[1]
   \    ${status}=  Run Keyword And Return Status  Page Should Contain Element  ${xpath_user}
   \    Exit For Loop If  '${status}' == 'False'
   \    ${user}=  Get Text  ${xpath_user}
   \    ${deleting_row_id}  Run Keyword If  '${user}' == 'root' or '${deleting_row_id}' == '2'  Set Variable  2
   \    ...  ELSE  Set Variable  1
   \    Continue For Loop If  '${user}' == 'root'
   \    ${xpath_delete_user}  Run Keyword If  '${user}' == '${delete_user}' or '${delete_user}' == 'nonRoot'
   \    ...  Set Variable  //*[@id="user-accounts"]/div[4]/div[2]/div[${deleting_row_id}]/div[5]/button[2]
   \    Run Keyword If  '${user}' == '${delete_user}' or '${delete_user}' == 'nonRoot'
   \    ...  Run Keywords  Click Button  ${xpath_delete_user}
   \    ...  AND  Page Should Contain  User has been deleted successfully
   \    ...  AND  Reload Page
   \    ...  AND  Exit For Loop If  '${user}' == '${delete_user}'

Login And Verify Message
   [Documentation]  Verifies the error message displayed on screen while logging in.
   [Arguments]  ${username}  ${password}  ${msg}

    Input Text  ${xpath_textbox_username}  ${username}
    Input Password  ${xpath_textbox_password}  ${password}
    Click Element  ${xpath_button_login}
    Page Should Contain  ${msg}
