ZF\Apigility\Admin\Controller\ModuleCreationController::apiEnableAction PHP Method

apiEnableAction() public method

public apiEnableAction ( )
    public function apiEnableAction()
    {
        $request = $this->getRequest();
        switch ($request->getMethod()) {
            case $request::METHOD_PUT:
                $module = $this->bodyParam('module', false);
                if (!$module) {
                    return new ApiProblemResponse(new ApiProblem(422, 'Module parameter not provided', 'https://tools.ietf.org/html/rfc4918', 'Unprocessable Entity'));
                }
                $result = $this->moduleModel->updateModule($module);
                if (!$result) {
                    return new ApiProblemResponse(new ApiProblem(500, 'Unable to Apigilify the module'));
                }
                $metadata = new ModuleEntity($module);
                $entity = new Entity($metadata, $module);
                $entity->getLinks()->add(Link::factory(['rel' => 'self', 'route' => ['name' => 'zf-apigility/api/module', 'params' => ['module' => $module]]]));
                return new ViewModel(['payload' => $entity]);
            default:
                return new ApiProblemResponse(new ApiProblem(405, 'Only the method PUT is allowed for this URI'));
        }
    }

Usage Example

 public function testProcessPutRequest()
 {
     $currentDir = getcwd();
     $tmpDir = sys_get_temp_dir() . "/" . uniqid(__NAMESPACE__ . '_');
     mkdir($tmpDir);
     mkdir("{$tmpDir}/module/Foo", 0775, true);
     mkdir("{$tmpDir}/config");
     file_put_contents("{$tmpDir}/config/application.config.php", '<' . '?php return array(\'modules\'=>array(\'Foo\'));');
     file_put_contents("{$tmpDir}/module/Foo/Module.php", "<" . "?php\n\nnamespace Foo;\n\nclass Module\n{\n}");
     chdir($tmpDir);
     require 'module/Foo/Module.php';
     $moduleManager = $this->getMockBuilder('Zend\\ModuleManager\\ModuleManager')->disableOriginalConstructor()->getMock();
     $moduleManager->expects($this->any())->method('getLoadedModules')->will($this->returnValue(['Foo' => new \Foo\Module()]));
     $moduleResource = new ModuleModel($moduleManager, [], []);
     $controller = new ModuleCreationController($moduleResource);
     $request = new Request();
     $request->setMethod('put');
     $request->getHeaders()->addHeaderLine('Accept', 'application/json');
     $request->getHeaders()->addHeaderLine('Content-Type', 'application/json');
     $parameters = new ParameterDataContainer();
     $parameters->setBodyParam('module', 'Foo');
     $event = new MvcEvent();
     $event->setParam('ZFContentNegotiationParameterData', $parameters);
     $plugins = new PluginManager();
     $plugins->setInvokableClass('bodyParam', 'ZF\\ContentNegotiation\\ControllerPlugin\\BodyParam');
     $controller->setRequest($request);
     $controller->setEvent($event);
     $controller->setPluginManager($plugins);
     $result = $controller->apiEnableAction();
     $this->assertInstanceOf('ZF\\ContentNegotiation\\ViewModel', $result);
     $payload = $result->getVariable('payload');
     $entity = method_exists($payload, 'getEntity') ? $payload->getEntity() : $payload->entity;
     $this->assertInstanceOf('ZF\\Hal\\Entity', $payload);
     $this->assertInstanceOf('ZF\\Apigility\\Admin\\Model\\ModuleEntity', $entity);
     $this->assertEquals('Foo', $entity->getName());
     $this->removeDir($tmpDir);
     chdir($currentDir);
 }