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

*** Variables ***
${USER}           admin
${PASSWORD}       admin
${PATHFILE}       ${CURDIR}/data/sanityNode.json

*** 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}

Verify Node 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    CORE_SANITY_NODES    ${nodeDict}
    Should Be True    ${api_result}

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

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