From cbdabf7e1bd06733bc8840319f43fbf942a25a5d Mon Sep 17 00:00:00 2001 From: "ci.datadog-api-spec" Date: Fri, 6 Mar 2026 10:42:37 +0000 Subject: [PATCH] Regenerate client from commit 988555f of spec repo --- .generator/schemas/v2/openapi.yaml | 98 +++++++- examples/v2/teams/SyncTeams_3215592344.java | 38 ---- .../datadog/api/client/v2/api/TeamsApi.java | 5 +- .../client/v2/model/TeamSyncAttributes.java | 45 +++- .../TeamSyncSelectionStateExternalId.java | 183 +++++++++++++++ .../TeamSyncSelectionStateExternalIdType.java | 65 ++++++ .../v2/model/TeamSyncSelectionStateItem.java | 213 ++++++++++++++++++ .../TeamSyncSelectionStateOperation.java | 60 +++++ .../v2/model/TeamSyncSelectionStateScope.java | 59 +++++ ..._configurations_returns_OK_response.freeze | 1 + ...nc_configurations_returns_OK_response.json | 33 +++ ...b_Teams_returns_No_Content_response.freeze | 1 + ...ub_Teams_returns_No_Content_response.json} | 14 +- .../v2/Sync_teams_returns_OK_response.freeze | 1 - .../datadog/api/client/v2/api/teams.feature | 25 +- 15 files changed, 769 insertions(+), 72 deletions(-) delete mode 100644 examples/v2/teams/SyncTeams_3215592344.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateExternalId.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateExternalIdType.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateItem.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateOperation.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateScope.java create mode 100644 src/test/resources/cassettes/features/v2/Get_team_sync_configurations_returns_OK_response.freeze create mode 100644 src/test/resources/cassettes/features/v2/Get_team_sync_configurations_returns_OK_response.json create mode 100644 src/test/resources/cassettes/features/v2/Link_Teams_with_GitHub_Teams_returns_No_Content_response.freeze rename src/test/resources/cassettes/features/v2/{Sync_teams_returns_OK_response.json => Link_Teams_with_GitHub_Teams_returns_No_Content_response.json} (50%) delete mode 100644 src/test/resources/cassettes/features/v2/Sync_teams_returns_OK_response.freeze diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 3c804abe224..051a589536c 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -68031,6 +68031,8 @@ components: properties: frequency: $ref: '#/components/schemas/TeamSyncAttributesFrequency' + selection_state: + $ref: '#/components/schemas/TeamSyncAttributesSelectionState' source: $ref: '#/components/schemas/TeamSyncAttributesSource' sync_membership: @@ -68054,6 +68056,15 @@ components: - ONCE - CONTINUOUSLY - PAUSED + TeamSyncAttributesSelectionState: + description: 'Specifies which teams or organizations to sync. When + + provided, synchronization is limited to the specified + + items and their subtrees.' + items: + $ref: '#/components/schemas/TeamSyncSelectionStateItem' + type: array TeamSyncAttributesSource: description: The external source platform for team synchronization. Only "github" is supported. @@ -68126,6 +68137,78 @@ components: $ref: '#/components/schemas/TeamSyncData' type: array type: object + TeamSyncSelectionStateExternalId: + description: The external identifier for a team or organization in the source + platform. + properties: + type: + $ref: '#/components/schemas/TeamSyncSelectionStateExternalIdType' + value: + $ref: '#/components/schemas/TeamSyncSelectionStateExternalIdValue' + required: + - type + - value + type: object + TeamSyncSelectionStateExternalIdType: + description: 'The type of external identifier for the selection state item. + + For GitHub synchronization, the allowed values are `team` and + + `organization`.' + enum: + - team + - organization + example: team + type: string + x-enum-varnames: + - TEAM + - ORGANIZATION + TeamSyncSelectionStateExternalIdValue: + description: 'The external identifier value from the source + + platform. For GitHub, this is the string + + representation of a GitHub organization ID or team + + ID.' + example: '1' + type: string + TeamSyncSelectionStateItem: + description: Identifies a team or organization hierarchy to include in synchronization. + properties: + external_id: + $ref: '#/components/schemas/TeamSyncSelectionStateExternalId' + operation: + $ref: '#/components/schemas/TeamSyncSelectionStateOperation' + scope: + $ref: '#/components/schemas/TeamSyncSelectionStateScope' + required: + - external_id + type: object + TeamSyncSelectionStateOperation: + description: 'The operation to perform on the selected hierarchy. + + When set to `include`, synchronization covers the + + referenced teams or organizations.' + enum: + - include + example: include + type: string + x-enum-varnames: + - INCLUDE + TeamSyncSelectionStateScope: + description: 'The scope of the selection. When set to `subtree`, + + synchronization includes the referenced team or + + organization and everything nested under it.' + enum: + - subtree + example: subtree + type: string + x-enum-varnames: + - SUBTREE TeamTarget: description: Represents a team target for an escalation policy step, including the team's ID and resource type. @@ -107597,12 +107680,6 @@ paths: description: OK '403': $ref: '#/components/responses/ForbiddenResponse' - '404': - content: - application/json: - schema: - $ref: '#/components/schemas/APIErrorResponse' - description: Team sync configurations not found '429': $ref: '#/components/responses/TooManyRequestsResponse' security: @@ -107634,6 +107711,13 @@ paths: or created. + Optionally, provide `selection_state` to limit synchronization + + to specific teams or organizations and their subtrees, instead + + of syncing all teams. + + [A GitHub organization must be connected to your Datadog account](https://docs.datadoghq.com/integrations/github/), and the GitHub App integrated with Datadog must have the `Members Read` permission. @@ -107655,6 +107739,8 @@ paths: responses: '200': description: OK + '204': + description: No Content '403': $ref: '#/components/responses/ForbiddenResponse' '429': diff --git a/examples/v2/teams/SyncTeams_3215592344.java b/examples/v2/teams/SyncTeams_3215592344.java deleted file mode 100644 index a71b55edbff..00000000000 --- a/examples/v2/teams/SyncTeams_3215592344.java +++ /dev/null @@ -1,38 +0,0 @@ -// Sync teams returns "OK" response - -import com.datadog.api.client.ApiClient; -import com.datadog.api.client.ApiException; -import com.datadog.api.client.v2.api.TeamsApi; -import com.datadog.api.client.v2.model.TeamSyncAttributes; -import com.datadog.api.client.v2.model.TeamSyncAttributesSource; -import com.datadog.api.client.v2.model.TeamSyncAttributesType; -import com.datadog.api.client.v2.model.TeamSyncBulkType; -import com.datadog.api.client.v2.model.TeamSyncData; -import com.datadog.api.client.v2.model.TeamSyncRequest; - -public class Example { - public static void main(String[] args) { - ApiClient defaultClient = ApiClient.getDefaultApiClient(); - TeamsApi apiInstance = new TeamsApi(defaultClient); - - TeamSyncRequest body = - new TeamSyncRequest() - .data( - new TeamSyncData() - .attributes( - new TeamSyncAttributes() - .source(TeamSyncAttributesSource.GITHUB) - .type(TeamSyncAttributesType.LINK)) - .type(TeamSyncBulkType.TEAM_SYNC_BULK)); - - try { - apiInstance.syncTeams(body); - } catch (ApiException e) { - System.err.println("Exception when calling TeamsApi#syncTeams"); - System.err.println("Status code: " + e.getCode()); - System.err.println("Reason: " + e.getResponseBody()); - System.err.println("Response headers: " + e.getResponseHeaders()); - e.printStackTrace(); - } - } -} diff --git a/src/main/java/com/datadog/api/client/v2/api/TeamsApi.java b/src/main/java/com/datadog/api/client/v2/api/TeamsApi.java index 59ea3516b4b..a9fc07ce06d 100644 --- a/src/main/java/com/datadog/api/client/v2/api/TeamsApi.java +++ b/src/main/java/com/datadog/api/client/v2/api/TeamsApi.java @@ -3211,7 +3211,6 @@ public CompletableFuture getTeamSyncAsync( * Status Code Description Response Headers * 200 OK - * 403 Forbidden - - * 404 Team sync configurations not found - * 429 Too many requests - * */ @@ -5026,6 +5025,9 @@ public CompletableFuture syncTeamsAsync(TeamSyncRequest body) { * *

