Skip to content

Commit

Permalink
Unit tests && refactoring (#13)
Browse files Browse the repository at this point in the history
v0.7.0
  • Loading branch information
evgeek authored Feb 26, 2023
1 parent 10044bd commit 63b89ee
Show file tree
Hide file tree
Showing 140 changed files with 3,936 additions and 1,011 deletions.
68 changes: 53 additions & 15 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,72 @@
# Changelog

Все заметные изменения в проекте будут задокументированы в этом файле. Формат основан на [Keep a Changelog](https://keepachangelog.com/ru), и этот проект придерживается семантического версионирования ([semver](https://semver.org/lang/ru/)).

## [Unreleased] [[Upgrade guide](/UPGRADE.md#[Unreleased]-changelog)]

### Added
- В методы для формирования query-параметров запроса, подразумеющих возможность передачи нескольких значений (`filter()`, `order()`, `expand()` и `params()`) можно передавать несколько наборов значений за раз при помощи массива массивов. Примеры есть в [README](/##параметры-запроса) и PHPDoc методов.
- Полное покрытие проекта unit тестами.

### Changed

- Настройка отправителя запросов реализована через фабрику. Конструктор стандартной `Evgeek\Moysklad\Http\GuzzleSenderFactory` принимает параметры `$retries` и `$exceptionTruncateAt`, отвечающие за количество попыток повторной отправки запроса и лимит тела ответа в выбрасываемых исключениях соответственно.
- Форматтер инициализируется объектом, а не именем класса.
- Приведение метода `expand()` к общей логике. Теперь у него только один аргумент, и есть возможность передать одновременно несколько полей через массив.
- Переработаны исключения: `ApiException` переименован в более логичный `RequestException`, остальные заменены стандартными `InvalidArgumentException` и `UnexpectedValueException`.
- Реорганизация пространства имён `Evgeek\Moysklad\Api`.
- Имена классов приведены к [PSR Naming Conventions](https://www.php-fig.org/bylaws/psr-naming-conventions/).
- Лог изменений приведён к [Keep a Changelog](https://keepachangelog.com/ru).
- Тело ответа в исключениях, выбрасываемых неудачными запросами, теперь по умолчанию обрезается до 120 символов (ранее было 4000), изменить можно при помощи `GuzzleSenderFactory`.

### Deprecated

- В метод `filters()` будет удалён в следующей минорной версии, используйте вместо него `filter()`.

## v0.6.3

Починен метод `Evgeek\Moysklad\Http\ApiClient::getGenerator()`.
### Fixed

- Починен метод `Evgeek\Moysklad\Http\ApiClient::getGenerator()`.

## v0.6.2

Фикс форматтера `StdClassFormat`: теперь он может обрабатывать не только объекты, но и массивы объектов.
### Fixed

- Форматтер `StdClassFormat` может обрабатывать не только объекты, но и массивы объектов.

## v0.6.1

Небольшие фиксы документации.
### Fixed

- Небольшие фиксы документации.

## v0.6.0 [[Upgrade guide](/UPGRADE.md#v060)]
## v0.6.0 [[Upgrade guide](/UPGRADE.md#v060-changelog)]

* Формат ответа задаётся теперь не через `\Evgeek\Moysklad\Enums\Format::class`, а через имя любого класса-форматтера, имплементирующего `Evgeek\Moysklad\Formatters\JsonFormatter`. Как и раньше, библиотека включает в себя три стандартных форматтера: `StdClassFormat` (по умолчанию), `ArrayFormat` и `StringFormat`, но теперь при желании можно реализовать свой собственный.
* Билдер запросов теперь инициализируется не напрямую из `\Evgeek\Moysklad\MoySklad::class`, а через метод `MoySklad::query()`.
* Фильтры теперь задаются более просто, без использования `Evgeek\Moysklad\Filter::class`.
* Параметры запроса (`->limit()`, `->filter()`, `->params()` и т.д.), которые ранее требовалось задавать исключительно в конце билдера, теперь корректно работают в любом месте fluent-цепочки.
* В качестве значения параметра в `filter()` и `param()` теперь можно передавать не только строку, но и `bool|int|float`, переданное значение будет сконвертировано в строку автоматом (`123.45` => `'123.45'`, `true` => `'true'`).
### Changed

- Формат ответа задаётся не через `\Evgeek\Moysklad\Enums\Format::class`, а через имя любого класса-форматтера, реализующего интерфейс `Evgeek\Moysklad\Formatters\JsonFormatter`. Как и раньше, библиотека включает в себя три стандартных форматтера: `StdClassFormat` (по умолчанию), `ArrayFormat` и `StringFormat`, но теперь при желании можно реализовать свой собственный.
- Билдер запросов инициализируется не напрямую из `\Evgeek\Moysklad\MoySklad::class`, а через метод `MoySklad::query()`.
- Фильтры задаются более просто, без использования `Evgeek\Moysklad\Filter::class`.
- Параметры запроса (`->limit()`, `->filter()`, `->params()` и т.д.), которые ранее требовалось задавать исключительно в конце билдера, теперь корректно работают в любом месте fluent-цепочки.
- В качестве значения параметра в `filter()` и `param()` можно передавать не только строку, но и `bool|int|float`, переданное значение будет сконвертировано в строку автоматом (`123.45` => `'123.45'`, `true` => `'true'`).

## v0.5.2

Добавлен PHPUnit и базовые тесты.
### Added

- Добавлен PHPUnit и базовые тесты.

## v0.5.1 [[Upgrade guide](/UPGRADE.md#v051)]
## v0.5.1 [[Upgrade guide](/UPGRADE.md#v051-changelog)]

Переработан метод `Meta::state()`. Ранее он создавал мету только для `customerorder`, теперь - для любой переданной сущности.
### Changed

- Переработан метод `Meta::state()`. Ранее он создавал мету только для `customerorder`, теперь - для любой переданной сущности.

## v0.5.0
* Добавлен, настроен и запущен [PHP-CS-Fixer](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer).
* Добавлен и настроен [PHPStan](https://github.com/phpstan/phpstan), поправлены ошибки первого уровня.
* Добавлен `Makefile` с алиасами команд для быстрого запуска.

### Added

- Добавлен, настроен и запущен [PHP-CS-Fixer](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer).
- Добавлен и настроен [PHPStan](https://github.com/phpstan/phpstan), поправлены ошибки первого уровня.
- Добавлен `Makefile` с алиасами команд для быстрого запуска.
18 changes: 12 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,15 @@ phpstan: # Run PHPStan
vendor/bin/phpstan analyse --xdebug

# PHPUnit
test: ## Run all tests
./vendor/bin/phpunit tests
test-testdox: ## Run all tests with verbose testdox output
./vendor/bin/phpunit --testdox tests
test-coverage: ## Run all tests with coverage report
XDEBUG_MODE=coverage ./vendor/bin/phpunit --coverage-text --coverage-clover .phpunit.cache/clover.xml --coverage-html .phpunit.cache/htmlreport tests
test-unit: ## Run unit tests. Use p= for specify additional params
make test p="--testsuite unit $(p)"
test-unit-coverage: ## Run unit tests. Use p= for specify additional params
make test-coverage p="--testsuite unit $(p)"
test-feature: ## Run feature tests
make test p="--testsuite feature $(p)"
test-feature-coverage: ## Run unit tests. Use p= for specify additional params
make test-coverage p="--testsuite feature $(p)"
test: ## Run all tests. Use f= for specify file; m= for specify method; p= for other params
./vendor/bin/phpunit `if [ -z "$(m)" ]; then echo ""; else echo "--filter $m"; fi` $(f) $(p)
test-coverage: ## Run all tests with coverage report. Use p= for specify additional params
XDEBUG_MODE=coverage ./vendor/bin/phpunit --coverage-text --coverage-clover .phpunit.cache/clover.xml --coverage-html .phpunit.cache/htmlreport $(p)
Loading

0 comments on commit 63b89ee

Please sign in to comment.