*** Settings ***
Documentation     Test suite for Instance creation for multiple subscribers with different "s_tags"
Suite Setup       Read InputFile
Test Template     Verify Instance 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/VoltTenant.json

*** Test Cases ***    TYPE                 LISTINDEX
Test Create Instance-1
                      SUBSCRIBER_CREATE    0

Test Create Subscriber-2
                      SUBSCRIBER_CREATE    1

Test Create Subscriber-3
                      SUBSCRIBER_CREATE    2

Test Create Tenant-1
                      TENANT_CREATE        0

Test Create Tenant-2
                      TENANT_CREATE        1

Test Create Tenant-3
                      TENANT_CREATE        2

Test Instance creation validation-1
                      INSTANCE_VALIDATE    0

Test Instance creation validation-2
                      INSTANCE_VALIDATE    1

Test Instance creation validation-3
                      INSTANCE_VALIDATE    2

*** Keywords ***
Read InputFile
    ${subscriberList} =    CORDRobot.jsonToList    ${PATHFILE}    SubscriberInfo
    Set Suite Variable    ${slist}    ${subscriberList}
    ${voltList}=    CORDRobot.jsonToList    ${PATHFILE2}    voltSubscriberInfo
    Set Suite Variable    ${vlist}    ${voltList}

Verify Instance functionality
    [Arguments]    ${type}    ${listIndex}
    Run Keyword If    "${type}" == "SUBSCRIBER_CREATE"    Test Post Subscriber Create    ${listIndex}
    Run Keyword If    "${type}" == "TENANT_CREATE"    Test Post volt Tenant Create    ${listIndex}
    Run Keyword If    "${type}" == "INSTANCE_VALIDATE"    Test Instance Validation    ${listIndex}

Test Post Subscriber Create
    [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 Post volt Tenant Create
    [Arguments]    ${listIndex}
    ${voltTenantList} =    Get Variable Value    ${vlist}
    ${voltTenantDict}=    CORDRobot.listToDict    ${voltTenantList}    ${listIndex}
    ${voltDict}=    Get From Dictionary    ${voltTenantDict}    voltTenant
    ${account_num}=    Get From Dictionary    ${voltTenantDict}    account_num
    ${get_result}=    CORDRobot.ApiGet    TENANT_SUBSCRIBER
    ${subscriberDict}=    CORDRobot.getDictFromListofDict    ${get_result}    account_num    ${account_num}
    ${subscriberID}=    CORDRobot.getFieldValueFromDict    ${subscriberDict}    id
    ${updatedVoltDict}=    CORDRobot.setFieldValueInDict    ${voltDict}    subscriber    ${subscriberID}
    ${api_result}=    CORDRobot.ApiPost    TENANT_VOLT    ${updatedVoltDict}
    Should Be True    ${api_result}
    # Verifying Get operation after POST
    ${getVolt_result}=    CORDRobot.ApiGet    TENANT_VOLT
    ${getJsonDict}=    CORDRobot.getDictFromListOfDict    ${getVolt_result}    subscriber    ${subscriberID}
    ${test_result}=    CORDRobot.compare_dict    ${voltDict}    ${getJsonDict}
    Should Be True    ${test_result}

Test Instance Validation
    [Arguments]    ${listIndex}
    ${voltTenantList}=    Get Variable Value    ${vlist}
    ${voltTenantDict}=    CORDRobot.listToDict    ${voltTenantList}    ${listIndex}
    ${voltDict}=    Get From Dictionary    ${voltTenantDict}    voltTenant
    ${input_sTag}=    Get From Dictionary    ${voltDict}    s_tag
    ${get_result}=    CORDRobot.ApiGet    TENANT_VOLT
    ${tenantDict}=    CORDRobot.getDictFromListofDict    ${get_result}    s_tag    ${input_sTag}
    Log    ${tenantDict}
    ${instance_id_fromvolt}=    CORDRobot.getFieldValueFromDict    ${tenantDict}    instance_id
    ${instance_name}=    CORDRobot.getFieldValueFromDict    ${tenantDict}    instance_name
    ${instance_id_name}=    Catenate    SEPARATOR=-    ${instance_name}    ${instance_id_fromvolt}
    ${get_instanceresult}=    CORDRobot.ApiGet    CORE_INSTANCES
    ${instanceDict}=    CORDRobot.getDictFromListofDict    ${get_instanceresult}    instance_name    ${instance_id_name}
    ${instance_id_fromCore}=    CORDRobot.getFieldValueFromDict    ${instanceDict}    id
    Should Be Equal As Strings    ${instance_id_fromvolt}    ${instance_id_fromCore}
