*** Settings ***

Documentation  Test OpenBMC GUI "Server LED" sub-menu of "Server control".

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

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

*** Variables ***

${xpath_server_led_heading}  //h1[text()="Server LED"]
${xpath_led_value}           //*[@data-test-id='serverLed-checkbox-switchIndicatorLed']/following-sibling::label/span
${xpath_overview_led_value}  //*[@data-test-id='overviewQuickLinks-checkbox-serverLed']/following-sibling::label/span
${xpath_led_toggle}          //*[@data-test-id='serverLed-checkbox-switchIndicatorLed']


*** Test Cases ***

Verify Navigation To Server LED Page
    [Documentation]  Verify navigation to server LED page.
    [Tags]  Verify_Navigation_To_Server_LED_Page

    Page Should Contain Element  ${xpath_server_led_heading}


Verify Existence Of All Sections In Server LED Page
    [Documentation]  Verify existence of all sections in Server LED page.
    [Tags]  Verify_Existence_Of_All_Sections_In_Server_LED_Page

    Page Should Contain  LED light control


Verify Server Led Sync With Overview Page LED Status
    [Documentation]  Verify server LED sync with overview page LED status.
    [Tags]  Verify_Server_Led_Sync_With_Overview_Page_LED_Status

    ${gui_led_value} =  Get Text  ${xpath_led_value}
    Click Element  ${xpath_overview_menu}
    ${overview_led_value} =  Get Text  ${xpath_overview_led_value}

    Should Be Equal  ${gui_led_value}  ${overview_led_value}


Verify Server LED ON
    [Documentation]  Turn ON the server LED button using GUI and verify it via Redfish.
    [Tags]  Verify_Server_LED_ON
    [Setup]  Run Keywords  Test Setup Execution  AND  Redfish.Login
    [Teardown]  Redfish.logout

    # Turn Off the server LED via Redfish.
    Redfish.Patch  /redfish/v1/Systems/system  body={"IndicatorLED":"Off"}   valid_status_codes=[200, 204]

    # Refresh GUI and turn ON the server LED via GUI.
    Click Element  ${xpath_refresh_button}
    Click Element At Coordinates  ${xpath_led_toggle}  0  0
    Wait Until Element Contains  ${xpath_led_value}  On  timeout=15

    # Verify server LED via Redfish and GUI.
    Verify Server LED using Redfish and GUI  On


Verify Server LED OFF
    [Documentation]  Turn OFF the server LED button using GUI and verify it via Redfish.
    [Tags]  Verify_Server_LED_OFF
    [Setup]  Run Keywords  Test Setup Execution  AND  Redfish.Login
    [Teardown]  Redfish.logout

    # Turn ON the server LED via Redfish.
    Redfish.Patch  /redfish/v1/Systems/system  body={"IndicatorLED":"Lit"}   valid_status_codes=[200, 204]

    # Refresh GUI and turn OFF the server LED via GUI.
    Click Element  ${xpath_refresh_button}
    Click Element At Coordinates  ${xpath_led_toggle}  0  0
    Wait Until Element Contains  ${xpath_led_value}  Off  timeout=30

    # Verify server LED via Redfish and GUI.
    Verify Server LED using Redfish and GUI  Off


*** Keywords ***

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

    Click Element  ${xpath_control_menu}
    Click Element  ${xpath_server_led_sub_menu}
    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  server-led


Verify Server LED using Redfish and GUI
    [Documentation]  Verify LED status using Redfish and GUI.
    [Arguments]  ${expected_led_status}

    # Description of argument(s):
    # expected_led_status  Expected value of Server LED.

    ${gui_led_value} =  Get Text  ${xpath_led_value}
    ${redfish_led_value}=  Redfish.Get Attribute  /redfish/v1/Systems/system  IndicatorLED

    ${redfish_led_value}=  Set Variable If
    ...  '${redfish_led_value}' == 'Lit'  On
    ...  '${redfish_led_value}' == 'Off'  Off

    Should Be Equal  ${gui_led_value}  ${expected_led_status}
    Should Be Equal  ${redfish_led_value}  ${expected_led_status}
