summaryrefslogtreecommitdiff
path: root/python-hypothesis-graphql.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-hypothesis-graphql.spec')
-rw-r--r--python-hypothesis-graphql.spec489
1 files changed, 489 insertions, 0 deletions
diff --git a/python-hypothesis-graphql.spec b/python-hypothesis-graphql.spec
new file mode 100644
index 0000000..fb0bbcd
--- /dev/null
+++ b/python-hypothesis-graphql.spec
@@ -0,0 +1,489 @@
+%global _empty_manifest_terminate_build 0
+Name: python-hypothesis-graphql
+Version: 0.9.2
+Release: 1
+Summary: Hypothesis strategies for GraphQL queries
+License: MIT
+URL: https://github.com/Stranger6667/hypothesis-graphql
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/30/fd/1e0b759a10bf4e7e07837ab0d211791df46fe30fcd5c5ea1080d19d4363e/hypothesis_graphql-0.9.2.tar.gz
+BuildArch: noarch
+
+Requires: python3-attrs
+Requires: python3-graphql-core
+Requires: python3-hypothesis
+
+%description
+# hypothesis-graphql
+
+[![Build](https://github.com/Stranger6667/hypothesis-graphql/workflows/build/badge.svg)](https://github.com/Stranger6667/hypothesis-graphql/actions)
+[![Coverage](https://codecov.io/gh/Stranger6667/hypothesis-graphql/branch/master/graph/badge.svg)](https://codecov.io/gh/Stranger6667/hypothesis-graphql/branch/master)
+[![Version](https://img.shields.io/pypi/v/hypothesis-graphql.svg)](https://pypi.org/project/hypothesis-graphql/)
+[![Python versions](https://img.shields.io/pypi/pyversions/hypothesis-graphql.svg)](https://pypi.org/project/hypothesis-graphql/)
+[![Chat](https://img.shields.io/discord/938139740912369755)](https://discord.gg/VnxfdFmBUp)
+[![License](https://img.shields.io/pypi/l/hypothesis-graphql.svg)](https://opensource.org/licenses/MIT)
+
+<h4 align="center">
+Generate queries matching your GraphQL schema, and use them to verify your backend implementation
+</h4>
+
+It is a Python library that provides a set of [Hypothesis](https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-python) strategies that
+let you write tests parametrized by a source of examples.
+Generated queries have arbitrary depth and may contain any subset of GraphQL types defined in the input schema.
+They expose edge cases in your code that are unlikely to be found otherwise.
+
+[Schemathesis](https://github.com/schemathesis/schemathesis) provides a higher-level interface around this library and finds server crashes automatically.
+
+## Usage
+
+`hypothesis-graphql` provides the `from_schema` function, which takes a GraphQL schema and returns a Hypothesis strategy for
+GraphQL queries matching the schema:
+
+```python
+from hypothesis import given
+from hypothesis_graphql import from_schema
+import requests
+
+# Strings and `graphql.GraphQLSchema` are supported
+SCHEMA = """
+type Book {
+ title: String
+ author: Author
+}
+
+type Author {
+ name: String
+ books: [Book]
+}
+
+type Query {
+ getBooks: [Book]
+ getAuthors: [Author]
+}
+
+type Mutation {
+ addBook(title: String!, author: String!): Book!
+ addAuthor(name: String!): Author!
+}
+"""
+
+
+@given(from_schema(SCHEMA))
+def test_graphql(query):
+ # Will generate samples like these:
+ #
+ # {
+ # getBooks {
+ # title
+ # }
+ # }
+ #
+ # mutation {
+ # addBook(title: "H4Z\u7869", author: "\u00d2"){
+ # title
+ # }
+ # }
+ response = requests.post("http://127.0.0.1/graphql", json={"query": query})
+ assert response.status_code == 200
+ assert response.json().get("errors") is None
+```
+
+It is also possible to generate queries or mutations separately with `hypothesis_graphql.queries` and `hypothesis_graphql.mutations`.
+
+### Customization
+
+To restrict the set of fields in generated operations use the `fields` argument:
+
+```python
+@given(from_schema(SCHEMA, fields=["getAuthors"]))
+def test_graphql(query):
+ # Only `getAuthors` will be generated
+ ...
+```
+
+It is also possible to generate custom scalars. For example, `Date`:
+
+```python
+from hypothesis import strategies as st, given
+from hypothesis_graphql import from_schema, nodes
+
+SCHEMA = """
+scalar Date
+
+type Query {
+ getByDate(created: Date!): Int
+}
+"""
+
+
+@given(
+ from_schema(
+ SCHEMA,
+ custom_scalars={
+ # Standard scalars work out of the box, for custom ones you need
+ # to pass custom strategies that generate proper AST nodes
+ "Date": st.dates().map(nodes.String)
+ },
+ )
+)
+def test_graphql(query):
+ # Example:
+ #
+ # { getByDate(created: "2000-01-01") }
+ #
+ ...
+```
+
+The `hypothesis_graphql.nodes` module includes a few helpers to generate various node types:
+
+- `String` -> `graphql.StringValueNode`
+- `Float` -> `graphql.FloatValueNode`
+- `Int` -> `graphql.IntValueNode`
+- `Object` -> `graphql.ObjectValueNode`
+- `List` -> `graphql.ListValueNode`
+- `Boolean` -> `graphql.BooleanValueNode`
+- `Enum` -> `graphql.EnumValueNode`
+- `Null` -> `graphql.NullValueNode` (a constant, not a function)
+
+They exist because classes like `graphql.StringValueNode` can't be directly used in `map` calls due to kwarg-only arguments.
+
+## License
+
+The code in this project is licensed under [MIT license](https://opensource.org/licenses/MIT).
+By contributing to `hypothesis-graphql`, you agree that your contributions will be licensed under its MIT license.
+
+
+
+%package -n python3-hypothesis-graphql
+Summary: Hypothesis strategies for GraphQL queries
+Provides: python-hypothesis-graphql
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-hypothesis-graphql
+# hypothesis-graphql
+
+[![Build](https://github.com/Stranger6667/hypothesis-graphql/workflows/build/badge.svg)](https://github.com/Stranger6667/hypothesis-graphql/actions)
+[![Coverage](https://codecov.io/gh/Stranger6667/hypothesis-graphql/branch/master/graph/badge.svg)](https://codecov.io/gh/Stranger6667/hypothesis-graphql/branch/master)
+[![Version](https://img.shields.io/pypi/v/hypothesis-graphql.svg)](https://pypi.org/project/hypothesis-graphql/)
+[![Python versions](https://img.shields.io/pypi/pyversions/hypothesis-graphql.svg)](https://pypi.org/project/hypothesis-graphql/)
+[![Chat](https://img.shields.io/discord/938139740912369755)](https://discord.gg/VnxfdFmBUp)
+[![License](https://img.shields.io/pypi/l/hypothesis-graphql.svg)](https://opensource.org/licenses/MIT)
+
+<h4 align="center">
+Generate queries matching your GraphQL schema, and use them to verify your backend implementation
+</h4>
+
+It is a Python library that provides a set of [Hypothesis](https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-python) strategies that
+let you write tests parametrized by a source of examples.
+Generated queries have arbitrary depth and may contain any subset of GraphQL types defined in the input schema.
+They expose edge cases in your code that are unlikely to be found otherwise.
+
+[Schemathesis](https://github.com/schemathesis/schemathesis) provides a higher-level interface around this library and finds server crashes automatically.
+
+## Usage
+
+`hypothesis-graphql` provides the `from_schema` function, which takes a GraphQL schema and returns a Hypothesis strategy for
+GraphQL queries matching the schema:
+
+```python
+from hypothesis import given
+from hypothesis_graphql import from_schema
+import requests
+
+# Strings and `graphql.GraphQLSchema` are supported
+SCHEMA = """
+type Book {
+ title: String
+ author: Author
+}
+
+type Author {
+ name: String
+ books: [Book]
+}
+
+type Query {
+ getBooks: [Book]
+ getAuthors: [Author]
+}
+
+type Mutation {
+ addBook(title: String!, author: String!): Book!
+ addAuthor(name: String!): Author!
+}
+"""
+
+
+@given(from_schema(SCHEMA))
+def test_graphql(query):
+ # Will generate samples like these:
+ #
+ # {
+ # getBooks {
+ # title
+ # }
+ # }
+ #
+ # mutation {
+ # addBook(title: "H4Z\u7869", author: "\u00d2"){
+ # title
+ # }
+ # }
+ response = requests.post("http://127.0.0.1/graphql", json={"query": query})
+ assert response.status_code == 200
+ assert response.json().get("errors") is None
+```
+
+It is also possible to generate queries or mutations separately with `hypothesis_graphql.queries` and `hypothesis_graphql.mutations`.
+
+### Customization
+
+To restrict the set of fields in generated operations use the `fields` argument:
+
+```python
+@given(from_schema(SCHEMA, fields=["getAuthors"]))
+def test_graphql(query):
+ # Only `getAuthors` will be generated
+ ...
+```
+
+It is also possible to generate custom scalars. For example, `Date`:
+
+```python
+from hypothesis import strategies as st, given
+from hypothesis_graphql import from_schema, nodes
+
+SCHEMA = """
+scalar Date
+
+type Query {
+ getByDate(created: Date!): Int
+}
+"""
+
+
+@given(
+ from_schema(
+ SCHEMA,
+ custom_scalars={
+ # Standard scalars work out of the box, for custom ones you need
+ # to pass custom strategies that generate proper AST nodes
+ "Date": st.dates().map(nodes.String)
+ },
+ )
+)
+def test_graphql(query):
+ # Example:
+ #
+ # { getByDate(created: "2000-01-01") }
+ #
+ ...
+```
+
+The `hypothesis_graphql.nodes` module includes a few helpers to generate various node types:
+
+- `String` -> `graphql.StringValueNode`
+- `Float` -> `graphql.FloatValueNode`
+- `Int` -> `graphql.IntValueNode`
+- `Object` -> `graphql.ObjectValueNode`
+- `List` -> `graphql.ListValueNode`
+- `Boolean` -> `graphql.BooleanValueNode`
+- `Enum` -> `graphql.EnumValueNode`
+- `Null` -> `graphql.NullValueNode` (a constant, not a function)
+
+They exist because classes like `graphql.StringValueNode` can't be directly used in `map` calls due to kwarg-only arguments.
+
+## License
+
+The code in this project is licensed under [MIT license](https://opensource.org/licenses/MIT).
+By contributing to `hypothesis-graphql`, you agree that your contributions will be licensed under its MIT license.
+
+
+
+%package help
+Summary: Development documents and examples for hypothesis-graphql
+Provides: python3-hypothesis-graphql-doc
+%description help
+# hypothesis-graphql
+
+[![Build](https://github.com/Stranger6667/hypothesis-graphql/workflows/build/badge.svg)](https://github.com/Stranger6667/hypothesis-graphql/actions)
+[![Coverage](https://codecov.io/gh/Stranger6667/hypothesis-graphql/branch/master/graph/badge.svg)](https://codecov.io/gh/Stranger6667/hypothesis-graphql/branch/master)
+[![Version](https://img.shields.io/pypi/v/hypothesis-graphql.svg)](https://pypi.org/project/hypothesis-graphql/)
+[![Python versions](https://img.shields.io/pypi/pyversions/hypothesis-graphql.svg)](https://pypi.org/project/hypothesis-graphql/)
+[![Chat](https://img.shields.io/discord/938139740912369755)](https://discord.gg/VnxfdFmBUp)
+[![License](https://img.shields.io/pypi/l/hypothesis-graphql.svg)](https://opensource.org/licenses/MIT)
+
+<h4 align="center">
+Generate queries matching your GraphQL schema, and use them to verify your backend implementation
+</h4>
+
+It is a Python library that provides a set of [Hypothesis](https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-python) strategies that
+let you write tests parametrized by a source of examples.
+Generated queries have arbitrary depth and may contain any subset of GraphQL types defined in the input schema.
+They expose edge cases in your code that are unlikely to be found otherwise.
+
+[Schemathesis](https://github.com/schemathesis/schemathesis) provides a higher-level interface around this library and finds server crashes automatically.
+
+## Usage
+
+`hypothesis-graphql` provides the `from_schema` function, which takes a GraphQL schema and returns a Hypothesis strategy for
+GraphQL queries matching the schema:
+
+```python
+from hypothesis import given
+from hypothesis_graphql import from_schema
+import requests
+
+# Strings and `graphql.GraphQLSchema` are supported
+SCHEMA = """
+type Book {
+ title: String
+ author: Author
+}
+
+type Author {
+ name: String
+ books: [Book]
+}
+
+type Query {
+ getBooks: [Book]
+ getAuthors: [Author]
+}
+
+type Mutation {
+ addBook(title: String!, author: String!): Book!
+ addAuthor(name: String!): Author!
+}
+"""
+
+
+@given(from_schema(SCHEMA))
+def test_graphql(query):
+ # Will generate samples like these:
+ #
+ # {
+ # getBooks {
+ # title
+ # }
+ # }
+ #
+ # mutation {
+ # addBook(title: "H4Z\u7869", author: "\u00d2"){
+ # title
+ # }
+ # }
+ response = requests.post("http://127.0.0.1/graphql", json={"query": query})
+ assert response.status_code == 200
+ assert response.json().get("errors") is None
+```
+
+It is also possible to generate queries or mutations separately with `hypothesis_graphql.queries` and `hypothesis_graphql.mutations`.
+
+### Customization
+
+To restrict the set of fields in generated operations use the `fields` argument:
+
+```python
+@given(from_schema(SCHEMA, fields=["getAuthors"]))
+def test_graphql(query):
+ # Only `getAuthors` will be generated
+ ...
+```
+
+It is also possible to generate custom scalars. For example, `Date`:
+
+```python
+from hypothesis import strategies as st, given
+from hypothesis_graphql import from_schema, nodes
+
+SCHEMA = """
+scalar Date
+
+type Query {
+ getByDate(created: Date!): Int
+}
+"""
+
+
+@given(
+ from_schema(
+ SCHEMA,
+ custom_scalars={
+ # Standard scalars work out of the box, for custom ones you need
+ # to pass custom strategies that generate proper AST nodes
+ "Date": st.dates().map(nodes.String)
+ },
+ )
+)
+def test_graphql(query):
+ # Example:
+ #
+ # { getByDate(created: "2000-01-01") }
+ #
+ ...
+```
+
+The `hypothesis_graphql.nodes` module includes a few helpers to generate various node types:
+
+- `String` -> `graphql.StringValueNode`
+- `Float` -> `graphql.FloatValueNode`
+- `Int` -> `graphql.IntValueNode`
+- `Object` -> `graphql.ObjectValueNode`
+- `List` -> `graphql.ListValueNode`
+- `Boolean` -> `graphql.BooleanValueNode`
+- `Enum` -> `graphql.EnumValueNode`
+- `Null` -> `graphql.NullValueNode` (a constant, not a function)
+
+They exist because classes like `graphql.StringValueNode` can't be directly used in `map` calls due to kwarg-only arguments.
+
+## License
+
+The code in this project is licensed under [MIT license](https://opensource.org/licenses/MIT).
+By contributing to `hypothesis-graphql`, you agree that your contributions will be licensed under its MIT license.
+
+
+
+%prep
+%autosetup -n hypothesis-graphql-0.9.2
+
+%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-hypothesis-graphql -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 0.9.2-1
+- Package Spec generated