Skip to content

Commit

Permalink
ENH Add ability to create roles for behat tests
Browse files Browse the repository at this point in the history
  • Loading branch information
GuySartorelli committed Mar 19, 2024
1 parent b2cd44c commit d0eded7
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions src/Context/FixtureContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
use SilverStripe\Security\Permission;
use SilverStripe\Versioned\Versioned;
use SilverStripe\Core\Config\Config;
use SilverStripe\Security\PermissionRole;
use SilverStripe\Security\PermissionRoleCode;

/**
* Context used to create fixtures in the SilverStripe ORM.
Expand Down Expand Up @@ -620,6 +622,48 @@ public function stepCreateGroupWithPermissions($id, $permissionStr)
}
}

/**
* Example: Given a "role" "Some role" with permissions "Access to 'Pages' section" and "Access to 'Files' section"
*
* @Given /^(?:an|a|the) "role" "([^"]+)" (?:with|has) permissions (.*)$/
* @param string $id
* @param string $permissionStr
*/
public function stepCreateRoleWithPermissions($id, $permissionStr)
{
// Convert natural language permissions to codes
preg_match_all('/"([^"]+)"/', $permissionStr ?? '', $matches);
$permissions = $matches[1];
$codes = Permission::get_codes(false);

$role = $this->getFixtureFactory()->get(PermissionRole::class, $id);
if (!$role) {
$role = $this->getFixtureFactory()->createObject(PermissionRole::class, $id);
}

foreach ($permissions as $permission) {
$found = false;
foreach ($codes as $code => $details) {
if ($permission == $code
|| $permission == $details['name']
) {
$permissionRoleCode = PermissionRoleCode::create([
'RoleID' => $role->ID,
'Code' => $code,
]);
$permissionRoleCode->write();
$found = true;
}
}
if (!$found) {
throw new InvalidArgumentException(sprintf(
'No permission found for "%s"',
$permission
));
}
}
}

/**
* Navigates to a record based on its identifier set during fixture creation,
* using its RelativeLink() method to map the record to a URL.
Expand Down

0 comments on commit d0eded7

Please sign in to comment.