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

*** Variables ***
${PATHFILE}       ${CURDIR}/data/Ch_Site.json
${PATHFILE2}      ${CURDIR}/data/Ch_putSite.json

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

Test Get Site-1       RETRIEVE    0

Test Edit Site-1      PUT         0

Test Delete Site-1    DELETE      0

Test Post Site-2      CREATE      1

Test Get Site-2       RETRIEVE    1

Test Edit Site-2      PUT         1

Test Delete Site-2    DELETE      1

*** Keywords ***
Read InputFile
    ${siteList}=    CORDRobot.jsonToList    ${PATHFILE}    SiteInfo
    Set Suite Variable    ${slist}    ${siteList}
    ${putSiteList}=    CORDRobot.jsonToList    ${PATHFILE2}    SiteInfo
    Set Suite Variable    ${putList}    ${putSiteList}

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

Test Post Site API
    [Arguments]    ${listIndex}
    ${siteList} =    Get Variable Value    ${slist}
    ${siteDict}=    CORDRobot.listToDict    ${siteList}    ${listIndex}
    ${api_result}=    CORDRobot.ApiPost    CH_CORE_SITES    ${siteDict}
    Should Be True    ${api_result}

Test Get Site API
    [Arguments]    ${listIndex}
    ${json_result}=    CORDRobot.ApiGet    CH_CORE_SITES
    ${json_result_list}=    Get From Dictionary    ${json_result}    items
    Log    ${json_result_list}
    ${siteList}=    Get Variable Value    ${slist}
    ${siteDict}=    CORDRobot.listToDict    ${siteList}    ${listIndex}
    ${name}=    CORDRobot.getFieldValueFromDict    ${siteDict}    name
    ${getJsonDict}=    CORDRobot.getDictFromListOfDict    ${json_result_list}    name    ${name}
    ${test_result}=    CORDRobot.compare_dict    ${siteDict}    ${getJsonDict}
    Should Be True    ${test_result}

Test Edit Site API
    [Arguments]    ${listIndex}
    ${get_result}=    CORDRobot.ApiGet    CH_CORE_SITES
    ${get_result_list}=    Get From Dictionary    ${get_result}    items
    ${putSiteList}=    Get Variable Value    ${putList}
    ${putSiteDict}=    CORDRobot.listToDict    ${putSiteList}    ${listIndex}
    ${name}=    CORDRobot.getFieldValueFromDict    ${putSiteDict}    name
    ${siteDict}=    CORDRobot.getDictFromListofDict    ${get_result_list}    name    ${name}
    ${siteID}=    CORDRobot.getFieldValueFromDict    ${siteDict}    id
    ${api_result}=    CORDRobot.ApiChameleonPut    CH_CORE_SITES    ${putSiteDict}    ${siteID}
    Should Be True    ${api_result}
    ${getResultAfterPut}=    CORDRobot.ApiChameleonGet    CH_CORE_SITES    ${siteID}
    ${test_result}=    CORDRobot.compare_dict    ${putSiteDict}    ${getResultAfterPut}
    Should Be True    ${test_result}

Test Delete Site API
    [Arguments]    ${listIndex}
    ${json_result}=    CORDRobot.ApiGet    CH_CORE_SITES
    ${json_result_list}=    Get From Dictionary    ${json_result}    items
    ${siteList}=    Get Variable Value    ${slist}
    ${siteDict}=    CORDRobot.listToDict    ${siteList}    ${listIndex}
    ${name}=    CORDRobot.getFieldValueFromDict    ${siteDict}    name
    Log    ${name}
    ${siteDict}=    CORDRobot.getDictFromListofDict    ${json_result_list}    name    ${name}
    Log    ${siteDict}
    ${siteId}=    CORDRobot.getFieldValueFromDict    ${siteDict}    id
    Log    ${siteId}
    ${test_result}=    CORDRobot.ApiChameleonDelete    CH_CORE_SITES    ${siteId}
    Should Be True    ${test_result}
