%global _empty_manifest_terminate_build 0 Name: python-mbtest Version: 2.11.0 Release: 1 Summary: Python wrapper & utils for the Mountebank over the wire test double tool. License: MIT License URL: https://github.com/brunns/mbtest/ Source0: https://mirrors.nju.edu.cn/pypi/web/packages/a1/18/25e73126c5cb52f72280303f89c142222cdd8219ee19a1bab90ad760b36d/mbtest-2.11.0.tar.gz BuildArch: noarch Requires: python3-requests Requires: python3-furl Requires: python3-pyhamcrest Requires: python3-Deprecated Requires: python3-brunns-matchers Requires: python3-imurl Requires: python3-pytest-cov Requires: python3-codacy-coverage Requires: python3-sphinx Requires: python3-sphinx-autodoc-typehints Requires: python3-pytest Requires: python3-furo Requires: python3-requests Requires: python3-furl Requires: python3-pyhamcrest Requires: python3-Deprecated Requires: python3-brunns-matchers Requires: python3-imurl Requires: python3-pytest Requires: python3-contexttimer Requires: python3-brunns-builder Requires: python3-trustme %description # mbtest Opinionated Python wrapper & utils for the [Mountebank](https://www.mbtest.org/) over the wire test double tool. Includes [pytest](https://pytest.org) fixture and [PyHamcrest](https://pyhamcrest.readthedocs.io) matchers. [![made-with-python](https://img.shields.io/badge/Made%20with-Python-1f425f.svg)](https://www.python.org/) [![Continuous Integration](https://github.com/brunns/mbtest/workflows/Continuous%20Integration/badge.svg)](https://github.com/brunns/mbtest/actions) [![Python Versions](https://img.shields.io/pypi/pyversions/mbtest.svg?logo=python)](https://pypi.org/project/mbtest/) [![Licence](https://img.shields.io/github/license/brunns/mbtest.svg)](https://github.com/brunns/mbtest/blob/master/LICENSE) [![GitHub all releases](https://img.shields.io/github/downloads/brunns/mbtest/total.svg?logo=github)](https://github.com/brunns/mbtest/releases/) [![GitHub forks](https://img.shields.io/github/forks/brunns/mbtest.svg?label=Fork&logo=github)](https://github.com/brunns/mbtest/network/members) [![GitHub stars](https://img.shields.io/github/stars/brunns/mbtest.svg?label=Star&logo=github)](https://github.com/brunns/mbtest/stargazers/) [![GitHub watchers](https://img.shields.io/github/watchers/brunns/mbtest.svg?label=Watch&logo=github)](https://github.com/brunns/mbtest/watchers/) [![GitHub contributors](https://img.shields.io/github/contributors/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/graphs/contributors/) [![GitHub issues](https://img.shields.io/github/issues/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/issues/) [![GitHub issues-closed](https://img.shields.io/github/issues-closed/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/issues?q=is%3Aissue+is%3Aclosed) [![GitHub pull-requests](https://img.shields.io/github/issues-pr/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/pulls) [![GitHub pull-requests closed](https://img.shields.io/github/issues-pr-closed/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aclosed) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/3b7c694664974d17a34e594c43af0c1b)](https://www.codacy.com/app/brunns/mbtest) [![Codacy Coverage](https://api.codacy.com/project/badge/coverage/3b7c694664974d17a34e594c43af0c1b)](https://www.codacy.com/app/brunns/mbtest) [![Documentation Status](https://readthedocs.org/projects/mbtest/badge/?version=latest)](https://mbtest.readthedocs.io/en/latest/?badge=latest) [![Lines of Code](https://tokei.rs/b1/github/brunns/mbtest)](https://github.com/brunns/mbtest) ## Setup Install with pip: pip install mbtest (As usual, use of a [venv](https://docs.python.org/3/library/venv.html) or [virtualenv](https://virtualenv.pypa.io) is recommended.) Also requires [Mountebank](http://www.mbtest.org/) to have been installed: npm install mountebank@2.8 --omit=dev (Alternatively, you can attach to an instance of Mountebank running elsewhere, perhaps [in docker](https://mbtest.readthedocs.io/en/latest/guide/docker.html).) ## Basic example ```python import requests from hamcrest import assert_that from brunns.matchers.response import is_response from mbtest.matchers import had_request from mbtest.imposters import Imposter, Predicate, Response, Stub def test_request_to_mock_server(mock_server): # Set up mock server with required behavior imposter = Imposter(Stub(Predicate(path="/test"), Response(body="sausages"))) with mock_server(imposter): # Make request to mock server - exercise code under test here response = requests.get(f"{imposter.url}/test") assert_that("We got the expected response", response, is_response().with_status_code(200).and_body("sausages")) assert_that("The mock server recorded the request", imposter, had_request().with_path("/test").and_method("GET")) ``` Needs a [pytest fixture](https://docs.pytest.org/en/latest/fixture.html), most easily defined in [`conftest.py`](https://docs.pytest.org/en/latest/how-to/fixtures.html#scope-sharing-fixtures-across-classes-modules-packages-or-session): ```python import pytest from mbtest import server @pytest.fixture(scope="session") def mock_server(request): return server.mock_server(request) ``` This will take care of starting and stopping the Mountebank server for you. Examples of more complex predicates can be found in the [integration tests](https://github.com/brunns/mbtest/tree/master/tests/integration/). See the [Documentation](https://mbtest.readthedocs.io/) for more. ## Contributing Requires [make](https://www.gnu.org/software/make/manual/html_node/index.html) and [tox](https://tox.readthedocs.io). [PyEnv](https://github.com/pyenv/pyenv) may also come in handy so tests can be run against various Python versions. Integration tests run against an instance of Mountebank running in Docker. Currently, the `Makefile` targets use Python 3.8 and 3.11 via tox, so a quick-start setup could be: ```sh brew install pyenv colima docker versions=(3.7 3.11) for v in "${versions[@]}"; do pyenv install $v -s; done pyenv local 3.11 3.7 pip install tox tox-pyenv colima start ``` In order to run `make test`, you'll also need to have Mountebank installed locally: ```sh npm install mountebank@2.6 --production ``` (`mbtest` is tested against Mountebank versions back as far as 1.16, but obviously only features supported by the Mountebank version you're using will work.) After that, you should be ready to roll; running `make test` will let you know if your setup is correct. Running `make precommit` tells you if you're OK to commit. For more options, run: make help ## Releasing Requires [hub](https://hub.github.com/), [setuptools](https://setuptools.readthedocs.io), [wheel](https://github.com/pypa/wheel) and [twine](https://twine.readthedocs.io). To release version `n.n.n`, first update the version number in `setup.py`, then: ```sh version="n.n.n" # Needs to match new version number in setup.py. git checkout -b "release-$version" make precommit && git commit -am"Release $version" && git push --set-upstream origin "release-$version" # If not already all pushed, which it should be. hub release create "V$version" -t"release-$version" -m"Version $version" python setup.py sdist bdist_wheel twine upload dist/*$version* git checkout master git merge "release-$version" git push ``` %package -n python3-mbtest Summary: Python wrapper & utils for the Mountebank over the wire test double tool. Provides: python-mbtest BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-mbtest # mbtest Opinionated Python wrapper & utils for the [Mountebank](https://www.mbtest.org/) over the wire test double tool. Includes [pytest](https://pytest.org) fixture and [PyHamcrest](https://pyhamcrest.readthedocs.io) matchers. [![made-with-python](https://img.shields.io/badge/Made%20with-Python-1f425f.svg)](https://www.python.org/) [![Continuous Integration](https://github.com/brunns/mbtest/workflows/Continuous%20Integration/badge.svg)](https://github.com/brunns/mbtest/actions) [![Python Versions](https://img.shields.io/pypi/pyversions/mbtest.svg?logo=python)](https://pypi.org/project/mbtest/) [![Licence](https://img.shields.io/github/license/brunns/mbtest.svg)](https://github.com/brunns/mbtest/blob/master/LICENSE) [![GitHub all releases](https://img.shields.io/github/downloads/brunns/mbtest/total.svg?logo=github)](https://github.com/brunns/mbtest/releases/) [![GitHub forks](https://img.shields.io/github/forks/brunns/mbtest.svg?label=Fork&logo=github)](https://github.com/brunns/mbtest/network/members) [![GitHub stars](https://img.shields.io/github/stars/brunns/mbtest.svg?label=Star&logo=github)](https://github.com/brunns/mbtest/stargazers/) [![GitHub watchers](https://img.shields.io/github/watchers/brunns/mbtest.svg?label=Watch&logo=github)](https://github.com/brunns/mbtest/watchers/) [![GitHub contributors](https://img.shields.io/github/contributors/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/graphs/contributors/) [![GitHub issues](https://img.shields.io/github/issues/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/issues/) [![GitHub issues-closed](https://img.shields.io/github/issues-closed/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/issues?q=is%3Aissue+is%3Aclosed) [![GitHub pull-requests](https://img.shields.io/github/issues-pr/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/pulls) [![GitHub pull-requests closed](https://img.shields.io/github/issues-pr-closed/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aclosed) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/3b7c694664974d17a34e594c43af0c1b)](https://www.codacy.com/app/brunns/mbtest) [![Codacy Coverage](https://api.codacy.com/project/badge/coverage/3b7c694664974d17a34e594c43af0c1b)](https://www.codacy.com/app/brunns/mbtest) [![Documentation Status](https://readthedocs.org/projects/mbtest/badge/?version=latest)](https://mbtest.readthedocs.io/en/latest/?badge=latest) [![Lines of Code](https://tokei.rs/b1/github/brunns/mbtest)](https://github.com/brunns/mbtest) ## Setup Install with pip: pip install mbtest (As usual, use of a [venv](https://docs.python.org/3/library/venv.html) or [virtualenv](https://virtualenv.pypa.io) is recommended.) Also requires [Mountebank](http://www.mbtest.org/) to have been installed: npm install mountebank@2.8 --omit=dev (Alternatively, you can attach to an instance of Mountebank running elsewhere, perhaps [in docker](https://mbtest.readthedocs.io/en/latest/guide/docker.html).) ## Basic example ```python import requests from hamcrest import assert_that from brunns.matchers.response import is_response from mbtest.matchers import had_request from mbtest.imposters import Imposter, Predicate, Response, Stub def test_request_to_mock_server(mock_server): # Set up mock server with required behavior imposter = Imposter(Stub(Predicate(path="/test"), Response(body="sausages"))) with mock_server(imposter): # Make request to mock server - exercise code under test here response = requests.get(f"{imposter.url}/test") assert_that("We got the expected response", response, is_response().with_status_code(200).and_body("sausages")) assert_that("The mock server recorded the request", imposter, had_request().with_path("/test").and_method("GET")) ``` Needs a [pytest fixture](https://docs.pytest.org/en/latest/fixture.html), most easily defined in [`conftest.py`](https://docs.pytest.org/en/latest/how-to/fixtures.html#scope-sharing-fixtures-across-classes-modules-packages-or-session): ```python import pytest from mbtest import server @pytest.fixture(scope="session") def mock_server(request): return server.mock_server(request) ``` This will take care of starting and stopping the Mountebank server for you. Examples of more complex predicates can be found in the [integration tests](https://github.com/brunns/mbtest/tree/master/tests/integration/). See the [Documentation](https://mbtest.readthedocs.io/) for more. ## Contributing Requires [make](https://www.gnu.org/software/make/manual/html_node/index.html) and [tox](https://tox.readthedocs.io). [PyEnv](https://github.com/pyenv/pyenv) may also come in handy so tests can be run against various Python versions. Integration tests run against an instance of Mountebank running in Docker. Currently, the `Makefile` targets use Python 3.8 and 3.11 via tox, so a quick-start setup could be: ```sh brew install pyenv colima docker versions=(3.7 3.11) for v in "${versions[@]}"; do pyenv install $v -s; done pyenv local 3.11 3.7 pip install tox tox-pyenv colima start ``` In order to run `make test`, you'll also need to have Mountebank installed locally: ```sh npm install mountebank@2.6 --production ``` (`mbtest` is tested against Mountebank versions back as far as 1.16, but obviously only features supported by the Mountebank version you're using will work.) After that, you should be ready to roll; running `make test` will let you know if your setup is correct. Running `make precommit` tells you if you're OK to commit. For more options, run: make help ## Releasing Requires [hub](https://hub.github.com/), [setuptools](https://setuptools.readthedocs.io), [wheel](https://github.com/pypa/wheel) and [twine](https://twine.readthedocs.io). To release version `n.n.n`, first update the version number in `setup.py`, then: ```sh version="n.n.n" # Needs to match new version number in setup.py. git checkout -b "release-$version" make precommit && git commit -am"Release $version" && git push --set-upstream origin "release-$version" # If not already all pushed, which it should be. hub release create "V$version" -t"release-$version" -m"Version $version" python setup.py sdist bdist_wheel twine upload dist/*$version* git checkout master git merge "release-$version" git push ``` %package help Summary: Development documents and examples for mbtest Provides: python3-mbtest-doc %description help # mbtest Opinionated Python wrapper & utils for the [Mountebank](https://www.mbtest.org/) over the wire test double tool. Includes [pytest](https://pytest.org) fixture and [PyHamcrest](https://pyhamcrest.readthedocs.io) matchers. [![made-with-python](https://img.shields.io/badge/Made%20with-Python-1f425f.svg)](https://www.python.org/) [![Continuous Integration](https://github.com/brunns/mbtest/workflows/Continuous%20Integration/badge.svg)](https://github.com/brunns/mbtest/actions) [![Python Versions](https://img.shields.io/pypi/pyversions/mbtest.svg?logo=python)](https://pypi.org/project/mbtest/) [![Licence](https://img.shields.io/github/license/brunns/mbtest.svg)](https://github.com/brunns/mbtest/blob/master/LICENSE) [![GitHub all releases](https://img.shields.io/github/downloads/brunns/mbtest/total.svg?logo=github)](https://github.com/brunns/mbtest/releases/) [![GitHub forks](https://img.shields.io/github/forks/brunns/mbtest.svg?label=Fork&logo=github)](https://github.com/brunns/mbtest/network/members) [![GitHub stars](https://img.shields.io/github/stars/brunns/mbtest.svg?label=Star&logo=github)](https://github.com/brunns/mbtest/stargazers/) [![GitHub watchers](https://img.shields.io/github/watchers/brunns/mbtest.svg?label=Watch&logo=github)](https://github.com/brunns/mbtest/watchers/) [![GitHub contributors](https://img.shields.io/github/contributors/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/graphs/contributors/) [![GitHub issues](https://img.shields.io/github/issues/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/issues/) [![GitHub issues-closed](https://img.shields.io/github/issues-closed/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/issues?q=is%3Aissue+is%3Aclosed) [![GitHub pull-requests](https://img.shields.io/github/issues-pr/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/pulls) [![GitHub pull-requests closed](https://img.shields.io/github/issues-pr-closed/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aclosed) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/3b7c694664974d17a34e594c43af0c1b)](https://www.codacy.com/app/brunns/mbtest) [![Codacy Coverage](https://api.codacy.com/project/badge/coverage/3b7c694664974d17a34e594c43af0c1b)](https://www.codacy.com/app/brunns/mbtest) [![Documentation Status](https://readthedocs.org/projects/mbtest/badge/?version=latest)](https://mbtest.readthedocs.io/en/latest/?badge=latest) [![Lines of Code](https://tokei.rs/b1/github/brunns/mbtest)](https://github.com/brunns/mbtest) ## Setup Install with pip: pip install mbtest (As usual, use of a [venv](https://docs.python.org/3/library/venv.html) or [virtualenv](https://virtualenv.pypa.io) is recommended.) Also requires [Mountebank](http://www.mbtest.org/) to have been installed: npm install mountebank@2.8 --omit=dev (Alternatively, you can attach to an instance of Mountebank running elsewhere, perhaps [in docker](https://mbtest.readthedocs.io/en/latest/guide/docker.html).) ## Basic example ```python import requests from hamcrest import assert_that from brunns.matchers.response import is_response from mbtest.matchers import had_request from mbtest.imposters import Imposter, Predicate, Response, Stub def test_request_to_mock_server(mock_server): # Set up mock server with required behavior imposter = Imposter(Stub(Predicate(path="/test"), Response(body="sausages"))) with mock_server(imposter): # Make request to mock server - exercise code under test here response = requests.get(f"{imposter.url}/test") assert_that("We got the expected response", response, is_response().with_status_code(200).and_body("sausages")) assert_that("The mock server recorded the request", imposter, had_request().with_path("/test").and_method("GET")) ``` Needs a [pytest fixture](https://docs.pytest.org/en/latest/fixture.html), most easily defined in [`conftest.py`](https://docs.pytest.org/en/latest/how-to/fixtures.html#scope-sharing-fixtures-across-classes-modules-packages-or-session): ```python import pytest from mbtest import server @pytest.fixture(scope="session") def mock_server(request): return server.mock_server(request) ``` This will take care of starting and stopping the Mountebank server for you. Examples of more complex predicates can be found in the [integration tests](https://github.com/brunns/mbtest/tree/master/tests/integration/). See the [Documentation](https://mbtest.readthedocs.io/) for more. ## Contributing Requires [make](https://www.gnu.org/software/make/manual/html_node/index.html) and [tox](https://tox.readthedocs.io). [PyEnv](https://github.com/pyenv/pyenv) may also come in handy so tests can be run against various Python versions. Integration tests run against an instance of Mountebank running in Docker. Currently, the `Makefile` targets use Python 3.8 and 3.11 via tox, so a quick-start setup could be: ```sh brew install pyenv colima docker versions=(3.7 3.11) for v in "${versions[@]}"; do pyenv install $v -s; done pyenv local 3.11 3.7 pip install tox tox-pyenv colima start ``` In order to run `make test`, you'll also need to have Mountebank installed locally: ```sh npm install mountebank@2.6 --production ``` (`mbtest` is tested against Mountebank versions back as far as 1.16, but obviously only features supported by the Mountebank version you're using will work.) After that, you should be ready to roll; running `make test` will let you know if your setup is correct. Running `make precommit` tells you if you're OK to commit. For more options, run: make help ## Releasing Requires [hub](https://hub.github.com/), [setuptools](https://setuptools.readthedocs.io), [wheel](https://github.com/pypa/wheel) and [twine](https://twine.readthedocs.io). To release version `n.n.n`, first update the version number in `setup.py`, then: ```sh version="n.n.n" # Needs to match new version number in setup.py. git checkout -b "release-$version" make precommit && git commit -am"Release $version" && git push --set-upstream origin "release-$version" # If not already all pushed, which it should be. hub release create "V$version" -t"release-$version" -m"Version $version" python setup.py sdist bdist_wheel twine upload dist/*$version* git checkout master git merge "release-$version" git push ``` %prep %autosetup -n mbtest-2.11.0 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-mbtest -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Wed May 10 2023 Python_Bot - 2.11.0-1 - Package Spec generated