*** Settings ***
Library           OperatingSystem
Library           RequestsLibrary
Library           requests
Library           Collections
Library           String

*** Variables ***
${TARGETURL_PUBLISH}        http://${DMAAP_MR_IP}:3904/events/TestTopic1
${TARGETURL_TOPICS}         http://${DMAAP_MR_IP}:3904/topics
${TARGETURL_SUBSCR}         http://${DMAAP_MR_IP}:3904/events/TestTopic1/CG1/C1?timeout=1000
${TEST_DATA}                {"topicName": "TestTopic1"}
${TOPIC_DATA}               {"topicName":"FirstTopic","topicDescription":"This is a TestTopic","partitionCount":"1","replicationCount":"3","transactionEnabled":"true"}

*** Test Cases ***
Run Topic Creation and Publish
    [Documentation]    			  	Topic Creation
    [Timeout]    			  	  	1 minute
    ${resp}=    			  	  	PostCall      					${TARGETURL_PUBLISH}    	${TEST_DATA}
    log    				          	${TARGETURL_PUBLISH}
    log    				          	${resp.text}
    Should Be Equal As Strings    	${resp.status_code}           	200
    ${count}=    	              	Evaluate     					$resp.json().get('count')
    log    				  			'JSON Response Code:'${resp}

Run Subscribing a message status
    [Documentation]    		        Subscribide message status
    [Timeout]    			  		1 minute
	${resp}=    			  		GetCall    						${TARGETURL_SUBSCR}
    log    				  			${TARGETURL_SUBSCR}
    Should Be Equal As Strings      ${resp.status_code}           	200
    log    		                  	'JSON Response Code :'${resp}
    
Run check topics are exisiting
    [Documentation]    		  		Get the count of the Topics
    [Timeout]    			  		1 minute
    ${resp}=    			  		GetCall                       	${TARGETURL_TOPICS}
    log              		  		${TARGETURL_TOPICS}
    Should Be Equal As Strings      ${resp.status_code}           	200
    log    				  			'JSON Response Code :'${resp}
    ${topics}=       			  	Evaluate                 	  	$resp.json().get('topics')
    log					  			${topics}
    ${ListLength}=    			  	Get Length                    	${topics}
    log    				  			${ListLength}
    List Should Contain Value 		${topics}                       TestTopic1

Run Publich and Subscribe a message
    [Documentation]    		        Publish and Subscribe the message
    [Timeout]    			  		1 minute
	${resp}=    			  	  	PostCall      					${TARGETURL_PUBLISH}    	${TEST_DATA}
    log    				          	${TARGETURL_PUBLISH}
    log    				          	${resp.text}
    Should Be Equal As Strings    	${resp.status_code}           	200
    ${sub_resp}=    			  		GetCall    						${TARGETURL_SUBSCR}
    log    				  			${TARGETURL_SUBSCR}
    Should Be Equal As Strings      ${sub_resp.status_code}           	200
    log    		                  	'JSON Response Code :'${sub_resp}
    ${ListLength}=                  Get Length                    	${sub_resp.json()}
    log    				  			${ListLength}
    List Should Contain Value       ${sub_resp.json()}    				{"topicName":"TestTopic1"}    case_insensitive=yes

*** Keywords ***
PostCall
    [Arguments]    ${url}    		${data}
    ${headers}=    Create Dictionary    Accept=application/json    Content-Type=application/json
    ${resp}=       Evaluate    requests.post('${url}',data='${data}', headers=${headers},verify=False)    requests
    [Return]       ${resp}

GetCall
    [Arguments]     ${url}
    ${headers}=     Create Dictionary    Accept=application/json    Content-Type=application/json
    ${resp}=    	Evaluate    requests.get('${url}', headers=${headers}, verify=False)    requests
    [Return]    	${resp}