Skip to content

test: Add SQL v2 end to end tests #1484

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Apr 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

import azure.functions as func
import json

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)


@app.route(route="sql_input/{productid}")
@app.sql_input(arg_name="products",
command_text="SELECT * FROM Products WHERE ProductId = @ProductId",
command_type="Text",
parameters="@ProductId={productid}",
connection_string_setting="AzureWebJobsSqlConnectionString")
def sql_input(req: func.HttpRequest, products: func.SqlRowList) \
-> func.HttpResponse:
rows = list(map(lambda r: json.loads(r.to_json()), products))

return func.HttpResponse(
json.dumps(rows),
status_code=200,
mimetype="application/json"
)


@app.route(route="sql_input2/{productid}")
@app.sql_input(arg_name="products",
command_text="SELECT * FROM Products2 WHERE ProductId = @ProductId",
command_type="Text",
parameters="@ProductId={productid}",
connection_string_setting="AzureWebJobsSqlConnectionString")
def sql_input2(req: func.HttpRequest, products: func.SqlRowList) -> func.HttpResponse:
rows = list(map(lambda r: json.loads(r.to_json()), products))

return func.HttpResponse(
json.dumps(rows),
status_code=200,
mimetype="application/json"
)


@app.route(route="sql_output")
@app.sql_output(arg_name="r",
command_text="[dbo].[Products]",
connection_string_setting="AzureWebJobsSqlConnectionString")
def sql_output(req: func.HttpRequest, r: func.Out[func.SqlRow]) -> func.HttpResponse:
body = json.loads(req.get_body())
row = func.SqlRow.from_dict(body)
r.set(row)

return func.HttpResponse(
body=req.get_body(),
status_code=201,
mimetype="application/json"
)


@app.sql_trigger(arg_name="changes",
table_name="Products",
connection_string_setting="AzureWebJobsSqlConnectionString")
@app.sql_output(arg_name="r",
command_text="[dbo].[Products2]",
connection_string_setting="AzureWebJobsSqlConnectionString")
def sql_trigger(changes, r: func.Out[func.SqlRow]) -> str:
row = func.SqlRow.from_dict(json.loads(changes)[0]["Item"])
r.set(row)
return "OK"
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

import azure.functions as func
import json

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)


@app.generic_trigger(arg_name="req", type="httpTrigger", route="sql_input/{productid}")
@app.generic_output_binding(arg_name="$return", type="http")
@app.generic_input_binding(arg_name="products", type="sql",
command_text="SELECT * FROM Products "
"WHERE ProductId = @ProductId",
command_type="Text",
parameters="@ProductId={productid}",
connection_string_setting="AzureWebJobsSqlConnectionString")
def sql_input(req: func.HttpRequest, products: func.SqlRowList) -> func.HttpResponse:
rows = list(map(lambda r: json.loads(r.to_json()), products))

return func.HttpResponse(
json.dumps(rows),
status_code=200,
mimetype="application/json"
)


@app.generic_trigger(arg_name="req", type="httpTrigger", route="sql_input2/{productid}")
@app.generic_output_binding(arg_name="$return", type="http")
@app.generic_input_binding(arg_name="products", type="sql",
command_text="SELECT * FROM Products2 "
"WHERE ProductId = @ProductId",
command_type="Text",
parameters="@ProductId={productid}",
connection_string_setting="AzureWebJobsSqlConnectionString")
def sql_input2(req: func.HttpRequest, products: func.SqlRowList) -> func.HttpResponse:
rows = list(map(lambda r: json.loads(r.to_json()), products))

return func.HttpResponse(
json.dumps(rows),
status_code=200,
mimetype="application/json"
)


@app.generic_trigger(arg_name="req", type="httpTrigger", route="sql_output")
@app.generic_output_binding(arg_name="$return", type="http")
@app.generic_output_binding(arg_name="r", type="sql",
command_text="[dbo].[Products]",
connection_string_setting="AzureWebJobs"
"SqlConnectionString")
def sql_output(req: func.HttpRequest, r: func.Out[func.SqlRow]) \
-> func.HttpResponse:
body = json.loads(req.get_body())
row = func.SqlRow.from_dict(body)
r.set(row)

return func.HttpResponse(
body=req.get_body(),
status_code=201,
mimetype="application/json"
)


@app.generic_trigger(arg_name="changes", type="sqlTrigger",
table_name="Products",
connection_string_setting="AzureWebJobsSqlConnectionString")
@app.generic_output_binding(arg_name="r", type="sql",
command_text="[dbo].[Products2]",
connection_string_setting="AzureWebJobsSqlConnectionString")
def sql_trigger(changes, r: func.Out[func.SqlRow]) -> str:
row = func.SqlRow.from_dict(json.loads(changes)[0]["Item"])
r.set(row)
return "OK"
16 changes: 16 additions & 0 deletions tests/endtoend/test_sql_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,19 @@ def test_sql_binding_trigger(self):
raise
else:
break


class TestSqlFunctionsStein(TestSqlFunctions):

@classmethod
def get_script_dir(cls):
return testutils.E2E_TESTS_FOLDER / 'sql_functions' / \
'sql_functions_stein'


class TestSqlFunctionsSteinGeneric(TestSqlFunctions):

@classmethod
def get_script_dir(cls):
return testutils.E2E_TESTS_FOLDER / 'sql_functions' / \
'sql_functions_stein' / 'generic'
Loading