Skip to content

Commit e8526e3

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-specHantingZhang2
authored
Use request data for undo operations in tests when response empty (#1745)
* Regenerate client from commit 89f9f50d of spec repo * use request body when origin set to request * change kwargs get method * Remove conditional * remove conditional * Regenerate client from commit f57ca8ef of spec repo --------- Co-authored-by: ci.datadog-api-spec <[email protected]> Co-authored-by: HantingZhang2 <[email protected]> Co-authored-by: api-clients-generation-pipeline[bot] <54105614+api-clients-generation-pipeline[bot]@users.noreply.github.com>
1 parent 237cd1b commit e8526e3

File tree

7 files changed

+79
-22
lines changed

7 files changed

+79
-22
lines changed

.apigentools-info

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
"spec_versions": {
55
"v1": {
66
"apigentools_version": "1.6.6",
7-
"regenerated": "2023-11-20 19:20:13.651946",
8-
"spec_repo_commit": "55cf29a4"
7+
"regenerated": "2023-11-21 11:52:08.777997",
8+
"spec_repo_commit": "f57ca8ef"
99
},
1010
"v2": {
1111
"apigentools_version": "1.6.6",
12-
"regenerated": "2023-11-20 19:20:13.666926",
13-
"spec_repo_commit": "55cf29a4"
12+
"regenerated": "2023-11-21 11:52:08.792413",
13+
"spec_repo_commit": "f57ca8ef"
1414
}
1515
}
1616
}

examples/v1/aws-integration/CreateAWSAccount.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@
77
from datadog_api_client.v1.model.aws_account import AWSAccount
88

