diff --git a/.php_cs.dist b/.php_cs.dist index ae48d6e..08de141 100644 --- a/.php_cs.dist +++ b/.php_cs.dist @@ -4,13 +4,14 @@ declare(strict_types=1); return PhpCsFixer\Config::create() ->setRiskyAllowed(true) - ->setCacheFile(__DIR__ . '/build/.php_cs.cache') + ->setCacheFile(__DIR__ . '/build/php_cs.cache') ->setRules([ '@PSR2' => true, '@PHP70Migration' => true, '@PHP70Migration:risky' => true, '@PHP71Migration' => true, '@PHP71Migration:risky' => true, + // '@PHP73Migration' => true, // symfony 'class_attributes_separation' => true, 'whitespace_after_comma_in_array' => true, diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 2e19ed8..0a673cd 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,74 +1,78 @@ -# Contributor Covenant Code of Conduct -## Our Pledge +# Código de Conducta convenido para Contribuyentes -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -nationality, personal appearance, race, religion, or sexual identity and -orientation. +## Nuestro compromiso -## Our Standards +Nosotros, como miembros, contribuyentes y administradores nos comprometemos a hacer de la participación en nuestra comunidad una experiencia libre de acoso para todo el mundo, independientemente de la edad, dimensión corporal, minusvalía visible o invisible, etnicidad, características sexuales, identidad y expresión de género, nivel de experiencia, educación, nivel socioeconómico, nacionalidad, apariencia personal, raza, religión, o identidad u orientación sexual. -Examples of behavior that contributes to creating a positive environment -include: +Nos comprometemos a actuar e interactuar de maneras que contribuyan a una comunidad abierta, acogedora, diversa, inclusiva y sana. -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +## Nuestros estándares -Examples of unacceptable behavior by participants include: +Ejemplos de comportamiento que contribuyen a crear un ambiente positivo para nuestra comunidad: -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting +* Demostrar empatía y amabilidad ante otras personas +* Respeto a diferentes opiniones, puntos de vista y experiencias +* Dar y aceptar adecuadamente retroalimentación constructiva +* Aceptar la responsabilidad y disculparse ante quienes se vean afectados por nuestros errores, aprendiendo de la experiencia +* Centrarse en lo que sea mejor no solo para nosotros como individuos, sino para la comunidad en general -## Our Responsibilities +Ejemplos de comportamiento inaceptable: -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. +* El uso de lenguaje o imágenes sexualizadas, y aproximaciones o atenciones sexuales de cualquier tipo +* Comentarios despectivos (_trolling_), insultantes o derogatorios, y ataques personales o políticos +* El acoso en público o privado +* Publicar información privada de otras personas, tales como direcciones físicas o de correo electrónico, sin su permiso explícito +* Otras conductas que puedan ser razonablemente consideradas como inapropiadas en un entorno profesional -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. +## Aplicación de las responsabilidades -## Scope +Los administradores de la comunidad son responsables de aclarar y hacer cumplir nuestros estándares de comportamiento aceptable y tomarán acciones apropiadas y correctivas de forma justa en respuesta a cualquier comportamiento que consideren inapropiado, amenazante, ofensivo o dañino. -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. +Los administradores de la comunidad tendrán el derecho y la responsabilidad de eliminar, editar o rechazar comentarios, _commits_, código, ediciones de páginas de wiki, _issues_ y otras contribuciones que no se alineen con este Código de Conducta, y comunicarán las razones para sus decisiones de moderación cuando sea apropiado. -## Enforcement +## Alcance -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at eclipxe13@gmail.com. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. +Este código de conducta aplica tanto a espacios del proyecto como a espacios públicos donde un individuo esté en representación del proyecto o comunidad. Ejemplos de esto incluyen el uso de la cuenta oficial de correo electrónico, publicaciones a través de las redes sociales oficiales, o presentaciones con personas designadas en eventos en línea o no. -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. +## Aplicación -## Attribution +Instancias de comportamiento abusivo, acosador o inaceptable de otro modo podrán ser reportadas a los administradores de la comunidad responsables del cumplimiento a través de [coc@phpcfdi.com](). Todas las quejas serán evaluadas e investigadas de una manera puntual y justa. -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at [http://contributor-covenant.org/version/1/4][version] +Todos los administradores de la comunidad están obligados a respetar la privacidad y la seguridad de quienes reporten incidentes. -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ +## Guías de Aplicación + +Los administradores de la comunidad seguirán estas Guías de Impacto en la Comunidad para determinar las consecuencias de cualquier acción que juzguen como un incumplimiento de este Código de Conducta: + +### 1. Corrección + +**Impacto en la Comunidad**: El uso de lenguaje inapropiado u otro comportamiento considerado no profesional o no acogedor en la comunidad. + +**Consecuencia**: Un aviso escrito y privado por parte de los administradores de la comunidad, proporcionando claridad alrededor de la naturaleza de este incumplimiento y una explicación de por qué el comportamiento es inaceptable. Una disculpa pública podría ser solicitada. + +### 2. Aviso + +**Impacto en la Comunidad**: Un incumplimiento causado por un único incidente o por una cadena de acciones. + +**Consecuencia**: Un aviso con consecuencias por comportamiento prolongado. No se interactúa con las personas involucradas, incluyendo interacción no solicitada con quienes se encuentran aplicando el Código de Conducta, por un periodo especificado de tiempo. Esto incluye evitar las interacciones en espacios de la comunidad, así como a través de canales externos como las redes sociales. Incumplir estos términos puede conducir a una expulsión temporal o permanente. + +### 3. Expulsión temporal + +**Impacto en la Comunidad**: Una serie de incumplimientos de los estándares de la comunidad, incluyendo comportamiento inapropiado continuo. + +**Consecuencia**: Una expulsión temporal de cualquier forma de interacción o comunicación pública con la comunidad durante un intervalo de tiempo especificado. No se permite interactuar de manera pública o privada con las personas involucradas, incluyendo interacciones no solicitadas con quienes se encuentran aplicando el Código de Conducta, durante este periodo. Incumplir estos términos puede conducir a una expulsión permanente. + +### 4. Expulsión permanente + +**Impacto en la Comunidad**: Demostrar un patrón sistemático de incumplimientos de los estándares de la comunidad, incluyendo conductas inapropiadas prolongadas en el tiempo, acoso de individuos, o agresiones o menosprecio a grupos de individuos. + +**Consecuencia**: Una expulsión permanente de cualquier tipo de interacción pública con la comunidad del proyecto. + +## Atribución + +Este Código de Conducta es una adaptación del [Contributor Covenant](https://www.contributor-covenant.org), versión 2.0, disponible en . + +Las Guías de Impacto en la Comunidad están inspiradas en la [escalera de aplicación del código de conducta de Mozilla](https://github.com/mozilla/diversity). + +Para respuestas a las preguntas frecuentes de este código de conducta, consulta las FAQ en . Hay traducciones disponibles en . diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0111349..8ad42ea 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,82 +1,85 @@ -# Contributing +# Contribuciones -Contributions are welcome. We accept pull requests on [GitHub](https://github.com/phpcfdi/sat-estado-cfdi-http-psr). +Las contribuciones son bienvenidas. Aceptamos *Pull Requests* en el [repositorio GitHub][homepage]. -This project adheres to a -[Contributor Code of Conduct](https://github.com/phpcfdi/sat-estado-cfdi-http-psr/blob/master/CODE_OF_CONDUCT.md). -By participating in this project and its community, you are expected to uphold this code. +Este proyecto se apega al siguiente [Código de Conducta][coc]. +Al participar en este proyecto y en su comunidad, deberás seguir este código. -## Team members +## Miembros del equipo -* [Carlos C Soto](https://github.com/eclipxe13) - original author and maintainer -* [GitHub contributors](https://github.com/phpcfdi/sat-estado-cfdi-http-psr/graphs/contributors) +* [phpCfdi][] - Organización que mantiene el proyecto. +* [Contribuidores][contributors]. -## Communication Channels +## Canales de comunicación -You can find help and discussion in the following places: +Puedes encontrar ayuda y comentar asuntos relacionados con este proyecto en estos lugares: +* Comunidad Discord: * GitHub Issues: -## Reporting Bugs +## Reportar Bugs -Bugs are tracked in our project's [issue tracker](https://github.com/phpcfdi/sat-estado-cfdi-http-psr/issues). +Publica los *Bugs* en la sección [GitHub Issues][issues] del proyecto. -When submitting a bug report, please include enough information for us to reproduce the bug. -A good bug report includes the following sections: +Sigue las recomendaciones generales de [phpCfdi][] para reportar problemas +. -* Expected outcome -* Actual outcome -* Steps to reproduce, including sample code -* Any other information that will help us debug and reproduce the issue, including stack traces, system/environment information, and screenshots +Cuando se reporte un *Bug*, por favor incluye la mayor información posible para reproducir el problema, preferentemente +con ejemplos de código o cualquier otra información técnica que nos pueda ayudar a identificar el caso. -**Please do not include passwords or any personally identifiable information in your bug report and sample code.** +**Recuerda no incluir contraseñas, información personal o confidencial.** -## Fixing Bugs +## Corrección de Bugs -We welcome pull requests to fix bugs! +Apreciamos mucho los *Pull Request* para corregir Bugs. -If you see a bug report that you'd like to fix, please feel free to do so. -Following the directions and guidelines described in the "Adding New Features" -section below, you may create bugfix branches and send us pull requests. +Si encuentras un reporte de Bug y te gustaría solucionarlo siéntete libre de hacerlo. +Sigue las directrices de "Agregar nuevas funcionalidades" a continuación. -## Adding New Features +## Agregar nuevas funcionalidades -If you have an idea for a new feature, it's a good idea to check out our -[issues](https://github.com/phpcfdi/sat-estado-cfdi-http-psr/issues) or active -[pull requests](https://github.com/phpcfdi/sat-estado-cfdi-http-psr/pulls) -first to see if the feature is already being worked on. -If not, feel free to submit an issue first, asking whether the feature is beneficial to the project. -This will save you from doing a lot of development work only to have your feature rejected. -We don't enjoy rejecting your hard work, but some features just don't fit with the goals of the project. +Si tienes una idea para una nueva funcionalidad revisa primero que existan discusiones o *Pull Requests* +en donde ya se esté trabajando en la funcionalidad. -When you do begin working on your feature, here are some guidelines to consider: +Antes de trabajar en la nueva característica, utiliza los "Canales de comunicación" mencionados +anteriormente para platicar acerca de tu idea. Si dialogas tus ideas con la comunidad y los +mantenedores del proyecto, podrás ahorrar mucho esfuerzo de desarrollo y prevenir que tu +*Pull Request* sea rechazado. No nos gusta rechazar contribuciones, pero algunas características +o la forma de desarrollarlas puede que no estén alineadas con el proyecto. -* Your pull request description should clearly detail the changes you have made. -* Follow our code style using `squizlabs/php_codesniffer` and `friendsofphp/php-cs-fixer`. -* Please **write tests** for any new features you add. -* Please **ensure that tests pass** before submitting your pull request. We have Travis CI automatically running tests for pull requests. However, running the tests locally will help save time. -* **Use topic/feature branches.** Please do not ask us to pull from your master branch. -* **Submit one feature per pull request.** If you have multiple features you wish to submit, please break them up into separate pull requests. -* **Send coherent history**. Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please squash them before submitting. +Considera las siguientes directrices: -## Check the code style +* Usa una rama única que se desprenda de la rama principal. + No mezcles dos diferentes funcionalidades en una misma rama o *Pull Request*. +* Describe claramente y en detalle los cambios que hiciste. +* **Escribe pruebas** para la funcionalidad que deseas agregar. +* **Asegúrate que las pruebas pasan** antes de enviar tu contribución. + Usamos integración contínua donde se hace esta verificación, pero es mucho mejor si lo pruebas localmente. +* Intenta enviar una historia coherente, entenderemos cómo cambia el código si los *commits* tienen significado. +* La documentación es parte del proyecto. + Realiza los cambios en los archivos de ayuda para que reflejen los cambios en el código. -If you are having issues with coding standars use `php-cs-fixer` and `phpcbf` +## Proceso de construcción ```shell -vendor/bin/php-cs-fixer fix --verbose -vendor/bin/phpcbf --colors -sp src/ tests/ -``` +# Actualiza tus dependencias +composer update -## Running Tests +# Verificación de estilo de código +composer dev:check-style -The following tests must pass before we will accept a pull request. -If any of these do not pass, it will result in a complete build failure. -Before you can run these, be sure to `composer install` or `composer update`. +# Corrección de estilo de código +composer dev:fix-style -```shell -vendor/bin/php-cs-fixer fix --dry-run --verbose -vendor/bin/phpcs --colors -sp src/ tests/ -vendor/bin/phpunit --testdox --verbose -vendor/bin/phpstan analyse --no-progress --verbose --level max src/ tests/ +# Ejecución de pruebas +composer dev:test + +# Ejecución todo en uno, corregir estilo, verificar estilo y correr pruebas +composer dev:build ``` + +[phpCfdi]: https://github.com/phpcfdi/ +[project]: https://github.com/phpcfdi/sat-estado-cfdi-http-psr +[contributors]: https://github.com/phpcfdi/sat-estado-cfdi-http-psr/graphs/contributors +[coc]: https://github.com/phpcfdi/sat-estado-cfdi-http-psr/blob/master/CODE_OF_CONDUCT.md +[issues]: https://github.com/phpcfdi/sat-estado-cfdi-http-psr/issues diff --git a/README.md b/README.md index a3aae62..4fa89f8 100644 --- a/README.md +++ b/README.md @@ -55,14 +55,20 @@ composer require phpcfdi/sat-estado-cfdi-http-psr ```php execute('...expression'); @@ -87,7 +93,7 @@ Puedes ver los siguientes recursos para integrar `phpcfdi/sat-estado-cfdi-http-p Esta librería se mantendrá compatible con al menos la versión con [soporte activo de PHP](https://www.php.net/supported-versions.php) más reciente. -También utilizamos [Versionado Semántico 2.0.0](https://semver.org/lang/es/) por lo que puedes usar esta librería +También utilizamos [Versionado Semántico 2.0.0](docs/SEMVER.md) por lo que puedes usar esta librería sin temor a romper tu aplicación. ## Contribuciones diff --git a/composer.json b/composer.json index b6c0268..2f2d88a 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "require": { "php": ">=7.2", "ext-dom": "*", - "phpcfdi/sat-estado-cfdi": "^0.7.0", + "phpcfdi/sat-estado-cfdi": "^1.0.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.0" diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 663afa5..8ed8d73 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,6 +1,23 @@ # CHANGELOG -## Version 0.2.3 2021-01-09 +## Acerca de SemVer + +Usamos [Versionado Semántico 2.0.0](SEMVER.md) por lo que puedes usar esta librería sin temor a romper tu aplicación. + +## Cambios no liberados en una versión + +Pueden aparecer cambios no liberados que se integran a la rama principal pero no ameritan una nueva liberación de +versión aunque sí su incorporación en la rama principal de trabajo, generalmente se tratan de cambios en el desarrollo. + +## Listado de cambios + +### Version 1.0.0 2021-01-10 + +- A partir de esta versión se ha puesto la documentación del proyecto en español. +- Se garatiza la compatibilidad con PHP 8.0. +- Dependencia con `phpcfdi/sat-estado-cfdi:^1.0.0`. + +### Version 0.2.3 2021-01-09 - Update license year, HNY from PhpCfdi! - Ensure compatibility to PHP 8.0. @@ -10,7 +27,7 @@ - Scrutinizer: Update build pipeline. - Change dependency to `phpcfdi/sat-estado-cfdi: ^^0.7.0`. -## Version 0.2.2 2019-09-23 +### Version 0.2.2 2019-09-23 - Fix usage of `RequestInterface`, to retrieve full body is recommended to use `StreamInterface::__toString()`. - Fix testing based on [`sunrise-php/http-client-curl`](https://github.com/sunrise-php/http-client-curl) because @@ -23,17 +40,17 @@ - On Travis CI add PHP version `7.4snapshot` with allow failure - Let Scrutinizer CI decide which PHP version to use -## Version 0.2.1 2019-05-16 +### Version 0.2.1 2019-05-16 - Change dependence versions `phpcfdi/sat-estado-cfdi: ^0.6.1|^0.7.0`. See -## Version 0.2.0 2019-03-29 +### Version 0.2.0 2019-03-29 - Implemented `phpcfdi/sat-estado-cfdi:^0.6.0` - Improve documentation and integrations - Fix CONTRIBUTING project -## Version 0.1.0 2019-03-28 +### Version 0.1.0 2019-03-28 - Implemented `phpcfdi/sat-estado-cfdi:^0.5.0` diff --git a/docs/SEMVER.md b/docs/SEMVER.md index 499341d..7478955 100644 --- a/docs/SEMVER.md +++ b/docs/SEMVER.md @@ -11,7 +11,7 @@ que nombraremos así: ` Breaking . Feature . Fix `, donde: ## Composer -[Composer](https://getcomposer.org/) es un gestor de dependencias en proyectos para PHP. +La herramienta [Composer](https://getcomposer.org/) es un gestor de dependencias en proyectos para PHP. Este gestor usa las [reglas](https://getcomposer.org/doc/articles/versions.md) de versionado semántico para instalar y actualizar paquetes. @@ -39,4 +39,4 @@ Cuando un elemento es `@internal`, dicho elemento: - no debe ser una entrada (parámetro) - no debe ser una salida (retorno) -- no debe exponer exponer funcionalidades en los objetos públicos (rasgos) +- no debe exponer funcionalidades en los objetos públicos (rasgos) diff --git a/docs/TODO.md b/docs/TODO.md index 0b27b73..6498765 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -1,8 +1,29 @@ -# phpcfdi/sat-estado-cfdi-http-psr To Do List - -- Documentar cómo se puede integrar esta librería con una aplicación de framework o librería común - - [ ] Laravel - - [ ] Symfony - - [ ] Yii - - [X] Guzzle (gracias @blacktrue) - - [ ] HTTPPlug +# phpcfdi/sat-estado-cfdi-soap Lista de tareas pendientes + +## Pendientes + +### Versión mínima de PHP + +Incrementar la versión mínima de PHP a 7.4. + +### Documentación de integraciones + +Documentar cómo se puede integrar esta librería con una aplicación de framework o librería común. + - [ ] Laravel + - [ ] Symfony + - [ ] Yii + - [X] Guzzle (gracias @blacktrue) + - [ ] HTTPPlug + +### Dependencia de `sunrise/http-client-curl` + +Sustituir `symfony/http-client` por `sunrise/http-client-curl` cuando sea compatible con PHP 8.0. +Así estaba implementado, pero al menos en 2021-01-09 aún no era compatible. + +## Hechas + +### Primera versión estable + +- Liberación de la primera versión mayor `1.x`. +- Soporte de PHP 8.0. +- Actualización de entorno de desarrollo e integración contínua. diff --git a/docs/integracion-generica.md b/docs/integracion-generica.md index 5cc9d40..a515d7f 100644 --- a/docs/integracion-generica.md +++ b/docs/integracion-generica.md @@ -8,6 +8,7 @@ Suponiendo que estás usando los paquetes de Sunrise ```php - + diff --git a/phpunit.xml.dist b/phpunit.xml.dist index c6b410b..2081ce6 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -10,7 +10,6 @@ ./tests/ - ./src/ diff --git a/src/Internal/SoapXml.php b/src/Internal/SoapXml.php index 283ed55..6714fe4 100644 --- a/src/Internal/SoapXml.php +++ b/src/Internal/SoapXml.php @@ -58,7 +58,6 @@ public function createXmlRequest(string $expression): string ->appendChild($document->createElementNS($this->uri(), 'c:Consulta')) ->appendChild($document->createElementNS($this->uri(), 'c:expresionImpresa')) ->appendChild($document->createTextNode($expression)); - $xml = $document->saveXML() ?: ''; - return $xml; + return $document->saveXML() ?: ''; } } diff --git a/tests/Unit/HttpConsumerClientTest.php b/tests/Unit/HttpConsumerClientTest.php index d50a5e0..24f9547 100644 --- a/tests/Unit/HttpConsumerClientTest.php +++ b/tests/Unit/HttpConsumerClientTest.php @@ -7,6 +7,7 @@ use PhpCfdi\SatEstadoCfdi\Contracts\ConsumerClientInterface; use PhpCfdi\SatEstadoCfdi\HttpPsr\HttpConsumerClient; use PhpCfdi\SatEstadoCfdi\Tests\HttpPsr\TestCase; +use PHPUnit\Framework\MockObject\MockObject; use Sunrise\Http\Factory\ResponseFactory; class HttpConsumerClientTest extends TestCase @@ -61,7 +62,7 @@ public function testConsume(): void // create a class that intercept sendRequest and return a prepared Response object /** - * @var HttpConsumerClient&\PHPUnit\Framework\MockObject\MockObject $client + * @var HttpConsumerClient&MockObject $client * @noinspection PhpDeprecationInspection */ $client = $this->getMockBuilder(HttpConsumerClient::class) diff --git a/tests/Unit/HttpConsumerFactoryTest.php b/tests/Unit/HttpConsumerFactoryTest.php index 485a96b..7f72365 100644 --- a/tests/Unit/HttpConsumerFactoryTest.php +++ b/tests/Unit/HttpConsumerFactoryTest.php @@ -7,6 +7,7 @@ use PhpCfdi\SatEstadoCfdi\HttpPsr\HttpConsumerFactory; use PhpCfdi\SatEstadoCfdi\HttpPsr\HttpConsumerFactoryInterface; use PhpCfdi\SatEstadoCfdi\Tests\HttpPsr\TestCase; +use PHPUnit\Framework\MockObject\MockObject; use Psr\Http\Client\ClientInterface; use Psr\Http\Message\RequestFactoryInterface; use Psr\Http\Message\StreamFactoryInterface; @@ -15,11 +16,11 @@ class HttpConsumerFactoryTest extends TestCase { private function createFactoryWithMockObjects(): HttpConsumerFactoryInterface { - /** @var ClientInterface&\PHPUnit\Framework\MockObject\MockObject $client */ + /** @var ClientInterface&MockObject $client */ $client = $this->createMock(ClientInterface::class); - /** @var RequestFactoryInterface&\PHPUnit\Framework\MockObject\MockObject $requestFactory */ + /** @var RequestFactoryInterface&MockObject $requestFactory */ $requestFactory = $this->createMock(RequestFactoryInterface::class); - /** @var StreamFactoryInterface&\PHPUnit\Framework\MockObject\MockObject $streamFactory */ + /** @var StreamFactoryInterface&MockObject $streamFactory */ $streamFactory = $this->createMock(StreamFactoryInterface::class); return new HttpConsumerFactory($client, $requestFactory, $streamFactory);