*** 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           ../Framework/restapi/RestApiTest.py
Library           ../Framework/restapi/utils.py

*** Variables ***
${USER}           admin
${PASSWORD}       admin
${PATHFILE}       ${CURDIR}/../Framework/restapi/Subscribers.json

*** Test Cases ***    TYPE        LISTINDEX
Test Subscriber-1     CREATEP     0

Test Get_Subscriber-1
                      RETRIEVE    0

Test Subscriber-2     CREATEP     1

Test Get_Subscriber-2
                      RETRIEVE    1

*** Keywords ***
Read InputFile
    ${subscriberList} =    utils.jsonToList    ${PATHFILE}    SubscriberInfo
    Set Suite Variable    ${slist}    ${subscriberList}

Verify Subscriber functionality
    [Arguments]    ${type}    ${listIndex}
    Run Keyword If    "${type}" == "CREATEP"    Test Post Subscriber API    ${listIndex}
    Run Keyword If    "${type}" == "RETRIEVE"    Test Get Subscriber API    ${listIndex}

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

Test Get Subscriber API
    [Arguments]    ${listIndex}
    ${json_result}=    RestApiTest.TestGet
    Log    ${json_result}
    #${actual_json}=    Get From Dictionary    ${subscriber.json}    Subscriber
    #Dictionaries Should Be Equal    ${json_result}    ${actual_json}
