silverstripe-framework/tests/php/Forms/GridField/GridField_URLHandlerTest.php

165 lines
4.4 KiB
PHP
Raw Normal View History

<?php
use SilverStripe\ORM\ArrayList;
use SilverStripe\Dev\FunctionalTest;
use SilverStripe\Dev\TestOnly;
use SilverStripe\Control\Controller;
use SilverStripe\Control\RequestHandler;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\FormAction;
use SilverStripe\Forms\GridField\GridFieldConfig;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridField_URLHandler;
use SilverStripe\View\SSViewer;
/**
* Test the API for creating GridField_URLHandler compeonnts
*/
class GridField_URLHandlerTest extends FunctionalTest {
public function testFormSubmission() {
$result = $this->get("GridField_URLHandlerTest_Controller/Form/field/Grid/showform");
$formResult = $this->submitForm('Form_Form', 'action_doAction', array('Test' => 'foo bar') );
$this->assertEquals("Submitted foo bar to component", $formResult->getBody());
}
public function testNestedRequestHandlerFormSubmission() {
$result = $this->get("GridField_URLHandlerTest_Controller/Form/field/Grid/item/3/showform");
$formResult = $this->submitForm('Form_Form', 'action_doAction', array('Test' => 'foo bar') );
$this->assertEquals("Submitted foo bar to item #3", $formResult->getBody());
}
public function testURL() {
$result = $this->get("GridField_URLHandlerTest_Controller/Form/field/Grid/testpage");
$this->assertEquals("Test page for component", $result->getBody());
}
public function testNestedRequestHandlerURL() {
$result = $this->get("GridField_URLHandlerTest_Controller/Form/field/Grid/item/5/testpage");
$this->assertEquals("Test page for item #5", $result->getBody());
}
}
class GridField_URLHandlerTest_Controller extends Controller implements TestOnly {
private static $allowed_actions = array('Form');
public function Form() {
$gridConfig = GridFieldConfig::create();
$gridConfig->addComponent(new GridField_URLHandlerTest_Component());
2014-08-15 08:53:05 +02:00
$gridData = new ArrayList();
$gridField = new GridField('Grid', 'My grid', $gridData, $gridConfig);
2014-08-15 08:53:05 +02:00
/** @skipUpgrade */
return new Form($this, 'Form', new FieldList(
$gridField
), new FieldList());
}
}
/**
* Test URLHandler with a nested request handler
*/
class GridField_URLHandlerTest_Component extends RequestHandler implements GridField_URLHandler {
2014-08-15 08:53:05 +02:00
private static $allowed_actions = array('Form', 'showform', 'testpage', 'handleItem');
protected $gridField;
2014-08-15 08:53:05 +02:00
public function getURLHandlers($gridField) {
/** @skipUpgrade */
return array(
'showform' => 'showform',
'testpage' => 'testpage',
'Form' => 'Form',
'item/$ID' => 'handleItem',
);
}
2014-08-15 08:53:05 +02:00
public function handleItem($gridField, $request) {
$id = $request->param("ID");
return new GridField_URLHandlerTest_Component_ItemRequest(
$gridField, $id,
Controller::join_links($gridField->Link(), 'item/' . $id));
}
2014-08-15 08:53:05 +02:00
public function Link() {
return $this->gridField->Link();
}
2014-08-15 08:53:05 +02:00
public function showform($gridField, $request) {
return "<head>" . SSViewer::get_base_tag("") . "</head>" . $this->Form($gridField, $request)->forTemplate();
}
2014-08-15 08:53:05 +02:00
public function Form($gridField, $request) {
$this->gridField = $gridField;
/** @skipUpgrade */
return new Form($this, 'Form', new FieldList(
new TextField("Test")
), new FieldList(
new FormAction('doAction', 'Go')
));
}
public function doAction($data, $form) {
return "Submitted " . $data['Test'] . " to component";
}
public function testpage($gridField, $request) {
return "Test page for component";
}
}
class GridField_URLHandlerTest_Component_ItemRequest extends RequestHandler {
2014-08-15 08:53:05 +02:00
private static $allowed_actions = array('Form', 'showform', 'testpage');
protected $gridField;
2014-08-15 08:53:05 +02:00
protected $link;
2014-08-15 08:53:05 +02:00
protected $id;
2014-08-15 08:53:05 +02:00
public function __construct($gridField, $id, $link) {
$this->gridField = $gridField;
$this->id = $id;
$this->link = $link;
parent::__construct();
}
2014-08-15 08:53:05 +02:00
public function Link() {
return $this->link;
}
2014-08-15 08:53:05 +02:00
public function showform() {
return "<head>" . SSViewer::get_base_tag("") . "</head>" . $this->Form()->forTemplate();
}
public function Form() {
/** @skipUpgrade */
return new Form($this, 'Form', new FieldList(
new TextField("Test")
), new FieldList(
new FormAction('doAction', 'Go')
));
}
2014-08-15 08:53:05 +02:00
public function doAction($data, $form) {
return "Submitted " . $data['Test'] . " to item #" . $this->id;
}
public function testpage() {
return "Test page for item #" . $this->id;
}
}