private void VerifyParameter(string annotation, bool hasRestriction, bool supported, string queryOption) { // Arrange IEdmModel model = EntitySetGetOperationHandlerTests.GetEdmModel(hasRestriction ? annotation : ""); ODataContext context = new ODataContext(model); IEdmEntitySet customers = model.EntityContainer.FindEntitySet("Customers"); Assert.NotNull(customers); // guard ODataPath path = new ODataPath(new ODataNavigationSourceSegment(customers), new ODataKeySegment(customers.EntityType())); // Act var get = _operationHandler.CreateOperation(context, path); // Assert Assert.NotNull(get); Assert.NotNull(get.Parameters); if (!hasRestriction || supported) { Assert.Equal(3, get.Parameters.Count); Assert.Contains(queryOption, get.Parameters.Select(p => p.Name)); } else { Assert.Equal(2, get.Parameters.Count); Assert.DoesNotContain(queryOption, get.Parameters.Select(p => p.Name)); } }
public void CreateEntityPatchOperationReturnsCorrectOperation(bool enableOperationId, bool useHTTPStatusCodeClass2XX) { // Arrange IEdmModel model = EntitySetGetOperationHandlerTests.GetEdmModel(""); IEdmEntitySet entitySet = model.EntityContainer.FindEntitySet("Customers"); OpenApiConvertSettings settings = new OpenApiConvertSettings { EnableOperationId = enableOperationId, UseSuccessStatusCodeRange = useHTTPStatusCodeClass2XX }; ODataContext context = new ODataContext(model, settings); ODataPath path = new ODataPath(new ODataNavigationSourceSegment(entitySet), new ODataKeySegment(entitySet.EntityType())); // Act var patch = _operationHandler.CreateOperation(context, path); // Assert Assert.NotNull(patch); Assert.Equal("Update customer.", patch.Summary); Assert.Equal("Updates a single customer.", patch.Description); Assert.NotNull(patch.Tags); var tag = Assert.Single(patch.Tags); Assert.Equal("Customers.Customer", tag.Name); Assert.NotNull(patch.Parameters); Assert.Equal(1, patch.Parameters.Count); Assert.NotNull(patch.RequestBody); Assert.NotNull(patch.Responses); Assert.Equal(2, patch.Responses.Count); var statusCode = useHTTPStatusCodeClass2XX ? "2XX" : "204"; Assert.Equal(new[] { statusCode, "default" }, patch.Responses.Select(r => r.Key)); if (useHTTPStatusCodeClass2XX) { Assert.Single(patch.Responses[statusCode].Content); } else { Assert.Empty(patch.Responses[statusCode].Content); } if (enableOperationId) { Assert.Equal("Customers.Customer.UpdateCustomer", patch.OperationId); } else { Assert.Null(patch.OperationId); } }
public void CreateEntityDeleteOperationReturnsCorrectOperation(bool enableOperationId) { // Arrange IEdmModel model = EntitySetGetOperationHandlerTests.GetEdmModel(""); IEdmEntitySet entitySet = model.EntityContainer.FindEntitySet("Customers"); OpenApiConvertSettings settings = new OpenApiConvertSettings { EnableOperationId = enableOperationId }; ODataContext context = new ODataContext(model, settings); ODataPath path = new ODataPath(new ODataNavigationSourceSegment(entitySet), new ODataKeySegment(entitySet.EntityType())); // Act var delete = _operationHandler.CreateOperation(context, path); // Assert Assert.NotNull(delete); Assert.Equal("Delete customer.", delete.Summary); Assert.Equal("Deletes a single customer.", delete.Description); Assert.NotNull(delete.Tags); var tag = Assert.Single(delete.Tags); Assert.Equal("Customers.Customer", tag.Name); Assert.NotNull(delete.Parameters); Assert.Equal(2, delete.Parameters.Count); Assert.Null(delete.RequestBody); Assert.NotNull(delete.Responses); Assert.Equal(2, delete.Responses.Count); Assert.Equal(new[] { "204", "default" }, delete.Responses.Select(r => r.Key)); if (enableOperationId) { Assert.Equal("Customers.Customer.DeleteCustomer", delete.OperationId); } else { Assert.Null(delete.OperationId); } }
public void CreateEntitySetPostOperationReturnsCorrectOperation(bool enableOperationId) { // Arrange IEdmModel model = EntitySetGetOperationHandlerTests.GetEdmModel(""); IEdmEntitySet entitySet = model.EntityContainer.FindEntitySet("Customers"); OpenApiConvertSettings settings = new OpenApiConvertSettings { EnableOperationId = enableOperationId }; ODataContext context = new ODataContext(model, settings); ODataPath path = new ODataPath(new ODataNavigationSourceSegment(entitySet)); // Act var post = _operationHandler.CreateOperation(context, path); // Assert Assert.NotNull(post); Assert.Equal("Add new entity to " + entitySet.Name, post.Summary); Assert.NotNull(post.Tags); var tag = Assert.Single(post.Tags); Assert.Equal("Customers.Customer", tag.Name); Assert.Empty(post.Parameters); Assert.NotNull(post.RequestBody); Assert.NotNull(post.Responses); Assert.Equal(2, post.Responses.Count); if (enableOperationId) { Assert.Equal("Customers.Customer.CreateCustomer", post.OperationId); } else { Assert.Null(post.OperationId); } }
public void CreateEntitySetPostReturnsSecurityForInsertRestrictions(bool enableAnnotation) { string annotation = @"<Annotation Term=""Org.OData.Capabilities.V1.InsertRestrictions""> <Record> <PropertyValue Property=""Permissions""> <Collection> <Record> <PropertyValue Property=""SchemeName"" String=""Delegated (work or school account)"" /> <PropertyValue Property=""Scopes""> <Collection> <Record> <PropertyValue Property=""Scope"" String=""User.ReadBasic.All"" /> </Record> <Record> <PropertyValue Property=""Scope"" String=""User.Read.All"" /> </Record> </Collection> </PropertyValue> </Record> <Record> <PropertyValue Property=""SchemeName"" String=""Application"" /> <PropertyValue Property=""Scopes""> <Collection> <Record> <PropertyValue Property=""Scope"" String=""User.Read.All"" /> </Record> <Record> <PropertyValue Property=""Scope"" String=""Directory.Read.All"" /> </Record> </Collection> </PropertyValue> </Record> </Collection> </PropertyValue> <PropertyValue Property=""CustomHeaders""> <Collection> <Record> <PropertyValue Property=""Name"" String=""odata-debug"" /> <PropertyValue Property=""Description"" String=""Debug support for OData services"" /> <PropertyValue Property=""Required"" Bool=""false"" /> <PropertyValue Property=""ExampleValues""> <Collection> <Record> <PropertyValue Property=""Value"" String=""html"" /> <PropertyValue Property=""Description"" String=""Service responds with self-contained..."" /> </Record> <Record> <PropertyValue Property=""Value"" String=""json"" /> <PropertyValue Property=""Description"" String=""Service responds with JSON document..."" /> </Record> </Collection> </PropertyValue> </Record> </Collection> </PropertyValue> </Record> </Annotation>"; // Arrange IEdmModel model = EntitySetGetOperationHandlerTests.GetEdmModel(enableAnnotation ? annotation : ""); ODataContext context = new ODataContext(model); IEdmEntitySet customers = model.EntityContainer.FindEntitySet("Customers"); Assert.NotNull(customers); // guard ODataPath path = new ODataPath(new ODataNavigationSourceSegment(customers)); // Act var post = _operationHandler.CreateOperation(context, path); // Assert Assert.NotNull(post); Assert.NotNull(post.Security); if (enableAnnotation) { Assert.Equal(2, post.Security.Count); string json = post.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); Assert.Contains(@" ""security"": [ { ""Delegated (work or school account)"": [ ""User.ReadBasic.All"", ""User.Read.All"" ] }, { ""Application"": [ ""User.Read.All"", ""Directory.Read.All"" ] } ],".ChangeLineBreaks(), json); // Parameters Assert.Single(post.Parameters); Assert.Equal(ParameterLocation.Header, post.Parameters[0].In); Assert.Equal("odata-debug", post.Parameters[0].Name); } else { Assert.Empty(post.Security); } }