BUG: Fixing unit tests for form processing and adding unit test to check if form has been completed

This commit is contained in:
Kirk Mayo 2014-01-06 15:15:01 +13:00
parent 41b6e57e4c
commit 54b4dca799
2 changed files with 23 additions and 7 deletions

View File

@ -1046,8 +1046,11 @@ JS
$referrer = (isset($data['Referrer'])) ? '?referrer=' . urlencode($data['Referrer']) : "";
// set a session variable from the security ID to stop people accessing the finished method directly
Session::set('FormProcessed',$data['SecurityID']);
if (isset($data['SecurityID'])) {
Session::set('FormProcessed',$data['SecurityID']);
}
return $this->redirect($this->Link() . 'finished' . $referrer);
}
@ -1059,25 +1062,21 @@ JS
* @return ViewableData
*/
public function finished() {
$referrer = isset($_GET['referrer']) ? urldecode($_GET['referrer']) : null;
$formProcessed = Session::get('FormProcessed');
if (!isset($formProcessed)) {
$referrer = (isset($data['Referrer'])) ? '?referrer=' .
urlencode($data['Referrer']) : "";
return $this->redirect($this->Link() . $referrer);
} else {
$securityID = Session::get('SecurityID');
// make sure the session matches the SecurityID and is not left over from another form
if ($formProcessed != $securityID) {
$referrer = (isset($data['Referrer'])) ? '?referrer=' .
urlencode($data['Referrer']) : "";
return $this->redirect($this->Link() . $referrer);
}
}
// remove the session variable as we do not want it to be re-used
Session::clear('FormProcessed');
$referrer = isset($_GET['referrer']) ? urldecode($_GET['referrer']) : null;
return $this->customise(array(
'Content' => $this->customise(
array(

View File

@ -59,10 +59,27 @@ class UserDefinedFormControllerTest extends FunctionalTest {
function testFinished() {
$form = $this->setupFormFrontend();
// set formProcessed and SecurityID to replicate the form being filled out
$this->session()->inst_set('SecurityID', 1);
$this->session()->inst_set('FormProcessed', 1);
$response = $this->get($form->URLSegment.'/finished');
$this->assertContains($form->OnCompleteMessage ,$response->getBody());
}
function testAppendingFinished() {
$form = $this->setupFormFrontend();
// replicate finished being added to the end of the form URL without the form being filled out
$this->session()->inst_set('SecurityID', 1);
$this->session()->inst_set('FormProcessed', null);
$response = $this->get($form->URLSegment.'/finished');
$this->assertNotContains($form->OnCompleteMessage ,$response->getBody());
}
function testForm() {
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');