-
-
Save Julian88Tex/a31ca502a29fa7f4bf89bf50885a174e to your computer and use it in GitHub Desktop.
# Run Command: cci task run robot -o suites robot/NPSP/tests/api/success.robot -o vars BROWSER:headlesschrome | |
[Documentation] Success POST test. | |
*** Settings *** | |
Resource cumulusci/robotframework/Salesforce.robot | |
Resource robot/Cumulus/resources/NPSP.robot | |
Library DateTime | |
Library robot/NPSP/resources/RequestsLibrary/ | |
Library cumulusci.robotframework.PageObjects | |
... robot/Cumulus/resources/NPSPSettingsPageObject.py | |
Suite Teardown Capture Screenshot and Delete Records and Close Browser | |
*** Variables *** | |
# Request Methods | |
${GET} = Get Request | |
${POST} = Post Request | |
${PUT} = Put Request | |
# Response Codes | |
${CODE_OK} = 200 | |
${CODE_BAD_REQUEST} = 400 | |
${CODE_UNAUTHORIZED} = 401 | |
${CODE_NOT_FOUND} = 404 | |
${CODE_SERVER_ERROR} = 500 | |
# Tokens | |
${ACCESS_TOKEN} = will_be_replaced | |
# Bodies | |
${GOOD_BODY} = {"good":["body"]} | |
# URLs | |
${GOOD_BASE_URL} = /services/apexrest/ApexClassName | |
# Responses | |
${SUCCESS} = [{"result":true,"errors":[],"error":"values"}] | |
*** Keywords *** | |
Get Salesforce Org Access | |
[Documentation] | |
... Get Salesforce Org Access Token and Instance URL. | |
... Sets both as Global Variables. | |
${orginfo}= Get Org Info | |
${instance_url} = Get From Dictionary ${org_info} | |
... instance_url | |
${instance_url} = Set Suite Variable ${instance_url} | |
${access_token} = Get From Dictionary ${org_info} | |
... access_token | |
${access_token} = Set Suite Variable ${access_token} | |
Check For Access Token | |
[Documentation] | |
... Checks for existing Salesforce Org Access Token. | |
... If missing it runs Get Salesforce Org Access Token. | |
... Required parameters are: | |
... | |
... | access_token | access token for salesforce org | | |
[Arguments] ${access_token} | |
Run Keyword If '${access_token}' == 'will_be_replaced' | |
... Get Salesforce Org Access | |
Create Request | |
[Documentation] | |
... Creates a request an returns the response. | |
... Required parameters are: | |
... | |
... | method | request method Ex: GET,POST,PUT | | |
... | access_token | access token for salesforce org | | |
... | base_url | request url | | |
... | body | request body | | |
[Arguments] ${method} ${access_token} ${base_url} ${body} | |
Check For Access Token ${access_token} | |
Create Session Baseurl ${INSTANCE_URL} | |
${header}= Create Dictionary Authorization=Bearer ${ACCESS_TOKEN} | |
${response}= Run Keyword ${method} Baseurl | |
... ${base_url} data=${body} headers=${header} | |
Set Suite Variable ${response} ${response} | |
Log ${response} console=yes | |
Validate Response | |
[Documentation] | |
... Validates a request's response with a provided response code and body. | |
... Required parameters are: | |
... | |
... | response | request's response to be validated | | |
... | code | code to validate against Ex: 200,400,404 | | |
... | body | body to validate against | | |
[Arguments] ${response} ${code} ${body} | |
${res_body}= Convert To String ${response.content} | |
Log ${res_body} console=yes | |
Should Be Equal As Strings ${response.status_code} ${code} | |
Should Be Equal ${res_body} ${body} | |
POST Good Token, Good URL, and Good Body | |
Create Request ${POST} ${ACCESS_TOKEN} ${GOOD_BASE_URL} ${GOOD_BODY} | |
Verify Successful Response | |
Validate Response ${response} ${CODE_OK} ${SUCCESS} | |
*** Test Cases *** | |
1. POST - SUCCESS | |
POST Good Token, Good URL, and Good Body | |
Verify Successful Response |
@dionatasmuniz hey thanks so much! So if I understand the question correctly, you get an error when you run any CumulusCI keywords after you've run the gist code in full.
I think I've actually run into other versions of this error and I suspect it's due to my use of Pop From Dictionary
: https://gist.github.com/Julian88Tex/a31ca502a29fa7f4bf89bf50885a174e#file-requestlibrarysuccessexample-robot-L51-L52
I think I figured out later that it would be better to use Get From Dictionary
doing something like this:
${instance_url} = Get From Dictionary ${org_info}
... instance_url
${instance_url} = Set Suite Variable ${instance_url}
${access_token} = Get From Dictionary ${org_info}
... access_token
${access_token} = Set Suite Variable ${access_token}
If you could give that a try and let me know if it helps :)
Hi @Julian88Tex,
Thanks a lot, It just works perfectly now.
I really appreciate it and thanks for your reply back.
@dionatasmuniz thanks for testing and great to hear! Just updated gist :)
Hi @Julian88Tex , nice code mate!
Quick question, do you know how can I call a cumulusCI keyword after this Post Request? Looks like it gets some conflicts with the cumulus session and return an error like "TypeError: You must provide login information or an instance and token".
Do you have any idea how can I solve this?
I just added an second test cases with the following:
${contact id}= Salesforce Insert Contact
... FirstName=Eleanor
... LastName=Rigby