*** Settings ***
Documentation     Test suite for VOLTDevice
Suite Setup       Read InputFile
Test Template     Verify VOLTDevice functionality
Library           Collections
Library           String
Library           OperatingSystem
Library           XML
Library           RequestsLibrary
Library           ../Framework/utils/utils.py
Library           ../Framework/restApi.py

*** Variables ***
${PATHFILE}       ${CURDIR}/data/VOLTDevice.json
${PATHFILE1}      ${CURDIR}/data/PONPort.json
${PATHFILE2}      ${CURDIR}/data/ONUDevice.json

*** Test Cases ***    TYPE                         LISTINDEX
Test Create VOLTDevice-1
                      CREATE                       0
Test Get VOLTDevice-1
                      RETRIEVE                     0
Test Create PONPort-1
                      PONCREATE                       0
Test Get PONPort-1
                      PONRETRIEVE                     0
Test Create ONUDevice-1
                      ONUCREATE                       0
Test Get ONUDevice-1
                      ONURETRIEVE                     0
Test Create VOLTDevice-2
                      CREATE       1
Test Get VOLTDevice-2
                      RETRIEVE     1
Test Create PONPort-2
                      PONCREATE       1
Test Get PONPort-2
                      PONRETRIEVE     1
Test Create ONUDevice-2
                      ONUCREATE                       1
Test Get ONUDevice-2
                      ONURETRIEVE                     1
Test Create VOLTDevice-3
                      CREATE       2
Test Get VOLTDevice-3
                      RETRIEVE     2
Test Create PONPort-3
                      PONCREATE       2
Test Get PONPort-3
                      PONRETRIEVE     2
Test Create ONUDevice-3
                      ONUCREATE                       2
Test Get ONUDevice-3
                      ONURETRIEVE                     2


*** Keywords ***
Read InputFile
    ${voltDeviceList}=    utils.jsonToList    ${PATHFILE}    VOLTDeviceInfo
    Set Suite Variable    ${dlist}    ${voltDeviceList}
    Set Global Variable    ${VOLTDevice_Id}    ${EMPTY}
    ${PONPortList}=    utils.jsonToList    ${PATHFILE1}    PONPortInfo
    Set Suite Variable    ${plist}    ${PONPortList}
    Set Suite Variable    ${PONPort_Id}    ${EMPTY}
    ${ONUDeviceList}=    utils.jsonToList    ${PATHFILE2}    ONUDeviceInfo
    Set Suite Variable    ${nlist}    ${ONUDeviceList}
    Set Suite Variable    ${ONUDevice_Id}    ${EMPTY}

Verify VOLTDevice functionality
    [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}
    Run Keyword If    "${type}" == "DELETE"    Test Delete VOLT Device API    ${listIndex}
    Run Keyword If    "${type}" == "PONCREATE"    Test Post PONPort API    ${listIndex}
    Run Keyword If    "${type}" == "PONRETRIEVE"    Test Get PONPort API    ${listIndex}
    Run Keyword If    "${type}" == "ONUCREATE"    Test Post ONUDevice API    ${listIndex}
    Run Keyword If    "${type}" == "ONURETRIEVE"    Test Get ONUDevice 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}

Test Post PONPort API
    [Arguments]    ${listIndex}
    ${PONPortList} =    Get Variable Value    ${plist}
    ${PONPortDict}=    utils.listToDict    ${PONPortList}    ${listIndex}
    ${PONPortDict}=    utils.setFieldValueInDict    ${PONPortDict}    olt_device_id    ${VOLTDevice_Id}
    ${api_result_status}    ${api_result_json}=    restApi.ApiPostReturnJson    PON_PORT    ${PONPortDict}
    Should Be True    ${api_result_status}
    ${PONPort_Id}=    Get From Dictionary    ${api_result_json}    id
    Set Global Variable    ${PONPort_Id}

Test Get PONPort API
    [Arguments]    ${listIndex}
    Log    ${PONPort_Id}
    ${json_result}=    restApi.ApiChameleonGet    PON_PORT    ${PONPort_Id}
    Log    ${json_result}
    ${PONPortList} =    Get Variable Value    ${plist}
    ${PONPortDict}=    utils.listToDict    ${PONPortList}    ${listIndex}
    Log    ${PONPortDict}
    ${test_result}=    utils.compare_dict    ${PONPortDict}    ${json_result}
    Should Be True    ${test_result}

Test Post ONUDevice API
    [Arguments]    ${listIndex}
    ${ONUDeviceList}=    Get Variable Value    ${nlist}
    ${ONUDeviceDict}=    utils.listToDict    ${ONUDeviceList}    ${listIndex}
    ${ONUDeviceDict}=    utils.setFieldValueInDict    ${ONUDeviceDict}    pon_port_id    ${PONPort_Id}
    ${api_result_status}    ${api_result_json}=    restApi.ApiPostReturnJson    ONU_DEVICE    ${ONUDeviceDict}
    Should Be True    ${api_result_status}
    ${ONUDevice_Id}=    Get From Dictionary    ${api_result_json}    id
    Set Global Variable    ${ONUDevice_Id}

Test Get ONUDevice API
    [Arguments]    ${listIndex}
    Log    ${ONUDevice_Id}
    ${json_result}=    restApi.ApiChameleonGet    ONU_DEVICE    ${ONUDevice_Id}
    Log    ${json_result}
    ${ONUDeviceList} =    Get Variable Value    ${nlist}
    ${ONUDeviceDict}=    utils.listToDict    ${ONUDeviceList}    ${listIndex}
    Log    ${ONUDeviceDict}
    ${test_result}=    utils.compare_dict    ${ONUDeviceDict}    ${json_result}
    Should Be True    ${test_result}

Test Delete VOLT Device API
    [Arguments]    ${listIndex}
    ${test_result}=    restApi.ApiChameleonDelete    VOLT_DEVICE    ${VOLTDevice_Id}
    Should Be True    ${test_result}