99
body = AWSAccount(
10-
account_id="123456789012",
10+
account_id="163662907100",
1111
account_specific_namespace_rules=dict(
1212
auto_scaling=False,
13-
opswork=False,
1413
),
1514
cspm_resource_collection_enabled=True,
1615
excluded_regions=[

tests/conftest.py

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -484,10 +484,11 @@ def build_param(p):
484484
escape_reserved_keyword(snake_case(p["name"])): build_param(p) for p in operation.get("parameters", [])
485485
}
486486
result = operation_method(**kwargs)
487+
request_body = kwargs.get("body", "")
487488

488489
# register undo method
489490
def undo_operation():
490-
return undo(api, version, operation_name, result, client=client)
491+
return undo(api, version, operation_name, result, request_body, client=client)
491492

492493
if tracer:
493494
undo_operation = tracer.wrap(name="undo", resource=operation["step"])(undo_operation)
@@ -512,11 +513,22 @@ def undo_operation():
512513
given(settings["step"])(build_given(version, settings))
513514

514515

516+
def extract_parameters(kwargs, data, parameter):
517+
if "source" in parameter:
518+
kwargs[parameter["name"]] = glom(data, parameter["source"])
519+
elif "template" in parameter:
520+
variables = meta.find_undeclared_variables(Environment().parse(parameter["template"]))
521+
ctx = {}
522+
for var in variables:
523+
ctx[var] = glom(data, var)
524+
kwargs[parameter["name"]] = json.loads(Template(parameter["template"]).render(**ctx))
525+
526+
515527
@pytest.fixture
516528
def undo(package_name, undo_operations, client):
517529
"""Clean after operation."""
518530

519-
def cleanup(api, version, operation_id, response, client=client):
531+
def cleanup(api, version, operation_id, response, request, client=client):
520532
operation = undo_operations.get(version, {}).get(operation_id)
521533
if operation_id is None:
522534
raise NotImplementedError((version, operation_id))
@@ -539,16 +551,12 @@ def cleanup(api, version, operation_id, response, client=client):
539551
operation_name = snake_case(operation["operationId"])
540552
method = getattr(api, operation_name)
541553
kwargs = {}
542-
for parameter in operation.get("parameters", []):
543-
if "source" in parameter:
544-
kwargs[parameter["name"]] = glom(response, parameter["source"])
545-
elif "template" in parameter:
546-
variables = meta.find_undeclared_variables(Environment().parse(parameter["template"]))
547-
ctx = {}
548-
for var in variables:
549-
ctx[var] = glom(response, var)
550-
kwargs[parameter["name"]] = json.loads(Template(parameter["template"]).render(**ctx))
551-
554+
parameters = operation.get("parameters", [])
555+
for parameter in parameters:
556+
if "origin" not in parameter or parameter["origin"] == "response":
557+
extract_parameters(kwargs, response, parameter)
558+
elif parameter["origin"] == "request":
559+
extract_parameters(kwargs, request, parameter)
552560
if operation_name in client.configuration.unstable_operations:
553561
client.configuration.unstable_operations[operation_name] = True
554562

@@ -587,9 +595,10 @@ def execute_request(undo, context, client, api_version, request):
587595
api = api_request["api"]
588596
operation_id = api_request["request"].__name__
589597
response = api_request["response"][0]
598+
request_body = api_request.get("kwargs", {}).get("body", "")
590599

591600
def undo_operation():
592-
return undo(api, api_version, operation_id, response)
601+
return undo(api, api_version, operation_id, response, request_body)
593602

594603
if tracer:
595604
undo_operation = tracer.wrap(name="undo", resource="execute request")(undo_operation)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2023-11-13T14:17:01.291Z
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
interactions:
2+
- request:
3+
body: '{"account_id":"169988502100","account_specific_namespace_rules":{"auto_scaling":false},"cspm_resource_collection_enabled":true,"excluded_regions":["us-east-1","us-west-2"],"filter_tags":["$KEY:$VALUE"],"host_tags":["$KEY:$VALUE"],"metrics_collection_enabled":false,"resource_collection_enabled":true,"role_name":"DatadogAWSIntegrationRole"}'
4+
headers:
5+
accept:
6+
- application/json
7+
content-type:
8+
- application/json
9+
method: POST
10+
uri: https://api.datadoghq.com/api/v1/integration/aws
11+
response:
12+
body:
13+
string: '{"external_id":"9668e281c0ef4cc8be01710ef7a0ae4c"}
14+
15+
'
16+
headers:
17+
content-type:
18+
- application/json
19+
status:
20+
code: 200
21+
message: OK
22+
- request:
23+
body: '{"account_id":"169988502100","role_name":"DatadogAWSIntegrationRole"}'
24+
headers:
25+
accept:
26+
- application/json
27+
content-type:
28+
- application/json
29+
method: DELETE
30+
uri: https://api.datadoghq.com/api/v1/integration/aws
31+
response:
32+
body:
33+
string: '{}
34+
35+
'
36+
headers:
37+
content-type:
38+
- application/json
39+
status:
40+
code: 200
41+
message: OK
42+
version: 1

tests/v1/features/aws_integration.feature

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ Feature: AWS Integration
2323
When the request is sent
2424
Then the response status is 409 Conflict Error
2525

26-
@generated @skip @team:DataDog/cloud-integrations
26+
@team:DataDog/cloud-integrations
2727
Scenario: Create an AWS integration returns "OK" response
2828
Given new "CreateAWSAccount" request
29-
And body with value {"account_id": "123456789012", "account_specific_namespace_rules": {"auto_scaling": false, "opswork": false}, "cspm_resource_collection_enabled": true, "excluded_regions": ["us-east-1", "us-west-2"], "filter_tags": ["$KEY:$VALUE"], "host_tags": ["$KEY:$VALUE"], "metrics_collection_enabled": false, "resource_collection_enabled": true, "role_name": "DatadogAWSIntegrationRole"}
29+
And body with value {"account_id": "{{ timestamp("now") }}00", "account_specific_namespace_rules": {"auto_scaling": false}, "cspm_resource_collection_enabled": true, "excluded_regions": ["us-east-1", "us-west-2"], "filter_tags": ["$KEY:$VALUE"], "host_tags": ["$KEY:$VALUE"], "metrics_collection_enabled": false, "resource_collection_enabled": true, "role_name": "DatadogAWSIntegrationRole"}
3030
When the request is sent
3131
Then the response status is 200 OK
3232

tests/v1/features/undo.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,13 @@
356356
"tag": "AWS Integration",
357357
"undo": {
358358
"operationId": "DeleteAWSAccount",
359-
"parameters": [],
359+
"parameters": [
360+
{
361+
"name": "body",
362+
"origin": "request",
363+
"template": "{\"account_id\": \"{{account_id}}\", \"role_name\": \"{{role_name}}\"}"
364+
}
365+
],
360366
"type": "unsafe"
361367
}
362368
},

0 commit comments

Comments
 (0)