Skip to content

Commit 118e711

Browse files
authored
test: Add SQL v2 end to end tests (Azure#1484)
* add e2e tests for sql v2 * fix errors * fix test * fix generic test * pylint
1 parent 6587898 commit 118e711

File tree

3 files changed

+158
-0
lines changed

3 files changed

+158
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# Copyright (c) Microsoft Corporation. All rights reserved.
2+
# Licensed under the MIT License.
3+
4+
import azure.functions as func
5+
import json
6+
7+
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
8+
9+
10+
@app.route(route="sql_input/{productid}")
11+
@app.sql_input(arg_name="products",
12+
command_text="SELECT * FROM Products WHERE ProductId = @ProductId",
13+
command_type="Text",
14+
parameters="@ProductId={productid}",
15+
connection_string_setting="AzureWebJobsSqlConnectionString")
16+
def sql_input(req: func.HttpRequest, products: func.SqlRowList) \
17+
-> func.HttpResponse:
18+
rows = list(map(lambda r: json.loads(r.to_json()), products))
19+
20+
return func.HttpResponse(
21+
json.dumps(rows),
22+
status_code=200,
23+
mimetype="application/json"
24+
)
25+
26+
27+
@app.route(route="sql_input2/{productid}")
28+
@app.sql_input(arg_name="products",
29+
command_text="SELECT * FROM Products2 WHERE ProductId = @ProductId",
30+
command_type="Text",
31+
parameters="@ProductId={productid}",
32+
connection_string_setting="AzureWebJobsSqlConnectionString")
33+
def sql_input2(req: func.HttpRequest, products: func.SqlRowList) -> func.HttpResponse:
34+
rows = list(map(lambda r: json.loads(r.to_json()), products))
35+
36+
return func.HttpResponse(
37+
json.dumps(rows),
38+
status_code=200,
39+
mimetype="application/json"
40+
)
41+
42+
43+
@app.route(route="sql_output")
44+
@app.sql_output(arg_name="r",
45+
command_text="[dbo].[Products]",
46+
connection_string_setting="AzureWebJobsSqlConnectionString")
47+
def sql_output(req: func.HttpRequest, r: func.Out[func.SqlRow]) -> func.HttpResponse:
48+
body = json.loads(req.get_body())
49+
row = func.SqlRow.from_dict(body)
50+
r.set(row)
51+
52+
return func.HttpResponse(
53+
body=req.get_body(),
54+
status_code=201,
55+
mimetype="application/json"
56+
)
57+
58+
59+
@app.sql_trigger(arg_name="changes",
60+
table_name="Products",
61+
connection_string_setting="AzureWebJobsSqlConnectionString")
62+
@app.sql_output(arg_name="r",
63+
command_text="[dbo].[Products2]",
64+
connection_string_setting="AzureWebJobsSqlConnectionString")
65+
def sql_trigger(changes, r: func.Out[func.SqlRow]) -> str:
66+
row = func.SqlRow.from_dict(json.loads(changes)[0]["Item"])
67+
r.set(row)
68+
return "OK"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# Copyright (c) Microsoft Corporation. All rights reserved.
2+
# Licensed under the MIT License.
3+
4+
import azure.functions as func
5+
import json
6+
7+
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
8+
9+
10+
@app.generic_trigger(arg_name="req", type="httpTrigger", route="sql_input/{productid}")
11+
@app.generic_output_binding(arg_name="$return", type="http")
12+
@app.generic_input_binding(arg_name="products", type="sql",
13+
command_text="SELECT * FROM Products "
14+
"WHERE ProductId = @ProductId",
15+
command_type="Text",
16+
parameters="@ProductId={productid}",
17+
connection_string_setting="AzureWebJobsSqlConnectionString")
18+
def sql_input(req: func.HttpRequest, products: func.SqlRowList) -> func.HttpResponse:
19+
rows = list(map(lambda r: json.loads(r.to_json()), products))
20+
21+
return func.HttpResponse(
22+
json.dumps(rows),
23+
status_code=200,
24+
mimetype="application/json"
25+
)
26+
27+
28+
@app.generic_trigger(arg_name="req", type="httpTrigger", route="sql_input2/{productid}")
29+
@app.generic_output_binding(arg_name="$return", type="http")
30+
@app.generic_input_binding(arg_name="products", type="sql",
31+
command_text="SELECT * FROM Products2 "
32+
"WHERE ProductId = @ProductId",
33+
command_type="Text",
34+
parameters="@ProductId={productid}",
35+
connection_string_setting="AzureWebJobsSqlConnectionString")
36+
def sql_input2(req: func.HttpRequest, products: func.SqlRowList) -> func.HttpResponse:
37+
rows = list(map(lambda r: json.loads(r.to_json()), products))
38+
39+
return func.HttpResponse(
40+
json.dumps(rows),
41+
status_code=200,
42+
mimetype="application/json"
43+
)
44+
45+
46+
@app.generic_trigger(arg_name="req", type="httpTrigger", route="sql_output")
47+
@app.generic_output_binding(arg_name="$return", type="http")
48+
@app.generic_output_binding(arg_name="r", type="sql",
49+
command_text="[dbo].[Products]",
50+
connection_string_setting="AzureWebJobs"
51+
"SqlConnectionString")
52+
def sql_output(req: func.HttpRequest, r: func.Out[func.SqlRow]) \
53+
-> func.HttpResponse:
54+
body = json.loads(req.get_body())
55+
row = func.SqlRow.from_dict(body)
56+
r.set(row)
57+
58+
return func.HttpResponse(
59+
body=req.get_body(),
60+
status_code=201,
61+
mimetype="application/json"
62+
)
63+
64+
65+
@app.generic_trigger(arg_name="changes", type="sqlTrigger",
66+
table_name="Products",
67+
connection_string_setting="AzureWebJobsSqlConnectionString")
68+
@app.generic_output_binding(arg_name="r", type="sql",
69+
command_text="[dbo].[Products2]",
70+
connection_string_setting="AzureWebJobsSqlConnectionString")
71+
def sql_trigger(changes, r: func.Out[func.SqlRow]) -> str:
72+
row = func.SqlRow.from_dict(json.loads(changes)[0]["Item"])
73+
r.set(row)
74+
return "OK"

tests/endtoend/test_sql_functions.py

+16
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,19 @@ def test_sql_binding_trigger(self):
5050
raise
5151
else:
5252
break
53+
54+
55+
class TestSqlFunctionsStein(TestSqlFunctions):
56+
57+
@classmethod
58+
def get_script_dir(cls):
59+
return testutils.E2E_TESTS_FOLDER / 'sql_functions' / \
60+
'sql_functions_stein'
61+
62+
63+
class TestSqlFunctionsSteinGeneric(TestSqlFunctions):
64+
65+
@classmethod
66+
def get_script_dir(cls):
67+
return testutils.E2E_TESTS_FOLDER / 'sql_functions' / \
68+
'sql_functions_stein' / 'generic'

0 commit comments

Comments
 (0)