From f19f757d0565481e07c85ee175f938a9af707aed Mon Sep 17 00:00:00 2001 From: Fernando Ontiveros Date: Tue, 7 Jan 2014 10:37:50 -0400 Subject: [PATCH] adding two methods to RestContext in behat --- features/abc/_001_projects.feature | 32 ++++++++++++++- features/bootstrap/RestContext.php | 62 +++++++++++++++++++++++++----- 2 files changed, 83 insertions(+), 11 deletions(-) diff --git a/features/abc/_001_projects.feature b/features/abc/_001_projects.feature index 06782f79a..0dac0eb05 100644 --- a/features/abc/_001_projects.feature +++ b/features/abc/_001_projects.feature @@ -124,6 +124,7 @@ Feature: Getting started with Behat tests And the type is "object" And that "tri_param" is set to "PRIVATE" And store "tri_uid" in session array + And store "tri_uid" in session array as variable "trigger1" Scenario: re-post a new trigger, to get an error Given that I have a valid access_token @@ -141,7 +142,7 @@ Feature: Getting started with Behat tests Then the response status code should be 400 And the content type is "application/json" And the type is "object" - #message: "Bad Request: There is a triggers with the same name in this process" + #message: "Bad Request: There is a previously created trigger with the same name in this process" Scenario: modify a Trigger Given that I have a valid access_token @@ -161,6 +162,35 @@ Feature: Getting started with Behat tests And the content type is "application/json" And the type is "object" And that "tri_title" is set to "Trigger #1-modified" + And that "tri_description" is set to "Trigger #1 - -modified" + And that "tri_type" is set to "script" + And that "tri_webbot" is set to "print 'hello modified world!!'; " + And that "tri_param" is set to "private" + + + Scenario: get a previously created trigger + Given that I have a valid access_token + And that I want to get a resource with the key "tri_uid" stored in session array + And I request "project/14414793652a5d718b65590036026581/trigger" + Then the response status code should be 200 + And the content type is "application/json" + And that "tri_title" is set to "Trigger #1-modified" + And that "tri_description" is set to "Trigger #1 - -modified" + And that "tri_type" is set to "script" + And that "tri_webbot" is set to "print 'hello modified world!!'; " + And that "tri_param" is set to "private" + + Scenario: get a previously created trigger using alternative variable + Given that I have a valid access_token + And that I want to get a resource with the key "trigger1" stored in session array + And I request "project/14414793652a5d718b65590036026581/trigger" + Then the response status code should be 200 + And the content type is "application/json" + And that "tri_title" is set to "Trigger #1-modified" + And that "tri_description" is set to "Trigger #1 - -modified" + And that "tri_type" is set to "script" + And that "tri_webbot" is set to "print 'hello modified world!!'; " + And that "tri_param" is set to "private" Scenario: delete a previously created trigger Given that I have a valid access_token diff --git a/features/bootstrap/RestContext.php b/features/bootstrap/RestContext.php index 8f80c1487..b498ca832 100644 --- a/features/bootstrap/RestContext.php +++ b/features/bootstrap/RestContext.php @@ -224,6 +224,26 @@ class RestContext extends BehatContext $this->_restObjectMethod = 'put'; } + /** + * @Given /^that I want to get a resource with the key "([^"]*)" stored in session array$/ + */ + public function thatIWantToGetAResourceWithTheKeyStoredInSessionArray($varName) + { + if (file_exists("session.data")) { + $sessionData = json_decode(file_get_contents("session.data")); + } else { + $sessionData = array(); + } + if (!isset($sessionData->$varName) ) { + $varValue = ''; + } else { + $varValue = $sessionData->$varName; + } + + $this->_restGetQueryStringSuffix = "/" . $varValue; + $this->_restObjectMethod = 'get'; + } + /** * @Given /^that "([^"]*)" header is set to "([^"]*)"$/ * @Given /^that "([^"]*)" header is set to (\d+)$/ @@ -331,6 +351,10 @@ class RestContext extends BehatContext $this->_response = $this->_request->send(); break; case 'GET': + if (isset($this->_restGetQueryStringSuffix) && + $this->_restGetQueryStringSuffix != '') { + $url .= $this->_restGetQueryStringSuffix; + } $this->_request = $this->_client ->get($url, $this->_headers); $this->_response = $this->_request->send(); @@ -937,8 +961,8 @@ class RestContext extends BehatContext $this->_headers['Content-Type'] = 'application/json; charset=UTF-8'; $this->_requestBody = $string; } - - + + /** @@ -975,7 +999,25 @@ class RestContext extends BehatContext $sessionData->$varName = $varValue; file_put_contents("session.data", json_encode($sessionData)); } - + + /** + * @Given /^store "([^"]*)" in session array as variable "([^"]*)"$/ + */ + public function storeInAsVariable($varName, $sessionVarName) + { + if (!isset($this->_data->$varName)) { + throw new \Exception("JSON Response does not have '$varName' property\n\n" ); + } + + $varValue = $this->_data->$varName; + if (file_exists("session.data")) { + $sessionData = json_decode(file_get_contents("session.data")); + } else { + $sessionData = new StdClass(); + } + $sessionData->$sessionVarName = $varValue; + file_put_contents("session.data", json_encode($sessionData)); + } /** * @Then /^echo last response$/ @@ -984,17 +1026,17 @@ class RestContext extends BehatContext { $this->printDebug("$this->_request\n$this->_response"); } - - + + //*********** WEN - + /** * @Given /^POST data from file "([^"]*)"$/ */ public function postDataFromFile($jsonFile) { $filePath = __DIR__ . "/../json/" . $jsonFile; - + if(file_exists($filePath)) { $fileData = file_get_contents($filePath); @@ -1006,14 +1048,14 @@ class RestContext extends BehatContext } // throw new PendingException(); } - + /** * @Given /^PUT data from file "([^"]*)"$/ */ public function putDataFromFile($jsonFile) { $filePath = __DIR__ . "/../json/" . $jsonFile; - + if(file_exists($filePath)) { $fileData = file_get_contents($filePath); @@ -1033,6 +1075,6 @@ class RestContext extends BehatContext { throw new PendingException(); } - + }