Skip to content
This repository was archived by the owner on Jan 31, 2020. It is now read-only.

Commit 4499760

Browse files
committed
Merge branch 'hotfix/19' into release-2.7
Close #56 Fixes #55 Fixes zendframework/zend-hydrator#19
2 parents b894a85 + 27aaaf5 commit 4499760

File tree

6 files changed

+154
-49
lines changed

6 files changed

+154
-49
lines changed

CHANGELOG.md

+22
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,28 @@
22

33
All notable changes to this project will be documented in this file, in reverse chronological order by release.
44

5+
## 2.7.6 - 2016-02-19
6+
7+
### Added
8+
9+
- Nothing.
10+
11+
### Deprecated
12+
13+
- Nothing.
14+
15+
### Removed
16+
17+
- Nothing.
18+
19+
### Fixed
20+
21+
- [#56](https://github.com/zendframework/zend-stdlib/pull/56) updates the
22+
`AggregateHydrator` implementation to add overrides for the `hydrate()` and
23+
`extract()` methods; this was done to ensure they trigger zend-stdlib-specific
24+
event classes (vs the zend-hydrator base classes), in order to ensure
25+
backwards compatibility.
26+
527
## 2.7.5 - 2016-02-16
628

729
### Added

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
},
1515
"require": {
1616
"php": "^5.5 || ^7.0",
17-
"zendframework/zend-hydrator": "~1.0"
17+
"zendframework/zend-hydrator": "~1.1"
1818
},
1919
"require-dev": {
2020
"zendframework/zend-config": "~2.5",

src/Hydrator/Aggregate/AggregateHydrator.php

+23
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,27 @@
1919
*/
2020
class AggregateHydrator extends BaseAggregateHydrator implements HydratorInterface
2121
{
22+
/**
23+
* {@inheritDoc}
24+
*/
25+
public function extract($object)
26+
{
27+
$event = new ExtractEvent($this, $object);
28+
29+
$this->getEventManager()->triggerEvent($event);
30+
31+
return $event->getExtractedData();
32+
}
33+
34+
/**
35+
* {@inheritDoc}
36+
*/
37+
public function hydrate(array $data, $object)
38+
{
39+
$event = new HydrateEvent($this, $object, $data);
40+
41+
$this->getEventManager()->triggerEvent($event);
42+
43+
return $event->getHydratedObject();
44+
}
2245
}

test/Hydrator/Aggregate/AggregateHydratorTest.php

+85-12
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,13 @@
1010
namespace ZendTest\Stdlib\Hydrator\Aggregate;
1111

1212
use PHPUnit_Framework_TestCase;
13+
use Prophecy\Argument;
14+
use Zend\EventManager\EventManager;
15+
use Zend\Hydrator\Aggregate\HydratorListener;
16+
use Zend\Hydrator\HydratorInterface;
1317
use Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator;
18+
use Zend\Stdlib\Hydrator\Aggregate\ExtractEvent;
19+
use Zend\Stdlib\Hydrator\Aggregate\HydrateEvent;
1420
use stdClass;
1521

1622
/**
@@ -24,7 +30,7 @@ class AggregateHydratorTest extends PHPUnit_Framework_TestCase
2430
protected $hydrator;
2531

2632
/**
27-
* @var \Zend\EventManager\EventManagerInterface|\PHPUnit_Framework_MockObject_MockObject
33+
* @var \Zend\EventManager\EventManager|\PHPUnit_Framework_MockObject_MockObject
2834
*/
2935
protected $eventManager;
3036

@@ -33,7 +39,7 @@ class AggregateHydratorTest extends PHPUnit_Framework_TestCase
3339
*/
3440
public function setUp()
3541
{
36-
$this->eventManager = $this->getMock('Zend\EventManager\EventManagerInterface');
42+
$this->eventManager = $this->getMock(EventManager::class);
3743
$this->hydrator = new AggregateHydrator();
3844

3945
$this->hydrator->setEventManager($this->eventManager);
@@ -44,45 +50,112 @@ public function setUp()
4450
*/
4551
public function testAdd()
4652
{
47-
$attached = $this->getMock('Zend\Hydrator\HydratorInterface');
53+
$hydrator = $this->prophesize(HydratorInterface::class)->reveal();
54+
55+
$events = $this->prophesize(EventManager::class);
56+
57+
$events->setIdentifiers(Argument::type('array'))->shouldBeCalled();
58+
59+
$events->attach(
60+
HydrateEvent::EVENT_HYDRATE,
61+
Argument::that(function ($argument) {
62+
if (! is_callable($argument)) {
63+
return false;
64+
}
65+
if (! is_array($argument)) {
66+
return false;
67+
}
68+
return (
69+
$argument[0] instanceof HydratorListener
70+
&& $argument[1] === 'onHydrate'
71+
);
72+
}),
73+
123
74+
)->shouldBeCalled();
75+
76+
$events->attach(
77+
ExtractEvent::EVENT_EXTRACT,
78+
Argument::that(function ($argument) {
79+
if (! is_callable($argument)) {
80+
return false;
81+
}
82+
if (! is_array($argument)) {
83+
return false;
84+
}
85+
return (
86+
$argument[0] instanceof HydratorListener
87+
&& $argument[1] === 'onExtract'
88+
);
89+
}),
90+
123
91+
)->shouldBeCalled();
92+
93+
$this->hydrator->setEventManager($events->reveal());
94+
$this->hydrator->add($hydrator, 123);
95+
}
96+
97+
/**
98+
* @covers \Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator::hydrate
99+
*/
100+
public function testHydrate()
101+
{
102+
$object = new stdClass();
48103

49104
$this
50105
->eventManager
51106
->expects($this->once())
52-
->method('attachAggregate')
53-
->with($this->isInstanceOf('Zend\Hydrator\Aggregate\HydratorListener'), 123);
107+
->method('triggerEvent')
108+
->with($this->isInstanceOf('Zend\Hydrator\Aggregate\HydrateEvent'));
54109

55-
$this->hydrator->add($attached, 123);
110+
$this->assertSame($object, $this->hydrator->hydrate(['foo' => 'bar'], $object));
56111
}
57112

58113
/**
114+
* @covers \Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator::extract
115+
*/
116+
public function testExtract()
117+
{
118+
$object = new stdClass();
119+
120+
$this
121+
->eventManager
122+
->expects($this->once())
123+
->method('triggerEvent')
124+
->with($this->isInstanceOf('Zend\Hydrator\Aggregate\ExtractEvent'));
125+
126+
$this->assertSame([], $this->hydrator->extract($object));
127+
}
128+
129+
/**
130+
* @group 55
59131
* @covers \Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator::hydrate
60132
*/
61-
public function testHydrate()
133+
public function testHydrateUsesStdlibHydrateEvent()
62134
{
63135
$object = new stdClass();
64136

65137
$this
66138
->eventManager
67139
->expects($this->once())
68-
->method('trigger')
69-
->with($this->isInstanceOf('Zend\Hydrator\Aggregate\HydrateEvent'));
140+
->method('triggerEvent')
141+
->with($this->isInstanceOf('Zend\Stdlib\Hydrator\Aggregate\HydrateEvent'));
70142

71143
$this->assertSame($object, $this->hydrator->hydrate(['foo' => 'bar'], $object));
72144
}
73145

74146
/**
147+
* @group 55
75148
* @covers \Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator::extract
76149
*/
77-
public function testExtract()
150+
public function testExtractUsesStdlibExtractEvent()
78151
{
79152
$object = new stdClass();
80153

81154
$this
82155
->eventManager
83156
->expects($this->once())
84-
->method('trigger')
85-
->with($this->isInstanceOf('Zend\Hydrator\Aggregate\ExtractEvent'));
157+
->method('triggerEvent')
158+
->with($this->isInstanceOf('Zend\Stdlib\Hydrator\Aggregate\ExtractEvent'));
86159

87160
$this->assertSame([], $this->hydrator->extract($object));
88161
}

test/Hydrator/DelegatingHydratorFactoryTest.php

+6-2
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,21 @@
99

1010
namespace ZendTest\Stdlib\Hydrator;
1111

12+
use Interop\Container\ContainerInterface;
13+
use Zend\ServiceManager\ServiceLocatorInterface;
1214
use Zend\Stdlib\Hydrator\DelegatingHydratorFactory;
1315

1416
class DelegatingHydratorFactoryTest extends \PHPUnit_Framework_TestCase
1517
{
1618
public function testFactory()
1719
{
18-
$hydratorManager = $this->getMock('Zend\ServiceManager\ServiceLocatorInterface');
20+
$hydratorManager = $this->prophesize(ServiceLocatorInterface::class);
21+
$hydratorManager->willImplement(ContainerInterface::class);
22+
1923
$factory = new DelegatingHydratorFactory();
2024
$this->assertInstanceOf(
2125
'Zend\Hydrator\DelegatingHydrator',
22-
$factory->createService($hydratorManager)
26+
$factory->createService($hydratorManager->reveal())
2327
);
2428
}
2529
}

test/Hydrator/DelegatingHydratorTest.php

+17-34
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@
99

1010
namespace ZendTest\Stdlib\Hydrator;
1111

12-
use Zend\Stdlib\Hydrator\DelegatingHydrator;
1312
use ArrayObject;
13+
use Interop\Container\ContainerInterface;
14+
use Zend\ServiceManager\ServiceLocatorInterface;
15+
use Zend\Stdlib\Hydrator\DelegatingHydrator;
16+
use Zend\Stdlib\Hydrator\HydratorInterface;
1417

1518
/**
1619
* Unit tests for {@see \Zend\Stdlib\Hydrator\DelegatingHydrator}
@@ -39,51 +42,31 @@ class DelegatingHydratorTest extends \PHPUnit_Framework_TestCase
3942
*/
4043
public function setUp()
4144
{
42-
$this->hydrators = $this->getMock('Zend\ServiceManager\ServiceLocatorInterface');
43-
$this->hydrator = new DelegatingHydrator($this->hydrators);
45+
$this->hydrators = $this->prophesize(ServiceLocatorInterface::class);
46+
$this->hydrators->willImplement(ContainerInterface::class);
47+
$this->hydrator = new DelegatingHydrator($this->hydrators->reveal());
4448
$this->object = new ArrayObject;
4549
}
4650

4751
public function testExtract()
4852
{
49-
$this->hydrators->expects($this->any())
50-
->method('has')
51-
->with('ArrayObject')
52-
->will($this->returnValue(true));
53-
54-
$hydrator = $this->getMock('Zend\Stdlib\Hydrator\HydratorInterface');
53+
$hydrator = $this->prophesize(HydratorInterface::class);
54+
$hydrator->extract($this->object)->willReturn(['foo' => 'bar']);
5555

56-
$this->hydrators->expects($this->any())
57-
->method('get')
58-
->with('ArrayObject')
59-
->will($this->returnValue($hydrator));
56+
$this->hydrators->has(ArrayObject::class)->willReturn(true);
57+
$this->hydrators->get(ArrayObject::class)->willReturn($hydrator->reveal());
6058

61-
$hydrator->expects($this->any())
62-
->method('extract')
63-
->with($this->object)
64-
->will($this->returnValue(['foo' => 'bar']));
65-
66-
$this->assertEquals(['foo' => 'bar'], $hydrator->extract($this->object));
59+
$this->assertEquals(['foo' => 'bar'], $this->hydrator->extract($this->object));
6760
}
6861

6962
public function testHydrate()
7063
{
71-
$this->hydrators->expects($this->any())
72-
->method('has')
73-
->with('ArrayObject')
74-
->will($this->returnValue(true));
75-
76-
$hydrator = $this->getMock('Zend\Stdlib\Hydrator\HydratorInterface');
64+
$hydrator = $this->prophesize(HydratorInterface::class);
65+
$hydrator->hydrate(['foo' => 'bar'], $this->object)->willReturn($this->object);
7766

78-
$this->hydrators->expects($this->any())
79-
->method('get')
80-
->with('ArrayObject')
81-
->will($this->returnValue($hydrator));
67+
$this->hydrators->has(ArrayObject::class)->willReturn(true);
68+
$this->hydrators->get(ArrayObject::class)->willReturn($hydrator->reveal());
8269

83-
$hydrator->expects($this->any())
84-
->method('hydrate')
85-
->with(['foo' => 'bar'], $this->object)
86-
->will($this->returnValue($this->object));
87-
$this->assertEquals($this->object, $hydrator->hydrate(['foo' => 'bar'], $this->object));
70+
$this->assertEquals($this->object, $this->hydrator->hydrate(['foo' => 'bar'], $this->object));
8871
}
8972
}

0 commit comments

Comments
 (0)