Source of file MultiFormTest.php
Size: 4,713 Bytes - Last Modified: 2021-12-23T10:33:19+00:00
/var/www/docs.ssmods.com/process/src/tests/MultiFormTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | <?php namespace SilverStripe\MultiForm\Tests; use SilverStripe\Control\HTTPRequest; use SilverStripe\Control\Session; use SilverStripe\Core\Config\Config; use SilverStripe\Core\Injector\Injector; use SilverStripe\Dev\FunctionalTest; use SilverStripe\MultiForm\Forms\MultiForm; use SilverStripe\MultiForm\Models\MultiFormSession; use SilverStripe\MultiForm\Tests\Stubs\MultiFormTestController; use SilverStripe\MultiForm\Tests\Stubs\MultiFormTestForm; use SilverStripe\MultiForm\Tests\Stubs\MultiFormTestStepOne; use SilverStripe\MultiForm\Tests\Stubs\MultiFormTestStepTwo; /** * MultiFormTest * For testing purposes, we have some test classes: * * - MultiFormTestController (simulation of a real Controller class) * - MultiFormTestForm (subclass of MultiForm) * - MultiFormTestStepOne (subclass of MultiFormStep) * - MultiFormTestStepTwo (subclass of MultiFormStep) * - MultiFormTestStepThree (subclass of MultiFormStep) * * The above classes are used to simulate real-world behaviour * of the multiform module - for example, MultiFormTestController * is a simulation of a page where MultiFormTest_Form is a simple * multi-step contact form it belongs to. * */ class MultiFormTest extends FunctionalTest { protected static $fixture_file = 'MultiFormTest.yml'; /** * @var MultiFormTestController */ protected $controller; /** * @var MultiFormTestForm */ protected $form; protected function setUp() { parent::setUp(); $this->controller = new MultiFormTestController(); $this->controller->setRequest(new HTTPRequest('GET', '/')); $this->controller->getRequest()->setSession(new Session([])); $this->controller->pushCurrent(); $form = $this->form = $this->controller->Form(); Injector::inst()->registerService($form, MultiForm::class); $this->form = $form; } public function testInitialisingForm() { $this->assertTrue(is_numeric($this->form->getCurrentStep()->ID) && ($this->form->getCurrentStep()->ID > 0)); $this->assertTrue( is_numeric($this->form->getMultiFormSession()->ID) && ($this->form->getMultiFormSession()->ID > 0) ); $this->assertEquals(MultiFormTestStepOne::class, $this->form->getStartStep()); } public function testSessionGeneration() { $this->assertTrue($this->form->getMultiFormSession()->ID > 0); } public function testMemberLogging() { // Grab any user to fake being logged in as, and ensure that after a session is written it has // that user as the submitter. $userId = $this->logInWithPermission('ADMIN'); $session = $this->form->getMultiFormSession(); $session->write(); $this->assertEquals($userId, $session->SubmitterID); } public function testSecondStep() { $this->assertEquals(MultiFormTestStepTwo::class, $this->form->getCurrentStep()->getNextStep()); } public function testParentForm() { $currentStep = $this->form->getCurrentStep(); $this->assertEquals(get_class($currentStep->getForm()), get_class($this->form)); } public function testTotalStepCount() { $this->assertEquals(3, $this->form->getAllStepsLinear()->Count()); } public function testCompletedSession() { $this->form->setCurrentSessionHash($this->form->getMultiFormSession()->Hash); $this->assertInstanceOf(MultiFormSession::class, $this->form->getCurrentSession()); $this->form->getMultiFormSession()->markCompleted(); $this->assertNull($this->form->getCurrentSession()); } public function testIncorrectSessionIdentifier() { $this->form->setCurrentSessionHash('sdfsdf3432325325sfsdfdf'); // made up! // A new session is generated, even though we made up the identifier $this->assertInstanceOf(MultiFormSession::class, $this->form->getMultiFormSession()); } public function testCustomGetVar() { Config::modify()->set(MultiForm::class, 'get_var', 'SuperSessionID'); $form = $this->controller->Form(); $this->assertContains( 'SuperSessionID', $form->config()->get('ignored_fields'), 'GET var wasn\'t added to ignored fields' ); $this->assertContains( 'SuperSessionID', $form->FormAction(), "Form action doesn't contain correct session ID parameter" ); $this->assertContains( 'SuperSessionID', $form->getCurrentStep()->Link(), "Form step doesn't contain correct session ID parameter" ); } } |