From 6f6ed8eb0f1f0773e6575309aa6449f6716f072e Mon Sep 17 00:00:00 2001 From: Arty Buldauskas Date: Thu, 22 Feb 2018 10:55:42 -0500 Subject: [PATCH] tweak api, match spec exactly --- src/Renderer.php | 9 ++++++--- src/plugins/BasePlugin.php | 4 ++-- src/plugins/Plugin.php | 5 +++-- tests/BasePluginTest.php | 5 +++-- tests/RendererTest.php | 7 ++++++- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/Renderer.php b/src/Renderer.php index defdec3..0957424 100644 --- a/src/Renderer.php +++ b/src/Renderer.php @@ -250,15 +250,18 @@ protected function createJobs() */ protected function prepareRequest($jobs) { + $parsedJobs = $jobs; foreach ($this->plugins as $plugin) { - $jobs = $plugin->prepareRequest($jobs); + // Pass both jobs we are working with an original, incoming jobs so that every plugin has a chance + // to see _all_ original jobs. + $parsedJobs = $plugin->prepareRequest($parsedJobs, $jobs); } $shouldSend = true; foreach ($this->plugins as $plugin) { - $shouldSend = $shouldSend && $plugin->shouldSendRequest($jobs); + $shouldSend = $shouldSend && $plugin->shouldSendRequest($parsedJobs); } - return [$shouldSend, $jobs]; + return [$shouldSend, $parsedJobs]; } } diff --git a/src/plugins/BasePlugin.php b/src/plugins/BasePlugin.php index 439e3f3..2f61a39 100644 --- a/src/plugins/BasePlugin.php +++ b/src/plugins/BasePlugin.php @@ -14,9 +14,9 @@ class BasePlugin implements Plugin /** * {@inheritdoc} */ - public function prepareRequest($request) + public function prepareRequest(array $jobs, array $originalJobs) { - return $request; + return $jobs; } /** diff --git a/src/plugins/Plugin.php b/src/plugins/Plugin.php index 1e3963e..6cfe4a5 100644 --- a/src/plugins/Plugin.php +++ b/src/plugins/Plugin.php @@ -20,10 +20,11 @@ interface Plugin public function getViewData($name, array $data); /** - * @param \WF\Hypernova\Job $request + * @param \WF\Hypernova\Job[] $jobs + * @param \WF\Hypernova\Job[] $originalJobs * @return \WF\Hypernova\Job */ - public function prepareRequest($request); + public function prepareRequest(array $jobs, array $originalJobs); /** * @param \WF\Hypernova\Job[] $jobs diff --git a/tests/BasePluginTest.php b/tests/BasePluginTest.php index 84e4fc5..fa683d8 100644 --- a/tests/BasePluginTest.php +++ b/tests/BasePluginTest.php @@ -19,8 +19,9 @@ public function testPrepareRequest() $plugin = new BasePlugin(); $job = Job::fromArray(['name' => 'foo', 'data' => ['bar' => 'baz']]); + $jobs = [$job]; - $this->assertEquals($job, $plugin->prepareRequest($job)); + $this->assertEquals($jobs, $plugin->prepareRequest($jobs, [$jobs])); } public function testOnError() @@ -80,4 +81,4 @@ private function makeJob() { return Job::fromArray(['name' => 'foo', 'data' => []]); } -} \ No newline at end of file +} diff --git a/tests/RendererTest.php b/tests/RendererTest.php index f8ad104..4363271 100644 --- a/tests/RendererTest.php +++ b/tests/RendererTest.php @@ -120,6 +120,9 @@ public function testShouldSend() $pluginDontSend = $this->createMock(BasePlugin::class); $pluginDoSend = $this->createMock(BasePlugin::class); + $pluginDoSend->method('prepareRequest')->will($this->returnArgument(0)); + $pluginDontSend->method('prepareRequest')->will($this->returnArgument(0)); + $pluginDontSend->expects($this->once()) ->method('shouldSendRequest') ->willReturn(false); @@ -130,7 +133,9 @@ public function testShouldSend() $this->renderer->addPlugin($pluginDontSend); $this->renderer->addPlugin($pluginDoSend); - $this->assertFalse($this->callInternalMethodOfThing($this->renderer, 'prepareRequest', [[$this->defaultJob]])[0]); + $result = $this->callInternalMethodOfThing($this->renderer, 'prepareRequest', [[$this->defaultJob]]); + $this->assertEquals([$this->defaultJob], $result[1]); + $this->assertFalse($result[0]); } public function testRenderShouldNotSend()