/**
  * @param JsonApiSerializer $serializer
  * @param Fields            $fields
  * @param string            $paramName
  */
 protected function validateFieldsQueryParams($serializer, Fields $fields, $paramName)
 {
     if (false === $fields->isEmpty()) {
         $validateFields = $fields->types();
         foreach ($validateFields as $key => $field) {
             $mapping = $serializer->getTransformer()->getMappingByAlias($field);
             if (null !== $mapping) {
                 $properties = $this->getPropertiesFromMapping($mapping);
                 $invalidProperties = array_diff($fields->members($field), $properties);
                 $this->addInvalidParameterMemberErrorsToErrorBag($invalidProperties, $paramName, $field);
                 unset($validateFields[$key]);
             }
         }
         $this->addInvalidParameterErrorsToErrorBag($paramName, $validateFields);
     }
 }
 /**
  * @param JsonApiSerializer $serializer
  * @param Fields            $fields
  * @param                   $paramName
  * @param ErrorBag          $errorBag
  */
 protected static function validateQueryParamsTypes(JsonApiSerializer $serializer, Fields $fields, $paramName, ErrorBag $errorBag)
 {
     if (false === $fields->isEmpty()) {
         $transformer = $serializer->getTransformer();
         $validateFields = $fields->types();
         foreach ($validateFields as $key => $type) {
             $mapping = $transformer->getMappingByAlias($type);
             if (null !== $mapping) {
                 $members = array_merge(array_combine($mapping->getProperties(), $mapping->getProperties()), $mapping->getAliasedProperties());
                 $invalidMembers = array_diff($fields->members($type), $members);
                 foreach ($invalidMembers as $extraField) {
                     $errorBag[] = new InvalidParameterMemberError($extraField, $type, strtolower($paramName));
                 }
                 unset($validateFields[$key]);
             }
         }
         if (false === empty($validateFields)) {
             foreach ($validateFields as $type) {
                 $errorBag[] = new InvalidParameterError($type, strtolower($paramName));
             }
         }
     }
 }
 public function testItWillReturnTypeMembers()
 {
     $expected = ['name', 'surname'];
     $this->assertEquals($expected, $this->fields->members('employee'));
 }