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

*** Variables ***
${PATHFILE}        ../data/FabricSwitch.json
${PATHFILE1}       ../data/FabricSwitchPort.json

*** Test Cases ***    TYPE                         LISTINDEX
Test Create FarbicSwitch-1
                      CREATE                       0
Test Get FabricSwitch-1
                      RETRIEVE     0
Test Create FabricSwitchPort-1
                      PORTCREATE                       0
Test Get FabricSwitchPort-1
                      PORTRETRIEVE     0
Test Create FabricSwitchPort-2
                      PORTCREATE                       1
Test Get FabricSwitchPort-2
                      PORTRETRIEVE     1

*** Keywords ***
Read InputFile
    ${FabricList}=    CORDRobot.jsonToList    ${PATHFILE}   FabricSwitchInfo
    Set Suite Variable    ${dlist}    ${FabricList}
    Set Global Variable    ${Fabric_Id}    ${EMPTY}
    ${FabricPortList}=    CORDRobot.jsonToList    ${PATHFILE1}   FabricSwitchPort
    Set Suite Variable    ${plist}    ${FabricPortList}
    Set Global Variable    ${SwitchPort_Id}    ${EMPTY}

Verify FabricSwitch functionality
    [Arguments]    ${type}    ${listIndex}
    Run Keyword If    "${type}" == "CREATE"    Test Create Fabric Switch    ${listIndex}
    Run Keyword If    "${type}" == "RETRIEVE"    Test Get Fabric Switch    ${listIndex}
    Run Keyword If    "${type}" == "PORTCREATE"    Test Create Switch Port API    ${listIndex}
    Run Keyword If    "${type}" == "PORTRETRIEVE"    Test Get Switch Port API    ${listIndex}

Test Create Fabric Switch
    [Arguments]    ${listIndex}
    ${FabricList} =    Get Variable Value    ${dlist}
    ${FabricDict}=    CORDRobot.listToDict    ${FabricList}    ${listIndex}
    ${api_result_status}    ${api_result_json}=    CORDRobot.ApiPostReturnJson    FABRIC_SWITCH    ${FabricDict}
    Should Be True    ${api_result_status}
    ${Fabric_Id}=    Get From Dictionary    ${api_result_json}    id
    Set Global Variable    ${Fabric_Id}

Test Get Fabric Switch
    [Arguments]    ${listIndex}
    Log    ${Fabric_Id}
    ${json_result}=    CORDRobot.ApiChameleonGet    FABRIC_SWITCH    ${Fabric_Id}
    Log    ${json_result}
    ${FabricList} =    Get Variable Value    ${dlist}
    ${FabricDict}=    CORDRobot.listToDict    ${FabricList}    ${listIndex}
    Log    ${FabricDict}
    ${test_result}=    CORDRobot.compare_dict    ${FabricDict}    ${json_result}
    Should Be True    ${test_result}

Test Create Switch Port API
    [Arguments]    ${listIndex}
    ${SwitchPortList} =    Get Variable Value    ${plist}
    ${SwitchPortDict}=    CORDRobot.listToDict    ${SwitchPortList}    ${listIndex}
    ${SwitchPortDict}=    CORDRobot.setFieldValueInDict    ${SwitchPortDict}    switch_id    ${Fabric_Id}
    ${api_result_status}    ${api_result_json}=    CORDRobot.ApiPostReturnJson    SWITCH_PORT    ${SwitchPortDict}
    Should Be True    ${api_result_status}
    ${SwitchPort_Id}=    Get From Dictionary    ${api_result_json}    id
    Set Global Variable    ${SwitchPort_Id}

Test Get Switch Port API
    [Arguments]    ${listIndex}
    Log    ${SwitchPort_Id}
    ${json_result}=    CORDRobot.ApiChameleonGet    SWITCH_PORT    ${SwitchPort_Id}
    Log    ${json_result}
    ${SwitchPortList} =    Get Variable Value    ${plist}
    ${SwitchPortDict}=    CORDRobot.listToDict    ${SwitchPortList}    ${listIndex}
    Log    ${SwitchPortDict}
    ${test_result}=    CORDRobot.compare_dict    ${SwitchPortDict}    ${json_result}
    Should Be True    ${test_result}
