summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-05 04:45:24 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-05 04:45:24 +0000
commit40e78cb578bdd38f6f9d9b0c856b5deb750a1f67 (patch)
tree863fd1b7a02b0ba9ef3a0e662056083a1f56d5d1
parent1e80a2b5a7571bcb53ce8bd6e05fcbf3972dd3b2 (diff)
automatic import of python-decoyopeneuler20.03
-rw-r--r--.gitignore1
-rw-r--r--python-decoy.spec525
-rw-r--r--sources1
3 files changed, 527 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..f0baeb7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/decoy-2.0.1.tar.gz
diff --git a/python-decoy.spec b/python-decoy.spec
new file mode 100644
index 0000000..08d7026
--- /dev/null
+++ b/python-decoy.spec
@@ -0,0 +1,525 @@
+%global _empty_manifest_terminate_build 0
+Name: python-decoy
+Version: 2.0.1
+Release: 1
+Summary: Opinionated mocking library for Python
+License: MIT
+URL: https://mike.cousins.io/decoy/
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/b9/07/65a49daf3bfe36f939c253a83406bd015e0531a262176345cbbcbfe7cfb8/decoy-2.0.1.tar.gz
+BuildArch: noarch
+
+
+%description
+<div align="center">
+ <img alt="Decoy logo" src="https://mike.cousins.io/decoy/img/decoy.png" width="256px">
+ <h1 class="decoy-title">Decoy</h1>
+ <p>Opinionated mocking library for Python</p>
+ <p>
+ <a title="CI Status" href="https://github.com/mcous/decoy/actions">
+ <img src="https://img.shields.io/github/actions/workflow/status/mcous/decoy/ci.yml?branch=main&style=flat-square"></a>
+ <a title="Code Coverage" href="https://app.codecov.io/gh/mcous/decoy/"><img src="https://img.shields.io/codecov/c/github/mcous/decoy?style=flat-square"></a>
+ <a title="License" href="https://github.com/mcous/decoy/blob/main/LICENSE"><img src="https://img.shields.io/github/license/mcous/decoy?style=flat-square"></a>
+ <a title="PyPI Version"href="https://pypi.org/project/decoy/"><img src="https://img.shields.io/pypi/v/decoy?style=flat-square"></a>
+ <a title="Supported Python Versions" href="https://pypi.org/project/decoy/"><img src="https://img.shields.io/pypi/pyversions/decoy?style=flat-square"></a>
+ </p>
+ <p>
+ <a href="https://mike.cousins.io/decoy/" class="decoy-hidden">Usage guide and documentation</a>
+ </p>
+</div>
+
+Decoy is a mocking library designed for **effective and productive test-driven development** in Python. If you want to use tests to guide the structure of your code, Decoy might be for you!
+
+Decoy mocks are **async/await** and **type-checking** friendly. Decoy is heavily inspired by (and/or stolen from) the excellent [testdouble.js][] and [Mockito][] projects. The Decoy API is powerful, easy to read, and strives to help you make good decisions about your code.
+
+## Install
+
+```bash
+# pip
+pip install decoy
+
+# poetry
+poetry add --dev decoy
+
+# pipenv
+pipenv install --dev decoy
+```
+
+## Setup
+
+### Pytest setup
+
+Decoy ships with its own [pytest][] plugin, so once Decoy is installed, you're ready to start using it via its pytest fixture, called `decoy`.
+
+```python
+# test_my_thing.py
+from decoy import Decoy
+
+def test_my_thing_works(decoy: Decoy) -> None:
+ ...
+```
+
+### Mypy setup
+
+By default, Decoy is compatible with Python [typing][] and type-checkers like [mypy][]. However, stubbing functions that return `None` can trigger a [type checking error](https://mypy.readthedocs.io/en/stable/error_code_list.html#check-that-called-function-returns-a-value-func-returns-value) during correct usage of the Decoy API. To suppress these errors, add Decoy's plugin to your mypy configuration.
+
+```ini
+# mypy.ini
+plugins = decoy.mypy
+```
+
+### Other testing libraries
+
+Decoy works well with [pytest][], but if you use another testing library or framework, you can still use Decoy! You just need to do two things:
+
+1. Create a new instance of [`Decoy()`](https://mike.cousins.io/decoy/api/#decoy.Decoy) before each test
+2. Call [`decoy.reset()`](https://mike.cousins.io/decoy/api/#decoy.Decoy.reset) after each test
+
+For example, using the built-in [unittest][] framework, you would use the `setUp` fixture method to do `self.decoy = Decoy()` and the `tearDown` method to call `self.decoy.reset()`. For a working example, see [`tests/test_unittest.py`](https://github.com/mcous/decoy/blob/main/tests/test_unittest.py).
+
+## Basic Usage
+
+This basic example assumes you are using [pytest][]. For more detailed documentation, see Decoy's [usage guide][] and [API reference][].
+
+Decoy will add a `decoy` fixture to pytest that provides its mock creation API.
+
+```python
+from decoy import Decoy
+
+def test_something(decoy: Decoy) -> None:
+ ...
+```
+
+!!! note
+
+ Importing the `Decoy` interface for type annotations is recommended, but optional. If your project does not use type annotations, you can simply write:
+
+ ```python
+ def test_something(decoy):
+ ...
+ ```
+
+### Create a mock
+
+Use `decoy.mock` to create a mock based on some specification. From there, inject the mock into your test subject.
+
+```python
+def test_add_todo(decoy: Decoy) -> None:
+ todo_store = decoy.mock(cls=TodoStore)
+ subject = TodoAPI(store=todo_store)
+ ...
+```
+
+See [creating mocks][] for more details.
+
+### Stub a behavior
+
+Use `decoy.when` to configure your mock's behaviors. For example, you can set the mock to return a certain value when called in a certain way using `then_return`:
+
+```python
+def test_add_todo(decoy: Decoy) -> None:
+ """Adding a todo should create a TodoItem in the TodoStore."""
+ todo_store = decoy.mock(cls=TodoStore)
+ subject = TodoAPI(store=todo_store)
+
+ decoy.when(
+ todo_store.add(name="Write a test for adding a todo")
+ ).then_return(
+ TodoItem(id="abc123", name="Write a test for adding a todo")
+ )
+
+ result = subject.add("Write a test for adding a todo")
+ assert result == TodoItem(id="abc123", name="Write a test for adding a todo")
+```
+
+See [stubbing with when][] for more details.
+
+### Verify a call
+
+Use `decoy.verify` to assert that a mock was called in a certain way. This is best used with dependencies that are being used for their side-effects and don't return a useful value.
+
+```python
+def test_remove_todo(decoy: Decoy) -> None:
+ """Removing a todo should remove the item from the TodoStore."""
+ todo_store = decoy.mock(cls=TodoStore)
+ subject = TodoAPI(store=todo_store)
+
+ subject.remove("abc123")
+
+ decoy.verify(todo_store.remove(id="abc123"), times=1)
+```
+
+See [spying with verify][] for more details.
+
+[testdouble.js]: https://github.com/testdouble/testdouble.js
+[mockito]: https://site.mockito.org/
+[pytest]: https://docs.pytest.org/
+[unittest]: https://docs.python.org/3/library/unittest.html
+[typing]: https://docs.python.org/3/library/typing.html
+[mypy]: https://mypy.readthedocs.io/
+[api reference]: https://mike.cousins.io/decoy/api/
+[usage guide]: https://mike.cousins.io/decoy/usage/create/
+[creating mocks]: https://mike.cousins.io/decoy/usage/create/
+[stubbing with when]: https://mike.cousins.io/decoy/usage/when/
+[spying with verify]: https://mike.cousins.io/decoy/usage/verify/
+
+
+%package -n python3-decoy
+Summary: Opinionated mocking library for Python
+Provides: python-decoy
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-decoy
+<div align="center">
+ <img alt="Decoy logo" src="https://mike.cousins.io/decoy/img/decoy.png" width="256px">
+ <h1 class="decoy-title">Decoy</h1>
+ <p>Opinionated mocking library for Python</p>
+ <p>
+ <a title="CI Status" href="https://github.com/mcous/decoy/actions">
+ <img src="https://img.shields.io/github/actions/workflow/status/mcous/decoy/ci.yml?branch=main&style=flat-square"></a>
+ <a title="Code Coverage" href="https://app.codecov.io/gh/mcous/decoy/"><img src="https://img.shields.io/codecov/c/github/mcous/decoy?style=flat-square"></a>
+ <a title="License" href="https://github.com/mcous/decoy/blob/main/LICENSE"><img src="https://img.shields.io/github/license/mcous/decoy?style=flat-square"></a>
+ <a title="PyPI Version"href="https://pypi.org/project/decoy/"><img src="https://img.shields.io/pypi/v/decoy?style=flat-square"></a>
+ <a title="Supported Python Versions" href="https://pypi.org/project/decoy/"><img src="https://img.shields.io/pypi/pyversions/decoy?style=flat-square"></a>
+ </p>
+ <p>
+ <a href="https://mike.cousins.io/decoy/" class="decoy-hidden">Usage guide and documentation</a>
+ </p>
+</div>
+
+Decoy is a mocking library designed for **effective and productive test-driven development** in Python. If you want to use tests to guide the structure of your code, Decoy might be for you!
+
+Decoy mocks are **async/await** and **type-checking** friendly. Decoy is heavily inspired by (and/or stolen from) the excellent [testdouble.js][] and [Mockito][] projects. The Decoy API is powerful, easy to read, and strives to help you make good decisions about your code.
+
+## Install
+
+```bash
+# pip
+pip install decoy
+
+# poetry
+poetry add --dev decoy
+
+# pipenv
+pipenv install --dev decoy
+```
+
+## Setup
+
+### Pytest setup
+
+Decoy ships with its own [pytest][] plugin, so once Decoy is installed, you're ready to start using it via its pytest fixture, called `decoy`.
+
+```python
+# test_my_thing.py
+from decoy import Decoy
+
+def test_my_thing_works(decoy: Decoy) -> None:
+ ...
+```
+
+### Mypy setup
+
+By default, Decoy is compatible with Python [typing][] and type-checkers like [mypy][]. However, stubbing functions that return `None` can trigger a [type checking error](https://mypy.readthedocs.io/en/stable/error_code_list.html#check-that-called-function-returns-a-value-func-returns-value) during correct usage of the Decoy API. To suppress these errors, add Decoy's plugin to your mypy configuration.
+
+```ini
+# mypy.ini
+plugins = decoy.mypy
+```
+
+### Other testing libraries
+
+Decoy works well with [pytest][], but if you use another testing library or framework, you can still use Decoy! You just need to do two things:
+
+1. Create a new instance of [`Decoy()`](https://mike.cousins.io/decoy/api/#decoy.Decoy) before each test
+2. Call [`decoy.reset()`](https://mike.cousins.io/decoy/api/#decoy.Decoy.reset) after each test
+
+For example, using the built-in [unittest][] framework, you would use the `setUp` fixture method to do `self.decoy = Decoy()` and the `tearDown` method to call `self.decoy.reset()`. For a working example, see [`tests/test_unittest.py`](https://github.com/mcous/decoy/blob/main/tests/test_unittest.py).
+
+## Basic Usage
+
+This basic example assumes you are using [pytest][]. For more detailed documentation, see Decoy's [usage guide][] and [API reference][].
+
+Decoy will add a `decoy` fixture to pytest that provides its mock creation API.
+
+```python
+from decoy import Decoy
+
+def test_something(decoy: Decoy) -> None:
+ ...
+```
+
+!!! note
+
+ Importing the `Decoy` interface for type annotations is recommended, but optional. If your project does not use type annotations, you can simply write:
+
+ ```python
+ def test_something(decoy):
+ ...
+ ```
+
+### Create a mock
+
+Use `decoy.mock` to create a mock based on some specification. From there, inject the mock into your test subject.
+
+```python
+def test_add_todo(decoy: Decoy) -> None:
+ todo_store = decoy.mock(cls=TodoStore)
+ subject = TodoAPI(store=todo_store)
+ ...
+```
+
+See [creating mocks][] for more details.
+
+### Stub a behavior
+
+Use `decoy.when` to configure your mock's behaviors. For example, you can set the mock to return a certain value when called in a certain way using `then_return`:
+
+```python
+def test_add_todo(decoy: Decoy) -> None:
+ """Adding a todo should create a TodoItem in the TodoStore."""
+ todo_store = decoy.mock(cls=TodoStore)
+ subject = TodoAPI(store=todo_store)
+
+ decoy.when(
+ todo_store.add(name="Write a test for adding a todo")
+ ).then_return(
+ TodoItem(id="abc123", name="Write a test for adding a todo")
+ )
+
+ result = subject.add("Write a test for adding a todo")
+ assert result == TodoItem(id="abc123", name="Write a test for adding a todo")
+```
+
+See [stubbing with when][] for more details.
+
+### Verify a call
+
+Use `decoy.verify` to assert that a mock was called in a certain way. This is best used with dependencies that are being used for their side-effects and don't return a useful value.
+
+```python
+def test_remove_todo(decoy: Decoy) -> None:
+ """Removing a todo should remove the item from the TodoStore."""
+ todo_store = decoy.mock(cls=TodoStore)
+ subject = TodoAPI(store=todo_store)
+
+ subject.remove("abc123")
+
+ decoy.verify(todo_store.remove(id="abc123"), times=1)
+```
+
+See [spying with verify][] for more details.
+
+[testdouble.js]: https://github.com/testdouble/testdouble.js
+[mockito]: https://site.mockito.org/
+[pytest]: https://docs.pytest.org/
+[unittest]: https://docs.python.org/3/library/unittest.html
+[typing]: https://docs.python.org/3/library/typing.html
+[mypy]: https://mypy.readthedocs.io/
+[api reference]: https://mike.cousins.io/decoy/api/
+[usage guide]: https://mike.cousins.io/decoy/usage/create/
+[creating mocks]: https://mike.cousins.io/decoy/usage/create/
+[stubbing with when]: https://mike.cousins.io/decoy/usage/when/
+[spying with verify]: https://mike.cousins.io/decoy/usage/verify/
+
+
+%package help
+Summary: Development documents and examples for decoy
+Provides: python3-decoy-doc
+%description help
+<div align="center">
+ <img alt="Decoy logo" src="https://mike.cousins.io/decoy/img/decoy.png" width="256px">
+ <h1 class="decoy-title">Decoy</h1>
+ <p>Opinionated mocking library for Python</p>
+ <p>
+ <a title="CI Status" href="https://github.com/mcous/decoy/actions">
+ <img src="https://img.shields.io/github/actions/workflow/status/mcous/decoy/ci.yml?branch=main&style=flat-square"></a>
+ <a title="Code Coverage" href="https://app.codecov.io/gh/mcous/decoy/"><img src="https://img.shields.io/codecov/c/github/mcous/decoy?style=flat-square"></a>
+ <a title="License" href="https://github.com/mcous/decoy/blob/main/LICENSE"><img src="https://img.shields.io/github/license/mcous/decoy?style=flat-square"></a>
+ <a title="PyPI Version"href="https://pypi.org/project/decoy/"><img src="https://img.shields.io/pypi/v/decoy?style=flat-square"></a>
+ <a title="Supported Python Versions" href="https://pypi.org/project/decoy/"><img src="https://img.shields.io/pypi/pyversions/decoy?style=flat-square"></a>
+ </p>
+ <p>
+ <a href="https://mike.cousins.io/decoy/" class="decoy-hidden">Usage guide and documentation</a>
+ </p>
+</div>
+
+Decoy is a mocking library designed for **effective and productive test-driven development** in Python. If you want to use tests to guide the structure of your code, Decoy might be for you!
+
+Decoy mocks are **async/await** and **type-checking** friendly. Decoy is heavily inspired by (and/or stolen from) the excellent [testdouble.js][] and [Mockito][] projects. The Decoy API is powerful, easy to read, and strives to help you make good decisions about your code.
+
+## Install
+
+```bash
+# pip
+pip install decoy
+
+# poetry
+poetry add --dev decoy
+
+# pipenv
+pipenv install --dev decoy
+```
+
+## Setup
+
+### Pytest setup
+
+Decoy ships with its own [pytest][] plugin, so once Decoy is installed, you're ready to start using it via its pytest fixture, called `decoy`.
+
+```python
+# test_my_thing.py
+from decoy import Decoy
+
+def test_my_thing_works(decoy: Decoy) -> None:
+ ...
+```
+
+### Mypy setup
+
+By default, Decoy is compatible with Python [typing][] and type-checkers like [mypy][]. However, stubbing functions that return `None` can trigger a [type checking error](https://mypy.readthedocs.io/en/stable/error_code_list.html#check-that-called-function-returns-a-value-func-returns-value) during correct usage of the Decoy API. To suppress these errors, add Decoy's plugin to your mypy configuration.
+
+```ini
+# mypy.ini
+plugins = decoy.mypy
+```
+
+### Other testing libraries
+
+Decoy works well with [pytest][], but if you use another testing library or framework, you can still use Decoy! You just need to do two things:
+
+1. Create a new instance of [`Decoy()`](https://mike.cousins.io/decoy/api/#decoy.Decoy) before each test
+2. Call [`decoy.reset()`](https://mike.cousins.io/decoy/api/#decoy.Decoy.reset) after each test
+
+For example, using the built-in [unittest][] framework, you would use the `setUp` fixture method to do `self.decoy = Decoy()` and the `tearDown` method to call `self.decoy.reset()`. For a working example, see [`tests/test_unittest.py`](https://github.com/mcous/decoy/blob/main/tests/test_unittest.py).
+
+## Basic Usage
+
+This basic example assumes you are using [pytest][]. For more detailed documentation, see Decoy's [usage guide][] and [API reference][].
+
+Decoy will add a `decoy` fixture to pytest that provides its mock creation API.
+
+```python
+from decoy import Decoy
+
+def test_something(decoy: Decoy) -> None:
+ ...
+```
+
+!!! note
+
+ Importing the `Decoy` interface for type annotations is recommended, but optional. If your project does not use type annotations, you can simply write:
+
+ ```python
+ def test_something(decoy):
+ ...
+ ```
+
+### Create a mock
+
+Use `decoy.mock` to create a mock based on some specification. From there, inject the mock into your test subject.
+
+```python
+def test_add_todo(decoy: Decoy) -> None:
+ todo_store = decoy.mock(cls=TodoStore)
+ subject = TodoAPI(store=todo_store)
+ ...
+```
+
+See [creating mocks][] for more details.
+
+### Stub a behavior
+
+Use `decoy.when` to configure your mock's behaviors. For example, you can set the mock to return a certain value when called in a certain way using `then_return`:
+
+```python
+def test_add_todo(decoy: Decoy) -> None:
+ """Adding a todo should create a TodoItem in the TodoStore."""
+ todo_store = decoy.mock(cls=TodoStore)
+ subject = TodoAPI(store=todo_store)
+
+ decoy.when(
+ todo_store.add(name="Write a test for adding a todo")
+ ).then_return(
+ TodoItem(id="abc123", name="Write a test for adding a todo")
+ )
+
+ result = subject.add("Write a test for adding a todo")
+ assert result == TodoItem(id="abc123", name="Write a test for adding a todo")
+```
+
+See [stubbing with when][] for more details.
+
+### Verify a call
+
+Use `decoy.verify` to assert that a mock was called in a certain way. This is best used with dependencies that are being used for their side-effects and don't return a useful value.
+
+```python
+def test_remove_todo(decoy: Decoy) -> None:
+ """Removing a todo should remove the item from the TodoStore."""
+ todo_store = decoy.mock(cls=TodoStore)
+ subject = TodoAPI(store=todo_store)
+
+ subject.remove("abc123")
+
+ decoy.verify(todo_store.remove(id="abc123"), times=1)
+```
+
+See [spying with verify][] for more details.
+
+[testdouble.js]: https://github.com/testdouble/testdouble.js
+[mockito]: https://site.mockito.org/
+[pytest]: https://docs.pytest.org/
+[unittest]: https://docs.python.org/3/library/unittest.html
+[typing]: https://docs.python.org/3/library/typing.html
+[mypy]: https://mypy.readthedocs.io/
+[api reference]: https://mike.cousins.io/decoy/api/
+[usage guide]: https://mike.cousins.io/decoy/usage/create/
+[creating mocks]: https://mike.cousins.io/decoy/usage/create/
+[stubbing with when]: https://mike.cousins.io/decoy/usage/when/
+[spying with verify]: https://mike.cousins.io/decoy/usage/verify/
+
+
+%prep
+%autosetup -n decoy-2.0.1
+
+%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-decoy -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 2.0.1-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..e6e6a9e
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+185ed319a173611f6af4cfecf1b6f2a5 decoy-2.0.1.tar.gz