diff --git a/src/LdcUserProfile/Service/ProfileService.php b/src/LdcUserProfile/Service/ProfileService.php index f4ff387..2092600 100644 --- a/src/LdcUserProfile/Service/ProfileService.php +++ b/src/LdcUserProfile/Service/ProfileService.php @@ -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(); @@ -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, diff --git a/tests/LdcUserProfileTest/Service/ProfileServiceTest.php b/tests/LdcUserProfileTest/Service/ProfileServiceTest.php index df84763..51d8a77 100644 --- a/tests/LdcUserProfileTest/Service/ProfileServiceTest.php +++ b/tests/LdcUserProfileTest/Service/ProfileServiceTest.php @@ -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');