*** Settings ***
Documentation     Test suite for Node API verification
Suite Setup       Read InputFile
Test Template     Verify Node API functionality
Library           Collections
Library           String
Library           OperatingSystem
Library           XML
Library           RequestsLibrary
Library           ../Framework/utils/utils.py
Library           ../Framework/restApi.py
Variables         ../Properties/RestApiProperties.py

*** Variables ***
${USER}           admin
${PASSWORD}       admin
${PATHFILE}       ${CURDIR}/data/Ch_Node.json
${IP}             ${SERVER_IP}
${PORT}           ${SERVER_PORT}

*** Test Cases ***    TYPE        LISTINDEX
Test Post Node-1      CREATE      0

Test Get Node-1       RETRIEVE    0

Test Delete Node-1    DELETE      0

Test Post Node-2      CREATE      1

Test Get Node-2       RETRIEVE    1

Test Delete Node-2    DELETE      1

*** Keywords ***
Read InputFile
    ${nodeList}=    utils.jsonToList    ${PATHFILE}    NodeInfo
    Set Suite Variable    ${nlist}    ${nodeList}
    ${siteDeployment}=    Catenate    SEPARATOR=    http://    ${IP}    :    ${PORT}
    ...    /api/core/sitedeployments/1/
    Set Suite Variable    ${siteDeployment}    ${siteDeployment}

Verify Node API functionality
    [Arguments]    ${type}    ${listIndex}
    Run Keyword If    "${type}" == "CREATE"    Test Post Node API    ${listIndex}
    Run Keyword If    "${type}" == "RETRIEVE"    Test Get Node API    ${listIndex}
    Run Keyword If    "${type}" == "DELETE"    Test Delete Node API    ${listIndex}

Test Post Node API
    [Arguments]    ${listIndex}
    ${nodeList}=    Get Variable Value    ${nlist}
    ${nodeDict}=    utils.listToDict    ${nodeList}    ${listIndex}
    ${api_result}=    restApi.ApiPost    CH_CORE_NODES    ${nodeDict}
    Should Be True    ${api_result}

Test Get Node API
    [Arguments]    ${listIndex}
    ${json_result}=    restApi.ApiGet    CH_CORE_NODES
    ${json_result_list}=    Get From Dictionary    ${json_result}    items
    Log    ${json_result_list}
    ${nodeList}=    Get Variable Value    ${nlist}
    ${nodeDict}=    utils.listToDict    ${nodeList}    ${listIndex}
    ${name}=    utils.getFieldValueFromDict    ${nodeDict}    name
    Log    ${name}
    ${getJsonDict}=    utils.getDictFromListOfDict    ${json_result_list}    name    ${name}
    ${test_result}=    utils.compare_dict    ${nodeDict}    ${getJsonDict}
    Should Be True    ${test_result}

Test Delete Node API
    [Arguments]    ${listIndex}
    ${json_result}=    restApi.ApiGet    CH_CORE_NODES
    ${json_result_list}=    Get From Dictionary    ${json_result}    items
    ${nodeList}=    Get Variable Value    ${nlist}
    ${nodeDict}=    utils.listToDict    ${nodeList}    ${listIndex}
    ${name}=    utils.getFieldValueFromDict    ${nodeDict}    name
    Log    ${name}
    ${nodeDict}=    utils.getDictFromListofDict    ${json_result_list}    name    ${name}
    Log    ${nodeDict}
    ${nodeId}=    utils.getFieldValueFromDict    ${nodeDict}    id
    Log    ${nodeId}
    ${test_result}=    restApi.ApiChameleonDelete    CH_CORE_NODES    ${nodeId}
    Should Be True    ${test_result}
