*** Settings ***
Documentation     Test suite for configuring OLT device using REST APIs
Suite Setup       Read InputFile
Test Template     Configuring Real OLT device
Library           Collections
Library           String
Library           OperatingSystem
Library           XML
Library           RequestsLibrary
Library           ../Framework/utils/utils.py
Library           ../Framework/restApi.py

*** Variables ***
${PATHFILE}       ${CURDIR}/data/RealOLTDevice.json

*** Test Cases ***    TYPE                         LISTINDEX
Test Create VOLTDevice-1
                      CREATE                       0
Test Get VOLTDevice-1
                      RETRIEVE                     0

*** Keywords ***
Read InputFile
    ${voltDeviceList}=    utils.jsonToList    ${PATHFILE}    VOLTDeviceInfo
    Set Suite Variable    ${dlist}    ${voltDeviceList}
    Set Global Variable    ${VOLTDevice_Id}    ${EMPTY}

Configuring Real OLT device
    [Arguments]    ${type}    ${listIndex}
    Run Keyword If    "${type}" == "CREATE"    Test Post VOLT Device API    ${listIndex}
    Run Keyword If    "${type}" == "RETRIEVE"    Test Get VOLT Device API    ${listIndex}

Test Post VOLT Device API
    [Arguments]    ${listIndex}
    ${voltDeviceList} =    Get Variable Value    ${dlist}
    ${voltDeviceDict}=    utils.listToDict    ${voltDeviceList}    ${listIndex}
    ${api_getResult}=    restApi.ApiGet    VOLT_SERVICE
    ${voltServiceList}=    Get From Dictionary    ${api_getResult}    items
    ${voltServiceDict}=    utils.getDictFromListOfDict    ${voltServiceList}    leaf_model_name    VOLTService
    ${VOLTService_Id}=    Get From Dictionary    ${voltServiceDict}    id
    ${voltDeviceDict}=    utils.setFieldValueInDict    ${voltDeviceDict}    volt_service_id    ${VOLTService_Id}
    Log    ${voltDeviceDict}
    ${api_result_status}    ${api_result_json}=    restApi.ApiPostReturnJson    VOLT_DEVICE    ${voltDeviceDict}
    Should Be True    ${api_result_status}
    ${VOLTDevice_Id}=    Get From Dictionary    ${api_result_json}    id
    Set Global Variable    ${VOLTDevice_Id}

Test Get VOLT Device API
    [Arguments]    ${listIndex}
    Log    ${VOLTDevice_Id}
    ${json_result}=    restApi.ApiChameleonGet    VOLT_DEVICE    ${VOLTDevice_Id}
    Log    ${json_result}
    ${voltDeviceList} =    Get Variable Value    ${dlist}
    ${voltDeviceDict}=    utils.listToDict    ${voltDeviceList}    ${listIndex}
    Log    ${voltDeviceDict}
    ${test_result}=    utils.compare_dict    ${voltDeviceDict}    ${json_result}
    Should Be True    ${test_result}
