public function testDelete()
{
$client = $this->createClient();
$library = $this->dataLibrary->createEmpty();
$library->set('name', 'lib a');
$this->dataLibrary->create($library);
$entityBook = $this->dataBook->createEmpty();
$entityBook->set('title', 'titleA');
$entityBook->set('author', 'authorA');
$entityBook->set('pages', 111);
$entityBook->set('release', "2014-08-31");
$entityBook->set('library', $library->get('id'));
$this->dataBook->create($entityBook);
$crawler = $client->request('POST', '/crud/foo/' . $entityBook->get('id') . '/delete');
$this->assertTrue($client->getResponse()->isNotFound());
$this->assertCount(1, $crawler->filter('html:contains("Entity not found")'));
$crawler = $client->request('POST', '/crud/book/666/delete');
$this->assertTrue($client->getResponse()->isNotFound());
$this->assertCount(1, $crawler->filter('html:contains("Instance not found")'));
$this->dataLibrary->getDefinition()->setDeleteCascade(false);
$crawler = $client->request('POST', '/crud/library/' . $library->get('id') . '/delete');
$this->assertTrue($client->getResponse()->isRedirect('/crud/library/' . $library->get('id')));
$crawler = $client->followRedirect();
$this->assertTrue($client->getResponse()->isOk());
$this->assertCount(1, $crawler->filter('html:contains("Could not delete Library as it is still referenced by another entity.")'));
$client->request('POST', '/crud/book/' . $entityBook->get('id') . '/delete');
$this->assertTrue($client->getResponse()->isRedirect('/crud/book'));
$crawler = $client->followRedirect();
$this->assertTrue($client->getResponse()->isOk());
$this->assertCount(1, $crawler->filter('html:contains("Book deleted.")'));
$bookDeleted = $this->dataBook->get($entityBook->get('id'));
$this->assertNull($bookDeleted);
// Test customizable redirection
$entityBook = $this->dataBook->createEmpty();
$entityBook->set('title', 'titleA');
$entityBook->set('author', 'authorA');
$entityBook->set('pages', 111);
$entityBook->set('release', "2014-08-31");
$entityBook->set('library', $library->get('id'));
$this->dataBook->create($entityBook);
$client->request('POST', '/crud/book/' . $entityBook->get('id') . '/delete', ['redirectEntity' => 'library', 'redirectId' => $library->get('id')]);
$this->assertTrue($client->getResponse()->isRedirect('/crud/library/' . $library->get('id')));
$crawler = $client->followRedirect();
$this->assertTrue($client->getResponse()->isOk());
$this->assertCount(1, $crawler->filter('html:contains("Book deleted.")'));
$bookDeleted = $this->dataBook->get($entityBook->get('id'));
$this->assertNull($bookDeleted);
// Canceling events
$before = function (Entity $entity) {
return false;
};
$this->dataBook->pushEvent('before', 'delete', $before);
$entityBook = $this->dataBook->createEmpty();
$entityBook->set('title', 'titleB');
$entityBook->set('author', 'authorB');
$entityBook->set('pages', 111);
$entityBook->set('release', "2014-08-31");
$entityBook->set('library', $library->get('id'));
$this->dataBook->create($entityBook);
$client->request('POST', '/crud/book/' . $entityBook->get('id') . '/delete');
$this->assertTrue($client->getResponse()->isRedirect('/crud/book/' . $entityBook->get('id')));
$client->followRedirect();
$this->assertRegExp('/Could not delete\\./', $client->getResponse()->getContent());
$this->dataBook->popEvent('before', 'delete');
$this->dataBook->pushEvent('before', 'deleteFiles', $before);
$client->request('POST', '/crud/book/' . $entityBook->get('id') . '/delete');
$this->assertTrue($client->getResponse()->isRedirect('/crud/book/' . $entityBook->get('id')));
$client->followRedirect();
$this->assertRegExp('/Could not delete\\./', $client->getResponse()->getContent());
$this->dataBook->popEvent('before', 'deleteFiles');
}