Source of file GridFieldRefreshButtonTest.php
Size: 4,037 Bytes - Last Modified: 2021-12-24T06:48:16+00:00
/var/www/docs.ssmods.com/process/src/tests/Forms/GridFieldRefreshButtonTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | <?php namespace BringYourOwnIdeas\Maintenance\Tests\Forms; use BringYourOwnIdeas\Maintenance\Forms\GridFieldRefreshButton; use SilverStripe\Core\Config\Config; use SilverStripe\Core\Injector\Injector; use SilverStripe\Dev\SapphireTest; use SilverStripe\Forms\GridField\GridField; use Symbiote\QueuedJobs\DataObjects\QueuedJobDescriptor; use Symbiote\QueuedJobs\Services\QueuedJobService; class GridFieldRefreshButtonTest extends SapphireTest { protected static $fixture_file = 'GridFieldRefreshButtonTest.yml'; protected function setUp(): void { parent::setUp(); Config::modify()->set(QueuedJobService::class, 'use_shutdown_function', false); } public function testHasRunningJobReturnsTrueWhenJobIsRunning() { $button = $this->getButton(); $this->assertTrue($button->hasPendingJob()); } public function testHasRunningJobReturnsTrueForPendingJobsOnImmediateQueue() { $runningJob = $this->objFromFixture(QueuedJobDescriptor::class, 'runningjob'); $runningJob->JobStatus = 'Complete'; $runningJob->write(); $this->assertTrue($this->getButton()->hasPendingJob()); } public function testDoesNotHaveCancelledCompletedOrBrokenJob() { $this->completeRunningJob(); $button = $this->getButton(); $this->assertFalse($button->hasPendingJob()); } public function testHandleRefreshDoesNotCreateJobWhenJobIsRunning() { $count = QueuedJobDescriptor::get()->count(); $button = $this->getButton(); $button->handleRefresh(); $this->assertSame($count, QueuedJobDescriptor::get()->count()); } public function testHandleRefreshCreatesJobWhenNoJobIsRunning() { $this->completeRunningJob(); $count = QueuedJobDescriptor::get()->count(); $button = $this->getButton(); $button->handleRefresh(); $this->assertSame($count + 1, QueuedJobDescriptor::get()->count()); } public function testHandleCheckReturnsValidJson() { $button = $this->getButton(); $this->assertStringContainsString('true', $button->handleCheck()); } public function testButtonIsDisabledWhenJobIsRunning() { $button = $this->getButton(); $gridFieldMock = $this->getGridFieldMock(); $output = $button->getHTMLFragments($gridFieldMock); $this->assertStringContainsString('disabled', $output['test']); } public function testButtonIsEnabledWhenNoJobIsRunning() { $this->completeRunningJob(); $button = $this->getButton(); $gridFieldMock = $this->getGridFieldMock(); $output = $button->getHTMLFragments($gridFieldMock); $this->assertStringNotContainsString('disabled', $output['test']); } /** * Turns the running job in the fixture file into a completed job */ protected function completeRunningJob() { $runningJob = $this->objFromFixture(QueuedJobDescriptor::class, 'runningjob'); $runningJob->JobStatus = 'Complete'; $runningJob->write(); $runningJob = $this->objFromFixture(QueuedJobDescriptor::class, 'immediatependingjob'); $runningJob->JobStatus = 'Complete'; $runningJob->write(); } /** * Mocks and returns a gridfield with name 'TestGridField' and 'Link' method, which returns a url * @return mixed */ protected function getGridFieldMock() { $gridFieldMock = $this ->getMockBuilder(GridField::class) ->setConstructorArgs(['TestGridField']) ->setMethods(['Link']) ->getMock(); $gridFieldMock ->expects($this->any()) ->method('Link') ->will($this->returnValue('http://example.com')); return $gridFieldMock; } /** * @return GridFieldRefreshButton */ protected function getButton() { return Injector::inst()->create(GridFieldRefreshButton::class, 'test'); } } |