diff --git a/.apigentools-info b/.apigentools-info index f58f6b68229a..cb7a277efbf1 100644 --- a/.apigentools-info +++ b/.apigentools-info @@ -4,13 +4,13 @@ "spec_versions": { "v1": { "apigentools_version": "1.6.4", - "regenerated": "2023-02-28 10:12:57.158285", - "spec_repo_commit": "c16e3609" + "regenerated": "2023-03-01 15:45:34.929706", + "spec_repo_commit": "8905444b" }, "v2": { "apigentools_version": "1.6.4", - "regenerated": "2023-02-28 10:12:57.177148", - "spec_repo_commit": "c16e3609" + "regenerated": "2023-03-01 15:45:34.943206", + "spec_repo_commit": "8905444b" } } } \ No newline at end of file diff --git a/cassettes/v2/Logs-Metrics_3185148095/Create-a-log-based-metric-returns-OK-response_2853166544/frozen.json b/cassettes/v2/Logs-Metrics_3185148095/Create-a-log-based-metric-returns-OK-response_2853166544/frozen.json index f643e6cae1fd..336adf55a178 100644 --- a/cassettes/v2/Logs-Metrics_3185148095/Create-a-log-based-metric-returns-OK-response_2853166544/frozen.json +++ b/cassettes/v2/Logs-Metrics_3185148095/Create-a-log-based-metric-returns-OK-response_2853166544/frozen.json @@ -1 +1 @@ -"2022-11-21T15:36:05.545Z" +"2023-02-24T19:02:01.538Z" diff --git a/cassettes/v2/Logs-Metrics_3185148095/Create-a-log-based-metric-returns-OK-response_2853166544/recording.har b/cassettes/v2/Logs-Metrics_3185148095/Create-a-log-based-metric-returns-OK-response_2853166544/recording.har index dcfaf087671b..4ab2929b74d1 100644 --- a/cassettes/v2/Logs-Metrics_3185148095/Create-a-log-based-metric-returns-OK-response_2853166544/recording.har +++ b/cassettes/v2/Logs-Metrics_3185148095/Create-a-log-based-metric-returns-OK-response_2853166544/recording.har @@ -8,11 +8,11 @@ }, "entries": [ { - "_id": "f98bd5930d6046a011a332616cfb250b", + "_id": "ac3bc5409b2023605878ba38f943df2e", "_order": 0, "cache": {}, "request": { - "bodySize": 208, + "bodySize": 199, "cookies": [], "headers": [ { @@ -32,17 +32,17 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"data\":{\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"}},\"id\":\"Test-Create_a_log_based_metric_returns_OK_response-1669044965\",\"type\":\"logs_metrics\"}}" + "text": "{\"data\":{\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"}},\"id\":\"TestCreatealogbasedmetricreturnsOKresponse1677265321\",\"type\":\"logs_metrics\"}}" }, "queryString": [], "url": "https://api.datadoghq.com/api/v2/logs/config/metrics" }, "response": { - "bodySize": 246, + "bodySize": 237, "content": { "mimeType": "application/json", - "size": 246, - "text": "{\"data\":{\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"path\":\"@duration\",\"include_percentiles\":true,\"aggregation_type\":\"distribution\"}},\"type\":\"logs_metrics\",\"id\":\"Test_Create_a_log_based_metric_returns_OK_response_1669044965\"}}\n" + "size": 237, + "text": "{\"data\":{\"id\":\"TestCreatealogbasedmetricreturnsOKresponse1677265321\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"}}\n" }, "cookies": [], "headers": [ @@ -57,11 +57,11 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2022-11-21T15:36:05.555Z", - "time": 272 + "startedDateTime": "2023-02-24T19:02:01.546Z", + "time": 487 }, { - "_id": "12c1ae70ac1d021e801d57f41265ad38", + "_id": "4f554b9aa0083e95d132404e1b4748b1", "_order": 0, "cache": {}, "request": { @@ -74,11 +74,11 @@ "value": "*/*" } ], - "headersSize": 568, + "headersSize": 559, "httpVersion": "HTTP/1.1", "method": "DELETE", "queryString": [], - "url": "https://api.datadoghq.com/api/v2/logs/config/metrics/Test_Create_a_log_based_metric_returns_OK_response_1669044965" + "url": "https://api.datadoghq.com/api/v2/logs/config/metrics/TestCreatealogbasedmetricreturnsOKresponse1677265321" }, "response": { "bodySize": 3, @@ -100,8 +100,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2022-11-21T15:36:05.838Z", - "time": 141 + "startedDateTime": "2023-02-24T19:02:02.048Z", + "time": 148 } ], "pages": [], diff --git a/cassettes/v2/Monitors_4022238206/Get-all-monitor-configuration-policies-returns-OK-response_3880633912/frozen.json b/cassettes/v2/Monitors_4022238206/Get-all-monitor-configuration-policies-returns-OK-response_3880633912/frozen.json index 884afd646337..75599450a9a1 100644 --- a/cassettes/v2/Monitors_4022238206/Get-all-monitor-configuration-policies-returns-OK-response_3880633912/frozen.json +++ b/cassettes/v2/Monitors_4022238206/Get-all-monitor-configuration-policies-returns-OK-response_3880633912/frozen.json @@ -1 +1 @@ -"2023-01-19T19:59:42.355Z" +"2023-02-27T21:53:03.795Z" diff --git a/cassettes/v2/Monitors_4022238206/Get-all-monitor-configuration-policies-returns-OK-response_3880633912/recording.har b/cassettes/v2/Monitors_4022238206/Get-all-monitor-configuration-policies-returns-OK-response_3880633912/recording.har index 7474ba6d81c0..84d58142848e 100644 --- a/cassettes/v2/Monitors_4022238206/Get-all-monitor-configuration-policies-returns-OK-response_3880633912/recording.har +++ b/cassettes/v2/Monitors_4022238206/Get-all-monitor-configuration-policies-returns-OK-response_3880633912/recording.har @@ -7,6 +7,59 @@ "version": "6.0.5" }, "entries": [ + { + "_id": "13b530fd8b9117a8993069a27759db40", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 164, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "application/json" + }, + { + "_fromType": "array", + "name": "content-type", + "value": "application/json" + } + ], + "headersSize": 574, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"data\":{\"attributes\":{\"policy\":{\"tag_key\":\"dc\",\"tag_key_required\":true,\"valid_tag_values\":[\"prod\",\"staging\"]},\"policy_type\":\"tag\"},\"type\":\"monitor-config-policy\"}}" + }, + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/monitor/policy" + }, + "response": { + "bodySize": 209, + "content": { + "mimeType": "application/json", + "size": 209, + "text": "{\"data\":{\"type\":\"monitor-config-policy\",\"id\":\"1c8a8eea-b6e9-11ed-a4ec-da7ad0900002\",\"attributes\":{\"policy_type\":\"tag\",\"policy\":{\"tag_key\":\"dc\",\"valid_tag_values\":[\"prod\",\"staging\"],\"tag_key_required\":true}}}}\n" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + } + ], + "headersSize": 634, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2023-02-27T21:53:03.805Z", + "time": 182 + }, { "_id": "d1d9faecfa7d2feb2d28e24a04e24a01", "_order": 0, @@ -21,18 +74,18 @@ "value": "application/json" } ], - "headersSize": 522, + "headersSize": 520, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [], "url": "https://api.datadoghq.com/api/v2/monitor/policy" }, "response": { - "bodySize": 12, + "bodySize": 211, "content": { "mimeType": "application/json", - "size": 12, - "text": "{\"data\":[]}\n" + "size": 211, + "text": "{\"data\":[{\"type\":\"monitor-config-policy\",\"id\":\"1c8a8eea-b6e9-11ed-a4ec-da7ad0900002\",\"attributes\":{\"policy_type\":\"tag\",\"policy\":{\"tag_key_required\":true,\"valid_tag_values\":[\"prod\",\"staging\"],\"tag_key\":\"dc\"}}}]}\n" }, "cookies": [], "headers": [ @@ -41,14 +94,56 @@ "value": "application/json" } ], - "headersSize": 613, + "headersSize": 637, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2023-01-19T19:59:42.357Z", - "time": 97 + "startedDateTime": "2023-02-27T21:53:03.997Z", + "time": 123 + }, + { + "_id": "1e9f2d70210c48716ad8355a59e8e36e", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "_fromType": "array", + "name": "accept", + "value": "*/*" + } + ], + "headersSize": 547, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://api.datadoghq.com/api/v2/monitor/policy/1c8a8eea-b6e9-11ed-a4ec-da7ad0900002" + }, + "response": { + "bodySize": 0, + "content": { + "mimeType": "text/html; charset=utf-8", + "size": 0 + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "text/html; charset=utf-8" + } + ], + "headersSize": 623, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 204, + "statusText": "No Content" + }, + "startedDateTime": "2023-02-27T21:53:04.145Z", + "time": 148 } ], "pages": [], diff --git a/examples/v2/logs-metrics/CreateLogsMetric.ts b/examples/v2/logs-metrics/CreateLogsMetric.ts index c656af500411..91a370a6ae43 100644 --- a/examples/v2/logs-metrics/CreateLogsMetric.ts +++ b/examples/v2/logs-metrics/CreateLogsMetric.ts @@ -10,7 +10,7 @@ const apiInstance = new v2.LogsMetricsApi(configuration); const params: v2.LogsMetricsApiCreateLogsMetricRequest = { body: { data: { - id: "Example-Create_a_log_based_metric_returns_OK_response", + id: "ExampleCreatealogbasedmetricreturnsOKresponse", type: "logs_metrics", attributes: { compute: { diff --git a/features/v2/authn_mappings.feature b/features/v2/authn_mappings.feature index 88d7bbd569f5..3536db5dcad8 100644 --- a/features/v2/authn_mappings.feature +++ b/features/v2/authn_mappings.feature @@ -30,6 +30,9 @@ Feature: AuthN Mappings And body with value {"data": {"attributes": {"attribute_key": "{{ unique_lower_alnum }}", "attribute_value": "{{ unique }}"}, "relationships": {"role": {"data": {"id": "{{ role.data.id }}", "type": "roles"}}}, "type": "authn_mappings"}} When the request is sent Then the response status is 200 OK + And the response "data.attributes.attribute_key" is equal to "{{ unique_lower_alnum }}" + And the response "data.attributes.attribute_value" is equal to "{{ unique }}" + And the response "data.relationships.role.data.id" is equal to "{{ role.data.id }}" @generated @skip @team:DataDog/team-aaa Scenario: Delete an AuthN Mapping returns "Not Found" response @@ -80,6 +83,10 @@ Feature: AuthN Mappings And body with value {"data": {"attributes": {"attribute_key": "member-of", "attribute_value": "Development"}, "id": "{{ authn_mapping.data.id }}", "relationships": {"role": {"data": {"id": "{{ role.data.id }}", "type": "roles"}}}, "type": "authn_mappings"}} When the request is sent Then the response status is 200 OK + And the response "data.id" is equal to "{{ authn_mapping.data.id }}" + And the response "data.attributes.attribute_key" is equal to "member-of" + And the response "data.attributes.attribute_value" is equal to "Development" + And the response "data.relationships.role.data.id" is equal to "{{ role.data.id }}" @generated @skip @team:DataDog/team-aaa Scenario: Edit an AuthN Mapping returns "Unprocessable Entity" response @@ -104,6 +111,10 @@ Feature: AuthN Mappings And request contains "authn_mapping_id" parameter from "authn_mapping.data.id" When the request is sent Then the response status is 200 OK + And the response "data.id" is equal to "{{ authn_mapping.data.id }}" + And the response "data.attributes.attribute_key" is equal to "{{ unique_lower_alnum }}" + And the response "data.attributes.attribute_value" is equal to "{{ unique }}" + And the response "data.relationships.role.data.id" is equal to "{{ role.data.id }}" @team:DataDog/team-aaa Scenario: List all AuthN Mappings returns "OK" response @@ -112,3 +123,4 @@ Feature: AuthN Mappings And new "ListAuthNMappings" request When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "authn_mappings" diff --git a/features/v2/ci_visibility_pipelines.feature b/features/v2/ci_visibility_pipelines.feature index df544576dcde..6b5903990303 100644 --- a/features/v2/ci_visibility_pipelines.feature +++ b/features/v2/ci_visibility_pipelines.feature @@ -20,6 +20,7 @@ Feature: CI Visibility Pipelines And body with value {"compute": [{"aggregation": "pc90", "metric": "@duration", "type": "total"}], "filter": {"from": "now-15m", "query": "@ci.provider.name:(gitlab OR github)", "to": "now"}, "group_by": [{ "facet": "@ci.status", "limit": 10, "total": false}], "options": {"timezone": "GMT"}} When the request is sent Then the response status is 200 OK + And the response "meta.status" is equal to "done" @generated @skip @team:Datadog/ci-app-backend @team:Datadog/integrations-tools-and-libraries Scenario: Get a list of pipelines events returns "Bad Request" response diff --git a/features/v2/ci_visibility_tests.feature b/features/v2/ci_visibility_tests.feature index 59a1fa371b03..f5ff00069cc9 100644 --- a/features/v2/ci_visibility_tests.feature +++ b/features/v2/ci_visibility_tests.feature @@ -20,6 +20,7 @@ Feature: CI Visibility Tests And body with value {"compute": [{"aggregation": "count", "metric": "@test.is_flaky", "type": "total"}], "filter": {"from": "now-15m", "query": "@language:(python OR go)", "to": "now"}, "group_by": [{"facet": "@git.branch", "limit": 10, "sort": {"order": "asc"}, "total": false}], "options": {"timezone": "GMT"}} When the request is sent Then the response status is 200 OK + And the response "meta.status" is equal to "done" @generated @skip @team:Datadog/ci-app-backend @team:Datadog/integrations-tools-and-libraries Scenario: Get a list of tests events returns "Bad Request" response diff --git a/features/v2/cloudflare_integration.feature b/features/v2/cloudflare_integration.feature index 231986a57515..6d924f0290cb 100644 --- a/features/v2/cloudflare_integration.feature +++ b/features/v2/cloudflare_integration.feature @@ -35,6 +35,9 @@ Feature: Cloudflare Integration And body with value {"data": {"attributes": {"api_key": "6Zm7WEgKzAlCnt_4exfEK0mSoeHHAaDf41O1AAfu", "email": "new@email", "name": "{{ unique_lower_alnum }}"}, "type": "cloudflare-accounts"}} When the request is sent Then the response status is 201 CREATED + And the response "data.type" is equal to "cloudflare-accounts" + And the response "data.attributes.email" is equal to "new@email" + And the response "data.attributes.name" is equal to "{{ unique_lower_alnum }}" @generated @skip @team:Datadog/web-integrations Scenario: Add Cloudflare account returns "Not Found" response @@ -85,6 +88,9 @@ Feature: Cloudflare Integration And request contains "account_id" parameter from "cloudflare_account.data.id" When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "cloudflare-accounts" + And the response "data.attributes.email" is equal to "dev@datadog.com" + And the response "data.attributes.name" is equal to "{{ unique_lower_alnum }}" @generated @skip @team:Datadog/web-integrations Scenario: List Cloudflare accounts returns "Bad Request" response @@ -104,6 +110,7 @@ Feature: Cloudflare Integration And new "ListCloudflareAccounts" request When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "cloudflare-accounts" @generated @skip @team:Datadog/web-integrations Scenario: Update Cloudflare account returns "Bad Request" response diff --git a/features/v2/confluent_cloud.feature b/features/v2/confluent_cloud.feature index 07379df3c979..2752c861b706 100644 --- a/features/v2/confluent_cloud.feature +++ b/features/v2/confluent_cloud.feature @@ -123,6 +123,9 @@ Feature: Confluent Cloud And request contains "account_id" parameter from "confluent_account.data.id" When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "confluent-cloud-accounts" + And the response "data.attributes.api_key" is equal to "{{ unique_alnum }}" + And the response "data.attributes.resources[0].resource_type" is equal to "kafka" @generated @skip @team:Datadog/web-integrations Scenario: Get resource from Confluent account returns "Bad Request" response @@ -187,6 +190,7 @@ Feature: Confluent Cloud And new "ListConfluentAccount" request When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "confluent-cloud-accounts" @generated @skip @team:Datadog/web-integrations Scenario: Update Confluent account returns "Bad Request" response diff --git a/features/v2/events.feature b/features/v2/events.feature index e14afcac1d44..6fb2a31f24e0 100644 --- a/features/v2/events.feature +++ b/features/v2/events.feature @@ -45,6 +45,7 @@ Feature: Events And request contains "page[limit]" parameter with value 5 When the request is sent Then the response status is 200 OK + And the response "data" has length 0 @team:DataDog/event-management Scenario: Search events returns "Bad Request" response @@ -61,6 +62,7 @@ Feature: Events And body with value {"filter": {"query": "datadog-agent", "from": "2020-09-17T11:48:36+01:00", "to": "2020-09-17T12:48:36+01:00"}, "sort": "timestamp", "page": {"limit": 5}} When the request is sent Then the response status is 200 OK + And the response "data" has length 0 @replay-only @team:DataDog/event-management @with-pagination Scenario: Search events returns "OK" response with pagination diff --git a/features/v2/fastly_integration.feature b/features/v2/fastly_integration.feature index b8ad6e407a0b..40addc404a95 100644 --- a/features/v2/fastly_integration.feature +++ b/features/v2/fastly_integration.feature @@ -21,6 +21,9 @@ Feature: Fastly Integration And body with value {"data": {"attributes": {"api_key": "{{ unique_alnum }}", "name": "{{ unique }}", "services": []}, "type": "fastly-accounts"}} When the request is sent Then the response status is 201 CREATED + And the response "data.type" is equal to "fastly-accounts" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.services" has length 0 @generated @skip @team:Datadog/web-integrations Scenario: Add Fastly account returns "Not Found" response @@ -119,6 +122,9 @@ Feature: Fastly Integration And request contains "account_id" parameter from "fastly_account.data.id" When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "fastly-accounts" + And the response "data.attributes.name" is equal to "test-name" + And the response "data.attributes.services" has length 0 @generated @skip @team:Datadog/web-integrations Scenario: Get Fastly service returns "Bad Request" response @@ -162,6 +168,7 @@ Feature: Fastly Integration And new "ListFastlyAccounts" request When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "fastly-accounts" @generated @skip @team:Datadog/web-integrations Scenario: List Fastly services returns "Bad Request" response @@ -208,6 +215,7 @@ Feature: Fastly Integration And body with value {"data": {"attributes": {"api_key": "update-secret"}, "type": "fastly-accounts"}} When the request is sent Then the response status is 200 OK + And the response "data.id" is equal to "{{fastly_account.data.id }}" And the response "data.attributes.name" is equal to "{{fastly_account.data.attributes.name }}" @generated @skip @team:Datadog/web-integrations diff --git a/features/v2/incident_services.feature b/features/v2/incident_services.feature index dadd3c2ab6f4..66eb74e5d951 100644 --- a/features/v2/incident_services.feature +++ b/features/v2/incident_services.feature @@ -24,6 +24,7 @@ Feature: Incident Services When the request is sent Then the response status is 201 CREATED And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.type" is equal to "services" @generated @skip @team:Datadog/incident-app Scenario: Create a new incident service returns "Not Found" response @@ -107,6 +108,8 @@ Feature: Incident Services And request contains "service_id" parameter from "service.data.id" When the request is sent Then the response status is 200 OK + And the response "data.id" is equal to "{{service.data.id}}" + And the response "data.type" is equal to "services" And the response "data.attributes.name" has the same value as "service.data.attributes.name" @generated @skip @team:Datadog/incident-app @@ -136,4 +139,6 @@ Feature: Incident Services And body with value {"data": {"type": "services", "attributes": {"name": "{{ service.data.attributes.name }}-updated"}}} When the request is sent Then the response status is 200 OK + And the response "data.id" is equal to "{{service.data.id}}" + And the response "data.type" is equal to "services" And the response "data.attributes.name" is equal to "{{ service.data.attributes.name }}-updated" diff --git a/features/v2/incident_teams.feature b/features/v2/incident_teams.feature index ea41e7dada77..bd7c93179fc3 100644 --- a/features/v2/incident_teams.feature +++ b/features/v2/incident_teams.feature @@ -23,6 +23,7 @@ Feature: Incident Teams And body with value {"data": {"type": "teams", "attributes": {"name": "{{ unique }}"}}} When the request is sent Then the response status is 201 CREATED + And the response "data.type" is equal to "teams" And the response "data.attributes.name" is equal to "{{ unique }}" @generated @skip @team:Datadog/incident-app @@ -81,6 +82,7 @@ Feature: Incident Teams When the request is sent Then the response status is 200 OK And the response "data" has length 1 + And the response "data[0].type" is equal to "teams" And the response "data[0].attributes.name" has the same value as "team.data.attributes.name" @generated @skip @team:Datadog/incident-app @@ -107,6 +109,8 @@ Feature: Incident Teams And request contains "team_id" parameter from "team.data.id" When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "teams" + And the response "data.id" is equal to "{{ team.data.id }}" And the response "data.attributes.name" has the same value as "team.data.attributes.name" @generated @skip @team:Datadog/incident-app @@ -136,4 +140,6 @@ Feature: Incident Teams And body with value {"data": {"type": "teams", "attributes": {"name": "{{ team.data.attributes.name }}-updated"}}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "teams" + And the response "data.id" is equal to "{{ team.data.id }}" And the response "data.attributes.name" is equal to "{{ team.data.attributes.name }}-updated" diff --git a/features/v2/incidents.feature b/features/v2/incidents.feature index f2026fd4ca5d..1b8b2ea8993c 100644 --- a/features/v2/incidents.feature +++ b/features/v2/incidents.feature @@ -28,6 +28,9 @@ Feature: Incidents When the request is sent Then the response status is 200 OK And the response "data" has length 1 + And the response "data[0].type" is equal to "incident_attachments" + And the response "data[0].attributes.attachment_type" is equal to "link" + And the response "data[0].attributes.attachment.documentUrl" is equal to "https://www.example.com/doc" @generated @skip @team:DataDog/incident-app Scenario: Create an incident returns "Bad Request" response @@ -46,6 +49,7 @@ Feature: Incidents When the request is sent Then the response status is 201 CREATED And the response "data.relationships.commander_user.data.id" has the same value as "user.data.id" + And the response "data.attributes.title" has the same value as "unique" @generated @skip @team:DataDog/incident-app Scenario: Create an incident returns "Not Found" response @@ -152,6 +156,7 @@ Feature: Incidents And new "ListIncidents" request When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "incidents" @replay-only @team:DataDog/incident-app @with-pagination Scenario: Get a list of incidents returns "OK" response with pagination @@ -172,6 +177,9 @@ Feature: Incidents When the request is sent Then the response status is 200 OK And the response "data" has length 1 + And the response "data[0].type" is equal to "incident_attachments" + And the response "data[0].attributes.attachment_type" is equal to "link" + And the response "data[0].attributes.attachment.documentUrl" is equal to "https://www.example.com/doc" @generated @skip @team:DataDog/incident-app Scenario: Get the details of an incident returns "Bad Request" response @@ -234,6 +242,8 @@ Feature: Incidents And request contains "query" parameter with value "state:(active OR stable OR resolved)" When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "incidents_search_results" + And the response "data.attributes.incidents[0].data.type" is equal to "incidents" @generated @skip @team:DataDog/incident-app Scenario: Update an existing incident returns "Bad Request" response diff --git a/features/v2/key_management.feature b/features/v2/key_management.feature index e80c440b50ad..dfe0ab8e3974 100644 --- a/features/v2/key_management.feature +++ b/features/v2/key_management.feature @@ -23,6 +23,8 @@ Feature: Key Management And body with value {"data": {"type": "api_keys", "attributes": {"name": "{{ unique }}"}}} When the request is sent Then the response status is 201 Created + And the response "data.type" is equal to "api_keys" + And the response "data.attributes.name" is equal to "{{ unique }}" @team:DataDog/team-aaa Scenario: Create an Application key for current user returns "Created" response @@ -30,6 +32,7 @@ Feature: Key Management And body with value {"data": {"type": "application_keys", "attributes": {"name": "{{ unique }}"}}} When the request is sent Then the response status is 201 Created + And the response "data.type" is equal to "application_keys" And the response "data.attributes.name" is equal to "{{ unique }}" @team:DataDog/team-aaa @@ -138,6 +141,9 @@ Feature: Key Management And body with value {"data": {"type": "api_keys", "id": "{{ api_key.data.id }}", "attributes": {"name": "{{ unique }}"}}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "api_keys" + And the response "data.id" is equal to "{{ api_key.data.id }}" + And the response "data.attributes.name" is equal to "{{ unique }}" @generated @skip @team:DataDog/team-aaa Scenario: Edit an application key owned by current user returns "Bad Request" response @@ -163,6 +169,8 @@ Feature: Key Management And body with value {"data": {"id": "{{ application_key.data.id }}", "type": "application_keys", "attributes": {"name" : "{{ application_key.data.attributes.name }}-updated"}}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "application_keys" + And the response "data.id" is equal to "{{ application_key.data.id }}" And the response "data.attributes.name" is equal to "{{ application_key.data.attributes.name }}-updated" @generated @skip @team:DataDog/team-aaa @@ -189,6 +197,8 @@ Feature: Key Management And body with value {"data": {"id": "{{ application_key.data.id }}", "type": "application_keys", "attributes": {"name" : "{{ application_key.data.attributes.name }}-updated"}}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "application_keys" + And the response "data.id" is equal to "{{ application_key.data.id }}" And the response "data.attributes.name" is equal to "{{ application_key.data.attributes.name }}-updated" @generated @skip @team:DataDog/team-aaa @@ -205,6 +215,8 @@ Feature: Key Management And request contains "api_key_id" parameter from "api_key.data.id" When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "api_keys" + And the response "data.id" is equal to "{{ api_key.data.id }}" @generated @skip @team:DataDog/team-aaa Scenario: Get all API keys returns "Bad Request" response @@ -219,12 +231,14 @@ Feature: Key Management And request contains "filter" parameter from "api_key.data.attributes.name" When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "api_keys" @team:DataDog/team-aaa Scenario: Get all Application keys owned by current user returns "OK" response Given new "ListCurrentUserApplicationKeys" request When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "application_keys" @team:DataDog/team-aaa Scenario: Get all Application keys returns "OK" response @@ -232,6 +246,7 @@ Feature: Key Management And new "ListApplicationKeys" request When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "application_keys" @generated @skip @team:DataDog/team-aaa Scenario: Get all application keys owned by current user returns "Bad Request" response @@ -290,6 +305,8 @@ Feature: Key Management And request contains "app_key_id" parameter from "application_key.data.id" When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "application_keys" + And the response "data.id" has the same value as "application_key.data.id" @team:DataDog/team-aaa Scenario: Get one Application key owned by current user returns "OK" response @@ -299,6 +316,7 @@ Feature: Key Management When the request is sent Then the response status is 200 OK And the response "data.attributes.name" has the same value as "application_key.data.attributes.name" + And the response "data.id" has the same value as "application_key.data.id" @generated @skip @team:DataDog/team-aaa Scenario: Get one application key owned by current user returns "Not Found" response diff --git a/features/v2/logs.feature b/features/v2/logs.feature index 3641f8da4309..72a251eb8732 100644 --- a/features/v2/logs.feature +++ b/features/v2/logs.feature @@ -13,6 +13,7 @@ Feature: Logs And body with value {"compute": [{"aggregation": "count", "interval": "5m", "type": "timeseries"}], "filter": {"from": "now-15m", "indexes": ["main"], "query": "*", "to": "now"}} When the request is sent Then the response status is 200 OK + And the response "meta.status" is equal to "done" @team:DataDog/logs-app Scenario: Aggregate compute events with group by returns "OK" response @@ -21,6 +22,7 @@ Feature: Logs And body with value {"compute": [{"aggregation": "count", "interval": "5m", "type": "timeseries"}], "filter": {"from": "now-15m", "indexes": ["main"], "query": "*", "to": "now"}, "group_by": [{"facet": "host", "missing": "miss", "sort": {"type": "measure", "order": "asc", "aggregation": "pc90", "metric": "@duration"}, "total": "recall"}]} When the request is sent Then the response status is 200 OK + And the response "meta.status" is equal to "done" @generated @skip @team:DataDog/logs-app Scenario: Aggregate events returns "Bad Request" response @@ -37,6 +39,7 @@ Feature: Logs And body with value {"filter": {"from": "now-15m", "indexes": ["main"], "query": "*", "to": "now"}} When the request is sent Then the response status is 200 OK + And the response "meta.status" is equal to "done" @generated @skip @team:DataDog/logs-app Scenario: Get a list of logs returns "Bad Request" response @@ -72,6 +75,7 @@ Feature: Logs And request contains "page[limit]" parameter with value 5 When the request is sent Then the response status is 200 OK + And the response "data" has length 0 @generated @skip @team:DataDog/logs-app Scenario: Search logs returns "Bad Request" response @@ -88,6 +92,7 @@ Feature: Logs And body with value {"filter": {"query": "datadog-agent", "indexes": ["main"], "from": "2020-09-17T11:48:36+01:00", "to": "2020-09-17T12:48:36+01:00"}, "sort": "timestamp", "page": {"limit": 5}} When the request is sent Then the response status is 200 OK + And the response "data" has length 0 @replay-only @team:DataDog/logs-app @with-pagination Scenario: Search logs returns "OK" response with pagination diff --git a/features/v2/logs_metrics.feature b/features/v2/logs_metrics.feature index ad6c8147bcea..89654c34afbf 100644 --- a/features/v2/logs_metrics.feature +++ b/features/v2/logs_metrics.feature @@ -26,9 +26,13 @@ Feature: Logs Metrics @team:DataDog/logs-backend Scenario: Create a log-based metric returns "OK" response Given new "CreateLogsMetric" request - And body with value {"data": {"id": "{{ unique }}", "type": "logs_metrics", "attributes": {"compute": {"aggregation_type": "distribution", "include_percentiles": true, "path":"@duration"}}}} + And body with value {"data": {"id": "{{ unique_alnum }}", "type": "logs_metrics", "attributes": {"compute": {"aggregation_type": "distribution", "include_percentiles": true, "path":"@duration"}}}} When the request is sent Then the response status is 200 OK + And the response "data.id" has the same value as "unique_alnum" + And the response "data.type" is equal to "logs_metrics" + And the response "data.attributes.compute.aggregation_type" is equal to "distribution" + And the response "data.attributes.compute.include_percentiles" is equal to true @generated @skip @team:DataDog/logs-backend Scenario: Delete a log-based metric returns "Not Found" response @@ -67,6 +71,7 @@ Feature: Logs Metrics And new "ListLogsMetrics" request When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "logs_metrics" @generated @skip @team:DataDog/logs-backend Scenario: Update a log-based metric returns "Bad Request" response @@ -103,3 +108,5 @@ Feature: Logs Metrics When the request is sent Then the response status is 200 OK And the response "data.attributes.compute.include_percentiles" is false + And the response "data.type" is equal to "logs_metrics" + And the response "data.id" is equal to "{{ logs_metric_percentile.data.id }}" diff --git a/features/v2/metrics.feature b/features/v2/metrics.feature index a3ee7f663093..5fad316de1b1 100644 --- a/features/v2/metrics.feature +++ b/features/v2/metrics.feature @@ -106,6 +106,7 @@ Feature: Metrics And request contains "filter[tags]" parameter with value "{{ unique_alnum }}" When the request is sent Then the response status is 200 Success + And the response "data" has length 0 @team:DataDog/points-aggregation Scenario: Get a list of metrics with configured filter returns "Success" response @@ -114,6 +115,7 @@ Feature: Metrics And request contains "filter[configured]" parameter with value true When the request is sent Then the response status is 200 Success + And the response "data[0].type" is equal to "manage_tags" @generated @skip @team:DataDog/points-aggregation Scenario: List active tags and aggregations returns "Bad Request" response @@ -267,6 +269,8 @@ Feature: Metrics And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": 1671612804000, "queries": [{"aggregator": "avg", "data_source": "metrics", "query": "avg:system.cpu.user{*}", "name": "a"}], "to": 1671620004000}, "type": "scalar_request"}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + And the response "data.attributes.columns[0].name" is equal to "a" @generated @skip @team:DataDog/metrics-intake @team:DataDog/metrics-query Scenario: Submit metrics returns "Bad Request" response @@ -281,6 +285,7 @@ Feature: Metrics And body with value {"series": [{"metric": "system.load.1", "type": 0, "points": [{"timestamp": {{ timestamp('now') }}, "value": 0.7}], "resources": [{"name": "dummyhost", "type": "host"}]}]} When the request is sent Then the response status is 202 Payload accepted + And the response "errors" has length 0 @generated @skip @team:DataDog/metrics-intake @team:DataDog/metrics-query Scenario: Submit metrics returns "Payload too large" response @@ -338,6 +343,8 @@ Feature: Metrics And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": 1671612804000, "interval": 5000, "queries": [{"data_source": "metrics", "query": "avg:system.cpu.user{*}", "name": "a"}], "to": 1671620004000}, "type": "timeseries_request"}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + And the response "data.attributes.series[0].unit[0].name" is equal to "percent" @generated @skip @team:DataDog/points-aggregation Scenario: Update a tag configuration returns "Bad Request" response diff --git a/features/v2/monitors.feature b/features/v2/monitors.feature index 1142967fa32a..46297e1ae4eb 100644 --- a/features/v2/monitors.feature +++ b/features/v2/monitors.feature @@ -24,6 +24,10 @@ Feature: Monitors And body with value {"data": {"attributes": {"policy_type": "tag", "policy": {"tag_key": "datacenter", "tag_key_required": true, "valid_tag_values": ["prod", "staging"]}}, "type": "monitor-config-policy"}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "monitor-config-policy" + And the response "data.attributes.policy_type" is equal to "tag" + And the response "data.attributes.policy.tag_key" is equal to "datacenter" + And the response "data.attributes.policy.valid_tag_values" is equal to ["prod", "staging"] @team:DataDog/monitor-app Scenario: Delete a monitor configuration policy returns "Bad Request" response @@ -63,6 +67,11 @@ Feature: Monitors And body with value {"data": {"attributes": {"policy": {"tag_key": "datacenter", "tag_key_required": true, "valid_tag_values": ["prod", "staging"]}, "policy_type": "tag"}, "id": "{{ monitor_configuration_policy.data.id }}", "type": "monitor-config-policy"}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "monitor-config-policy" + And the response "data.id" is equal to "{{ monitor_configuration_policy.data.id }}" + And the response "data.attributes.policy_type" is equal to "tag" + And the response "data.attributes.policy.tag_key" is equal to "datacenter" + And the response "data.attributes.policy.valid_tag_values" is equal to ["prod", "staging"] @team:DataDog/monitor-app Scenario: Edit a monitor configuration policy returns "Unprocessable Entity" response @@ -87,9 +96,20 @@ Feature: Monitors And request contains "policy_id" parameter from "monitor_configuration_policy.data.id" When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "monitor-config-policy" + And the response "data.id" is equal to "{{ monitor_configuration_policy.data.id }}" + And the response "data.attributes.policy_type" is equal to "tag" + And the response "data.attributes.policy.tag_key" is equal to "dc" + And the response "data.attributes.policy.valid_tag_values" is equal to ["prod", "staging"] @team:DataDog/monitor-app Scenario: Get all monitor configuration policies returns "OK" response - Given new "ListMonitorConfigPolicies" request + Given there is a valid "monitor_configuration_policy" in the system + And new "ListMonitorConfigPolicies" request When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "monitor-config-policy" + And the response "data[0].id" is equal to "{{ monitor_configuration_policy.data.id }}" + And the response "data[0].attributes.policy_type" is equal to "tag" + And the response "data[0].attributes.policy.tag_key" is equal to "dc" + And the response "data[0].attributes.policy.valid_tag_values" is equal to ["prod", "staging"] diff --git a/features/v2/opsgenie_integration.feature b/features/v2/opsgenie_integration.feature index 082a2d04f590..5df3907ac035 100644 --- a/features/v2/opsgenie_integration.feature +++ b/features/v2/opsgenie_integration.feature @@ -91,6 +91,7 @@ Feature: Opsgenie Integration And new "ListOpsgenieServices" request When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "opsgenie-service" @skip @team:Datadog/collaboration-integrations Scenario: Update a single service object returns "Bad Request" response diff --git a/features/v2/roles.feature b/features/v2/roles.feature index c34278719484..2a52b197645d 100644 --- a/features/v2/roles.feature +++ b/features/v2/roles.feature @@ -38,6 +38,8 @@ Feature: Roles And body with value {"data": {"id": "{{ user.data.id}}", "type": "{{ user.data.type }}"}} When the request is sent Then the response status is 200 OK + And the response "data[0].id" is equal to "{{ user.data.id }}" + And the response "data[0].type" is equal to "{{ user.data.type }}" @team:DataDog/team-aaa Scenario: Create a new role by cloning an existing role returns "Bad Request" response @@ -89,6 +91,7 @@ Feature: Roles When the request is sent Then the response status is 200 OK And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.type" is equal to "roles" @generated @skip @team:DataDog/team-aaa Scenario: Delete role returns "Not found" response @@ -120,6 +123,7 @@ Feature: Roles When the request is sent Then the response status is 200 OK for get role And the response "data.attributes.name" has the same value as "role.data.attributes.name" + And the response "data.id" has the same value as "role.data.id" @generated @skip @team:DataDog/team-aaa Scenario: Get all users of a role returns "Not found" response @@ -164,6 +168,7 @@ Feature: Roles And body with value {"data": {"id": "{{ permission.id }}", "type": "{{ permission.type }}"}} When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "permissions" @generated @skip @team:DataDog/team-aaa Scenario: List permissions for a role returns "Not found" response @@ -181,6 +186,7 @@ Feature: Roles And request contains "role_id" parameter from "role.data.id" When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "permissions" @generated @skip @team:DataDog/team-aaa Scenario: List permissions returns "Bad Request" response @@ -261,6 +267,7 @@ Feature: Roles And body with value {"data": {"id": "{{ permission.id }}", "type": "{{ permission.type }}"}} When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "permissions" @team:DataDog/team-aaa Scenario: Update a role returns "Bad Request" response diff --git a/features/v2/rum.feature b/features/v2/rum.feature index a1d73eb234d7..881145589eec 100644 --- a/features/v2/rum.feature +++ b/features/v2/rum.feature @@ -20,6 +20,8 @@ Feature: RUM And body with value {"compute": [{"aggregation": "pc90", "metric": "@view.time_spent", "type": "total"}], "filter": {"from": "now-15m", "query": "@type:view AND @session.type:user", "to": "now"}, "group_by": [{"facet": "@view.time_spent", "limit": 10, "total": false}], "options": {"timezone": "GMT"}, "page": { "limit": 25}} When the request is sent Then the response status is 200 OK + And the response "meta.status" is equal to "done" + And the response "data.buckets" has length 0 @skip @team:DataDog/rum-back Scenario: Create a new RUM application returns "Bad Request" response @@ -34,6 +36,9 @@ Feature: RUM And body with value {"data": {"attributes": {"name": "my_new_rum_application", "type": "ios"}, "type": "rum_application_create"}} When the request is sent Then the response status is 200 RUM application. + And the response "data.type" is equal to "rum_application" + And the response "data.attributes.type" is equal to "ios" + And the response "data.attributes.name" is equal to "my_new_rum_application" @team:DataDog/rum-back Scenario: Delete a RUM application returns "No Content" response @@ -64,6 +69,9 @@ Feature: RUM And request contains "id" parameter from "rum_application.data.id" When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "rum_application" + And the response "data.attributes.type" is equal to "browser" + And the response "data.attributes.name" is equal to "test_name_create" @generated @skip @team:DataDog/rum-back Scenario: Get a list of RUM events returns "Bad Request" response @@ -143,6 +151,10 @@ Feature: RUM And body with value {"data": {"attributes": {"name": "updated_name_for_my_existing_rum_application", "type": "browser"}, "id": "{{ rum_application.data.id }}","type": "rum_application_update"}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "rum_application" + And the response "data.attributes.application_id" is equal to "{{ rum_application.data.id }}" + And the response "data.attributes.type" is equal to "browser" + And the response "data.attributes.name" is equal to "updated_name_for_my_existing_rum_application" @team:DataDog/rum-back Scenario: Update a RUM application returns "Unprocessable Entity." response diff --git a/features/v2/security_monitoring.feature b/features/v2/security_monitoring.feature index dfacfa1b2e35..276ac3d42ec1 100644 --- a/features/v2/security_monitoring.feature +++ b/features/v2/security_monitoring.feature @@ -61,6 +61,10 @@ Feature: Security Monitoring And body with value {"type":"cloud_configuration","name":"{{ unique }}_cloud","isEnabled":false,"cases":[{"status":"info","notifications":["channel"]}],"options":{"complianceRuleOptions":{"resourceType":"gcp_compute_disk","complexRule": false,"regoRule":{"policy":"package datadog\n","resourceTypes":["gcp_compute_disk"]}}},"message":"ddd","tags":["my:tag"],"complianceSignalOptions":{"userActivationStatus":true,"userGroupByFields":["@account_id"]}} When the request is sent Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}_cloud" + And the response "type" is equal to "cloud_configuration" + And the response "message" is equal to "ddd" + And the response "options.complianceRuleOptions.resourceType" is equal to "gcp_compute_disk" @team:DataDog/k9-cloud-security-platform Scenario: Create a detection rule returns "Bad Request" response @@ -75,6 +79,9 @@ Feature: Security Monitoring And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"metric":""}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection"} When the request is sent Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}" + And the response "type" is equal to "log_detection" + And the response "message" is equal to "Test rule" @team:DataDog/k9-cloud-security-platform Scenario: Create a detection rule with type 'impossible_travel' returns "OK" response @@ -82,6 +89,10 @@ Feature: Security Monitoring And body with value {"queries":[{"aggregation":"geo_data","groupByFields":["@usr.id"],"distinctFields":[],"metric":"@network.client.geoip","query":"*"}],"cases":[{"name":"","status":"info","notifications":[]}],"hasExtendedTitle":true,"message":"test","isEnabled":true,"options":{"maxSignalDuration":86400,"evaluationWindow":900,"keepAlive":3600,"detectionMethod":"impossible_travel","impossibleTravelOptions":{"baselineUserLocations":false}},"name":"{{ unique }}","type":"log_detection","tags":[],"filters":[]} When the request is sent Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}" + And the response "type" is equal to "log_detection" + And the response "message" is equal to "test" + And the response "options.detectionMethod" is equal to "impossible_travel" @team:DataDog/k9-cloud-security-platform Scenario: Create a detection rule with type 'signal_correlation' returns "OK" response @@ -91,6 +102,10 @@ Feature: Security Monitoring And body with value {"name":"{{ unique }}_signal_rule", "queries":[{"ruleId":"{{ security_rule.id }}","aggregation":"event_count","correlatedByFields":["host"],"correlatedQueryIndex":1}, {"ruleId":"{{ security_rule_bis.id }}","aggregation":"event_count","correlatedByFields":["host"]}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0 && b > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test signal correlation rule","tags":[],"isEnabled":true, "type": "signal_correlation"} When the request is sent Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}_signal_rule" + And the response "type" is equal to "signal_correlation" + And the response "message" is equal to "Test signal correlation rule" + And the response "isEnabled" is equal to true @team:DataDog/k9-cloud-security-platform Scenario: Create a detection rule with type 'workload_security' returns "OK" response @@ -98,6 +113,10 @@ Feature: Security Monitoring And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"metric":""}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type": "workload_security"} When the request is sent Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}" + And the response "type" is equal to "workload_security" + And the response "message" is equal to "Test rule" + And the response "isEnabled" is equal to true @generated @skip @team:DataDog/k9-cloud-security-platform Scenario: Create a security filter returns "Bad Request" response @@ -119,6 +138,11 @@ Feature: Security Monitoring And body with value {"data": {"attributes": {"exclusion_filters": [{"name": "Exclude staging", "query": "source:staging"}], "filtered_data_type": "logs", "is_enabled": true, "name": "{{ unique }}", "query": "service:{{ unique_alnum }}"}, "type": "security_filters"}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "security_filters" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.is_enabled" is equal to true + And the response "data.attributes.exclusion_filters[0].name" is equal to "Exclude staging" + And the response "data.attributes.exclusion_filters[0].query" is equal to "source:staging" @skip @team:DataDog/k9-cloud-security-platform Scenario: Delete a non existing rule returns "Not Found" response @@ -247,6 +271,11 @@ Feature: Security Monitoring And request contains "security_filter_id" parameter from "security_filter.data.id" When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "security_filters" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.is_enabled" is equal to true + And the response "data.attributes.exclusion_filters[0].name" is equal to "Exclude logs from staging" + And the response "data.attributes.exclusion_filters[0].query" is equal to "source:staging" @replay-only @team:DataDog/k9-cloud-security-platform Scenario: Get a signal's details returns "Not Found" response @@ -347,6 +376,9 @@ Feature: Security Monitoring And body with value {"data": {"attributes": {"exclusion_filters": [], "filtered_data_type": "logs", "is_enabled": true, "name": "{{ unique }}", "query": "service:{{ unique_alnum }}", "version": 1}, "type": "security_filters"}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "security_filters" + And the response "data.attributes.filtered_data_type" is equal to "logs" + And the response "data.attributes.name" is equal to "{{ unique }}" @team:DataDog/k9-cloud-security-platform Scenario: Update an existing rule returns "Bad Request" response diff --git a/features/v2/sensitive_data_scanner.feature b/features/v2/sensitive_data_scanner.feature index 714c8ccbf51c..dfe0a035ecbe 100644 --- a/features/v2/sensitive_data_scanner.feature +++ b/features/v2/sensitive_data_scanner.feature @@ -22,6 +22,8 @@ Feature: Sensitive Data Scanner And body with value {"meta":{},"data":{"type":"sensitive_data_scanner_group","attributes":{"name":"{{ unique }}","is_enabled":false,"product_list":["logs"],"filter":{"query":"*"}},"relationships":{"configuration":{"data":{"type":"sensitive_data_scanner_configuration","id":"{{ configuration.data.id }}"}},"rules":{"data":[]}}}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "sensitive_data_scanner_group" + And the response "data.attributes.name" is equal to "{{ unique }}" @team:DataDog/logs-app @team:DataDog/logs-core Scenario: Create Scanning Rule returns "Bad Request" response @@ -40,6 +42,9 @@ Feature: Sensitive Data Scanner And body with value {"meta":{},"data":{"type":"sensitive_data_scanner_rule","attributes":{"name":"{{ unique }}","pattern":"pattern", "namespaces": ["admin"], "excluded_namespaces": ["admin.name"], "text_replacement":{"type":"none"},"tags":["sensitive_data:true"],"is_enabled":true},"relationships":{"group":{"data":{"type":"{{ group.data.type }}","id":"{{ group.data.id }}"}}}}} When the request is sent Then the response status is 200 OK + And the response "data.type" is equal to "sensitive_data_scanner_rule" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.pattern" is equal to "pattern" @generated @skip @team:DataDog/logs-app @team:DataDog/logs-core Scenario: Delete Scanning Group returns "Bad Request" response diff --git a/features/v2/service_accounts.feature b/features/v2/service_accounts.feature index de4f1249410f..8272cf5a909a 100644 --- a/features/v2/service_accounts.feature +++ b/features/v2/service_accounts.feature @@ -103,6 +103,8 @@ Feature: Service Accounts When the request is sent Then the response status is 200 OK And the response "data.attributes.name" is equal to "{{ service_account_application_key.data.attributes.name }}-updated" + And the response "data.type" is equal to "application_keys" + And the response "data.id" is equal to "{{ service_account_application_key.data.id }}" @generated @skip @team:DataDog/team-aaa Scenario: Edit an application key for this service account returns "Bad Request" response @@ -149,6 +151,8 @@ Feature: Service Accounts When the request is sent Then the response status is 200 OK And the response "data.attributes.name" has the same value as "service_account_application_key.data.attributes.name" + And the response "data.type" is equal to "application_keys" + And the response "data.id" is equal to "{{ service_account_application_key.data.id }}" @generated @skip @team:DataDog/team-aaa Scenario: Get one application key for this service account returns "Not Found" response diff --git a/features/v2/service_definition.feature b/features/v2/service_definition.feature index 0074c10cc3df..be57dce43bfb 100644 --- a/features/v2/service_definition.feature +++ b/features/v2/service_definition.feature @@ -21,6 +21,7 @@ Feature: Service Definition When the request is sent Then the response status is 200 CREATED And the response "data[0].attributes.meta.ingested-schema-version" is equal to "v2" + And the response "data[0].attributes.schema.dd-service" is equal to "service-{{ unique_lower }}" @generated @skip @team:DataDog/apm-insights Scenario: Create or update service definition returns "Conflict" response @@ -80,6 +81,7 @@ Feature: Service Definition When the request is sent Then the response status is 200 OK And the response "data.attributes.meta.ingested-schema-version" is equal to "v2" + And the response "data.attributes.schema.dd-service" is equal to "service-definition-test" @team:DataDog/apm-insights Scenario: Get all service definitions returns "OK" response diff --git a/features/v2/synthetics.feature b/features/v2/synthetics.feature index 660b625674ce..2803c2460730 100644 --- a/features/v2/synthetics.feature +++ b/features/v2/synthetics.feature @@ -39,3 +39,4 @@ Feature: Synthetics And body with value {"on_demand_concurrency_cap": 20} When the request is sent Then the response status is 200 OK + And the response "data.attributes.on_demand_concurrency_cap" is equal to 20 diff --git a/features/v2/usage_metering.feature b/features/v2/usage_metering.feature index 9e9dc6e05086..f8323f8750be 100644 --- a/features/v2/usage_metering.feature +++ b/features/v2/usage_metering.feature @@ -71,6 +71,8 @@ Feature: Usage Metering And request contains "filter[product_families]" parameter with value "infra_hosts" When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "usage_timeseries" + And the response "data[0].attributes.region" is equal to "us" @team:DataDog/red-zone-revenue-query Scenario: Get hourly usage for Application Security returns "Bad Request" response @@ -87,6 +89,8 @@ Feature: Usage Metering And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "usage_timeseries" + And the response "data[0].attributes.product_family" is equal to "app-sec" @team:DataDog/red-zone-revenue-query Scenario: Get hourly usage for Lambda Traced Invocations returns "Bad Request" response @@ -103,6 +107,8 @@ Feature: Usage Metering And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "usage_timeseries" + And the response "data[0].attributes.product_family" is equal to "lambda-traced-invocations" @team:DataDog/red-zone-revenue-query Scenario: Get hourly usage for Observability Pipelines returns "Bad Request" response @@ -119,6 +125,8 @@ Feature: Usage Metering And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" When the request is sent Then the response status is 200 OK + And the response "data[0].type" is equal to "usage_timeseries" + And the response "data[0].attributes.product_family" is equal to "observability-pipelines" @generated @skip @team:DataDog/red-zone-revenue-query Scenario: Get hourly usage for application security returns "Bad Request" response diff --git a/features/v2/users.feature b/features/v2/users.feature index 0510d56cc7e3..f0dee6e0a6ba 100644 --- a/features/v2/users.feature +++ b/features/v2/users.feature @@ -55,6 +55,8 @@ Feature: Users And request contains "user_invitation_uuid" parameter from "user_invitation.id" When the request is sent Then the response status is 200 OK + And the response "data.attributes.invite_type" is equal to "openid_invite" + And the response "data.attributes.uuid" is equal to "{{user_invitation.id}}" @generated @skip @team:DataDog/team-aaa Scenario: Get a user organization returns "Not found" response @@ -84,6 +86,7 @@ Feature: Users And request contains "user_id" parameter from "user.data.id" When the request is sent Then the response status is 200 OK + And the response "data" has length 0 @team:DataDog/team-aaa Scenario: Get a user returns "OK" response @@ -92,6 +95,9 @@ Feature: Users And request contains "user_id" parameter from "user.data.id" When the request is sent Then the response status is 200 OK for get user + And the response "data.id" is equal to "{{ user.data.id }}" + And the response "data.type" is equal to "users" + And the response "data.attributes.handle" is equal to "{{ unique_lower }}@datadoghq.com" @generated @skip @team:DataDog/team-aaa Scenario: Get user details returns "Not found" response @@ -137,6 +143,8 @@ Feature: Users And body with value {"data": [{"type": "user_invitations", "relationships": {"user": {"data": {"type": "{{ user.data.type }}", "id": "{{ user.data.id }}"}}}}]} When the request is sent Then the response status is 201 OK + And the response "data" has length 1 + And the response "data[0].attributes.invite_type" is equal to "openid_invite" @generated @skip @team:DataDog/team-aaa Scenario: Update a user returns "Bad Request" response