/// <inheritdoc/> protected override void SetBasicInfo(OpenApiOperation operation) { // Summary operation.Summary = "Invoke " + (EdmOperation.IsAction() ? "action " : "function ") + EdmOperation.Name; // OperationId if (Context.Settings.EnableOperationId) { string operationId = String.Join(".", Path.Segments.Where(s => !(s is ODataKeySegment)).Select(s => s.Identifier)); if (EdmOperation.IsAction()) { operation.OperationId = operationId; } else { ODataOperationSegment operationSegment = Path.LastSegment as ODataOperationSegment; string pathItemName = operationSegment.GetPathItemName(Context.Settings, new HashSet <string>()); if (Context.Model.IsOperationOverload(operationSegment.Operation)) { string hash = pathItemName.GetHashSHA256(); operation.OperationId = operationId + "-" + hash.Substring(0, 4); } else { operation.OperationId = operationId; } } } base.SetBasicInfo(operation); }
/// <inheritdoc/> protected override void Initialize(ODataContext context, ODataPath path) { base.Initialize(context, path); ODataOperationSegment operationSegment = path.LastSegment as ODataOperationSegment; EdmOperation = operationSegment.Operation; }
public void KindPropertyReturnsOperationEnumMember() { // Arrange & Act IEdmOperation operation = new EdmAction("NS", "MyAction", null); var segment = new ODataOperationSegment(operation); // Assert Assert.Equal(ODataSegmentKind.Operation, segment.Kind); }
public void GetEntityTypeReturnsNull() { // Arrange & Act IEdmOperation operation = new EdmAction("NS", "MyAction", null); var segment = new ODataOperationSegment(operation); // Assert Assert.Null(segment.EntityType); }
public void CtorSetOperationProperty() { // Arrange & Act IEdmOperation operation = new EdmAction("NS", "MyAction", null); var segment = new ODataOperationSegment(operation); // Assert Assert.Same(operation, segment.Operation); }
public void GetEntityTypeThrowsNotImplementedException() { // Arrange & Act IEdmOperation operation = new EdmAction("NS", "MyAction", null); var segment = new ODataOperationSegment(operation); // Assert Assert.Throws <NotImplementedException>(() => segment.EntityType); }
public void KindPropertyReturnsOperation() { // Arrange ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(_simpleKeyEntitySet); EdmAction action = new EdmAction("NS", "MyAction", null, isBound: true, entitySetPathExpression: null); ODataOperationSegment opSegment = new ODataOperationSegment(action); ODataPath path = new ODataPath(nsSegment, opSegment); // Act & Assert Assert.Equal(ODataPathKind.Operation, path.Kind); }
/// <inheritdoc/> protected override void SetBasicInfo(OpenApiOperation operation) { // Summary operation.Summary = "Invoke " + (EdmOperation.IsAction() ? "action " : "function ") + EdmOperation.Name; // OperationId if (Context.Settings.EnableOperationId) { // When the key segment is available, // its EntityType name will be used // in the operationId to avoid potential // duplicates in entity vs entityset functions/actions List <string> identifiers = new(); foreach (ODataSegment segment in Path.Segments) { if (segment is not ODataKeySegment) { identifiers.Add(segment.Identifier); } else { identifiers.Add(segment.EntityType.Name); } } string operationId = string.Join(".", identifiers); if (EdmOperation.IsAction()) { operation.OperationId = operationId; } else { ODataOperationSegment operationSegment = Path.LastSegment as ODataOperationSegment; string pathItemName = operationSegment.GetPathItemName(Context.Settings, new HashSet <string>()); if (Context.Model.IsOperationOverload(operationSegment.Operation)) { string hash = pathItemName.GetHashSHA256(); operation.OperationId = operationId + "-" + hash.Substring(0, 4); } else { operation.OperationId = operationId; } } } base.SetBasicInfo(operation); }
/// <inheritdoc/> protected override void Initialize(ODataContext context, ODataPath path) { base.Initialize(context, path); // It's bound operation, the first segment must be the navigaiton source. ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment; NavigationSource = navigationSourceSegment.NavigationSource; ODataOperationSegment operationSegment = path.LastSegment as ODataOperationSegment; EdmOperation = operationSegment.Operation; HasTypeCast = path.Segments.Any(s => s is ODataTypeCastSegment); }
public void GetPathItemNameReturnsCorrectActionLiteral(bool unqualifiedCall, bool isBound) { // Arrange & Act EdmAction action = new EdmAction("NS", "MyAction", null, isBound: isBound, entitySetPathExpression: null); var segment = new ODataOperationSegment(action); OpenApiConvertSettings settings = new OpenApiConvertSettings { EnableUnqualifiedCall = unqualifiedCall }; string expected = unqualifiedCall ? "MyAction" : "NS.MyAction"; // Assert Assert.Equal(expected, segment.GetPathItemName(settings)); }
/// <inheritdoc/> protected override void SetExtensions(OpenApiPathItem item) { if (!Context.Settings.ShowMsDosGroupPath) { return; } ODataNavigationSourceSegment navigationSourceSegment = Path.FirstSegment as ODataNavigationSourceSegment; IEdmNavigationSource currentNavSource = navigationSourceSegment.NavigationSource; IList <ODataPath> samePaths = new List <ODataPath>(); foreach (var path in Context.AllPaths.Where(p => p.Kind == ODataPathKind.Operation && p != Path)) { navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment; if (currentNavSource != navigationSourceSegment.NavigationSource) { continue; } ODataOperationSegment operationSegment = path.LastSegment as ODataOperationSegment; if (EdmOperation.FullName() != operationSegment.Operation.FullName()) { continue; } samePaths.Add(path); } if (samePaths.Any()) { OpenApiArray array = new OpenApiArray(); OpenApiConvertSettings settings = Context.Settings.Clone(); settings.EnableKeyAsSegment = Context.KeyAsSegment; foreach (var p in samePaths) { array.Add(new OpenApiString(p.GetPathItemName(settings))); } item.Extensions.Add(Constants.xMsDosGroupPath, array); } base.SetExtensions(item); item.Extensions.AddCustomAtributesToExtensions(Context, EdmOperation); }
public void GetPathItemNameReturnsCorrectFunctionLiteral(bool unqualifiedCall, bool isBound, string expected) { // Arrange & Act IEdmEntityTypeReference entityTypeReference = new EdmEntityTypeReference(new EdmEntityType("NS", "Entity"), false); IEdmTypeReference parameterType = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.Boolean, isNullable: false); EdmFunction boundFunction = BoundFunction("MyFunction", isBound, entityTypeReference); boundFunction.AddParameter("param", parameterType); var segment = new ODataOperationSegment(boundFunction); OpenApiConvertSettings settings = new OpenApiConvertSettings { EnableUnqualifiedCall = unqualifiedCall }; // Assert Assert.Equal(expected, segment.GetPathItemName(settings)); }
public void GetPathItemNameReturnsCorrectFunctionLiteralForEscapedComposableFunction(bool isEscapedFunction, bool enableEscapeFunctionCall, string expected) { // Arrange & Act IEdmEntityTypeReference entityTypeReference = new EdmEntityTypeReference(new EdmEntityType("NS", "Entity"), false); IEdmTypeReference parameterType = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.String, isNullable: false); EdmFunction boundFunction = BoundFunction("MyFunction", true, entityTypeReference, true); boundFunction.AddParameter("param", parameterType); var segment = new ODataOperationSegment(boundFunction, isEscapedFunction); OpenApiConvertSettings settings = new OpenApiConvertSettings { EnableUriEscapeFunctionCall = enableEscapeFunctionCall, AddSingleQuotesForStringParameters = true }; // Assert Assert.Equal(expected, segment.GetPathItemName(settings)); }
/// <inheritdoc/> protected override void SetBasicInfo(OpenApiOperation operation) { // Summary operation.Summary = "Invoke " + (EdmOperation.IsAction() ? "action " : "function ") + EdmOperation.Name; // OperationId if (Context.Settings.EnableOperationId) { StringBuilder operationId = new StringBuilder(NavigationSource.Name); if (HasTypeCast) { ODataTypeCastSegment typeCast = Path.Segments.FirstOrDefault(s => s is ODataTypeCastSegment) as ODataTypeCastSegment; operationId.Append("."); operationId.Append(typeCast.EntityType.Name); } else { operationId.Append("."); operationId.Append(NavigationSource.EntityType().Name); } operationId.Append("."); operationId.Append(EdmOperation.Name); if (EdmOperation.IsAction()) { operation.OperationId = operationId.ToString(); } else { ODataOperationSegment operationSegment = Path.LastSegment as ODataOperationSegment; string pathItemName = operationSegment.GetPathItemName(Context.Settings); string md5 = pathItemName.GetHashMd5(); operation.OperationId = operationId.Append(".").Append(md5.Substring(8)).ToString(); } } base.SetBasicInfo(operation); }
/// <inheritdoc/> protected override void SetBasicInfo(OpenApiOperation operation) { // Summary operation.Summary = "Invoke " + (EdmOperation.IsAction() ? "action " : "function ") + EdmOperation.Name; // OperationId if (Context.Settings.EnableOperationId) { string operationId = String.Join(".", Path.Segments.Where(s => !(s is ODataKeySegment)).Select(s => s.Name)); if (EdmOperation.IsAction()) { operation.OperationId = operationId; } else { ODataOperationSegment operationSegment = Path.LastSegment as ODataOperationSegment; string pathItemName = operationSegment.GetPathItemName(Context.Settings); string md5 = pathItemName.GetHashMd5(); operation.OperationId = operationId + "." + md5.Substring(0, 4); } } base.SetBasicInfo(operation); }