Skip to content

Commit

Permalink
NEW Disable form sudo mode
Browse files Browse the repository at this point in the history
  • Loading branch information
emteknetnz committed Feb 18, 2025
1 parent 9b79bc9 commit d633495
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
22 changes: 22 additions & 0 deletions code/sudo-mode/ActivateSudoModeServiceExtension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace SilverStripe\FrameworkTest\SudoMode;

use SilverStripe\Control\Session;
use SilverStripe\Forms\Form;
use SilverStripe\Core\Extension;

/**
* Extension that will make it as if sudo mode is active for the current session
* Intended to be used with behat tests so that there is no need to enter a password
* when testing forms that require sudo mode
*
* @extends Extension<Form>
*/
class ActivateSudoModeServiceExtension extends Extension
{
public function updateCheck(bool &$active, Session $session)
{
$active = true;
}
}
57 changes: 57 additions & 0 deletions code/sudo-mode/MemberRelationsPageExtension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

namespace SilverStripe\FrameworkTest\SudoMode;

use RuntimeException;
use SilverStripe\Forms\Form;
use SilverStripe\Core\Extension;
use SilverStripe\Security\Member;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
use SilverStripe\ORM\ArrayList;

/**
* Extension that adds Member relations on a page to test that sudo-mode
* works on gridfields for relations
*
* @extends Extension<Form>
*/
class MemberRelationsPageExtension extends Extension
{
private static $has_many = [
'HasManyMembers' => Member::class
];

private static $many_many = [
'ManyManyMembers' => Member::class
];

public function updateCMSFields(&$fields)
{
$gridField = new GridField('HasManyMembers', 'HasManyMembers', $this->owner->HasManyMembers());
$config = GridFieldConfig_RecordEditor::create();
$gridField->setConfig($config);
$fields->insertAfter('Title', $gridField);
// Intentionally using an ArrayList here to check that the gridfield can handle it
$list = new ArrayList($this->owner->ManyManyMembers()->toArray());
$gridField = new GridField('ManyManyMembers', 'ManyManyMembers', $list);
$config = GridFieldConfig_RecordEditor::create();
$gridField->setConfig($config);
$fields->insertAfter('Title', $gridField);
return $fields;
}

protected function onBeforeWrite()
{
$member = Member::get()->first();
if (!$member) {
throw new RuntimeException('No Member record found, create one in your test setup');
}
if ($this->owner->HasManyMembers()->count() === 0) {
$this->owner->HasManyMembers()->add($member);
}
if ($this->owner->ManyManyMembers()->count() === 0) {
$this->owner->ManyManyMembers()->add($member);
}
}
}

0 comments on commit d633495

Please sign in to comment.