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);
}