|
| 1 | +# type: ignore |
1 | 2 | from __future__ import print_function |
2 | 3 |
|
| 4 | +import json |
| 5 | + |
| 6 | +from pytest import raises |
| 7 | +from graphql.error import GraphQLError |
3 | 8 | from graphql.execution import MiddlewareManager, execute |
4 | | -from graphql.execution.middleware import (get_middleware_resolvers, |
5 | | - middleware_chain) |
| 9 | +from graphql.execution.middleware import get_middleware_resolvers, middleware_chain |
6 | 10 | from graphql.language.parser import parse |
7 | | -from graphql.type import (GraphQLArgument, GraphQLBoolean, GraphQLField, |
8 | | - GraphQLID, GraphQLInt, GraphQLList, GraphQLNonNull, |
9 | | - GraphQLObjectType, GraphQLSchema, GraphQLString) |
| 11 | +from graphql.type import ( |
| 12 | + GraphQLArgument, |
| 13 | + GraphQLBoolean, |
| 14 | + GraphQLField, |
| 15 | + GraphQLInt, |
| 16 | + GraphQLList, |
| 17 | + GraphQLObjectType, |
| 18 | + GraphQLSchema, |
| 19 | + GraphQLString, |
| 20 | + GraphQLNonNull, |
| 21 | + GraphQLID, |
| 22 | +) |
10 | 23 | from promise import Promise |
11 | 24 |
|
12 | 25 |
|
13 | 26 | def test_middleware(): |
14 | | - doc = '''{ |
| 27 | + # type: () -> None |
| 28 | + doc = """{ |
15 | 29 | ok |
16 | 30 | not_ok |
17 | | - }''' |
| 31 | + }""" |
18 | 32 |
|
19 | 33 | class Data(object): |
20 | | - |
21 | 34 | def ok(self): |
22 | | - return 'ok' |
| 35 | + # type: () -> str |
| 36 | + return "ok" |
23 | 37 |
|
24 | 38 | def not_ok(self): |
25 | | - return 'not_ok' |
| 39 | + # type: () -> str |
| 40 | + return "not_ok" |
26 | 41 |
|
27 | 42 | doc_ast = parse(doc) |
28 | 43 |
|
29 | | - Type = GraphQLObjectType('Type', { |
30 | | - 'ok': GraphQLField(GraphQLString), |
31 | | - 'not_ok': GraphQLField(GraphQLString), |
32 | | - }) |
| 44 | + Type = GraphQLObjectType( |
| 45 | + "Type", |
| 46 | + {"ok": GraphQLField(GraphQLString), "not_ok": GraphQLField(GraphQLString)}, |
| 47 | + ) |
33 | 48 |
|
34 | 49 | def reversed_middleware(next, *args, **kwargs): |
| 50 | + # type: (Callable, *Any, **Any) -> Promise |
35 | 51 | p = next(*args, **kwargs) |
36 | 52 | return p.then(lambda x: x[::-1]) |
37 | 53 |
|
38 | 54 | middlewares = MiddlewareManager(reversed_middleware) |
39 | | - result = execute(GraphQLSchema(Type), doc_ast, |
40 | | - Data(), middleware=middlewares) |
41 | | - assert result.data == {'ok': 'ko', 'not_ok': 'ko_ton'} |
| 55 | + result = execute(GraphQLSchema(Type), doc_ast, Data(), middleware=middlewares) |
| 56 | + assert result.data == {"ok": "ko", "not_ok": "ko_ton"} |
42 | 57 |
|
43 | 58 |
|
44 | 59 | def test_middleware_class(): |
45 | | - doc = '''{ |
| 60 | + # type: () -> None |
| 61 | + doc = """{ |
46 | 62 | ok |
47 | 63 | not_ok |
48 | | - }''' |
| 64 | + }""" |
49 | 65 |
|
50 | 66 | class Data(object): |
51 | | - |
52 | 67 | def ok(self): |
53 | | - return 'ok' |
| 68 | + # type: () -> str |
| 69 | + return "ok" |
54 | 70 |
|
55 | 71 | def not_ok(self): |
56 | | - return 'not_ok' |
| 72 | + # type: () -> str |
| 73 | + return "not_ok" |
57 | 74 |
|
58 | 75 | doc_ast = parse(doc) |
59 | 76 |
|
60 | | - Type = GraphQLObjectType('Type', { |
61 | | - 'ok': GraphQLField(GraphQLString), |
62 | | - 'not_ok': GraphQLField(GraphQLString), |
63 | | - }) |
| 77 | + Type = GraphQLObjectType( |
| 78 | + "Type", |
| 79 | + {"ok": GraphQLField(GraphQLString), "not_ok": GraphQLField(GraphQLString)}, |
| 80 | + ) |
64 | 81 |
|
65 | 82 | class MyMiddleware(object): |
66 | 83 | def resolve(self, next, *args, **kwargs): |
| 84 | + # type: (Callable, *Any, **Any) -> Promise |
67 | 85 | p = next(*args, **kwargs) |
68 | 86 | return p.then(lambda x: x[::-1]) |
69 | 87 |
|
70 | 88 | middlewares = MiddlewareManager(MyMiddleware()) |
71 | | - result = execute(GraphQLSchema(Type), doc_ast, |
72 | | - Data(), middleware=middlewares) |
73 | | - assert result.data == {'ok': 'ko', 'not_ok': 'ko_ton'} |
| 89 | + result = execute(GraphQLSchema(Type), doc_ast, Data(), middleware=middlewares) |
| 90 | + assert result.data == {"ok": "ko", "not_ok": "ko_ton"} |
74 | 91 |
|
75 | 92 |
|
76 | 93 | def test_middleware_skip_promise_wrap(): |
77 | | - doc = '''{ |
| 94 | + # type: () -> None |
| 95 | + doc = """{ |
78 | 96 | ok |
79 | 97 | not_ok |
80 | | - }''' |
| 98 | + }""" |
81 | 99 |
|
82 | 100 | class Data(object): |
83 | | - |
84 | 101 | def ok(self): |
85 | | - return 'ok' |
| 102 | + # type: () -> str |
| 103 | + return "ok" |
86 | 104 |
|
87 | 105 | def not_ok(self): |
88 | | - return 'not_ok' |
| 106 | + # type: () -> str |
| 107 | + return "not_ok" |
89 | 108 |
|
90 | 109 | doc_ast = parse(doc) |
91 | 110 |
|
92 | | - Type = GraphQLObjectType('Type', { |
93 | | - 'ok': GraphQLField(GraphQLString), |
94 | | - 'not_ok': GraphQLField(GraphQLString), |
95 | | - }) |
| 111 | + Type = GraphQLObjectType( |
| 112 | + "Type", |
| 113 | + {"ok": GraphQLField(GraphQLString), "not_ok": GraphQLField(GraphQLString)}, |
| 114 | + ) |
96 | 115 |
|
97 | 116 | class MyPromiseMiddleware(object): |
98 | 117 | def resolve(self, next, *args, **kwargs): |
| 118 | + # type: (Callable, *Any, **Any) -> Promise |
99 | 119 | return Promise.resolve(next(*args, **kwargs)) |
100 | 120 |
|
101 | 121 | class MyEmptyMiddleware(object): |
102 | 122 | def resolve(self, next, *args, **kwargs): |
| 123 | + # type: (Callable, *Any, **Any) -> str |
103 | 124 | return next(*args, **kwargs) |
104 | 125 |
|
105 | 126 | middlewares_with_promise = MiddlewareManager( |
106 | | - MyPromiseMiddleware(), wrap_in_promise=False) |
| 127 | + MyPromiseMiddleware(), wrap_in_promise=False |
| 128 | + ) |
107 | 129 | middlewares_without_promise = MiddlewareManager( |
108 | | - MyEmptyMiddleware(), wrap_in_promise=False) |
| 130 | + MyEmptyMiddleware(), wrap_in_promise=False |
| 131 | + ) |
109 | 132 |
|
110 | | - result1 = execute(GraphQLSchema(Type), doc_ast, Data(), |
111 | | - middleware=middlewares_with_promise) |
112 | | - result2 = execute(GraphQLSchema(Type), doc_ast, Data(), |
113 | | - middleware=middlewares_without_promise) |
| 133 | + result1 = execute( |
| 134 | + GraphQLSchema(Type), doc_ast, Data(), middleware=middlewares_with_promise |
| 135 | + ) |
| 136 | + result2 = execute( |
| 137 | + GraphQLSchema(Type), doc_ast, Data(), middleware=middlewares_without_promise |
| 138 | + ) |
114 | 139 | assert result1.data == result2.data and result1.data == { |
115 | | - 'ok': 'ok', 'not_ok': 'not_ok'} |
| 140 | + "ok": "ok", |
| 141 | + "not_ok": "not_ok", |
| 142 | + } |
116 | 143 |
|
117 | 144 |
|
118 | 145 | def test_middleware_chain(capsys): |
119 | | - |
| 146 | + # type: () -> None |
120 | 147 | class CharPrintingMiddleware(object): |
121 | 148 | def __init__(self, char): |
| 149 | + # type: (str) -> None |
122 | 150 | self.char = char |
123 | 151 |
|
124 | 152 | def resolve(self, next, *args, **kwargs): |
| 153 | + # type: (Callable, *Any, **Any) -> str |
125 | 154 | print("resolve() called for middleware {}".format(self.char)) |
126 | 155 | return next(*args, **kwargs).then( |
127 | 156 | lambda x: print("then() for {}".format(self.char)) |
128 | 157 | ) |
129 | 158 |
|
130 | 159 | middlewares = [ |
131 | | - CharPrintingMiddleware('a'), |
132 | | - CharPrintingMiddleware('b'), |
133 | | - CharPrintingMiddleware('c'), |
| 160 | + CharPrintingMiddleware("a"), |
| 161 | + CharPrintingMiddleware("b"), |
| 162 | + CharPrintingMiddleware("c"), |
134 | 163 | ] |
135 | 164 |
|
136 | 165 | middlewares_resolvers = get_middleware_resolvers(middlewares) |
137 | 166 |
|
138 | | - def func(): return |
| 167 | + def func(): |
| 168 | + # type: () -> None |
| 169 | + return |
139 | 170 |
|
140 | | - chain_iter = middleware_chain(func, middlewares_resolvers) |
| 171 | + chain_iter = middleware_chain(func, middlewares_resolvers, wrap_in_promise=True) |
141 | 172 |
|
142 | 173 | assert_stdout(capsys, "") |
143 | 174 |
|
144 | 175 | chain_iter() |
145 | 176 |
|
146 | 177 | expected_stdout = ( |
147 | | - 'resolve() called for middleware c\n' |
148 | | - 'resolve() called for middleware b\n' |
149 | | - 'resolve() called for middleware a\n' |
150 | | - 'then() for a\n' |
151 | | - 'then() for b\n' |
152 | | - 'then() for c\n' |
| 178 | + "resolve() called for middleware c\n" |
| 179 | + "resolve() called for middleware b\n" |
| 180 | + "resolve() called for middleware a\n" |
| 181 | + "then() for a\n" |
| 182 | + "then() for b\n" |
| 183 | + "then() for c\n" |
153 | 184 | ) |
154 | 185 | assert_stdout(capsys, expected_stdout) |
155 | 186 |
|
156 | 187 |
|
157 | 188 | def assert_stdout(capsys, expected_stdout): |
| 189 | + # type: (Any, str) -> None |
158 | 190 | captured = capsys.readouterr() |
159 | 191 | assert captured.out == expected_stdout |
0 commit comments