/** * @covers ::store * @covers ::delete * @covers ::getImagePath * @covers ::createDirectoryRecursively */ public function testStoreAndDelete() { $id = 'someId'; $ext = 'ext'; $name = 'filename.' . $ext; $path = sprintf('d/I/%s.%s', $id, $ext); $resource = 'someResource'; $image = $this->getMockBuilder(ImageEntity::class)->setMethods(['getResource'])->getMock(); $image->setId($id); $image->setName($name); $image->method('getResource')->willReturn($resource); $this->manager->store($image); $root = vfsStreamWrapper::getRoot(); $this->assertTrue($root->hasChild($path)); $this->assertEquals($resource, $root->getChild($path)->getContent()); $this->manager->delete($image); $this->assertFalse($root->hasChild($path)); }
/** * @param MvcEvent $event */ public function onDispatchError(MvcEvent $event) { if (Application::ERROR_ROUTER_NO_MATCH != $event->getError()) { // ignore other than 'no route' errors return; } // get URI stripped of a base URL $request = $event->getRequest(); $uri = str_replace($request->getBaseUrl(), '', $request->getRequestUri()); // try get image ID from URI $id = $this->manager->matchUri($uri); if (!$id) { // abort if URI does not match return; } // try get image from repository $image = $this->repository->find($id); if (!$image) { // abort if image does not exist return; } // store image $this->manager->store($image); // return image in response as a stream $headers = new Headers(); $headers->addHeaders(['Content-Type' => $image->getType(), 'Content-Length' => $image->getLength()]); $response = new Stream(); $response->setStatusCode(Response::STATUS_CODE_200); $response->setStream($image->getResource()); $response->setStreamName($image->getName()); $response->setHeaders($headers); $event->setResponse($response); }