This operation is read-only on the GitHub side, no teams will be modified or created. * + *

Optionally, provide selection_state to limit synchronization to specific teams + * or organizations and their subtrees, instead of syncing all teams. + * *

A GitHub organization must be * connected to your Datadog account, and the GitHub App integrated with Datadog must have the * Members Read permission. Matching is performed by comparing the Datadog team @@ -5041,6 +5043,7 @@ public CompletableFuture syncTeamsAsync(TeamSyncRequest body) { * Response details * Status Code Description Response Headers * 200 OK - + * 204 No Content - * 403 Forbidden - * 429 Too many requests - * 500 Internal Server Error - Unexpected error during linking. - diff --git a/src/main/java/com/datadog/api/client/v2/model/TeamSyncAttributes.java b/src/main/java/com/datadog/api/client/v2/model/TeamSyncAttributes.java index 54697890ee4..d23aea6c094 100644 --- a/src/main/java/com/datadog/api/client/v2/model/TeamSyncAttributes.java +++ b/src/main/java/com/datadog/api/client/v2/model/TeamSyncAttributes.java @@ -13,13 +13,16 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Objects; /** Team sync attributes. */ @JsonPropertyOrder({ TeamSyncAttributes.JSON_PROPERTY_FREQUENCY, + TeamSyncAttributes.JSON_PROPERTY_SELECTION_STATE, TeamSyncAttributes.JSON_PROPERTY_SOURCE, TeamSyncAttributes.JSON_PROPERTY_SYNC_MEMBERSHIP, TeamSyncAttributes.JSON_PROPERTY_TYPE @@ -31,6 +34,9 @@ public class TeamSyncAttributes { public static final String JSON_PROPERTY_FREQUENCY = "frequency"; private TeamSyncAttributesFrequency frequency; + public static final String JSON_PROPERTY_SELECTION_STATE = "selection_state"; + private List selectionState = null; + public static final String JSON_PROPERTY_SOURCE = "source"; private TeamSyncAttributesSource source; @@ -77,6 +83,40 @@ public void setFrequency(TeamSyncAttributesFrequency frequency) { this.frequency = frequency; } + public TeamSyncAttributes selectionState(List selectionState) { + this.selectionState = selectionState; + for (TeamSyncSelectionStateItem item : selectionState) { + this.unparsed |= item.unparsed; + } + return this; + } + + public TeamSyncAttributes addSelectionStateItem(TeamSyncSelectionStateItem selectionStateItem) { + if (this.selectionState == null) { + this.selectionState = new ArrayList<>(); + } + this.selectionState.add(selectionStateItem); + this.unparsed |= selectionStateItem.unparsed; + return this; + } + + /** + * Specifies which teams or organizations to sync. When provided, synchronization is limited to + * the specified items and their subtrees. + * + * @return selectionState + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SELECTION_STATE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getSelectionState() { + return selectionState; + } + + public void setSelectionState(List selectionState) { + this.selectionState = selectionState; + } + public TeamSyncAttributes source(TeamSyncAttributesSource source) { this.source = source; this.unparsed |= !source.isValid(); @@ -205,6 +245,7 @@ public boolean equals(Object o) { } TeamSyncAttributes teamSyncAttributes = (TeamSyncAttributes) o; return Objects.equals(this.frequency, teamSyncAttributes.frequency) + && Objects.equals(this.selectionState, teamSyncAttributes.selectionState) && Objects.equals(this.source, teamSyncAttributes.source) && Objects.equals(this.syncMembership, teamSyncAttributes.syncMembership) && Objects.equals(this.type, teamSyncAttributes.type) @@ -213,7 +254,8 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(frequency, source, syncMembership, type, additionalProperties); + return Objects.hash( + frequency, selectionState, source, syncMembership, type, additionalProperties); } @Override @@ -221,6 +263,7 @@ public String toString() { StringBuilder sb = new StringBuilder(); sb.append("class TeamSyncAttributes {\n"); sb.append(" frequency: ").append(toIndentedString(frequency)).append("\n"); + sb.append(" selectionState: ").append(toIndentedString(selectionState)).append("\n"); sb.append(" source: ").append(toIndentedString(source)).append("\n"); sb.append(" syncMembership: ").append(toIndentedString(syncMembership)).append("\n"); sb.append(" type: ").append(toIndentedString(type)).append("\n"); diff --git a/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateExternalId.java b/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateExternalId.java new file mode 100644 index 00000000000..e47a6e073c4 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateExternalId.java @@ -0,0 +1,183 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** The external identifier for a team or organization in the source platform. */ +@JsonPropertyOrder({ + TeamSyncSelectionStateExternalId.JSON_PROPERTY_TYPE, + TeamSyncSelectionStateExternalId.JSON_PROPERTY_VALUE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class TeamSyncSelectionStateExternalId { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_TYPE = "type"; + private TeamSyncSelectionStateExternalIdType type; + + public static final String JSON_PROPERTY_VALUE = "value"; + private String value; + + public TeamSyncSelectionStateExternalId() {} + + @JsonCreator + public TeamSyncSelectionStateExternalId( + @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) + TeamSyncSelectionStateExternalIdType type, + @JsonProperty(required = true, value = JSON_PROPERTY_VALUE) String value) { + this.type = type; + this.unparsed |= !type.isValid(); + this.value = value; + } + + public TeamSyncSelectionStateExternalId type(TeamSyncSelectionStateExternalIdType type) { + this.type = type; + this.unparsed |= !type.isValid(); + return this; + } + + /** + * The type of external identifier for the selection state item. For GitHub synchronization, the + * allowed values are team and organization. + * + * @return type + */ + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public TeamSyncSelectionStateExternalIdType getType() { + return type; + } + + public void setType(TeamSyncSelectionStateExternalIdType type) { + if (!type.isValid()) { + this.unparsed = true; + } + this.type = type; + } + + public TeamSyncSelectionStateExternalId value(String value) { + this.value = value; + return this; + } + + /** + * The external identifier value from the source platform. For GitHub, this is the string + * representation of a GitHub organization ID or team ID. + * + * @return value + */ + @JsonProperty(JSON_PROPERTY_VALUE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + /** + * A container for additional, undeclared properties. This is a holder for any undeclared + * properties as specified with the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. If the property + * does not already exist, create it otherwise replace it. + * + * @param key The arbitrary key to set + * @param value The associated value + * @return TeamSyncSelectionStateExternalId + */ + @JsonAnySetter + public TeamSyncSelectionStateExternalId putAdditionalProperty(String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return The additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key The arbitrary key to get + * @return The specific additional property for the given key + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** Return true if this TeamSyncSelectionStateExternalId object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TeamSyncSelectionStateExternalId teamSyncSelectionStateExternalId = + (TeamSyncSelectionStateExternalId) o; + return Objects.equals(this.type, teamSyncSelectionStateExternalId.type) + && Objects.equals(this.value, teamSyncSelectionStateExternalId.value) + && Objects.equals( + this.additionalProperties, teamSyncSelectionStateExternalId.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(type, value, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TeamSyncSelectionStateExternalId {\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" value: ").append(toIndentedString(value)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append('}'); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateExternalIdType.java b/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateExternalIdType.java new file mode 100644 index 00000000000..6dc60f50ec9 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateExternalIdType.java @@ -0,0 +1,65 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** + * The type of external identifier for the selection state item. For GitHub synchronization, the + * allowed values are team and organization. + */ +@JsonSerialize( + using = + TeamSyncSelectionStateExternalIdType.TeamSyncSelectionStateExternalIdTypeSerializer.class) +public class TeamSyncSelectionStateExternalIdType extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("team", "organization")); + + public static final TeamSyncSelectionStateExternalIdType TEAM = + new TeamSyncSelectionStateExternalIdType("team"); + public static final TeamSyncSelectionStateExternalIdType ORGANIZATION = + new TeamSyncSelectionStateExternalIdType("organization"); + + TeamSyncSelectionStateExternalIdType(String value) { + super(value, allowedValues); + } + + public static class TeamSyncSelectionStateExternalIdTypeSerializer + extends StdSerializer { + public TeamSyncSelectionStateExternalIdTypeSerializer( + Class t) { + super(t); + } + + public TeamSyncSelectionStateExternalIdTypeSerializer() { + this(null); + } + + @Override + public void serialize( + TeamSyncSelectionStateExternalIdType value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static TeamSyncSelectionStateExternalIdType fromValue(String value) { + return new TeamSyncSelectionStateExternalIdType(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateItem.java b/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateItem.java new file mode 100644 index 00000000000..80d49861d95 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateItem.java @@ -0,0 +1,213 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** Identifies a team or organization hierarchy to include in synchronization. */ +@JsonPropertyOrder({ + TeamSyncSelectionStateItem.JSON_PROPERTY_EXTERNAL_ID, + TeamSyncSelectionStateItem.JSON_PROPERTY_OPERATION, + TeamSyncSelectionStateItem.JSON_PROPERTY_SCOPE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class TeamSyncSelectionStateItem { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_EXTERNAL_ID = "external_id"; + private TeamSyncSelectionStateExternalId externalId; + + public static final String JSON_PROPERTY_OPERATION = "operation"; + private TeamSyncSelectionStateOperation operation; + + public static final String JSON_PROPERTY_SCOPE = "scope"; + private TeamSyncSelectionStateScope scope; + + public TeamSyncSelectionStateItem() {} + + @JsonCreator + public TeamSyncSelectionStateItem( + @JsonProperty(required = true, value = JSON_PROPERTY_EXTERNAL_ID) + TeamSyncSelectionStateExternalId externalId) { + this.externalId = externalId; + this.unparsed |= externalId.unparsed; + } + + public TeamSyncSelectionStateItem externalId(TeamSyncSelectionStateExternalId externalId) { + this.externalId = externalId; + this.unparsed |= externalId.unparsed; + return this; + } + + /** + * The external identifier for a team or organization in the source platform. + * + * @return externalId + */ + @JsonProperty(JSON_PROPERTY_EXTERNAL_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public TeamSyncSelectionStateExternalId getExternalId() { + return externalId; + } + + public void setExternalId(TeamSyncSelectionStateExternalId externalId) { + this.externalId = externalId; + } + + public TeamSyncSelectionStateItem operation(TeamSyncSelectionStateOperation operation) { + this.operation = operation; + this.unparsed |= !operation.isValid(); + return this; + } + + /** + * The operation to perform on the selected hierarchy. When set to include, + * synchronization covers the referenced teams or organizations. + * + * @return operation + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_OPERATION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TeamSyncSelectionStateOperation getOperation() { + return operation; + } + + public void setOperation(TeamSyncSelectionStateOperation operation) { + if (!operation.isValid()) { + this.unparsed = true; + } + this.operation = operation; + } + + public TeamSyncSelectionStateItem scope(TeamSyncSelectionStateScope scope) { + this.scope = scope; + this.unparsed |= !scope.isValid(); + return this; + } + + /** + * The scope of the selection. When set to subtree, synchronization includes the + * referenced team or organization and everything nested under it. + * + * @return scope + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SCOPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TeamSyncSelectionStateScope getScope() { + return scope; + } + + public void setScope(TeamSyncSelectionStateScope scope) { + if (!scope.isValid()) { + this.unparsed = true; + } + this.scope = scope; + } + + /** + * A container for additional, undeclared properties. This is a holder for any undeclared + * properties as specified with the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. If the property + * does not already exist, create it otherwise replace it. + * + * @param key The arbitrary key to set + * @param value The associated value + * @return TeamSyncSelectionStateItem + */ + @JsonAnySetter + public TeamSyncSelectionStateItem putAdditionalProperty(String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return The additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key The arbitrary key to get + * @return The specific additional property for the given key + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** Return true if this TeamSyncSelectionStateItem object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TeamSyncSelectionStateItem teamSyncSelectionStateItem = (TeamSyncSelectionStateItem) o; + return Objects.equals(this.externalId, teamSyncSelectionStateItem.externalId) + && Objects.equals(this.operation, teamSyncSelectionStateItem.operation) + && Objects.equals(this.scope, teamSyncSelectionStateItem.scope) + && Objects.equals( + this.additionalProperties, teamSyncSelectionStateItem.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(externalId, operation, scope, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TeamSyncSelectionStateItem {\n"); + sb.append(" externalId: ").append(toIndentedString(externalId)).append("\n"); + sb.append(" operation: ").append(toIndentedString(operation)).append("\n"); + sb.append(" scope: ").append(toIndentedString(scope)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append('}'); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateOperation.java b/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateOperation.java new file mode 100644 index 00000000000..d96db1617c3 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateOperation.java @@ -0,0 +1,60 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** + * The operation to perform on the selected hierarchy. When set to include, + * synchronization covers the referenced teams or organizations. + */ +@JsonSerialize( + using = TeamSyncSelectionStateOperation.TeamSyncSelectionStateOperationSerializer.class) +public class TeamSyncSelectionStateOperation extends ModelEnum { + + private static final Set allowedValues = new HashSet(Arrays.asList("include")); + + public static final TeamSyncSelectionStateOperation INCLUDE = + new TeamSyncSelectionStateOperation("include"); + + TeamSyncSelectionStateOperation(String value) { + super(value, allowedValues); + } + + public static class TeamSyncSelectionStateOperationSerializer + extends StdSerializer { + public TeamSyncSelectionStateOperationSerializer(Class t) { + super(t); + } + + public TeamSyncSelectionStateOperationSerializer() { + this(null); + } + + @Override + public void serialize( + TeamSyncSelectionStateOperation value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static TeamSyncSelectionStateOperation fromValue(String value) { + return new TeamSyncSelectionStateOperation(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateScope.java b/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateScope.java new file mode 100644 index 00000000000..bd8b171ebc4 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/TeamSyncSelectionStateScope.java @@ -0,0 +1,59 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** + * The scope of the selection. When set to subtree, synchronization includes the + * referenced team or organization and everything nested under it. + */ +@JsonSerialize(using = TeamSyncSelectionStateScope.TeamSyncSelectionStateScopeSerializer.class) +public class TeamSyncSelectionStateScope extends ModelEnum { + + private static final Set allowedValues = new HashSet(Arrays.asList("subtree")); + + public static final TeamSyncSelectionStateScope SUBTREE = + new TeamSyncSelectionStateScope("subtree"); + + TeamSyncSelectionStateScope(String value) { + super(value, allowedValues); + } + + public static class TeamSyncSelectionStateScopeSerializer + extends StdSerializer { + public TeamSyncSelectionStateScopeSerializer(Class t) { + super(t); + } + + public TeamSyncSelectionStateScopeSerializer() { + this(null); + } + + @Override + public void serialize( + TeamSyncSelectionStateScope value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static TeamSyncSelectionStateScope fromValue(String value) { + return new TeamSyncSelectionStateScope(value); + } +} diff --git a/src/test/resources/cassettes/features/v2/Get_team_sync_configurations_returns_OK_response.freeze b/src/test/resources/cassettes/features/v2/Get_team_sync_configurations_returns_OK_response.freeze new file mode 100644 index 00000000000..1332175b3b7 --- /dev/null +++ b/src/test/resources/cassettes/features/v2/Get_team_sync_configurations_returns_OK_response.freeze @@ -0,0 +1 @@ +2026-03-04T16:01:00.945Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v2/Get_team_sync_configurations_returns_OK_response.json b/src/test/resources/cassettes/features/v2/Get_team_sync_configurations_returns_OK_response.json new file mode 100644 index 00000000000..54fb294b980 --- /dev/null +++ b/src/test/resources/cassettes/features/v2/Get_team_sync_configurations_returns_OK_response.json @@ -0,0 +1,33 @@ +[ + { + "httpRequest": { + "headers": {}, + "method": "GET", + "path": "/api/v2/team/sync", + "queryStringParameters": { + "filter[source]": [ + "github" + ] + }, + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"data\":[{\"id\":\"3d33cc55-aea4-4801-bb75-139d347298c9\",\"type\":\"team_sync_bulk\",\"attributes\":{\"frequency\":\"once\",\"selection_state\":[{\"external_id\":{\"type\":\"organization\",\"value\":\"1\"},\"operation\":\"include\",\"scope\":\"subtree\"}],\"source\":\"github\",\"sync_membership\":false,\"type\":\"link\"}}]}", + "headers": { + "Content-Type": [ + "application/vnd.api+json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "9340a9d9-b12b-e826-1e72-ba1bbc945a32" + } +] \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v2/Link_Teams_with_GitHub_Teams_returns_No_Content_response.freeze b/src/test/resources/cassettes/features/v2/Link_Teams_with_GitHub_Teams_returns_No_Content_response.freeze new file mode 100644 index 00000000000..8e230ad6717 --- /dev/null +++ b/src/test/resources/cassettes/features/v2/Link_Teams_with_GitHub_Teams_returns_No_Content_response.freeze @@ -0,0 +1 @@ +2026-03-04T16:01:34.366Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v2/Sync_teams_returns_OK_response.json b/src/test/resources/cassettes/features/v2/Link_Teams_with_GitHub_Teams_returns_No_Content_response.json similarity index 50% rename from src/test/resources/cassettes/features/v2/Sync_teams_returns_OK_response.json rename to src/test/resources/cassettes/features/v2/Link_Teams_with_GitHub_Teams_returns_No_Content_response.json index 0bb7093b2e9..16337f2b68b 100644 --- a/src/test/resources/cassettes/features/v2/Sync_teams_returns_OK_response.json +++ b/src/test/resources/cassettes/features/v2/Link_Teams_with_GitHub_Teams_returns_No_Content_response.json @@ -3,7 +3,7 @@ "httpRequest": { "body": { "type": "JSON", - "json": "{\"data\":{\"attributes\":{\"source\":\"github\",\"type\":\"link\"},\"type\":\"team_sync_bulk\"}}" + "json": "{\"data\":{\"attributes\":{\"selection_state\":[{\"external_id\":{\"type\":\"organization\",\"value\":\"1\"}}],\"source\":\"github\",\"type\":\"link\"},\"type\":\"team_sync_bulk\"}}" }, "headers": {}, "method": "POST", @@ -12,13 +12,9 @@ "secure": true }, "httpResponse": { - "headers": { - "Content-Type": [ - "text/plain" - ] - }, - "statusCode": 200, - "reasonPhrase": "OK" + "headers": {}, + "statusCode": 204, + "reasonPhrase": "No Content" }, "times": { "remainingTimes": 1 @@ -26,6 +22,6 @@ "timeToLive": { "unlimited": true }, - "id": "39416307-2f49-be15-7e10-9223981e6839" + "id": "56fda770-a389-5f07-97c8-e26a49e8311d" } ] \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v2/Sync_teams_returns_OK_response.freeze b/src/test/resources/cassettes/features/v2/Sync_teams_returns_OK_response.freeze deleted file mode 100644 index 8723edd4fb6..00000000000 --- a/src/test/resources/cassettes/features/v2/Sync_teams_returns_OK_response.freeze +++ /dev/null @@ -1 +0,0 @@ -2025-08-15T17:48:19.712Z \ No newline at end of file diff --git a/src/test/resources/com/datadog/api/client/v2/api/teams.feature b/src/test/resources/com/datadog/api/client/v2/api/teams.feature index 26bf0130d4e..480e3215e99 100644 --- a/src/test/resources/com/datadog/api/client/v2/api/teams.feature +++ b/src/test/resources/com/datadog/api/client/v2/api/teams.feature @@ -431,20 +431,13 @@ Feature: Teams Then the response status is 200 OK And the response "data" has length 1 - @generated @skip @team:DataDog/aaa-omg + @team:DataDog/aaa-omg Scenario: Get team sync configurations returns "OK" response Given new "GetTeamSync" request - And request contains "filter[source]" parameter from "REPLACE.ME" + And request contains "filter[source]" parameter with value "github" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/aaa-omg - Scenario: Get team sync configurations returns "Team sync configurations not found" response - Given new "GetTeamSync" request - And request contains "filter[source]" parameter from "REPLACE.ME" - When the request is sent - Then the response status is 404 Team sync configurations not found - @generated @skip @team:DataDog/aaa-omg Scenario: Get user memberships returns "API error response." response Given new "GetUserMemberships" request @@ -461,6 +454,13 @@ Feature: Teams Then the response status is 200 Represents a user's association to a team And the response "data" has length 0 + @team:DataDog/aaa-omg + Scenario: Link Teams with GitHub Teams returns "No Content" response + Given new "SyncTeams" request + And body with value {"data": {"attributes": {"source": "github", "type": "link", "selection_state": [{"external_id": {"type": "organization", "value": "1"}}]}, "type": "team_sync_bulk"}} + When the request is sent + Then the response status is 204 No Content + @generated @skip @team:DataDog/aaa-omg Scenario: Link Teams with GitHub Teams returns "OK" response Given new "SyncTeams" request @@ -582,13 +582,6 @@ Feature: Teams When the request is sent Then the response status is 204 No Content - @replay-only @team:DataDog/aaa-omg - Scenario: Sync teams returns "OK" response - Given new "SyncTeams" request - And body with value {"data": {"attributes": {"source": "github", "type": "link"}, "type": "team_sync_bulk"}} - When the request is sent - Then the response status is 200 OK - @team:DataDog/aaa-omg Scenario: Update a team link returns "API error response." response Given new "UpdateTeamLink" request