*** Settings ***
Documentation     Test suite for Instance API verification
Suite Setup       Read InputFile
Test Template     Verify Instance API functionality
Library           Collections
Library           String
Library           OperatingSystem
Library           XML
Library           RequestsLibrary
Library           CORDRobot
Library           ImportResource  resources=CORDRobot

| Variables |     ../Properties/RestApiProperties.py

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

*** Test Cases ***    TYPE        LISTINDEX
Test Add Instance-1
                      CREATE      0

Test Get Instance-1
                      RETRIEVE    0

Test Delete Instance-1
                      DELETE      0

Test Add Instance-2
                      CREATE      1

Test Get Instance-2
                      RETRIEVE    1

Test Delete Instance-2
                      DELETE      1

*** Keywords ***
Read InputFile
    ${instanceList} =    CORDRobot.jsonToList    ${PATHFILE}    InstanceInfo
    Set Suite Variable    ${iList}    ${instanceList}
    ${image}=    Catenate    SEPARATOR=    http://    ${IP}    :    ${PORT}    /api/core/images/1/
    Set Suite Variable    ${image}    ${image}
    ${slice}=    Catenate    SEPARATOR=    http://    ${IP}    :    ${PORT}    /api/core/slices/1/
    Set Suite Variable    ${slice}    ${slice}
    ${deployment}=    Catenate    SEPARATOR=    http://    ${IP}    :    ${PORT}    /api/core/deployments/1/
    Set Suite Variable    ${deployment}    ${deployment}
    ${node}=    Catenate    SEPARATOR=    http://    ${IP}    :    ${PORT}    /api/core/nodes/1/
    Set Suite Variable    ${node}    ${node}
    ${creator}=    Catenate    SEPARATOR=    http://    ${IP}    :    ${PORT}    /api/core/users/1/
    Set Suite Variable    ${creator}    ${creator}

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

Test Post Instances
    [Arguments]    ${listIndex}
    ${instanceList} =    Get Variable Value    ${iList}
    ${instanceDict}=    CORDRobot.listToDict    ${instanceList}    ${listIndex}
    ${image}=    Get Variable Value    ${image}
    ${instanceDict}=    CORDRobot.setFieldValueInDict    ${instanceDict}    image    ${image}
    ${slice}=    Get Variable Value    ${slice}
    ${instanceDict}=    CORDRobot.setFieldValueInDict    ${instanceDict}    slice    ${slice}
    ${deployment}=    Get Variable Value    ${deployment}
    ${instanceDict}=    CORDRobot.setFieldValueInDict    ${instanceDict}    deployment    ${deployment}
    ${node}=    Get Variable Value    ${node}
    ${instanceDict}=    CORDRobot.setFieldValueInDict    ${instanceDict}    node    ${node}
    ${creator}=    Get Variable Value    ${creator}
    ${instanceDict}=    CORDRobot.setFieldValueInDict    ${instanceDict}    creator    ${creator}
    ${api_result}=    CORDRobot.ApiPost    CORE_INSTANCES    ${instanceDict}
    Should Be True    ${api_result}

Test Get Instances
    [Arguments]    ${listIndex}
    ${json_result}=    CORDRobot.ApiGet    CORE_INSTANCES
    Log    ${json_result}
    ${instanceList}=    Get Variable Value    ${iList}
    ${instanceDict}=    CORDRobot.listToDict    ${instanceList}    ${listIndex}
    ${image}=    Get Variable Value    ${image}
    ${instanceDict}=    CORDRobot.setFieldValueInDict    ${instanceDict}    image    ${image}
    ${slice}=    Get Variable Value    ${slice}
    ${instanceDict}=    CORDRobot.setFieldValueInDict    ${instanceDict}    slice    ${slice}
    ${deployment}=    Get Variable Value    ${deployment}
    ${instanceDict}=    CORDRobot.setFieldValueInDict    ${instanceDict}    deployment    ${deployment}
    ${node}=    Get Variable Value    ${node}
    ${instanceDict}=    CORDRobot.setFieldValueInDict    ${instanceDict}    node    ${node}
    ${creator}=    Get Variable Value    ${creator}
    ${instanceDict}=    CORDRobot.setFieldValueInDict    ${instanceDict}    creator    ${creator}
    ${instanceName}=    CORDRobot.getFieldValueFromDict    ${instanceDict}    name
    ${getJsonDict}=    CORDRobot.getDictFromListOfDict    ${json_result}    name    ${instanceName}
    ${test_result}=    CORDRobot.compare_dict    ${instanceDict}    ${getJsonDict}
    Should Be True    ${json_result}

Test Delete Instances
    [Arguments]    ${listIndex}
    ${json_getresult}=    CORDRobot.ApiGet    CORE_INSTANCES
    ${instanceList}=    Get Variable Value    ${iList}
    ${instanceDict}=    CORDRobot.listToDict    ${iList}    ${listIndex}
    ${instanceName}=    CORDRobot.getFieldValueFromDict    ${instanceDict}    name
    Log    ${instanceName}
    ${getInstanceDict}=    CORDRobot.getDictFromListofDict    ${json_getresult}    name    ${instanceName}
    Log    ${getInstanceDict}
    ${instanceID}=    CORDRobot.getFieldValueFromDict    ${getInstanceDict}    id
    Log    ${instanceID}
    ${test_result}=    CORDRobot.ApiDelete    CORE_INSTANCES    ${instanceID}
    Should be True    ${test_result}
