Skip to content

Commit

Permalink
Add ProfileService::getProfileForUser for easy profile object retrieval
Browse files Browse the repository at this point in the history
Closes #23
  • Loading branch information
adamlundrigan committed Dec 22, 2014
1 parent ba0d03e commit 5130fb0
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 2 deletions.
19 changes: 17 additions & 2 deletions src/LdcUserProfile/Service/ProfileService.php
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,26 @@ public function validate(FormInterface $form, array $data)
return $isValid;
}

public function getProfileForUser(UserInterface $user)
{
$entity = clone $this->getFormPrototype()->getObject();
$argv = compact('entity', 'user');

$this->getEventManager()->trigger(__METHOD__.'.pre', $this, $argv);

foreach ($this->getExtensions() as $name => $ext) {
$entity->{$name} = $ext->getObjectForUser($user);
}

$this->getEventManager()->trigger(__METHOD__.'.post', $this, $argv);

return $entity;
}

public function constructFormForUser(UserInterface $user)
{
$form = clone $this->getFormPrototype();
$entity = clone $form->getObject();
$entity = $this->getProfileForUser($user);
$argv = compact('form', 'entity', 'user');

$vgOverrides = $this->getModuleOptions()->getValidationGroupOverrides();
Expand All @@ -110,7 +126,6 @@ public function constructFormForUser(UserInterface $user)
foreach ($this->getExtensions() as $name => $ext) {
$form->add(clone $ext->getFieldset(), array('name' => $name));
$form->getInputFilter()->add(clone $ext->getInputFilter(), $name);
$entity->{$name} = $ext->getObjectForUser($user);

$this->getEventManager()->trigger(__METHOD__.'.extension', $this, $argv + array(
'extension' => $ext,
Expand Down
48 changes: 48 additions & 0 deletions tests/LdcUserProfileTest/Service/ProfileServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,54 @@ public function testConstructFormForUserProcessesAllRegisteredExtensionsOnSave()
$this->assertFalse($this->service->save($entity));
}

public function testGetProfileForUser()
{
$mockUser = \Mockery::mock('ZfcUser\Entity\UserInterface');

$mockUserData = new \stdClass();
$mockUserData->test = 'hi';

$ext = $this->testRegisterExtension();
$ext->shouldReceive('getObjectForUser')->withArgs(array($mockUser))->once()->andReturn($mockUserData);

$result = $this->service->getProfileForUser($mockUser);

$expectedResult = new \stdClass();
$expectedResult->testext = new \stdClass();
$expectedResult->testext->test = 'hi';

$this->assertEquals($expectedResult, $result);
}

public function testGetProfileForUserEntityKeyReturnsNullIfUserHasNoRecordForExtension()
{
$mockUser = \Mockery::mock('ZfcUser\Entity\UserInterface');

$ext = $this->testRegisterExtension();
$ext->shouldReceive('getObjectForUser')->withArgs(array($mockUser))->once()->andReturn(null);

$result = $this->service->getProfileForUser($mockUser);

$expectedResult = new \stdClass();
$expectedResult->testext = null;

$this->assertEquals($expectedResult, $result);
}

public function testGetProfileForUserFiresEvents()
{
$mockEventManager = new TriggerCountingEventManager();
$mockEventManager->matchingRegex = '{^LdcUserProfile\\\\Service\\\\ProfileService::getProfileForUser}is';
$this->service->setEventManager($mockEventManager);

$this->testConstructFormForUser();

$this->assertEquals(array(
'LdcUserProfile\Service\ProfileService::getProfileForUser.pre' => 1,
'LdcUserProfile\Service\ProfileService::getProfileForUser.post' => 1,
), $mockEventManager->triggeredEventCount);
}

public function testGetSetEventManager()
{
$mock = \Mockery::mock('Zend\EventManager\EventManagerInterface');
Expand Down

0 comments on commit 5130fb0

Please sign in to comment.