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

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

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

Test Get User-1       RETRIEVE    0

Test Delete User-1    DELETE      0

Test Add User-2       CREATE      1

Test Get User-2       RETRIEVE    1

Test Delete User-2    DELETE      1

Test Add User-3       CREATE      2

Test Get User-3       RETRIEVE    2

Test Delete User-3    DELETE      2

*** Keywords ***
Read InputFile
    ${userList} =    CORDRobot.jsonToList    ${PATHFILE}    UserInfo
    Set Suite Variable    ${uList}    ${userList}

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

Test Post Users API
    [Arguments]    ${listIndex}
    ${userList} =    Get Variable Value    ${uList}
    ${userDict}=    CORDRobot.listToDict    ${userList}    ${listIndex}
    ${api_result}=    CORDRobot.ApiPost    CORE_USERS    ${userDict}
    Should Be True    ${api_result}

Test Get Users API
    [Arguments]    ${listIndex}
    ${json_result}=    CORDRobot.ApiGet    CORE_USERS
    Log    ${json_result}
    ${userList}=    Get Variable Value    ${uList}
    ${inputDict}=    CORDRobot.listToDict    ${userList}    ${listIndex}
    ${email}=    CORDRobot.getFieldValueFromDict    ${inputDict}    email
    ${getJsonDict}=    CORDRobot.getDictFromListOfDict    ${json_result}    email    ${email}
    ${test_result}=    CORDRobot.compare_dict    ${inputDict}    ${getJsonDict}
    Should Be True    ${json_result}

Test Delete Users API
    [Arguments]    ${listIndex}
    ${json_getresult}=    CORDRobot.ApiGet    CORE_USERS
    ${userList}=    Get Variable Value    ${uList}
    ${userDict}=    CORDRobot.listToDict    ${uList}    ${listIndex}
    ${email}=    CORDRobot.getFieldValueFromDict    ${userDict}    email
    Log    ${email}
    ${getUserDict}=    CORDRobot.getDictFromListofDict    ${json_getresult}    email    ${email}
    Log    ${getUserDict}
    ${userID}=    CORDRobot.getFieldValueFromDict    ${getUserDict}    id
    Log    ${userID}
    ${test_result}=    CORDRobot.ApiDelete    CORE_USERS    ${userID}
    Should be True    ${test_result}
