*** Settings ***
Documentation     Test suite for Subscriber verification
Suite Setup       Read InputFile
Test Template     Verify Subscriber 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/Subscriber.json
${PATHFILE2}      ${CURDIR}/data/putSubscriber.json

*** Test Cases ***    TYPE        LISTINDEX
Test Create Subscriber-1
                      CREATE      0

Test Get_Subscriber-1
                      RETRIEVE    0

Test Edit Subscriber-1
                      PUT         0

Test Create Subscriber-2
                      CREATE      1

Test Get_Subscriber-2
                      RETRIEVE    1

Test Edit Subscriber-2
                      PUT         1

Test Create Subscriber-3
                      CREATE      2

Test Get_Subcriber-3
                      RETRIEVE    2

Test Edit Subscriber-3
                      PUT         2

*** Keywords ***
Read InputFile
    ${subscriberList} =    CORDRobot.jsonToList    ${PATHFILE}    SubscriberInfo
    Set Suite Variable    ${slist}    ${subscriberList}
    ${putSubscriberList}=    CORDRobot.jsonToList    ${PATHFILE2}    SubscriberInfo
    Set Suite Variable    ${putList}    ${putSubscriberList}

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

Test Post Subscriber API
    [Arguments]    ${listIndex}
    ${subscriberList} =    Get Variable Value    ${slist}
    ${subscriberDict}=    CORDRobot.listToDict    ${subscriberList}    ${listIndex}
    ${api_result}=    CORDRobot.ApiPost    TENANT_SUBSCRIBER    ${subscriberDict}
    Should Be True    ${api_result}

Test Get Subscriber API
    [Arguments]    ${listIndex}
    ${json_result}=    CORDRobot.ApiGet    TENANT_SUBSCRIBER
    Log    ${json_result}
    ${subscriberList}=    Get Variable Value    ${slist}
    ${subscriberDict}=    CORDRobot.listToDict    ${subscriberList}    ${listIndex}
    ${AccountNum}=    CORDRobot.getFieldValueFromDict    ${subscriberDict}    account_num
    ${getJsonDict}=    CORDRobot.getDictFromListOfDict    ${json_result}    account_num    ${AccountNum}
    ${test_result}=    CORDRobot.compare_dict    ${subscriberDict}    ${getJsonDict}
    Should Be True    ${test_result}

Test Edit Subscriber API
    [Arguments]    ${listIndex}
    ${get_result}=    CORDRobot.ApiGet    TENANT_SUBSCRIBER
    ${putSubscriberList}=    Get Variable Value    ${putList}
    ${putSubscriberDict}=    CORDRobot.listToDict    ${putSubscriberList}    ${listIndex}
    ${AcctNum}=    CORDRobot.getFieldValueFromDict    ${putSubscriberDict}    account_num
    ${subscriberDict}=    CORDRobot.getDictFromListofDict    ${get_result}    account_num    ${AcctNum}
    ${subscriberID}=    CORDRobot.getFieldValueFromDict    ${subscriberDict}    id
    ${api_result}=    CORDRobot.ApiPut    TENANT_SUBSCRIBER    ${putSubscriberDict}    ${subscriberID}
    Should Be True    ${api_result}
    ${getResultAfterPut}=    CORDRobot.ApiGet    TENANT_SUBSCRIBER    ${subscriberID}
    ${test_result}=    CORDRobot.compare_dict    ${putSubscriberDict}    ${getResultAfterPut}
    Should Be True    ${test_result}

Test Delete Subscriber API
    [Arguments]    ${listIndex}
    ${json_result}=    CORDRobot.ApiGet    TENANT_SUBSCRIBER
    ${subscriberList}=    Get Variable Value    ${slist}
    ${subscriberDict}=    CORDRobot.listToDict    ${subscriberList}    ${listIndex}
    ${AcctNum}=    CORDRobot.getFieldValueFromDict    ${subscriberDict}    account_num
    Log    ${AcctNum}
    ${subscriberDict}=    CORDRobot.getDictFromListofDict    ${json_result}    account_num    ${AcctNum}
    Log    ${subscriberDict}
    ${subscriberId}=    CORDRobot.getFieldValueFromDict    ${subscriberDict}    id
    Log    ${subscriberId}
    ${test_result}=    CORDRobot.ApiDelete    TENANT_SUBSCRIBER    ${subscriberId}
    Should Be True    ${test_result}
