Skip to content

Commit a8478ee

Browse files
committed
add e2e tests for sql v2
1 parent 6587898 commit a8478ee

File tree

3 files changed

+146
-0
lines changed

3 files changed

+146
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
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) -> func.HttpResponse:
17+
rows = list(map(lambda r: json.loads(r.to_json()), products))
18+
19+
return func.HttpResponse(
20+
json.dumps(rows),
21+
status_code=200,
22+
mimetype="application/json"
23+
)
24+
25+
@app.route(route="sql_input2/{productid}")
26+
@app.sql_input(arg_name="products",
27+
command_text="SELECT * FROM Products2 WHERE ProductId = @ProductId",
28+
command_type="Text",
29+
parameters="@ProductId={productid}"
30+
connection_string_setting="AzureWebJobsSqlConnectionString")
31+
def sql_input(req: func.HttpRequest, products: func.SqlRowList) -> func.HttpResponse:
32+
rows = list(map(lambda r: json.loads(r.to_json()), products))
33+
34+
return func.HttpResponse(
35+
json.dumps(rows),
36+
status_code=200,
37+
mimetype="application/json"
38+
)
39+
40+
@app.route()
41+
@app.sql_output(arg_name="r",
42+
command_text="[dbo].[Products]",
43+
connection_string_setting="AzureWebJobsSqlConnectionString")
44+
def sql_output(req: func.HttpRequest, product: func.Out[func.SqlRow]) -> func.HttpResponse:
45+
body = json.loads(req.get_body())
46+
row = func.SqlRow.from_dict(body)
47+
r.set(row)
48+
49+
return func.HttpResponse(
50+
body=req.get_body(),
51+
status_code=201,
52+
mimetype="application/json"
53+
)
54+
55+
@app.sql_trigger(arg_name="changes",
56+
table_name="Products",
57+
connection_string_setting="AzureWebJobsSqlConnectionString")
58+
@app.sql_output(arg_name="r",
59+
command_text="[dbo].[Products2]",
60+
connection_string_setting="AzureWebJobsSqlConnectionString")
61+
def sql_trigger(changes, r: func.Out[func.SqlRow]) -> str:
62+
row = func.SqlRow.from_dict(json.loads(changes)[0]["Item"])
63+
r.set(row)
64+
return "OK"
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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 WHERE ProductId = @ProductId",
14+
command_type="Text",
15+
parameters="@ProductId={productid}"
16+
connection_string_setting="AzureWebJobsSqlConnectionString")
17+
def sql_input(req: func.HttpRequest, products: func.SqlRowList) -> 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+
@app.generic_trigger(arg_name="req", type="httpTrigger", route="sql_input2/{productid}")
27+
@app.generic_output_binding(arg_name="$return", type="http")
28+
@app.generic_input_binding(arg_name="products", type="sql",
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_input(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+
@app.generic_trigger(arg_name="req", type="httpTrigger")
43+
@app.generic_output_binding(arg_name="$return", type="http")
44+
@app.generic_output_binding(arg_name="r", type="sql",
45+
command_text="[dbo].[Products]",
46+
connection_string_setting="AzureWebJobsSqlConnectionString")
47+
def sql_output(req: func.HttpRequest, product: 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+
@app.generic_trigger(arg_name="changes", type="sqlTrigger",
59+
table_name="Products",
60+
connection_string_setting="AzureWebJobsSqlConnectionString")
61+
@app.generic_output_binding(arg_name="r", type="sql",
62+
command_text="[dbo].[Products2]",
63+
connection_string_setting="AzureWebJobsSqlConnectionString")
64+
def sql_trigger(changes, r: func.Out[func.SqlRow]) -> str:
65+
row = func.SqlRow.from_dict(json.loads(changes)[0]["Item"])
66+
r.set(row)
67+
return "OK"

tests/endtoend/test_sql_functions.py

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

0 commit comments

Comments
 (0)