/**
  * @param ApiResource $apiResource
  * @param RouteCollection $routes
  * @param ApiResource $parentResource
  */
 private function addRoute(ApiResource $apiResource, RouteCollection $routes, $parentResource = null)
 {
     foreach ($apiResource->getActions() as $action) {
         if (!$parentResource && !$apiResource->isMainResource()) {
             continue;
         }
         $route = new Route($this->getUrl($action, $parentResource));
         $route->setDefault('_api_resource', $apiResource->getName())->setDefault('_controller', $action->getControllerAction())->setDefault('_entity', $apiResource->getEntityClass())->setDefault('_security', $this->expressionsToSecurity($action->getSecurityExpression()))->setDefault('_identifier', $apiResource->getIdentifier())->setMethods($action->getMethods());
         if ($action instanceof Index) {
             $route->setDefault('_indexGetterMethod', $action->getResourceGetterMethod());
             $route->setDefault('_limit', $action->getDefaultLimit());
         }
         $routes->add($action->getRouteName($parentResource), $route);
     }
     foreach ($apiResource->getSubResources() as $subResource) {
         $this->addRoute($subResource, $routes, $apiResource);
     }
 }
 /**
  * @param ApiResource $resource
  * @param Route $route
  * @return string
  */
 private function getDescription(ApiResource $resource, Route $route)
 {
     $description = '';
     $name = $resource->getName();
     $action = $resource->getActions()->getActionForRoute($route);
     switch (get_class($action)) {
         case Index::class:
             $description = 'List all ' . Inflector::pluralize($name);
             break;
         case Show::class:
             $description = 'Get a single ' . Inflector::singularize($name);
             break;
         case Create::class:
             $description = 'Create a new ' . Inflector::singularize($name);
             break;
         case Update::class:
             $description = 'Update a ' . Inflector::singularize($name);
             break;
         case BatchUpdate::class:
             $description = 'Update multiple ' . Inflector::pluralize($name);
             break;
         case Delete::class:
             $description = 'Delete a ' . Inflector::singularize($name);
             break;
         case BatchDelete::class:
             $description = 'Delete multiple ' . Inflector::pluralize($name);
             break;
         default:
             @trigger_error('Action was not defined');
             break;
     }
     return $description;
 }
 /**
  * //     * @test
  * @dataProvider routes
  *
  * @param $routeType
  * @param $expectedUrl
  * @param $expectedControllerAction
  */
 public function it_returns_the_controller_action_names($routeType, $expectedUrl, $expectedControllerAction)
 {
     $this->assertEquals($expectedControllerAction, $this->config->getActions()->get($routeType)->getControllerAction());
 }