public function testFindByTypeAndNameRetunsRegistered() { list($conn, $query) = $this->getMocks(); $conn->shouldReceive('table')->andReturn($query); $query->shouldReceive('where')->once()->with('siteKey', 'default')->andReturn($query); $query->shouldReceive('where')->once()->with('name', 'board.notice')->andReturn($query); $query->shouldReceive('where')->once()->with('type', 'instance')->andReturn($query); $query->shouldReceive('first')->once()->withNoArgs()->andReturn((object) ['id' => 1, 'type' => 'instance', 'name' => 'board.notice', 'grants' => '{"access":{"type":"power","value":"guest"},"create":{"type":"power","value":"member"},"read":{"type":"power","value":"guest"},"update":{"type":"group","value":["group_id_1","group_id_2"]},"delete":{"type":"group","value":["group_id_1","group_id_2"]}}']); $instance = new PermissionRepository($conn); $registered = $instance->findByTypeAndName('default', 'instance', 'board.notice'); $this->assertInstanceOf('Xpressengine\\Permission\\Registered', $registered); $this->assertEquals(['type' => 'power', 'value' => 'guest'], $registered['access']); $this->assertEquals('board.notice', $registered->name); $this->assertTrue(isset($registered['create'])); $keys = ''; $comma = ''; foreach ($registered as $key => $value) { $keys .= $comma . $key; $comma = ','; } $this->assertEquals('access,create,read,update,delete', $keys); }
/** * Move entity hierarchy to new parent or root * * @param Registered $registered registered object * @param string|null $to to registered prefix * * @return void * @throws InvalidArgumentException */ public function move(Registered $registered, $to = null) { $toParent = $to !== null ? $this->repo->findByTypeAndName($registered->siteKey, $registered->type, $to) : null; if ($to !== null && $toParent === null || $toParent !== null && $registered->type != $toParent->type) { throw new InvalidArgumentException(); } $parent = $registered->getParent(); if ($parent === null) { if ($registered->getDepth() !== 1) { throw new InvalidArgumentException(); } $this->repo->affiliate($registered, $to); } else { $this->repo->foster($registered, $to); } }