public function testSetupDetectorsIntigration()
{
$detectors = ['json' => ['ext' => 'json', 'accepts' => 'application/json'], 'xml' => ['ext' => 'xml', 'accepts' => 'text/xml']];
$listener = $this->getMockBuilder('\\Crud\\Listener\\ApiListener')->setMethods(['_request', 'config'])->disableOriginalConstructor()->getMock();
$request = $this->getMockBuilder('\\Cake\\Network\\Request')->setMethods(['accepts'])->disableOriginalConstructor()->getMock();
$i = 0;
$listener->expects($this->at($i++))->method('_request')->will($this->returnValue($request));
$listener->expects($this->at($i++))->method('config')->with('detectors')->will($this->returnValue($detectors));
$listener->setupDetectors();
// Test with "ext"
foreach ($detectors as $name => $configuration) {
$request->params['_ext'] = $configuration['ext'];
$request->clearDetectorCache();
$this->assertTrue($request->is($name));
}
$request->params['_ext'] = null;
$request->clearDetectorCache();
// Test with "accepts"
$r = 0;
foreach ($detectors as $name => $configuration) {
$request->expects($this->at($r++))->method('accepts')->with($configuration['accepts'])->will($this->returnValue(true));
}
foreach ($detectors as $name => $config) {
$request->clearDetectorCache();
$this->assertTrue($request->is($name));
}
$request->params['_ext'] = 'xml';
$request->clearDetectorCache();
$this->assertTrue($request->is('api'), "A request with xml extensions should be considered an api request");
$request->params['_ext'] = null;
$request->clearDetectorCache();
$this->assertFalse($request->is('api'), "A request with no extensions should not be considered an api request");
}